From 69aa4cd2545cd90253d8cc56a8ed3987d4b64d9f Mon Sep 17 00:00:00 2001 From: WillyJL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 1 Nov 2024 04:52:54 +0000 Subject: [PATCH] JS: Fix merge of 3963 and 3961 (#3980) * toString() was moved, not duplicated * These had gotten lost * This is now implemented * Add missing version doctags --- applications/system/js_app/js_thread.c | 11 ----- .../system/js_app/packages/fz-sdk/global.d.ts | 43 +++++++++++++++++-- .../js_app/packages/fz-sdk/gui/index.d.ts | 22 +++++++++- .../packages/fz-sdk/notification/index.d.ts | 1 + 4 files changed, 61 insertions(+), 16 deletions(-) diff --git a/applications/system/js_app/js_thread.c b/applications/system/js_app/js_thread.c index 97c9f7425..600c2676e 100644 --- a/applications/system/js_app/js_thread.c +++ b/applications/system/js_app/js_thread.c @@ -217,16 +217,6 @@ static void js_parse_int(struct mjs* mjs) { mjs_return(mjs, mjs_mk_number(mjs, num)); } -static void js_global_to_string(struct mjs* mjs) { - int base = 10; - if(mjs_nargs(mjs) > 1) base = mjs_get_int(mjs, mjs_arg(mjs, 1)); - double num = mjs_get_int(mjs, mjs_arg(mjs, 0)); - char tmp_str[] = "-2147483648"; - itoa(num, tmp_str, base); - mjs_val_t ret = mjs_mk_string(mjs, tmp_str, ~0, true); - mjs_return(mjs, ret); -} - #ifdef JS_DEBUG static void js_dump_write_callback(void* ctx, const char* format, ...) { File* file = ctx; @@ -278,7 +268,6 @@ static int32_t js_thread(void* arg) { JS_ASSIGN_MULTI(mjs, global) { JS_FIELD("print", MJS_MK_FN(js_print)); JS_FIELD("delay", MJS_MK_FN(js_delay)); - JS_FIELD("toString", MJS_MK_FN(js_global_to_string)); JS_FIELD("parseInt", MJS_MK_FN(js_parse_int)); JS_FIELD("ffi_address", MJS_MK_FN(js_ffi_address)); JS_FIELD("require", MJS_MK_FN(js_require)); diff --git a/applications/system/js_app/packages/fz-sdk/global.d.ts b/applications/system/js_app/packages/fz-sdk/global.d.ts index 953afc30d..d2e73f7de 100644 --- a/applications/system/js_app/packages/fz-sdk/global.d.ts +++ b/applications/system/js_app/packages/fz-sdk/global.d.ts @@ -120,6 +120,7 @@ declare function checkSdkCompatibility(expectedMajor: number, expectedMinor: num * recognized as a baseline feature. For more info, consult the module * documentation. * @param features Array of named features to query + * @version Added in JS SDK 0.1 */ declare function doesSdkSupport(features: string[]): boolean; @@ -131,6 +132,7 @@ declare function doesSdkSupport(features: string[]): boolean; * features that are now recognized as baseline features. For more * info, consult the module documentation. * @param features Array of named features to query + * @version Added in JS SDK 0.1 */ declare function checkSdkFeatures(features: string[]): void | never; @@ -150,15 +152,48 @@ declare function delay(ms: number): void; declare function print(...args: any[]): void; /** - * @brief Reads a JS value from a file + * @brief Converts a string to a number + * @param text The string to convert to a number + * @param base Integer base (`2`...`16`), default: 10 + * @version Added in JS SDK 0.1 + */ +declare function parseInt(text: string, base?: number): number; + +/** + * @brief Path to the directory containing the current script + * @version Added in JS SDK 0.1 + */ +declare const __dirname: string; + +/** + * @brief Path to the current script file + * @version Added in JS SDK 0.1 + */ +declare const __filename: string; + +/** + * @brief Runs a JS file and returns value from it * - * Reads a file at the specified path, interprets it as a JS value and returns - * said value. + * Reads a file at the specified path and runs it as JS, returning the last evaluated value. + * + * The result is cached and this filepath will not re-evaluated on future + * load() calls for this session. * * @param path The path to the file + * @param scope An object to use as global scope while running this file + * @version Added in JS SDK 0.1 + */ +declare function load(path: string, scope?: object): any; + +/** + * @brief Return 1-byte string whose ASCII code is the integer `n` + * + * If `n` is not numeric or outside of `0-255` range, `null` is returned + * + * @param n The ASCII code to convert to string * @version Added in JS SDK 0.1 */ -declare function load(path: string): any; +declare function chr(n: number): string | null; /** * @brief Loads a natively implemented module diff --git a/applications/system/js_app/packages/fz-sdk/gui/index.d.ts b/applications/system/js_app/packages/fz-sdk/gui/index.d.ts index 3184a5718..93a6846c2 100644 --- a/applications/system/js_app/packages/fz-sdk/gui/index.d.ts +++ b/applications/system/js_app/packages/fz-sdk/gui/index.d.ts @@ -30,7 +30,7 @@ * |----------------------|------------------| * | `button_menu` | ❌ | * | `button_panel` | ❌ | - * | `byte_input` | ❌ | + * | `byte_input` | ✅ | * | `dialog_ex` | ✅ (as `dialog`) | * | `empty_screen` | ✅ | * | `file_browser` | ❌ | @@ -122,11 +122,26 @@ import type { Contract } from "../event_loop"; type Properties = { [K: string]: any }; export declare class View { + /** + * Assign value to property by name + * @param property Name of the property + * @param value Value to assign + * @version Added in JS SDK 0.1 + */ set

(property: P, value: Props[P]): void; } export declare class ViewFactory> { + /** + * Create view instance with default values, can be changed later with set() + * @version Added in JS SDK 0.1 + */ make(): V; + /** + * Create view instance with custom values, can be changed later with set() + * @param initial Dictionary of property names to values + * @version Added in JS SDK 0.1 + */ makeWith(initial: Partial): V; } @@ -144,6 +159,11 @@ declare class ViewDispatcher { * @version Added in JS SDK 0.1 */ navigation: Contract; + /** + * View object currently shown + * @version Added in JS SDK 0.1 + */ + currentView: View; /** * Sends a number to the custom event handler * @param event number to send diff --git a/applications/system/js_app/packages/fz-sdk/notification/index.d.ts b/applications/system/js_app/packages/fz-sdk/notification/index.d.ts index 2199a1479..499994d3a 100644 --- a/applications/system/js_app/packages/fz-sdk/notification/index.d.ts +++ b/applications/system/js_app/packages/fz-sdk/notification/index.d.ts @@ -14,6 +14,7 @@ export declare function success(): void; /** * @brief Signals failure to the user via the color LED, speaker and vibration * motor + * @version Added in JS SDK 0.1 */ export declare function error(): void;