From 227cd0f6d4e52a19a21894983171655f1de76497 Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Sun, 23 Nov 2025 23:06:19 +0900 Subject: [PATCH 1/7] Deprecate Enumerator.toArray and update WMI version Marked Enumerator.toArray as deprecated in favor of Array.from and updated its fallback implementation. Refactored lib/wmi.js to use Array.from instead of toArray, and bumped VERSIONINFO to 0.1.4. Modified setup.iss to add ScriptEngine and ScriptHostEncode registry entries and removed file associations for several script extensions. --- lib/std.js | 7 +++++++ lib/wmi.js | 4 ++-- setup.iss | 7 ++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/std.js b/lib/std.js index 69c7b93..ed70e25 100644 --- a/lib/std.js +++ b/lib/std.js @@ -74,6 +74,13 @@ function GetResource(ResourceName) { Enumerator.prototype.toArray = Array.from; })(); +// @deprecated Enumerator.toArray() is deprecated since version 0.2.7.56. Use Array.from() +if (!Enumerator.prototype.toArray) { + Enumerator.prototype.toArray = function() { + return Array.from(this); + }; +} + // [lib/std] the time of `sleep()' function is not accuracy #34 function sleep(ms, callback) { var handler = null; diff --git a/lib/wmi.js b/lib/wmi.js index 405e85a..b229f0f 100644 --- a/lib/wmi.js +++ b/lib/wmi.js @@ -58,7 +58,7 @@ var WMIQueryObject = function() { }; this.fetchAll = function() { - return this.cursor.toArray(); + return Array.from(this.cursor); }; this.get = function(key) { @@ -161,6 +161,6 @@ exports.create = create; exports.execQuery = execQuery; exports.setClass = setClass; -exports.VERSIONINFO = "WMI interface (wmi.js) version 0.1.3"; +exports.VERSIONINFO = "WMI interface (wmi.js) version 0.1.4"; exports.global = global; exports.require = global.require; diff --git a/setup.iss b/setup.iss index 2265b32..4ddf990 100644 --- a/setup.iss +++ b/setup.iss @@ -37,12 +37,9 @@ Root: HKCR; Subkey: "{cm:AppName}.Script\DefaultIcon"; ValueType: string; ValueD Root: HKCR; Subkey: "{cm:AppName}.Script\shell"; ValueType: string; ValueData: "open"; Flags: uninsdeletevalue Root: HKCR; Subkey: "{cm:AppName}.Script\shell\open"; ValueType: string; ValueData: "Run with {cm:AppName}"; Flags: uninsdeletevalue Root: HKCR; Subkey: "{cm:AppName}.Script\shell\open\command"; ValueType: string; ValueData: """{userappdata}\{cm:AppName}\bin\WelsonJS.Launcher.exe"" --file ""%1"""; Flags: uninsdeletevalue +Root: HKCR; Subkey: "{cm:AppName}.Script\ScriptEngine"; ValueType: string; ValueData: "JScript"; Flags: uninsdeletevalue +Root: HKCR; Subkey: "{cm:AppName}.Script\ScriptHostEncode"; ValueType: string; ValueData: "{{85131630-480C-11D2-B1F9-00C04F86C324}}"; Flags: uninsdeletevalue Root: HKCR; Subkey: ".js"; ValueType: string; ValueData: "{cm:AppName}.Script"; Flags: uninsdeletevalue -Root: HKCR; Subkey: ".ts"; ValueType: string; ValueData: "{cm:AppName}.Script"; Flags: uninsdeletevalue -Root: HKCR; Subkey: ".re"; ValueType: string; ValueData: "{cm:AppName}.Script"; Flags: uninsdeletevalue -Root: HKCR; Subkey: ".res"; ValueType: string; ValueData: "{cm:AppName}.Script"; Flags: uninsdeletevalue -Root: HKCR; Subkey: ".ls"; ValueType: string; ValueData: "{cm:AppName}.Script"; Flags: uninsdeletevalue -Root: HKCR; Subkey: ".coffee"; ValueType: string; ValueData: "{cm:AppName}.Script"; Flags: uninsdeletevalue [Files] Source: "app.js"; DestDir: "{app}"; From 84fd011e267b6cac628f521875952412c543a08d Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Sun, 23 Nov 2025 23:19:52 +0900 Subject: [PATCH 2/7] Revise test descriptions and tags for clarity Improved the descriptions and tags for multiple test cases in test-oss-korea-2023.json to enhance clarity, consistency, and readability. Changes include standardizing terminology, correcting capitalization, and providing more precise explanations for each test. --- data/test-oss-korea-2023.json | 305 +++++++++++++++++----------------- 1 file changed, 154 insertions(+), 151 deletions(-) diff --git a/data/test-oss-korea-2023.json b/data/test-oss-korea-2023.json index 805e1cc..5d5ab92 100644 --- a/data/test-oss-korea-2023.json +++ b/data/test-oss-korea-2023.json @@ -39,63 +39,63 @@ "tests": [ { "id": "es5_polyfills", - "description": "Indicates Whether Polyfill higher than ES5 level has successfully performed (Perform pollyfill higher than ES5 level in Windows built-in Engine)", + "description": "Checks whether polyfills above the ES5 level run successfully (using Windows' built-in engine).", "tags": [ - "Javascript engine", + "JavaScript Engine", "ECMAScript Polyfills" ] }, { "id": "registry_find_provider", - "description": "find registry provider", + "description": "Find registry provider", "tags": [ "Windows Systems", - "Control Registry" + "Registry Control" ] }, { "id": "registry_write", - "description": "writing Registry", + "description": "Write registry values", "tags": [ "Windows Systems", - "control Registry" + "Registry Control" ] }, { "id": "registry_read", - "description": "reading Registry", + "description": "Read registry values", "tags": [ "Windows Systems", - "control Registry" + "Registry Control" ] }, { "id": "wmi_create_object", - "description": "create WMI object", + "description": "Create WMI object", "tags": [ "Windows Systems", - "control WMI(Windows Management Instrumentation) " + "WMI (Windows Management Instrumentation)" ] }, { "id": "wmi_execute_query", - "description": "executing WMI query", + "description": "Execute WMI query", "tags": [ "Windows Systems", - "control WMI(Windows Management Instrumentation) " + "WMI (Windows Management Instrumentation)" ] }, { "id": "wmi_result_query", - "description": "the result of WMI query", + "description": "Retrieve WMI query results", "tags": [ "Windows Systems", - "control WMI(Windows Management Instrumentation) " + "WMI (Windows Management Instrumentation)" ] }, { "id": "shell_create_object", - "description": "create Shell object", + "description": "Create Shell object", "tags": [ "Windows Systems", "Windows Shell" @@ -103,7 +103,7 @@ }, { "id": "shell_build_command_line", - "description": "building command line (input: Array Object, output: Unescaped Command String)", + "description": "Build command line (input: Array, output: unescaped command string)", "tags": [ "Windows Systems", "Windows Shell" @@ -111,7 +111,7 @@ }, { "id": "shell_set_charset", - "description": "set Charset", + "description": "Set character encoding", "tags": [ "Windows Systems", "Windows Shell" @@ -119,7 +119,7 @@ }, { "id": "shell_working_directory", - "description": "set Working Directory", + "description": "Set working directory", "tags": [ "Windows Systems", "Windows Shell" @@ -127,7 +127,7 @@ }, { "id": "shell_create_process", - "description": "creating process", + "description": "Create a new process", "tags": [ "Windows Systems", "Windows Shell" @@ -135,7 +135,7 @@ }, { "id": "shell_execute", - "description": "execute shell command (receive results(stdout, stderr))", + "description": "Execute shell command (returns stdout/stderr)", "tags": [ "Windows Systems", "Windows Shell" @@ -143,12 +143,15 @@ }, { "id": "shell_run", - "description": "run shell command (fork)regardless of result", - "tags": "run shell command (fork) regardless of result" + "description": "Run shell command (fork, does not wait for output)", + "tags": [ + "Windows Systems", + "Windows Shell" + ] }, { "id": "shell_run_as", - "description": "run shell command (run with administrator's authority)", + "description": "Run shell command with administrator privileges", "tags": [ "Windows Systems", "Windows Shell" @@ -156,7 +159,7 @@ }, { "id": "shell_find_my_documents", - "description": "bring (My Documents) location", + "description": "Retrieve 'My Documents' path", "tags": [ "Windows Systems", "Windows Shell" @@ -164,7 +167,7 @@ }, { "id": "shell_release", - "description": "release created shell object", + "description": "Release shell object", "tags": [ "Windows Systems", "Windows Shell" @@ -172,47 +175,47 @@ }, { "id": "powershell_set_command", - "description": "Set command line to execute", + "description": "Set PowerShell command to execute", "tags": [ "Windows Systems", - "Windows Powershell" + "Windows PowerShell" ] }, { "id": "powershell_set_file", - "description": "set files(*.ps1)to execute", + "description": "Set PowerShell script file (*.ps1) to execute", "tags": [ "Windows Systems", - "Windows Powershell" + "Windows PowerShell" ] }, { "id": "powershell_set_uri", - "description": "Use URI to set commands", + "description": "Set command using a URI", "tags": [ "Windows Systems", - "Windows Powershell" + "Windows PowerShell" ] }, { "id": "powershell_execute", - "description": "Execute command (user mode)", + "description": "Execute PowerShell command (user mode)", "tags": [ "Windows Systems", - "Windows Powershell" + "Windows PowerShell" ] }, { "id": "powershell_run_as", - "description": "Execute command (administrator mode)", + "description": "Execute PowerShell command (administrator mode)", "tags": [ "Windows Systems", - "Windows Powershell" + "Windows PowerShell" ] }, { "id": "system_resolve_env", - "description": "Verify if the environment variable resolver interprets environment variables correctly", + "description": "Verify whether environment variables are resolved correctly", "tags": [ "Windows Systems", "System Information" @@ -220,7 +223,7 @@ }, { "id": "system_check_as", - "description": "Check if the current process is in administrator mode", + "description": "Check if the current process is running as administrator", "tags": [ "Windows Systems", "System Information" @@ -228,7 +231,7 @@ }, { "id": "system_get_os_version", - "description": "Get current OS version", + "description": "Get OS version", "tags": [ "Windows Systems", "System Information" @@ -236,7 +239,7 @@ }, { "id": "system_get_architecture", - "description": "Get current system architecture", + "description": "Get system architecture", "tags": [ "Windows Systems", "System Information" @@ -244,7 +247,7 @@ }, { "id": "system_get_uuid", - "description": "bringing the UUID of current device", + "description": "Retrieve UUID of current device", "tags": [ "Windows Systems", "System Information" @@ -252,7 +255,7 @@ }, { "id": "system_get_working_directory", - "description": "bringing current working directory", + "description": "Retrieve current working directory", "tags": [ "Windows Systems", "System Information" @@ -260,7 +263,7 @@ }, { "id": "system_get_script_directory", - "description": "bringing current script directory", + "description": "Retrieve script directory", "tags": [ "Windows Systems", "System Information" @@ -268,7 +271,7 @@ }, { "id": "system_get_network_interfaces", - "description": "bringing network interface information", + "description": "Retrieve network interface information", "tags": [ "Windows Systems", "System Information" @@ -276,7 +279,7 @@ }, { "id": "system_get_process_list", - "description": "get activated ", + "description": "Retrieve active process list", "tags": [ "Windows Systems", "System Information" @@ -284,7 +287,7 @@ }, { "id": "system_get_process_list_by_name", - "description": "find certain active process by process name", + "description": "Find active process by name", "tags": [ "Windows Systems", "System Information" @@ -292,161 +295,161 @@ }, { "id": "system_register_uri", - "description": "Register URI and carry out command as URI has requested", + "description": "Register URI and execute command associated with it", "tags": [ "Windows Systems", - "Register URI(Uniform Resource Identifier)" + "URI Registration" ] }, { "id": "system_pipe_ipc", - "description": "Interprocess communication between more than 2 processes", + "description": "Inter-process communication between two or more processes", "tags": [ "Windows Systems", - "IPC(Inter Process Communication)" + "IPC (Inter-Process Communication)" ] }, { "id": "vhid_find_window", - "description": "find active window handle", + "description": "Find active window handle", "tags": [ - "human interface", - "virtual human interface" + "Human Interface", + "Virtual Human Interface" ] }, { "id": "vhid_send_click", - "description": "send virtual click", + "description": "Send virtual click", "tags": [ - "human interface", - "virtual human interface" + "Human Interface", + "Virtual Human Interface" ] }, { "id": "vhid_send_keys", - "description": "Send virtual text key (a-zA-Z0-9)", + "description": "Send virtual text input (a–z, A–Z, 0–9)", "tags": [ - "human interface", - "virtual human interface" + "Human Interface", + "Virtual Human Interface" ] }, { "id": "vhid_send_key_enter", - "description": "send virtual enter key", + "description": "Send virtual Enter key", "tags": [ - "human interface", - "virtual human interface" + "Human Interface", + "Virtual Human Interface" ] }, { "id": "vhid_send_key_functions", - "description": "Send virtual FN key", + "description": "Send virtual function key", "tags": [ - "human interface", - "virtual human interface" + "Human Interface", + "Virtual Human Interface" ] }, { "id": "vhid_alert", - "description": "Alert whether message output will be provided when API is called", + "description": "Show alert message when API is called", "tags": [ - "human interface", - "virtual human interface" + "Human Interface", + "Virtual Human Interface" ] }, { "id": "vhid_confirm", - "description": "Confirm() message output when API is called and choose between Yes/No", + "description": "Show confirm dialog when API is called (Yes/No)", "tags": [ - "human interface", - "virtual human interface" + "Human Interface", + "Virtual Human Interface" ] }, { "id": "vhid_prompt", - "description": "Prompt() When calling API, can receive descriptive response", + "description": "Show prompt dialog and receive user input", "tags": [ - "human interface", - "virtual human interface" + "Human Interface", + "Virtual Human Interface" ] }, { "id": "network_http_get", - "description": "Send HTTP GET", + "description": "Send HTTP GET request", "tags": [ - "network", - "Send HTTP and handle HTTP" + "Network", + "HTTP Communication" ] }, { "id": "network_http_post", - "description": "Send HTTP POST", + "description": "Send HTTP POST request", "tags": [ - "network", - "send HTTP and handle HTTP" + "Network", + "HTTP Communication" ] }, { "id": "network_http_extended", - "description": "send HTTP extension methods(FETCH, PUT, etc)", + "description": "Send HTTP extended methods (FETCH, PUT, etc.)", "tags": [ - "network", - "send HTTP and handle HTTP" + "Network", + "HTTP Communication" ] }, { "id": "network_attach_debugger", - "description": "support attaching HTTP debugger(Fiddler, etc)", + "description": "Attach HTTP debugger (e.g., Fiddler)", "tags": [ - "network", - "send HTTP and handle HTTP" + "Network", + "HTTP Communication" ] }, { "id": "network_detect_charset", - "description": "detect Charset in HTTP response body", + "description": "Detect charset from HTTP response body", "tags": [ - "network", - "send HTTP and handle HTTP" + "Network", + "HTTP Communication" ] }, { "id": "network_detect_http_ssl", - "description": "detect whether SSL is running in the website to access ", + "description": "Detect whether SSL is enabled on a target website", "tags": [ - "network", - "send HTTP and handle HTTP" + "Network", + "HTTP Communication" ] }, { "id": "network_send_icmp", - "description": "send PING(ICMP)", + "description": "Send ICMP (PING)", "tags": [ - "network", - "send PING(ICMP)" + "Network", + "ICMP" ] }, { "id": "extramath_dtm", - "description": "create DTM (Document-Term Matrix) from more than 2 sentences that are provided", + "description": "Create a Document-Term Matrix (DTM) from two or more sentences", "tags": [ - "advanced string manipulation", - "natural language processing" + "Advanced String Manipulation", + "Natural Language Processing" ] }, { "id": "extramath_cosine_similarity", - "description": "compare the similarity of 2 given sentences with cosine similarity", + "description": "Calculate cosine similarity between two sentences", "tags": [ - "advanced string manipulation", - "natural language processing" + "Advanced String Manipulation", + "Natural Language Processing" ] }, { "id": "base64_encode", "description": "BASE64 encoding", "tags": [ - "advanced string manipulation", + "Advanced String Manipulation", "BASE64" ] }, @@ -454,150 +457,150 @@ "id": "base64_decode", "description": "BASE64 decoding", "tags": [ - "advanced string manipulation", + "Advanced String Manipulation", "BASE64" ] }, { "id": "chromium_run", - "description": "run web browser", + "description": "Run Chromium-based browser", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_create_profile", - "description": "create profile", + "description": "Create browser profile", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_run_incognito", - "description": "run web browser in incognito mode", + "description": "Run browser in incognito mode", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_navigate", - "description": "move to another address through URL", + "description": "Navigate to a given URL", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_get_active_pages", - "description": "bringing active page list", + "description": "Retrieve list of active pages", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_find_page_by_id", - "description": "finding page by original ID", + "description": "Find page by its original ID", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_find_pages_by_title", - "description": "finding pages by title of the pages", + "description": "Find pages by their title", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_move_focused", - "description": "move focus of the window", + "description": "Change window focus", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_adjust_window_size", - "description": "adjust size of the window", + "description": "Adjust window size", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_get_element_position", - "description": "finding single element position that matches with provided CSS Selector", + "description": "Find position of element matching CSS selector", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_get_mapreduced_element_position", - "description": "finding position of the element that meets requirement among multiple elements that match with CSS selector", + "description": "Find best-matching element position among multiple CSS selector matches (map-reduce)", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_set_value_to_textbox", - "description": "setting the value in case the object of the action is input by users(TextArea or TextInput)", + "description": "Set value in text-based input element (textarea/input)", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_send_click", - "description": "send virtual click", + "description": "Send virtual click", "tags": [ - "control web browser", - "control web browser (Chromium-based)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_send_keys", - "description": "send virtual key", + "description": "Send virtual keystrokes", "tags": [ - "control web browser", - "control web browser (Chromium-based browser)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "chromium_auto_scroll_until_end", - "description": "exploring the screen automatically until the scrolling finishes, in case of vertical scrolling", + "description": "Automatically scroll until reaching the bottom (vertical scroll)", "tags": [ - "control web browser", - "control web browser (Chromium-based browser)" + "Web Browser Control", + "Chromium-Based Browser" ] }, { "id": "grpc_run_server", - "description": "run gRPC server", + "description": "Run gRPC server", "tags": [ "gRPC" ] }, { "id": "grpc_receive_command", - "description": "receive command that is sent to grpc in script", + "description": "Receive commands sent to the gRPC script", "tags": [ "gRPC" ] }, { "id": "gui_check", - "description": "Even in WebView (GUI) environment, (1)Windows Systems/Windows Shell, (2)(Windows Systems/WMI control functions work.", + "description": "Verify that Windows Shell and WMI functions operate correctly in a WebView (GUI) environment.", "tags": [ "WebView" ] } ] -} \ No newline at end of file +} From c4aed231da8cc9063fb10ab2f5e2156f91efdf27 Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Sun, 23 Nov 2025 23:23:09 +0900 Subject: [PATCH 3/7] Update setup script metadata date Changed the @updated_on field in setup.iss from 2025-11-21 to 2025-11-23 to reflect the latest modification. --- setup.iss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.iss b/setup.iss index 4ddf990..503aa87 100644 --- a/setup.iss +++ b/setup.iss @@ -1,5 +1,5 @@ ; @created_on 2020-06-26 -; @updated_on 2025-11-21 +; @updated_on 2025-11-23 ; @author Namhyeon Go [Setup] From 5dd68d89921932a71a8157f098c8e50d0d9fb285 Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Sun, 23 Nov 2025 23:32:27 +0900 Subject: [PATCH 4/7] Update lib/std.js Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> --- lib/std.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/std.js b/lib/std.js index ed70e25..9e0113c 100644 --- a/lib/std.js +++ b/lib/std.js @@ -71,7 +71,6 @@ function GetResource(ResourceName) { }; // compatible under version 0.2.7.55 - Enumerator.prototype.toArray = Array.from; })(); // @deprecated Enumerator.toArray() is deprecated since version 0.2.7.56. Use Array.from() From f43217e0b19f566b82d8dc8ca52d4bdb3cf392c5 Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Sun, 23 Nov 2025 23:46:07 +0900 Subject: [PATCH 5/7] Add optional components to installer script Introduces selectable components for file association, Windows Service module, and additional tool downloads in the installation process. Registry and install/uninstall actions are now conditioned on component selection, improving customization for users. --- setup.iss | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/setup.iss b/setup.iss index 503aa87..0cb9687 100644 --- a/setup.iss +++ b/setup.iss @@ -27,6 +27,12 @@ DisableProgramGroupPage=yes LicenseFile=SECURITY.MD ChangesAssociations=yes +[Components] +; Add an optional component for the user to select during installation +Name: "fileassoc"; Description: "Associate .js files to run with WelsonJS"; Types: full compact custom; +Name: "winservice"; Description: "Install the Windows Service module for WelsonJS"; Types: full; +Name: "downloadtools"; Description: "Download additional tools for WelsonJS"; Types: full; + [Registry] ; Root: HKCR; Subkey: "welsonjs"; ValueType: "string"; ValueData: "URL:{cm:AppName}"; Flags: uninsdeletekey ; Root: HKCR; Subkey: "welsonjs"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: "" @@ -39,7 +45,7 @@ Root: HKCR; Subkey: "{cm:AppName}.Script\shell\open"; ValueType: string; ValueDa Root: HKCR; Subkey: "{cm:AppName}.Script\shell\open\command"; ValueType: string; ValueData: """{userappdata}\{cm:AppName}\bin\WelsonJS.Launcher.exe"" --file ""%1"""; Flags: uninsdeletevalue Root: HKCR; Subkey: "{cm:AppName}.Script\ScriptEngine"; ValueType: string; ValueData: "JScript"; Flags: uninsdeletevalue Root: HKCR; Subkey: "{cm:AppName}.Script\ScriptHostEncode"; ValueType: string; ValueData: "{{85131630-480C-11D2-B1F9-00C04F86C324}}"; Flags: uninsdeletevalue -Root: HKCR; Subkey: ".js"; ValueType: string; ValueData: "{cm:AppName}.Script"; Flags: uninsdeletevalue +Root: HKCR; Subkey: ".js"; ValueType: string; ValueData: "{cm:AppName}.Script"; Components: fileassoc; Flags: uninsdeletevalue; [Files] Source: "app.js"; DestDir: "{app}"; @@ -69,9 +75,9 @@ Source: "data\*"; Excludes: "*-apikey.txt"; DestDir: "{app}/data"; Flags: ignore [Dirs] Name: "{app}\tmp"; -[InstallDelete] -Type: files; Name: "{app}\settings.ini" -Type: files; Name: "{app}\defaultService.js" +; [InstallDelete] +; Type: files; Name: "{app}\settings.ini" +; Type: files; Name: "{app}\defaultService.js" [Icons] Name: "{group}\Start {cm:AppName} Launcher"; Filename: "{userappdata}\{cm:AppName}\bin\WelsonJS.Launcher.exe"; AfterInstall: SetElevationBit('{group}\Start {cm:AppName} Launcher.lnk'); @@ -82,12 +88,12 @@ Name: "{group}\Uninstall {cm:AppName}"; Filename: "{uninstallexe}"; AfterInstall ; Filename: {app}\bin\gtk2-runtime-2.24.33-2021-01-30-ts-win64.exe; ; Filename: {app}\bin\nmap-7.92\VC_redist.x86.exe; ; Filename: {app}\bin\nmap-7.92\npcap-1.50.exe; -Filename: "powershell.exe"; Parameters: "-ExecutionPolicy Bypass -NoProfile -File ""{app}\afterInstall.ps1"""; WorkingDir: "{app}"; Flags: waituntilterminated -Filename: {app}\installService.bat; Flags: nowait +Filename: "powershell.exe"; Parameters: "-ExecutionPolicy Bypass -NoProfile -File ""{app}\afterInstall.ps1"""; WorkingDir: "{app}"; Components: downloadtools; Flags: waituntilterminated +Filename: {app}\installService.bat; Components: winservice; Flags: nowait Filename: "{userappdata}\{cm:AppName}\bin\WelsonJS.Launcher.exe"; Flags: nowait [UninstallRun] -Filename: {app}\uninstallService.bat; +Filename: {app}\uninstallService.bat; Components: winservice; ; Filename: {code:GetProgramFiles}\GTK2-Runtime Win64\gtk2_runtime_uninst.exe; ; Filename: {code:GetProgramFiles}\Npcap\Uninstall.exe; ; Filename: {app}\bin\nmap-7.92\VC_redist.x86.exe; From 11fba0e3d007db589add69b7d8cdd85b7562f876 Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Sun, 23 Nov 2025 23:55:33 +0900 Subject: [PATCH 6/7] Add WelsonJS JCTG feature to README Documented the new WelsonJS JCTG (JavaScript-Click-To-Go) feature, allowing users to run WelsonJS scripts directly from Windows File Explorer by double-clicking, similar to `.exe` files. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e1450a6..783460d 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ WelsonJS is tailored for developers who need a reliable, lightweight JavaScript * Aviation Data integrations: [AviationStack](https://aviationstack.com?utm_source=FirstPromoter&utm_medium=Affiliate&fpr=namhyeon71), [SerpApi Google Flights API](https://serpapi.com/google-flights-api?utm_source=welsonjs) * VM infrastructure tool integrations: [OVFTool for Broadcom/VMware infrastructures](https://developer.broadcom.com/tools/open-virtualization-format-ovf-tool/latest) * ***:fire: NEW!*** Windows bulit-in database engine AKA. [ESENT (ESE) database](https://learn.microsoft.com/en-us/windows/win32/extensible-storage-engine/database-overview) interface library (WelsonJS.Esent) +* ***:fire: NEW!*** WelsonJS JCTG(JavaScript-Click-To-Go): Run WelsonJS script files written in JavaScript directly from Windows File Explorer with a (double) click. Just like an `.exe` file. * Everything you can imagine. ## Quick start From 4e25e13f3565c46d1ffa12a54c80bc979e2f569e Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Sun, 23 Nov 2025 23:59:20 +0900 Subject: [PATCH 7/7] Update lib/std.js Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- lib/std.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/std.js b/lib/std.js index 9e0113c..cefb790 100644 --- a/lib/std.js +++ b/lib/std.js @@ -74,7 +74,7 @@ function GetResource(ResourceName) { })(); // @deprecated Enumerator.toArray() is deprecated since version 0.2.7.56. Use Array.from() -if (!Enumerator.prototype.toArray) { +if (typeof Enumerator !== "undefined" && !Enumerator.prototype.toArray) { Enumerator.prototype.toArray = function() { return Array.from(this); };