iobroker.javascript 10.2.5 → 10.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -23
- package/admin/assets/AiChatPanel-BjRIKaXG.js +27 -0
- package/admin/assets/{AiChatService-BOL3J2Jd.js → AiChatService-DP1EmVk2.js} +3 -3
- package/admin/assets/AiDiffView-DeynDw7L.js +1 -0
- package/admin/assets/{AiInlineProvider-BIlcrTkS.js → AiInlineProvider-jkEIJJJ-.js} +1 -1
- package/admin/assets/BlocklyEditor-DhwThchX.js +301 -0
- package/admin/assets/Compile-B0uHjrBE.css +1 -0
- package/admin/assets/Compile-e8N5zI-J.js +165 -0
- package/admin/assets/Debugger-BDQUKM1K.js +15 -0
- package/admin/assets/Diff--plofAtP.js +1 -0
- package/admin/assets/{Documentation-Bc0RmoEF.js → Documentation-D3E0U4AK.js} +4 -4
- package/admin/assets/ExpandMore-Dio4GeHC.js +1 -0
- package/admin/assets/FbEditor-B8S-mCvc.css +1 -0
- package/admin/assets/FbEditor-BjLPNzpK.js +15 -0
- package/admin/assets/History-Ewi5YEEn.js +1 -0
- package/admin/assets/Import-6Mm2vrM2.js +1 -0
- package/admin/assets/MonacoDiff-BYvG7IqB.js +1 -0
- package/admin/assets/NotificationsActive-CuNfWVJM.js +1 -0
- package/admin/assets/RulesEditor--YX6ETsU.js +1 -0
- package/admin/assets/{ScriptEditor-CEHpEFp7.js → ScriptEditor-BadPC8Mf.js} +2 -2
- package/admin/assets/ScriptEditorVanillaMonaco-BnAmy59d.js +3 -0
- package/admin/assets/Send-Pz1eveU5.js +1 -0
- package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-Ceh8EDcF.js +1 -0
- package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__234968779812303__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BRdHvuuG.js +1217 -0
- package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__234968779812303__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-DLWT3PGo.js +9 -0
- package/admin/assets/aiPromptBuilder-Co6AqZwx.js +1 -0
- package/admin/assets/{blockly-fcfyKYzp.js → blockly-B0t_IRJQ.js} +1 -1
- package/admin/assets/blocklyTheme-iZoge1S9.js +1 -0
- package/admin/assets/blocks_action-Ctn5A1AU.js +1 -0
- package/admin/assets/{blocks_convert-BP2RjhQH.js → blocks_convert-BI0lf0sf.js} +1 -1
- package/admin/assets/blocks_logic-o49klUX_.js +1 -0
- package/admin/assets/blocks_number-DZtyWFyR.js +1 -0
- package/admin/assets/blocks_object-BuzGCxVr.js +1 -0
- package/admin/assets/blocks_procedures-jn9sIYmR.js +3 -0
- package/admin/assets/blocks_sendto-Coui8w1H.js +5 -0
- package/admin/assets/blocks_switch-CeRZizTM.js +2 -0
- package/admin/assets/blocks_system-CaBPIC40.js +1 -0
- package/admin/assets/blocks_text-DeDtPYWf.js +1 -0
- package/admin/assets/blocks_time-CTXQH3Lm.js +1 -0
- package/admin/assets/blocks_timeout-D8IOKOb-.js +1 -0
- package/admin/assets/{blocks_trigger-CnmXLCUE.js → blocks_trigger-zuuXJbhb.js} +2 -2
- package/admin/assets/{cronHoverProvider-CcIFAhVy.js → cronHoverProvider-Curcjz4m.js} +1 -1
- package/admin/assets/dist-CzitsFi7.js +1 -0
- package/admin/assets/field_cron-RgLY53_S.js +1 -0
- package/admin/assets/field_oid-rBhotXJe.js +1 -0
- package/admin/assets/field_script-CU7g3-oB.js +1 -0
- package/admin/assets/helpers-BZgjFQNf.js +1 -0
- package/admin/assets/helpers-BwllSRzJ.js +1 -0
- package/admin/assets/hostInit-CrHjJGJJ.js +1 -0
- package/admin/assets/index-BHhhebRG.css +1 -0
- package/admin/assets/index-Bmmscq2G.js +157 -0
- package/admin/assets/{inlineChatWidget-N8xIkvxX.js → inlineChatWidget-ChchJD9a.js} +2 -2
- package/admin/assets/{inlineDiffController-BuqYsKKq.js → inlineDiffController-ly6qX4jk.js} +2 -2
- package/admin/assets/loadBlocks-BcFtthDb.js +117 -0
- package/admin/assets/loadMonaco-BVOEahNw.js +1 -0
- package/admin/assets/{mf-entry-bootstrap-0-a5a39621.js → mf-entry-bootstrap-0-6db6c4fc.js} +3 -3
- package/admin/assets/pendingShares-mBGPbRwZ.js +2 -0
- package/admin/assets/reactour.esm-Dk3aGxKn.js +137 -0
- package/admin/assets/{stateHoverProvider-BYAbe1Ay.js → stateHoverProvider-wAsP-THx.js} +1 -1
- package/admin/assets/tileFbd-CWAy7R7m.svg +85 -0
- package/admin/assets/utils-DUKzLJUz.js +4 -0
- package/admin/assets/vite-preload-helper-DjNwdemH.js +1 -0
- package/admin/custom/assets/Components-fDcxCyN4.js +1 -0
- package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-BraOrMSu.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-DbKT6Hsb.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-CVvbIPAy.js +1 -0
- package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-DVb0ZZ1Q.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BhZYie9-.js} +89 -89
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare___mf_0_mui_mf_1_x_mf_2_date_mf_2_pickers__loadShare__.js-CV50dgj4.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare__date_mf_2_fns__loadShare__.js-Djg9OMcQ.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare__leaflet__loadShare__.js-D9EyCd42.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare__shared-Hb6V6BnJ.js +2 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-BrY-nF2a.js +122 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__prebuild__leaflet__prebuild__-CHjWtrkp.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__prebuild__react_mf_2_dom_mf_1_client__prebuild__-DOkC-g0X.js +9 -0
- package/admin/custom/assets/dist-CzitsFi7.js +1 -0
- package/admin/custom/assets/helpers-BZgjFQNf.js +1 -0
- package/admin/custom/assets/hostInit-akwaQLq8.js +1 -0
- package/admin/custom/assets/index-BkItz-nL.js +1 -0
- package/admin/custom/assets/{lib-BmDlTzq2.js → lib-CADOx2YN.js} +1 -1
- package/admin/custom/assets/{mf-entry-bootstrap-0-ad1cd7d0.js → mf-entry-bootstrap-0-3c4565e0.js} +3 -3
- package/admin/custom/assets/pendingShares-TCMDgBLn.js +2 -0
- package/admin/custom/assets/utils-DUKzLJUz.js +4 -0
- package/admin/custom/assets/vite-preload-helper-DjNwdemH.js +1 -0
- package/admin/custom/customComponents.js +2 -2
- package/admin/custom/i18n/de.json +19 -1
- package/admin/custom/i18n/en.json +19 -1
- package/admin/custom/i18n/es.json +19 -1
- package/admin/custom/i18n/fr.json +19 -1
- package/admin/custom/i18n/it.json +19 -1
- package/admin/custom/i18n/nl.json +19 -1
- package/admin/custom/i18n/pl.json +19 -1
- package/admin/custom/i18n/pt.json +19 -1
- package/admin/custom/i18n/ru.json +19 -1
- package/admin/custom/i18n/uk.json +19 -1
- package/admin/custom/i18n/zh-cn.json +19 -1
- package/admin/i18n/de.json +13 -1
- package/admin/i18n/en.json +13 -1
- package/admin/i18n/es.json +13 -1
- package/admin/i18n/fr.json +13 -1
- package/admin/i18n/it.json +13 -1
- package/admin/i18n/nl.json +13 -1
- package/admin/i18n/pl.json +13 -1
- package/admin/i18n/pt.json +13 -1
- package/admin/i18n/ru.json +13 -1
- package/admin/i18n/uk.json +13 -1
- package/admin/i18n/zh-cn.json +13 -1
- package/admin/jsonConfig.json +274 -86
- package/admin/mf-manifest.json +1 -1
- package/admin/mf-stats.json +1 -1
- package/admin/remoteEntry.js +2 -2
- package/admin/tab.html +3 -7
- package/build/lib/aiProviderResolver.js +145 -25
- package/build/lib/aiProviderResolver.js.map +1 -1
- package/build/lib/anthropicAdapter.js +37 -0
- package/build/lib/anthropicAdapter.js.map +1 -1
- package/build/lib/fb/analyze.js +288 -0
- package/build/lib/fb/analyze.js.map +1 -0
- package/build/lib/fb/blocks.js +605 -0
- package/build/lib/fb/blocks.js.map +1 -0
- package/build/lib/fb/generate.js +326 -0
- package/build/lib/fb/generate.js.map +1 -0
- package/build/lib/fb/graph.js +240 -0
- package/build/lib/fb/graph.js.map +1 -0
- package/build/lib/fb/index.js +57 -0
- package/build/lib/fb/index.js.map +1 -0
- package/build/lib/fb/js.js +33 -0
- package/build/lib/fb/js.js.map +1 -0
- package/build/lib/fb/layout.js +205 -0
- package/build/lib/fb/layout.js.map +1 -0
- package/build/lib/fb/library.js +657 -0
- package/build/lib/fb/library.js.map +1 -0
- package/build/lib/fb/runtime.js +793 -0
- package/build/lib/fb/runtime.js.map +1 -0
- package/build/lib/fb/time.js +76 -0
- package/build/lib/fb/time.js.map +1 -0
- package/build/lib/fb/types.js +19 -0
- package/build/lib/fb/types.js.map +1 -0
- package/build/lib/fb/user.js +78 -0
- package/build/lib/fb/user.js.map +1 -0
- package/build/lib/inspect.js +66 -10
- package/build/lib/inspect.js.map +1 -1
- package/build/lib/javascript.d.ts +1 -1
- package/build/lib/mirror.js +28 -23
- package/build/lib/mirror.js.map +1 -1
- package/build/lib/sandbox.js +44 -0
- package/build/lib/sandbox.js.map +1 -1
- package/build/lib/scriptHistory.js +245 -0
- package/build/lib/scriptHistory.js.map +1 -0
- package/build/main.js +641 -32
- package/build/main.js.map +1 -1
- package/build/types.d.ts +20 -1
- package/docs/de/fbd.md +274 -0
- package/docs/en/fbd.md +260 -0
- package/io-package.json +55 -29
- package/package.json +7 -7
- package/admin/assets/AiChatPanel-oBeXbUFv.js +0 -27
- package/admin/assets/AiDiffView-C-KKjnJD.js +0 -1
- package/admin/assets/Debugger-DwHHsh9O.js +0 -15
- package/admin/assets/Error-DZ4vCykD.js +0 -1
- package/admin/assets/Import-Cu02ceLW.js +0 -1
- package/admin/assets/RulesEditor-QCbi1lV_.js +0 -1
- package/admin/assets/ScriptEditorVanillaMonaco-ChQmnk0p.js +0 -3
- package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-CM95r358.js +0 -1
- package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__180366418666083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BEpNZh4U.js +0 -1217
- package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__180366418666083__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-FeM77flT.js +0 -9
- package/admin/assets/aiPromptBuilder-DKler0UK.js +0 -1
- package/admin/assets/blocks_action-DywZVfRY.js +0 -1
- package/admin/assets/blocks_logic-CdTl5YZw.js +0 -1
- package/admin/assets/blocks_number-DXFd9Rva.js +0 -1
- package/admin/assets/blocks_object-by1uBDHi.js +0 -1
- package/admin/assets/blocks_procedures-BcJ7N70D.js +0 -3
- package/admin/assets/blocks_sendto-qIKzOAcV.js +0 -5
- package/admin/assets/blocks_switch-dLF6hSJl.js +0 -2
- package/admin/assets/blocks_system-DmX-SBy8.js +0 -1
- package/admin/assets/blocks_text-BI4zNU3o.js +0 -1
- package/admin/assets/blocks_time-BgYA4Y_4.js +0 -1
- package/admin/assets/blocks_timeout-DUzgMyAu.js +0 -1
- package/admin/assets/dist-D4uJqRBO.js +0 -4
- package/admin/assets/field_cron-Ba46q8Qc.js +0 -1
- package/admin/assets/field_oid-lWCjOzuq.js +0 -1
- package/admin/assets/field_script-BCWZHhnW.js +0 -1
- package/admin/assets/helpers-CnEjYAup.js +0 -1
- package/admin/assets/hostInit-CVybS7BB.js +0 -1
- package/admin/assets/index-B3s0zmWC.js +0 -871
- package/admin/assets/index-CXaeqPRy.css +0 -1
- package/admin/assets/pendingShares-DOAkyFMS.js +0 -1
- package/admin/assets/vite-preload-helper-CaC3yEL3.js +0 -1
- package/admin/custom/assets/Components-FkGDIlId.js +0 -1
- package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-Cs88NUCd.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-P-8ffWXw.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-ZVuRAEo5.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-Dna3WF04.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare___mf_0_mui_mf_1_x_mf_2_date_mf_2_pickers__loadShare__.js-DcjdCGAx.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare__date_mf_2_fns__loadShare__.js-CnhNjamd.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare__leaflet__loadShare__.js-Dz7BFJqH.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-B0olko2J.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-CzN4reh_.js +0 -122
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__prebuild__leaflet__prebuild__-xPcBaiTQ.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__prebuild__react_mf_2_dom_mf_1_client__prebuild__-DuFBE5fh.js +0 -9
- package/admin/custom/assets/dist-D4uJqRBO.js +0 -4
- package/admin/custom/assets/hostInit-6oh4UY2k.js +0 -1
- package/admin/custom/assets/index-BrlyEy6J.js +0 -1
- package/admin/custom/assets/pendingShares-kV2kwejX.js +0 -1
- package/admin/custom/assets/vite-preload-helper-CaC3yEL3.js +0 -1
- /package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-CXpyx8Vy.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-CXpyx8Vy.js} +0 -0
package/build/lib/inspect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/lib/inspect.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Node.js contributors. All rights reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/*\n * The inspector process. It is forked by the adapter (see `debugStart` in main.ts) and starts the process to debug -\n * the javascript adapter itself with `--debugScript <scriptId>` or another adapter - with an enabled inspector.\n * It connects to it via the DevTools protocol and translates the commands of the GUI into protocol calls and back.\n *\n * The communication with the host happens via IPC with JSON strings:\n * - host -> inspector: `DebugCommand`\n * - inspector -> host: `CommandToHost`\n */\nimport { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport type { Debugger, Runtime } from 'node:inspector';\nimport { join, normalize } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { debuglog as utilDebugLog } from 'node:util';\n\n// @ts-expect-error no types available\nimport InspectClient from 'node-inspect/lib/internal/inspect_client';\n\nconst debuglog = utilDebugLog('inspect');\n\n/** Stay paused on the first line of the debugged process (used for the debugging of adapter instances) */\nconst breakOnStart = process.argv.includes('--breakOnStart');\n\n/**\n * By debugging of a script, stepping and \"stop on exception\" should not stop in the node internals,\n * in 3rd party modules and in the adapter itself (e.g., in sandbox.js)\n */\nconst SCRIPT_BLACKBOX_PATTERNS = ['^node:', '/node_modules/', '[iI]o[bB]roker\\\\.javascript/build/'];\n\ninterface InspectClientType {\n connect(port: number, host: string): Promise<void>;\n callMethod(method: string, params?: Record<string, unknown>): Promise<any>;\n reset(): void;\n on(event: 'debugEvent', listener: (method: string, params: DebugEventParams | undefined) => void): void;\n}\n\ntype ProtocolDomain = Record<string, (params?: Record<string, unknown>) => Promise<any>>;\n\n/** Parameters of the protocol events, which are processed here */\ninterface DebugEventParams {\n /** Debugger.scriptParsed */\n scriptId?: Runtime.ScriptId;\n url?: string;\n /** Debugger.paused */\n reason?: string;\n callFrames?: Debugger.CallFrame[];\n /** Runtime.consoleAPICalled */\n type?: string;\n args?: Runtime.RemoteObject[];\n /** Runtime.executionContextDestroyed */\n executionContextId?: number;\n /** Runtime.executionContextCreated */\n context?: { id: number; name: string };\n}\n\ninterface CommandToHost {\n cmd:\n | 'ready'\n | 'readyToDebug'\n | 'paused'\n | 'resumed'\n | 'script'\n | 'log'\n | 'error'\n | 'finished'\n | 'sb'\n | 'cb'\n | 'scope'\n | 'setValue'\n | 'expressions'\n | 'getPossibleBreakpoints';\n [attr: string]: unknown;\n}\n\ninterface DebugCommand {\n cmd:\n | 'start'\n | 'end'\n | 'source'\n | 'sb'\n | 'cb'\n | 'pause'\n | 'cont'\n | 'next'\n | 'step'\n | 'out'\n | 'scope'\n | 'setValue'\n | 'expressions'\n | 'stopOnException'\n | 'getPossibleBreakpoints';\n /** start: ID of the script to debug, like `script.js.myScript` */\n scriptName?: string;\n /** start: instance number of the javascript adapter */\n instance?: number;\n /** start: adapter instance to debug, like `hm-rpc.0`, if no script name is given */\n adapterInstance?: string;\n /** source */\n scriptId?: Runtime.ScriptId;\n /** sb: locations, cb: breakpoint IDs */\n breakpoints?: (Debugger.Location | Debugger.BreakpointId)[];\n /** scope: scopes of the current call frame with their index in the scope chain */\n scopes?: (Debugger.Scope & { index?: number })[];\n /** setValue */\n variableName?: string;\n scopeNumber?: number;\n newValue?: { value?: unknown };\n /** setValue, expressions */\n callFrameId?: Debugger.CallFrameId;\n /** expressions */\n expressions?: { name: string }[];\n /** stopOnException */\n state?: boolean;\n /** getPossibleBreakpoints */\n start?: Debugger.Location;\n end?: Debugger.Location;\n}\n\nclass StartupError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'StartupError';\n }\n}\n\nlet inspector: NodeInspector | undefined;\n/** ID of the debugged script, like `script.js.myScript` */\nlet scriptToDebug = '';\n/** Main file of the debugged adapter */\nlet instanceToDebug = '';\n\nfunction sendToHost(data: CommandToHost): void {\n if (data.cmd === 'error') {\n console.error(`[DEBUGGER] ${data.error as string}`);\n }\n try {\n process.send?.(JSON.stringify(data));\n } catch (e) {\n // The host is not reachable anymore\n console.error(`[DEBUGGER] Cannot send to host: ${e as Error}`);\n }\n}\n\nfunction errorToString(e: unknown): string {\n if (e instanceof Error) {\n return e.message;\n }\n return typeof e === 'string' ? e : JSON.stringify(e);\n}\n\nfunction reportError(text: string, e?: unknown): void {\n sendToHost({ cmd: 'error', error: e === undefined ? text : `${text}: ${errorToString(e)}` });\n}\n\nfunction remoteObjectToString(obj: Runtime.RemoteObject | undefined): string {\n if (!obj) {\n return '';\n }\n if (obj.value !== undefined) {\n return typeof obj.value === 'string' ? obj.value : JSON.stringify(obj.value);\n }\n return obj.unserializableValue || obj.description || obj.type;\n}\n\nfunction consoleTypeToSeverity(type: string | undefined): ioBroker.LogLevel {\n switch (type) {\n case 'warning':\n return 'warn';\n case 'error':\n case 'assert':\n return 'error';\n case 'debug':\n return 'debug';\n default:\n return 'info';\n }\n}\n\n/** Values like NaN, Infinity, -0 or BigInt cannot be transferred as JSON value */\nfunction toCallArgument(value: unknown): Runtime.CallArgument {\n if (typeof value === 'number' && (!Number.isFinite(value) || Object.is(value, -0))) {\n return { unserializableValue: Object.is(value, -0) ? '-0' : String(value) };\n }\n if (typeof value === 'bigint') {\n return { unserializableValue: `${value}n` };\n }\n return value === undefined ? {} : { value };\n}\n\nfunction isUrlOfFile(url: string, file: string): boolean {\n let path = url;\n if (url.startsWith('file://')) {\n try {\n path = fileURLToPath(url);\n } catch {\n return false;\n }\n }\n path = normalize(path);\n file = normalize(file);\n return process.platform === 'win32' ? path.toLowerCase() === file.toLowerCase() : path === file;\n}\n\nfunction createDomain(domain: string, client: InspectClientType): ProtocolDomain {\n return new Proxy<ProtocolDomain>(\n {},\n {\n get: (_target, method: string | symbol) =>\n // the object must not look like a promise\n typeof method === 'string' && method !== 'then'\n ? (params?: Record<string, unknown>): Promise<any> =>\n client.callMethod(`${domain}.${method}`, params)\n : undefined,\n },\n );\n}\n\nfunction runScript(\n script: string,\n scriptArgs: string[],\n childPrint: (text: string, isError?: boolean) => void,\n): Promise<[ChildProcessWithoutNullStreams, number, string]> {\n return new Promise((resolve, reject) => {\n // Always break on start: the process must not run before the debugger is connected, else it could\n // execute the `debugger;` statement of the script before. Port 0 means any free port.\n const child = spawn(process.execPath, ['--inspect-brk=127.0.0.1:0', normalize(script), ...scriptArgs]);\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n child.stdout.on('data', (text: string) => childPrint(text));\n child.stderr.on('data', (text: string) => childPrint(text, true));\n\n let output = '';\n const timeout = setTimeout(() => {\n child.stderr.removeListener('data', waitForListenHint);\n child.kill();\n reject(new StartupError('Timeout by starting of the process to debug'));\n }, 10_000);\n\n function waitForListenHint(text: string): void {\n output += text;\n const res = /Debugger listening on ws:\\/\\/\\[?(.+?)]?:(\\d+)\\//.exec(output);\n if (res) {\n clearTimeout(timeout);\n child.stderr.removeListener('data', waitForListenHint);\n resolve([child, parseInt(res[2], 10), res[1]]);\n }\n }\n\n child.stderr.on('data', waitForListenHint);\n child.on('error', error => {\n clearTimeout(timeout);\n reject(new StartupError(`Cannot start the process to debug: ${error.message}`));\n });\n });\n}\n\nclass NodeInspector {\n readonly Debugger: ProtocolDomain;\n readonly Runtime: ProtocolDomain;\n\n private readonly client: InspectClientType = new InspectClient();\n private readonly file: string;\n private readonly args: string[];\n private child: ChildProcessWithoutNullStreams | null = null;\n /** The protocol does not deliver the URLs in the call frames anymore, so remember them */\n private readonly scriptUrls: Record<Runtime.ScriptId, string> = {};\n private mainScriptId: Runtime.ScriptId | undefined;\n private mainFile = '';\n private mainScriptSource: Promise<string> | null = null;\n /** Sometimes the first pause comes before the main script is parsed */\n private delayedContext: DebugEventParams | null = null;\n private pausedOnFirstLine = false;\n /** Execution context of the debugged script */\n private scriptContextId: number | undefined;\n private finished = false;\n\n constructor(file: string, args: string[]) {\n this.file = file;\n this.args = args;\n this.Debugger = createDomain('Debugger', this.client);\n this.Runtime = createDomain('Runtime', this.client);\n this.client.on('debugEvent', (fullName, params) => this.handleDebugEvent(fullName, params || {}));\n }\n\n async start(): Promise<void> {\n const [child, port, host] = await runScript(this.file, this.args, (text, isError) =>\n this.childPrint(text, isError),\n );\n this.child = child;\n child.on('exit', code => this.finish(`Process exited with code ${code}`));\n\n for (let attempt = 1; ; attempt++) {\n try {\n await this.client.connect(port, host);\n break;\n } catch (e) {\n debuglog(`Connection attempt #${attempt} failed: ${e as Error}`);\n if (attempt >= 10) {\n throw new StartupError(`Cannot connect to the debugger on ${host}:${port}`);\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n }\n\n await Promise.all([\n this.Runtime.enable(),\n this.Debugger.enable(),\n this.Debugger.setPauseOnExceptions({ state: 'none' }),\n this.Debugger.setAsyncCallStackDepth({ maxDepth: 1 }),\n this.Debugger.setBlackboxPatterns({ patterns: scriptToDebug ? SCRIPT_BLACKBOX_PATTERNS : [] }),\n this.Runtime.runIfWaitingForDebugger(),\n ]);\n }\n\n killChild(): void {\n this.client.reset();\n if (this.child) {\n this.child.kill();\n this.child = null;\n }\n }\n\n private finish(reason: string): void {\n if (this.finished) {\n return;\n }\n this.finished = true;\n debuglog(reason);\n sendToHost({ cmd: 'finished', text: reason });\n this.killChild();\n setTimeout(() => process.exit(0), 200);\n }\n\n private childPrint(text: string, isError?: boolean): void {\n if (isError) {\n const lines = text\n .split(/\\r\\n|\\r|\\n/g)\n .filter(line => !!line)\n .map(line => `< ${line}`);\n lines.length && process.stdout.write(`${lines.join('\\n')}\\n`);\n }\n // The debugged process ended, but it waits till the debugger disconnects\n if (text.includes('Waiting for the debugger to disconnect')) {\n this.finish('Process finished');\n }\n }\n\n private handleDebugEvent(fullName: string, params: DebugEventParams): void {\n switch (fullName) {\n case 'Debugger.scriptParsed':\n this.onScriptParsed(params);\n break;\n\n case 'Debugger.paused':\n this.onPaused(params);\n break;\n\n case 'Debugger.resumed':\n sendToHost({ cmd: 'resumed', context: params });\n break;\n\n case 'Runtime.consoleAPICalled':\n this.onConsoleApiCalled(params);\n break;\n\n case 'Runtime.executionContextCreated':\n // main.ts gives the context of a script the name of the script\n if (scriptToDebug && params.context?.name === scriptToDebug) {\n this.scriptContextId = params.context.id;\n }\n break;\n\n case 'Runtime.executionContextDestroyed':\n if (params.executionContextId === 1) {\n // the main context of the debugged process is gone\n this.finish('Process finished');\n } else if (this.scriptContextId !== undefined && params.executionContextId === this.scriptContextId) {\n // the script was stopped, but the process is still running\n sendToHost({ cmd: 'finished', context: params });\n }\n break;\n\n default:\n debuglog(`${fullName}: ${JSON.stringify(params)}`);\n break;\n }\n }\n\n private onScriptParsed(params: DebugEventParams): void {\n const { scriptId, url } = params;\n if (!scriptId || !url) {\n return;\n }\n this.scriptUrls[scriptId] = url;\n\n const isMain = scriptToDebug ? url === scriptToDebug : !!instanceToDebug && isUrlOfFile(url, instanceToDebug);\n if (!isMain) {\n return;\n }\n debuglog(`Script to debug parsed: ${scriptId}`);\n this.mainScriptId = scriptId;\n this.mainFile = url.replace('file:///', '');\n this.mainScriptSource = this.Debugger.getScriptSource({ scriptId }).then(\n (result: Debugger.GetScriptSourceReturnType) => result.scriptSource,\n );\n\n if (this.delayedContext) {\n const context = this.delayedContext;\n this.delayedContext = null;\n void this.sendReadyToDebug(context);\n }\n }\n\n private onPaused(params: DebugEventParams): void {\n if (!this.pausedOnFirstLine) {\n if (params.reason === 'Break on start' && !breakOnStart) {\n // the process was started with --inspect-brk only to have time to set up the debugger\n this.Debugger.resume().catch(e => reportError('Cannot resume', e));\n return;\n }\n if (params.reason === 'exception') {\n // ignore all exceptions till the start of the script\n this.Debugger.resume().catch(e => reportError('Cannot resume', e));\n return;\n }\n }\n\n this.enrichCallFrames(params);\n\n if (\n this.pausedOnFirstLine &&\n scriptToDebug &&\n params.reason === 'step' &&\n !params.callFrames?.[0]?.url?.startsWith('script.js.')\n ) {\n // Stepping left the script, e.g., at the end of a callback. The blackbox patterns do not cover\n // all internals of node.js, so continue the execution instead of stopping there\n this.Debugger.resume().catch(e => reportError('Cannot resume', e));\n return;\n }\n\n if (this.pausedOnFirstLine) {\n sendToHost({ cmd: 'paused', context: params });\n } else {\n this.pausedOnFirstLine = true;\n if (this.mainScriptSource) {\n void this.sendReadyToDebug(params);\n } else {\n // store the context to send it, when the main script is parsed\n this.delayedContext = params;\n }\n }\n }\n\n private async sendReadyToDebug(context: DebugEventParams): Promise<void> {\n try {\n const script = await this.mainScriptSource;\n this.enrichCallFrames(context);\n sendToHost({\n cmd: 'readyToDebug',\n scriptId: this.mainScriptId,\n script,\n context,\n url: this.mainFile,\n });\n } catch (e) {\n reportError('Cannot read the source of the script to debug', e);\n }\n }\n\n private enrichCallFrames(context: DebugEventParams): void {\n context.callFrames?.forEach(frame => {\n if (!frame.url) {\n frame.url = this.scriptUrls[frame.location.scriptId] || '';\n }\n });\n }\n\n private onConsoleApiCalled(params: DebugEventParams): void {\n const args = params.args || [];\n if (instanceToDebug) {\n sendToHost({\n cmd: 'log',\n severity: consoleTypeToSeverity(params.type),\n text: args.map(arg => remoteObjectToString(arg)).join(' '),\n ts: Date.now(),\n });\n return;\n }\n\n // The sandbox logs in debug mode as `console.log(`${severity}$$${scriptName}$$${message}`, Date.now())`\n const text = remoteObjectToString(args[0]);\n const marker = `$$${scriptToDebug}$$`;\n const pos = text.indexOf(marker);\n if (pos !== -1) {\n sendToHost({\n cmd: 'log',\n severity: text.substring(0, pos),\n text: text.substring(pos + marker.length),\n ts: typeof args[1]?.value === 'number' ? args[1].value : Date.now(),\n });\n } else if (params.type === 'warning' || params.type === 'error') {\n sendToHost({\n cmd: 'log',\n severity: consoleTypeToSeverity(params.type),\n text: args.map(arg => remoteObjectToString(arg)).join(' '),\n ts: Date.now(),\n });\n }\n }\n}\n\nfunction resolveAdapterMainFile(adapter: string): string | undefined {\n try {\n return require.resolve(`iobroker.${adapter}`);\n } catch {\n // try to locate it in the same node_modules directory as this adapter\n const dir = normalize(join(__dirname, '..', '..', '..', `iobroker.${adapter}`));\n if (existsSync(join(dir, 'package.json'))) {\n try {\n const pack = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8'));\n const main = join(dir, pack.main || `${adapter}.js`);\n if (existsSync(main)) {\n return main;\n }\n } catch {\n // ignore\n }\n }\n }\n return undefined;\n}\n\nfunction startDebugging(data: DebugCommand): void {\n if (inspector) {\n reportError('The debugger is already started');\n return;\n }\n\n if (data.scriptName) {\n scriptToDebug = data.scriptName;\n inspector = new NodeInspector(join(__dirname, '..', 'main.js'), [\n (data.instance || 0).toString(),\n '--debug',\n '--debugScript',\n scriptToDebug,\n ]);\n } else {\n const [adapter, instance] = (data.adapterInstance || '').split('.');\n const file = resolveAdapterMainFile(adapter);\n if (!file) {\n reportError(`Cannot locate iobroker.${adapter}`);\n setTimeout(() => {\n sendToHost({ cmd: 'finished', context: `Cannot locate iobroker.${adapter}` });\n setTimeout(() => process.exit(0), 500);\n }, 200);\n return;\n }\n instanceToDebug = file;\n inspector = new NodeInspector(file, [instance || '0', '--debug']);\n }\n\n inspector.start().catch((e: unknown) => {\n reportError(\n e instanceof StartupError\n ? e.message\n : `Internal error in inspector: ${e instanceof Error ? e.stack : errorToString(e)}`,\n );\n inspector?.killChild();\n setTimeout(() => process.exit(1), 200);\n });\n}\n\nasync function processCommand(data: DebugCommand): Promise<void> {\n debuglog(`processCommand: ${JSON.stringify(data)}`);\n\n if (data.cmd === 'start') {\n startDebugging(data);\n return;\n }\n if (data.cmd === 'end') {\n process.exit(0);\n }\n if (!inspector) {\n reportError(`Cannot process \"${data.cmd}\": the debugger is not started`);\n return;\n }\n const { Debugger, Runtime } = inspector;\n\n switch (data.cmd) {\n case 'source':\n try {\n const { scriptSource } = (await Debugger.getScriptSource({\n scriptId: data.scriptId,\n })) as Debugger.GetScriptSourceReturnType;\n sendToHost({ cmd: 'script', scriptId: data.scriptId, text: scriptSource });\n } catch (e) {\n reportError(`Cannot read the source of script ${data.scriptId}`, e);\n }\n break;\n\n case 'cont':\n case 'next':\n case 'step':\n case 'out':\n case 'pause': {\n const method = { cont: 'resume', next: 'stepOver', step: 'stepInto', out: 'stepOut', pause: 'pause' }[\n data.cmd\n ];\n try {\n await Debugger[method]();\n } catch (e) {\n reportError(`Cannot execute \"${data.cmd}\"`, e);\n }\n break;\n }\n\n case 'sb': {\n const breakpoints = await Promise.all(\n ((data.breakpoints || []) as Debugger.Location[]).map(async bp => {\n try {\n const result = (await Debugger.setBreakpoint({\n location: {\n scriptId: bp.scriptId,\n lineNumber: bp.lineNumber,\n columnNumber: bp.columnNumber,\n },\n })) as Debugger.SetBreakpointReturnType;\n return { id: result.breakpointId, location: result.actualLocation };\n } catch (e) {\n reportError(`Cannot set breakpoint on line ${bp.lineNumber + 1}`, e);\n return null;\n }\n }),\n );\n sendToHost({ cmd: 'sb', breakpoints: breakpoints.filter(bp => bp) });\n break;\n }\n\n case 'cb': {\n const breakpointIds = await Promise.all(\n ((data.breakpoints || []) as Debugger.BreakpointId[]).map(async breakpointId => {\n try {\n await Debugger.removeBreakpoint({ breakpointId });\n } catch (e) {\n // The breakpoint does not exist (anymore), so it is removed anyway\n debuglog(`Cannot clear breakpoint ${breakpointId}: ${e as Error}`);\n }\n return breakpointId;\n }),\n );\n sendToHost({ cmd: 'cb', breakpoints: breakpointIds });\n break;\n }\n\n case 'scope': {\n const scopes = await Promise.all(\n (data.scopes || [])\n .filter(scope => scope?.object?.objectId)\n .map(async scope => {\n try {\n const properties = (await Runtime.getProperties({\n objectId: scope.object.objectId,\n generatePreview: true,\n })) as Runtime.GetPropertiesReturnType;\n return { type: scope.type, name: scope.name, index: scope.index, properties };\n } catch (e) {\n // e.g., the execution was resumed in the meantime\n debuglog(`Cannot read scope: ${e as Error}`);\n return null;\n }\n }),\n );\n sendToHost({ cmd: 'scope', scopes: scopes.filter(scope => scope) });\n break;\n }\n\n case 'setValue':\n try {\n await Debugger.setVariableValue({\n variableName: data.variableName,\n scopeNumber: data.scopeNumber,\n newValue: toCallArgument(data.newValue?.value),\n callFrameId: data.callFrameId,\n });\n sendToHost({\n cmd: 'setValue',\n variableName: data.variableName,\n scopeNumber: data.scopeNumber,\n newValue: data.newValue,\n callFrameId: data.callFrameId,\n });\n } catch (e) {\n reportError(`Cannot set value of \"${data.variableName}\"`, e);\n }\n break;\n\n case 'expressions': {\n const expressions = await Promise.all(\n (data.expressions || []).map(async item => {\n try {\n const { result } = (await Debugger.evaluateOnCallFrame({\n callFrameId: data.callFrameId,\n expression: item.name,\n objectGroup: 'node-inspect',\n generatePreview: true,\n })) as Debugger.EvaluateOnCallFrameReturnType;\n return { name: item.name, result };\n } catch (e) {\n return {\n name: item.name,\n result: {\n type: 'object',\n subtype: 'error',\n className: 'Error',\n description: errorToString(e),\n },\n };\n }\n }),\n );\n sendToHost({ cmd: 'expressions', expressions });\n break;\n }\n\n case 'stopOnException':\n try {\n await Debugger.setPauseOnExceptions({ state: data.state ? 'all' : 'none' });\n } catch (e) {\n reportError('Cannot change \"stop on exception\"', e);\n }\n break;\n\n case 'getPossibleBreakpoints':\n try {\n const { locations } = (await Debugger.getPossibleBreakpoints({\n start: data.start,\n end: data.end,\n })) as Debugger.GetPossibleBreakpointsReturnType;\n sendToHost({ cmd: 'getPossibleBreakpoints', breakpoints: locations });\n } catch (e) {\n reportError('Cannot get possible breakpoints', e);\n }\n break;\n\n default:\n console.error(`[DEBUGGER] Unknown command: ${JSON.stringify(data)}`);\n break;\n }\n}\n\nprocess.on('message', (message: unknown): void => {\n let command: DebugCommand;\n try {\n command = typeof message === 'string' ? (JSON.parse(message) as DebugCommand) : (message as DebugCommand);\n } catch {\n console.error(`[DEBUGGER] Cannot parse: ${JSON.stringify(message)}`);\n return;\n }\n processCommand(command).catch(e => reportError(`Cannot process \"${command?.cmd}\"`, e));\n});\n\n// Handle all possible exits and never leave the debugged process behind\nprocess.on('exit', () => inspector?.killChild());\nprocess.on('disconnect', () => process.exit(0));\nprocess.once('SIGTERM', () => process.exit(0));\nprocess.once('SIGHUP', () => process.exit(0));\nprocess.on('uncaughtException', (e: Error) => {\n reportError(`Internal error in inspector: ${e.stack || e.message}`);\n inspector?.killChild();\n process.exit(1);\n});\n\nsendToHost({ cmd: 'ready' });\n"]}
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/lib/inspect.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Node.js contributors. All rights reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/*\n * The inspector process. It is forked by the adapter (see `debugStart` in main.ts) and starts the process to debug -\n * the javascript adapter itself with `--debugScript <scriptId>` or another adapter - with an enabled inspector.\n * It connects to it via the DevTools protocol and translates the commands of the GUI into protocol calls and back.\n *\n * The communication with the host happens via IPC with JSON strings:\n * - host -> inspector: `DebugCommand`\n * - inspector -> host: `CommandToHost`\n */\nimport { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport type { Debugger, Runtime } from 'node:inspector';\nimport { join, normalize } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { debuglog as utilDebugLog } from 'node:util';\n\n// @ts-expect-error no types available\nimport InspectClient from 'node-inspect/lib/internal/inspect_client';\n\nconst debuglog = utilDebugLog('inspect');\n\n/** Stay paused on the first line of the debugged process (used for the debugging of adapter instances) */\nconst breakOnStart = process.argv.includes('--breakOnStart');\n\n/**\n * By debugging of a script, stepping and \"stop on exception\" should not stop in the node internals,\n * in 3rd party modules and in the adapter itself (e.g., in sandbox.js)\n */\nconst SCRIPT_BLACKBOX_PATTERNS = ['^node:', '/node_modules/', '[iI]o[bB]roker\\\\.javascript/build/'];\n\ninterface InspectClientType {\n connect(port: number, host: string): Promise<void>;\n callMethod(method: string, params?: Record<string, unknown>): Promise<any>;\n reset(): void;\n on(event: 'debugEvent', listener: (method: string, params: DebugEventParams | undefined) => void): void;\n}\n\ntype ProtocolDomain = Record<string, (params?: Record<string, unknown>) => Promise<any>>;\n\n/** Parameters of the protocol events, which are processed here */\ninterface DebugEventParams {\n /** Debugger.scriptParsed */\n scriptId?: Runtime.ScriptId;\n url?: string;\n /** Debugger.paused */\n reason?: string;\n callFrames?: Debugger.CallFrame[];\n /** Runtime.consoleAPICalled */\n type?: string;\n args?: Runtime.RemoteObject[];\n /** Runtime.executionContextDestroyed */\n executionContextId?: number;\n /** Runtime.executionContextCreated */\n context?: { id: number; name: string };\n}\n\ninterface CommandToHost {\n cmd:\n | 'ready'\n | 'readyToDebug'\n | 'paused'\n | 'resumed'\n | 'script'\n | 'log'\n | 'error'\n | 'finished'\n | 'sb'\n | 'cb'\n | 'scope'\n | 'setValue'\n | 'expressions'\n | 'getPossibleBreakpoints';\n [attr: string]: unknown;\n}\n\ninterface DebugCommand {\n cmd:\n | 'start'\n | 'end'\n | 'source'\n | 'sb'\n | 'cb'\n | 'pause'\n | 'cont'\n | 'next'\n | 'step'\n | 'out'\n | 'scope'\n | 'setValue'\n | 'expressions'\n | 'stopOnException'\n | 'getPossibleBreakpoints';\n /** start: ID of the script to debug, like `script.js.myScript` */\n scriptName?: string;\n /** start: instance number of the javascript adapter */\n instance?: number;\n /** start: adapter instance to debug, like `hm-rpc.0`, if no script name is given */\n adapterInstance?: string;\n /** source */\n scriptId?: Runtime.ScriptId;\n /** sb: locations, cb: breakpoint IDs */\n breakpoints?: (Debugger.Location | Debugger.BreakpointId)[];\n /** scope: scopes of the current call frame with their index in the scope chain */\n scopes?: (Debugger.Scope & { index?: number })[];\n /** setValue */\n variableName?: string;\n scopeNumber?: number;\n newValue?: { value?: unknown };\n /** setValue, expressions */\n callFrameId?: Debugger.CallFrameId;\n /** expressions */\n expressions?: { name: string }[];\n /** stopOnException */\n state?: boolean;\n /** getPossibleBreakpoints */\n start?: Debugger.Location;\n end?: Debugger.Location;\n}\n\nclass StartupError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'StartupError';\n }\n}\n\nlet inspector: NodeInspector | undefined;\n/** ID of the debugged script, like `script.js.myScript` */\nlet scriptToDebug = '';\n/** Main file of the debugged adapter */\nlet instanceToDebug = '';\n/** The inspector is on its way out, so every further request to end it is ignored */\nlet ending = false;\n\n/**\n * End this process, but stop the debugged process first and give it the time to shut down.\n * Its output goes through the pipes of this process, so they must stay open till it is gone (see `stopChild`).\n */\nasync function endInspector(exitCode: number): Promise<void> {\n if (ending) {\n return;\n }\n ending = true;\n try {\n await inspector?.stopChild();\n } catch (e) {\n debuglog(`Cannot stop the debugged process: ${e as Error}`);\n }\n // Give the last messages to the host the chance to leave\n setTimeout(() => process.exit(exitCode), 200);\n}\n\nfunction sendToHost(data: CommandToHost): void {\n if (data.cmd === 'error') {\n console.error(`[DEBUGGER] ${data.error as string}`);\n }\n try {\n process.send?.(JSON.stringify(data));\n } catch (e) {\n // The host is not reachable anymore\n console.error(`[DEBUGGER] Cannot send to host: ${e as Error}`);\n }\n}\n\nfunction errorToString(e: unknown): string {\n if (e instanceof Error) {\n return e.message;\n }\n return typeof e === 'string' ? e : JSON.stringify(e);\n}\n\nfunction reportError(text: string, e?: unknown): void {\n sendToHost({ cmd: 'error', error: e === undefined ? text : `${text}: ${errorToString(e)}` });\n}\n\nfunction remoteObjectToString(obj: Runtime.RemoteObject | undefined): string {\n if (!obj) {\n return '';\n }\n if (obj.value !== undefined) {\n return typeof obj.value === 'string' ? obj.value : JSON.stringify(obj.value);\n }\n return obj.unserializableValue || obj.description || obj.type;\n}\n\nfunction consoleTypeToSeverity(type: string | undefined): ioBroker.LogLevel {\n switch (type) {\n case 'warning':\n return 'warn';\n case 'error':\n case 'assert':\n return 'error';\n case 'debug':\n return 'debug';\n default:\n return 'info';\n }\n}\n\n/** Values like NaN, Infinity, -0 or BigInt cannot be transferred as JSON value */\nfunction toCallArgument(value: unknown): Runtime.CallArgument {\n if (typeof value === 'number' && (!Number.isFinite(value) || Object.is(value, -0))) {\n return { unserializableValue: Object.is(value, -0) ? '-0' : String(value) };\n }\n if (typeof value === 'bigint') {\n return { unserializableValue: `${value}n` };\n }\n return value === undefined ? {} : { value };\n}\n\nfunction isUrlOfFile(url: string, file: string): boolean {\n let path = url;\n if (url.startsWith('file://')) {\n try {\n path = fileURLToPath(url);\n } catch {\n return false;\n }\n }\n path = normalize(path);\n file = normalize(file);\n return process.platform === 'win32' ? path.toLowerCase() === file.toLowerCase() : path === file;\n}\n\nfunction createDomain(domain: string, client: InspectClientType): ProtocolDomain {\n return new Proxy<ProtocolDomain>(\n {},\n {\n get: (_target, method: string | symbol) =>\n // the object must not look like a promise\n typeof method === 'string' && method !== 'then'\n ? (params?: Record<string, unknown>): Promise<any> =>\n client.callMethod(`${domain}.${method}`, params)\n : undefined,\n },\n );\n}\n\nfunction runScript(\n script: string,\n scriptArgs: string[],\n childPrint: (text: string, isError?: boolean) => void,\n): Promise<[ChildProcessWithoutNullStreams, number, string]> {\n return new Promise((resolve, reject) => {\n // Always break on start: the process must not run before the debugger is connected, else it could\n // execute the `debugger;` statement of the script before. Port 0 means any free port.\n const child = spawn(process.execPath, ['--inspect-brk=127.0.0.1:0', normalize(script), ...scriptArgs]);\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n child.stdout.on('data', (text: string) => childPrint(text));\n child.stderr.on('data', (text: string) => childPrint(text, true));\n\n let output = '';\n const timeout = setTimeout(() => {\n child.stderr.removeListener('data', waitForListenHint);\n child.kill();\n reject(new StartupError('Timeout by starting of the process to debug'));\n }, 10_000);\n\n function waitForListenHint(text: string): void {\n output += text;\n const res = /Debugger listening on ws:\\/\\/\\[?(.+?)]?:(\\d+)\\//.exec(output);\n if (res) {\n clearTimeout(timeout);\n child.stderr.removeListener('data', waitForListenHint);\n resolve([child, parseInt(res[2], 10), res[1]]);\n }\n }\n\n child.stderr.on('data', waitForListenHint);\n child.on('error', error => {\n clearTimeout(timeout);\n reject(new StartupError(`Cannot start the process to debug: ${error.message}`));\n });\n });\n}\n\nclass NodeInspector {\n readonly Debugger: ProtocolDomain;\n readonly Runtime: ProtocolDomain;\n\n private readonly client: InspectClientType = new InspectClient();\n private readonly file: string;\n private readonly args: string[];\n private child: ChildProcessWithoutNullStreams | null = null;\n /** The protocol does not deliver the URLs in the call frames anymore, so remember them */\n private readonly scriptUrls: Record<Runtime.ScriptId, string> = {};\n private mainScriptId: Runtime.ScriptId | undefined;\n private mainFile = '';\n private mainScriptSource: Promise<string> | null = null;\n /** Sometimes the first pause comes before the main script is parsed */\n private delayedContext: DebugEventParams | null = null;\n private pausedOnFirstLine = false;\n /** Execution context of the debugged script */\n private scriptContextId: number | undefined;\n private finished = false;\n\n constructor(file: string, args: string[]) {\n this.file = file;\n this.args = args;\n this.Debugger = createDomain('Debugger', this.client);\n this.Runtime = createDomain('Runtime', this.client);\n this.client.on('debugEvent', (fullName, params) => this.handleDebugEvent(fullName, params || {}));\n }\n\n async start(): Promise<void> {\n const [child, port, host] = await runScript(this.file, this.args, (text, isError) =>\n this.childPrint(text, isError),\n );\n this.child = child;\n child.on('exit', code => this.finish(`Process exited with code ${code}`));\n\n for (let attempt = 1; ; attempt++) {\n try {\n await this.client.connect(port, host);\n break;\n } catch (e) {\n debuglog(`Connection attempt #${attempt} failed: ${e as Error}`);\n if (attempt >= 10) {\n throw new StartupError(`Cannot connect to the debugger on ${host}:${port}`);\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n }\n\n await Promise.all([\n this.Runtime.enable(),\n this.Debugger.enable(),\n this.Debugger.setPauseOnExceptions({ state: 'none' }),\n this.Debugger.setAsyncCallStackDepth({ maxDepth: 1 }),\n this.Debugger.setBlackboxPatterns({ patterns: scriptToDebug ? SCRIPT_BLACKBOX_PATTERNS : [] }),\n this.Runtime.runIfWaitingForDebugger(),\n ]);\n }\n\n /** Kill the debugged process without waiting for it. Only for the exit handler, where nothing can be awaited */\n killChild(): void {\n this.client.reset();\n if (this.child) {\n this.child.kill();\n this.child = null;\n }\n }\n\n /**\n * Stop the debugged process and wait till it is really gone.\n *\n * The debugged process is started with `--debug`, so it writes its whole log to the stdout of this process, and it\n * logs while it is shutting down. If this process would end first, these pipes would be closed under it and every\n * further log line would fail with `EPIPE` - which the adapter reports as an uncaught exception and dies (#2382).\n */\n async stopChild(timeoutMs = 3_000): Promise<void> {\n this.client.reset();\n const child = this.child;\n this.child = null;\n if (!child || child.exitCode !== null || child.signalCode !== null) {\n return;\n }\n await new Promise<void>(resolve => {\n const timeout = setTimeout(() => {\n // It does not want to end - take the hard way\n child.kill('SIGKILL');\n resolve();\n }, timeoutMs);\n\n child.once('exit', () => {\n clearTimeout(timeout);\n resolve();\n });\n\n child.kill();\n });\n }\n\n private finish(reason: string): void {\n if (this.finished) {\n return;\n }\n this.finished = true;\n debuglog(reason);\n sendToHost({ cmd: 'finished', text: reason });\n void endInspector(0);\n }\n\n private childPrint(text: string, isError?: boolean): void {\n if (isError) {\n const lines = text\n .split(/\\r\\n|\\r|\\n/g)\n .filter(line => !!line)\n .map(line => `< ${line}`);\n lines.length && process.stdout.write(`${lines.join('\\n')}\\n`);\n }\n // The debugged process ended, but it waits till the debugger disconnects\n if (text.includes('Waiting for the debugger to disconnect')) {\n this.finish('Process finished');\n }\n }\n\n private handleDebugEvent(fullName: string, params: DebugEventParams): void {\n switch (fullName) {\n case 'Debugger.scriptParsed':\n this.onScriptParsed(params);\n break;\n\n case 'Debugger.paused':\n this.onPaused(params);\n break;\n\n case 'Debugger.resumed':\n sendToHost({ cmd: 'resumed', context: params });\n break;\n\n case 'Runtime.consoleAPICalled':\n this.onConsoleApiCalled(params);\n break;\n\n case 'Runtime.executionContextCreated':\n // main.ts gives the context of a script the name of the script\n if (scriptToDebug && params.context?.name === scriptToDebug) {\n this.scriptContextId = params.context.id;\n }\n break;\n\n case 'Runtime.executionContextDestroyed':\n if (params.executionContextId === 1) {\n // the main context of the debugged process is gone\n this.finish('Process finished');\n } else if (this.scriptContextId !== undefined && params.executionContextId === this.scriptContextId) {\n // the script was stopped, but the process is still running\n sendToHost({ cmd: 'finished', context: params });\n }\n break;\n\n default:\n debuglog(`${fullName}: ${JSON.stringify(params)}`);\n break;\n }\n }\n\n private onScriptParsed(params: DebugEventParams): void {\n const { scriptId, url } = params;\n if (!scriptId || !url) {\n return;\n }\n this.scriptUrls[scriptId] = url;\n\n const isMain = scriptToDebug ? url === scriptToDebug : !!instanceToDebug && isUrlOfFile(url, instanceToDebug);\n if (!isMain) {\n return;\n }\n debuglog(`Script to debug parsed: ${scriptId}`);\n this.mainScriptId = scriptId;\n this.mainFile = url.replace('file:///', '');\n this.mainScriptSource = this.Debugger.getScriptSource({ scriptId }).then(\n (result: Debugger.GetScriptSourceReturnType) => result.scriptSource,\n );\n\n if (this.delayedContext) {\n const context = this.delayedContext;\n this.delayedContext = null;\n void this.sendReadyToDebug(context);\n }\n }\n\n private onPaused(params: DebugEventParams): void {\n if (!this.pausedOnFirstLine) {\n if (params.reason === 'Break on start' && !breakOnStart) {\n // the process was started with --inspect-brk only to have time to set up the debugger\n this.Debugger.resume().catch(e => reportError('Cannot resume', e));\n return;\n }\n if (params.reason === 'exception') {\n // ignore all exceptions till the start of the script\n this.Debugger.resume().catch(e => reportError('Cannot resume', e));\n return;\n }\n }\n\n this.enrichCallFrames(params);\n\n if (\n this.pausedOnFirstLine &&\n scriptToDebug &&\n params.reason === 'step' &&\n !params.callFrames?.[0]?.url?.startsWith('script.js.')\n ) {\n // Stepping left the script, e.g., at the end of a callback. The blackbox patterns do not cover\n // all internals of node.js, so continue the execution instead of stopping there\n this.Debugger.resume().catch(e => reportError('Cannot resume', e));\n return;\n }\n\n if (this.pausedOnFirstLine) {\n sendToHost({ cmd: 'paused', context: params });\n } else {\n this.pausedOnFirstLine = true;\n if (this.mainScriptSource) {\n void this.sendReadyToDebug(params);\n } else {\n // store the context to send it, when the main script is parsed\n this.delayedContext = params;\n }\n }\n }\n\n private async sendReadyToDebug(context: DebugEventParams): Promise<void> {\n try {\n const script = await this.mainScriptSource;\n this.enrichCallFrames(context);\n sendToHost({\n cmd: 'readyToDebug',\n scriptId: this.mainScriptId,\n script,\n context,\n url: this.mainFile,\n });\n } catch (e) {\n reportError('Cannot read the source of the script to debug', e);\n }\n }\n\n private enrichCallFrames(context: DebugEventParams): void {\n context.callFrames?.forEach(frame => {\n if (!frame.url) {\n frame.url = this.scriptUrls[frame.location.scriptId] || '';\n }\n });\n }\n\n private onConsoleApiCalled(params: DebugEventParams): void {\n const args = params.args || [];\n if (instanceToDebug) {\n sendToHost({\n cmd: 'log',\n severity: consoleTypeToSeverity(params.type),\n text: args.map(arg => remoteObjectToString(arg)).join(' '),\n ts: Date.now(),\n });\n return;\n }\n\n // The sandbox logs in debug mode as `console.log(`${severity}$$${scriptName}$$${message}`, Date.now())`\n const text = remoteObjectToString(args[0]);\n const marker = `$$${scriptToDebug}$$`;\n const pos = text.indexOf(marker);\n if (pos !== -1) {\n sendToHost({\n cmd: 'log',\n severity: text.substring(0, pos),\n text: text.substring(pos + marker.length),\n ts: typeof args[1]?.value === 'number' ? args[1].value : Date.now(),\n });\n } else if (params.type === 'warning' || params.type === 'error') {\n sendToHost({\n cmd: 'log',\n severity: consoleTypeToSeverity(params.type),\n text: args.map(arg => remoteObjectToString(arg)).join(' '),\n ts: Date.now(),\n });\n }\n }\n}\n\nfunction resolveAdapterMainFile(adapter: string): string | undefined {\n try {\n return require.resolve(`iobroker.${adapter}`);\n } catch {\n // try to locate it in the same node_modules directory as this adapter\n const dir = normalize(join(__dirname, '..', '..', '..', `iobroker.${adapter}`));\n if (existsSync(join(dir, 'package.json'))) {\n try {\n const pack = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8'));\n const main = join(dir, pack.main || `${adapter}.js`);\n if (existsSync(main)) {\n return main;\n }\n } catch {\n // ignore\n }\n }\n }\n return undefined;\n}\n\nfunction startDebugging(data: DebugCommand): void {\n if (inspector) {\n reportError('The debugger is already started');\n return;\n }\n\n if (data.scriptName) {\n scriptToDebug = data.scriptName;\n inspector = new NodeInspector(join(__dirname, '..', 'main.js'), [\n (data.instance || 0).toString(),\n '--debug',\n '--debugScript',\n scriptToDebug,\n ]);\n } else {\n const [adapter, instance] = (data.adapterInstance || '').split('.');\n const file = resolveAdapterMainFile(adapter);\n if (!file) {\n reportError(`Cannot locate iobroker.${adapter}`);\n setTimeout(() => {\n sendToHost({ cmd: 'finished', context: `Cannot locate iobroker.${adapter}` });\n setTimeout(() => process.exit(0), 500);\n }, 200);\n return;\n }\n instanceToDebug = file;\n inspector = new NodeInspector(file, [instance || '0', '--debug']);\n }\n\n inspector.start().catch((e: unknown) => {\n reportError(\n e instanceof StartupError\n ? e.message\n : `Internal error in inspector: ${e instanceof Error ? e.stack : errorToString(e)}`,\n );\n void endInspector(1);\n });\n}\n\nasync function processCommand(data: DebugCommand): Promise<void> {\n debuglog(`processCommand: ${JSON.stringify(data)}`);\n\n if (data.cmd === 'start') {\n startDebugging(data);\n return;\n }\n if (data.cmd === 'end') {\n await endInspector(0);\n return;\n }\n if (!inspector) {\n reportError(`Cannot process \"${data.cmd}\": the debugger is not started`);\n return;\n }\n const { Debugger, Runtime } = inspector;\n\n switch (data.cmd) {\n case 'source':\n try {\n const { scriptSource } = (await Debugger.getScriptSource({\n scriptId: data.scriptId,\n })) as Debugger.GetScriptSourceReturnType;\n sendToHost({ cmd: 'script', scriptId: data.scriptId, text: scriptSource });\n } catch (e) {\n reportError(`Cannot read the source of script ${data.scriptId}`, e);\n }\n break;\n\n case 'cont':\n case 'next':\n case 'step':\n case 'out':\n case 'pause': {\n const method = { cont: 'resume', next: 'stepOver', step: 'stepInto', out: 'stepOut', pause: 'pause' }[\n data.cmd\n ];\n try {\n await Debugger[method]();\n } catch (e) {\n reportError(`Cannot execute \"${data.cmd}\"`, e);\n }\n break;\n }\n\n case 'sb': {\n const breakpoints = await Promise.all(\n ((data.breakpoints || []) as Debugger.Location[]).map(async bp => {\n try {\n const result = (await Debugger.setBreakpoint({\n location: {\n scriptId: bp.scriptId,\n lineNumber: bp.lineNumber,\n columnNumber: bp.columnNumber,\n },\n })) as Debugger.SetBreakpointReturnType;\n return { id: result.breakpointId, location: result.actualLocation };\n } catch (e) {\n reportError(`Cannot set breakpoint on line ${bp.lineNumber + 1}`, e);\n return null;\n }\n }),\n );\n sendToHost({ cmd: 'sb', breakpoints: breakpoints.filter(bp => bp) });\n break;\n }\n\n case 'cb': {\n const breakpointIds = await Promise.all(\n ((data.breakpoints || []) as Debugger.BreakpointId[]).map(async breakpointId => {\n try {\n await Debugger.removeBreakpoint({ breakpointId });\n } catch (e) {\n // The breakpoint does not exist (anymore), so it is removed anyway\n debuglog(`Cannot clear breakpoint ${breakpointId}: ${e as Error}`);\n }\n return breakpointId;\n }),\n );\n sendToHost({ cmd: 'cb', breakpoints: breakpointIds });\n break;\n }\n\n case 'scope': {\n const scopes = await Promise.all(\n (data.scopes || [])\n .filter(scope => scope?.object?.objectId)\n .map(async scope => {\n try {\n const properties = (await Runtime.getProperties({\n objectId: scope.object.objectId,\n generatePreview: true,\n })) as Runtime.GetPropertiesReturnType;\n return { type: scope.type, name: scope.name, index: scope.index, properties };\n } catch (e) {\n // e.g., the execution was resumed in the meantime\n debuglog(`Cannot read scope: ${e as Error}`);\n return null;\n }\n }),\n );\n sendToHost({ cmd: 'scope', scopes: scopes.filter(scope => scope) });\n break;\n }\n\n case 'setValue':\n try {\n await Debugger.setVariableValue({\n variableName: data.variableName,\n scopeNumber: data.scopeNumber,\n newValue: toCallArgument(data.newValue?.value),\n callFrameId: data.callFrameId,\n });\n sendToHost({\n cmd: 'setValue',\n variableName: data.variableName,\n scopeNumber: data.scopeNumber,\n newValue: data.newValue,\n callFrameId: data.callFrameId,\n });\n } catch (e) {\n reportError(`Cannot set value of \"${data.variableName}\"`, e);\n }\n break;\n\n case 'expressions': {\n const expressions = await Promise.all(\n (data.expressions || []).map(async item => {\n try {\n const { result } = (await Debugger.evaluateOnCallFrame({\n callFrameId: data.callFrameId,\n expression: item.name,\n objectGroup: 'node-inspect',\n generatePreview: true,\n })) as Debugger.EvaluateOnCallFrameReturnType;\n return { name: item.name, result };\n } catch (e) {\n return {\n name: item.name,\n result: {\n type: 'object',\n subtype: 'error',\n className: 'Error',\n description: errorToString(e),\n },\n };\n }\n }),\n );\n sendToHost({ cmd: 'expressions', expressions });\n break;\n }\n\n case 'stopOnException':\n try {\n await Debugger.setPauseOnExceptions({ state: data.state ? 'all' : 'none' });\n } catch (e) {\n reportError('Cannot change \"stop on exception\"', e);\n }\n break;\n\n case 'getPossibleBreakpoints':\n try {\n const { locations } = (await Debugger.getPossibleBreakpoints({\n start: data.start,\n end: data.end,\n })) as Debugger.GetPossibleBreakpointsReturnType;\n sendToHost({ cmd: 'getPossibleBreakpoints', breakpoints: locations });\n } catch (e) {\n reportError('Cannot get possible breakpoints', e);\n }\n break;\n\n default:\n console.error(`[DEBUGGER] Unknown command: ${JSON.stringify(data)}`);\n break;\n }\n}\n\nprocess.on('message', (message: unknown): void => {\n let command: DebugCommand;\n try {\n command = typeof message === 'string' ? (JSON.parse(message) as DebugCommand) : (message as DebugCommand);\n } catch {\n console.error(`[DEBUGGER] Cannot parse: ${JSON.stringify(message)}`);\n return;\n }\n processCommand(command).catch(e => reportError(`Cannot process \"${command?.cmd}\"`, e));\n});\n\n// A closed pipe of the own output (the host can be gone already) must not end the inspector with an EPIPE\nprocess.stdout.on('error', () => {});\nprocess.stderr.on('error', () => {});\n\n// Handle all possible exits and never leave the debugged process behind\nprocess.on('exit', () => inspector?.killChild());\nprocess.on('disconnect', () => void endInspector(0));\nprocess.once('SIGTERM', () => void endInspector(0));\nprocess.once('SIGHUP', () => void endInspector(0));\nprocess.on('uncaughtException', (e: NodeJS.ErrnoException) => {\n // The connection to the debugged process is reset as soon as it ends (node-inspect's client does not listen for\n // that), and while the inspector is on its way out, there is nothing worth reporting anymore\n if (ending || e?.code === 'ECONNRESET' || e?.code === 'EPIPE') {\n debuglog(`Ignored error in the inspector: ${e?.stack || e?.message}`);\n void endInspector(0);\n return;\n }\n reportError(`Internal error in inspector: ${e.stack || e.message}`);\n void endInspector(1);\n});\n\nsendToHost({ cmd: 'ready' });\n"]}
|
|
@@ -1104,7 +1104,7 @@ declare global {
|
|
|
1104
1104
|
interface ScriptCommon extends ObjectCommon {
|
|
1105
1105
|
name: string;
|
|
1106
1106
|
/** Defines the type of the script, e.g., TypeScript/ts, Javascript/js or Blockly */
|
|
1107
|
-
engineType: 'TypeScript/ts' | 'Blockly' | 'Rules' | 'Javascript/js';
|
|
1107
|
+
engineType: 'TypeScript/ts' | 'Blockly' | 'Rules' | 'FBD' | 'Javascript/js';
|
|
1108
1108
|
/** The instance id of the instance which executes this script */
|
|
1109
1109
|
engine: string;
|
|
1110
1110
|
/** The source code of this script */
|
package/build/lib/mirror.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Mirror = void 0;
|
|
4
4
|
const node_fs_1 = require("node:fs");
|
|
5
5
|
const node_path_1 = require("node:path");
|
|
6
|
+
const graph_1 = require("./fb/graph");
|
|
6
7
|
const tools_1 = require("./tools");
|
|
7
8
|
const MODE_0777 = 511;
|
|
8
9
|
class Mirror {
|
|
@@ -172,6 +173,9 @@ class Mirror {
|
|
|
172
173
|
if (fileName.endsWith('.ts')) {
|
|
173
174
|
return 'TypeScript/ts';
|
|
174
175
|
}
|
|
176
|
+
if ((0, graph_1.isFbdSource)(data)) {
|
|
177
|
+
return 'FBD';
|
|
178
|
+
}
|
|
175
179
|
return Mirror.isBlockly(data) ? 'Blockly' : Mirror.isRules(data) ? 'Rules' : 'Javascript/js';
|
|
176
180
|
}
|
|
177
181
|
updateFolderTime(id) {
|
|
@@ -457,7 +461,16 @@ class Mirror {
|
|
|
457
461
|
this.dbList[id].ts = ts;
|
|
458
462
|
this.log.debug(`Update script ${id} in DB`);
|
|
459
463
|
this.dbList[id].from = this.from;
|
|
460
|
-
|
|
464
|
+
/*
|
|
465
|
+
* Only the source. Writing the whole cached object would carry everything
|
|
466
|
+
* else in it back into the database as well, and a file says nothing about
|
|
467
|
+
* whether its script is enabled or which instance runs it (#2396). Together
|
|
468
|
+
* with the cache being kept in step above this holds even when the object
|
|
469
|
+
* changes while a write is on its way.
|
|
470
|
+
*/
|
|
471
|
+
void this.adapter.extendForeignObject(id, {
|
|
472
|
+
common: { source },
|
|
473
|
+
});
|
|
461
474
|
}
|
|
462
475
|
else {
|
|
463
476
|
this.dbList[id].ts = ts;
|
|
@@ -538,28 +551,20 @@ class Mirror {
|
|
|
538
551
|
}
|
|
539
552
|
}
|
|
540
553
|
else if (obj.type === 'script' && id.startsWith('script.js.')) {
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
else {
|
|
556
|
-
// new script
|
|
557
|
-
this.dbList[id] = obj;
|
|
558
|
-
if (!this.diskList[id] || this.diskList[id].source !== obj.common.source) {
|
|
559
|
-
this.log.debug(`Create ${file} on disk`);
|
|
560
|
-
this.diskList[id] = { ts: 0, source: obj.common.source, name: file };
|
|
561
|
-
this._writeFile(id);
|
|
562
|
-
}
|
|
554
|
+
const known = this.dbList[id];
|
|
555
|
+
/*
|
|
556
|
+
* The cache follows *every* change of the object, not only one that touched the source.
|
|
557
|
+
* It used to be refreshed only on a changed source, so enabling a script in the admin or
|
|
558
|
+
* moving it to another instance left a stale copy here - and the next change of the file
|
|
559
|
+
* on disk wrote that copy back, which silently disabled the script again and pulled it
|
|
560
|
+
* back to its old instance (#2396).
|
|
561
|
+
*/
|
|
562
|
+
this.dbList[id] = obj;
|
|
563
|
+
const sourceChanged = !known || known.common.source !== obj.common.source;
|
|
564
|
+
if (sourceChanged || !this.diskList[id] || this.diskList[id].source !== obj.common.source) {
|
|
565
|
+
this.log.debug(`${known ? 'Update' : 'Create'} ${file} on disk`);
|
|
566
|
+
this.diskList[id] = { ts: 0, source: obj.common.source, name: file };
|
|
567
|
+
this._writeFile(id);
|
|
563
568
|
}
|
|
564
569
|
this.dbList[id].ts = Date.now();
|
|
565
570
|
}
|