@xiuchang-midscene/shared 2.0.2
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 +9 -0
- package/dist/es/baseDB.mjs +109 -0
- package/dist/es/baseDB.mjs.bak +109 -0
- package/dist/es/build/copy-static.mjs +31 -0
- package/dist/es/build/copy-static.mjs.bak +31 -0
- package/dist/es/build/rspack-config.mjs +4 -0
- package/dist/es/build/rspack-config.mjs.bak +4 -0
- package/dist/es/cli/cli-runner.mjs +140 -0
- package/dist/es/cli/cli-runner.mjs.bak +140 -0
- package/dist/es/cli/index.mjs +2 -0
- package/dist/es/cli/index.mjs.bak +2 -0
- package/dist/es/common.mjs +37 -0
- package/dist/es/common.mjs.bak +37 -0
- package/dist/es/constants/example-code.mjs +223 -0
- package/dist/es/constants/example-code.mjs.bak +223 -0
- package/dist/es/constants/index.mjs +23 -0
- package/dist/es/constants/index.mjs.bak +23 -0
- package/dist/es/env/basic.mjs +6 -0
- package/dist/es/env/basic.mjs.bak +6 -0
- package/dist/es/env/constants.mjs +70 -0
- package/dist/es/env/constants.mjs.bak +70 -0
- package/dist/es/env/global-config-manager.mjs +94 -0
- package/dist/es/env/global-config-manager.mjs.bak +94 -0
- package/dist/es/env/helper.mjs +43 -0
- package/dist/es/env/helper.mjs.bak +43 -0
- package/dist/es/env/index.mjs +5 -0
- package/dist/es/env/index.mjs.bak +5 -0
- package/dist/es/env/init-debug.mjs +18 -0
- package/dist/es/env/init-debug.mjs.bak +18 -0
- package/dist/es/env/model-config-manager.mjs +79 -0
- package/dist/es/env/model-config-manager.mjs.bak +79 -0
- package/dist/es/env/parse-model-config.mjs +132 -0
- package/dist/es/env/parse-model-config.mjs.bak +132 -0
- package/dist/es/env/types.mjs +220 -0
- package/dist/es/env/types.mjs.bak +220 -0
- package/dist/es/env/utils.mjs +26 -0
- package/dist/es/env/utils.mjs.bak +26 -0
- package/dist/es/extractor/constants.mjs +2 -0
- package/dist/es/extractor/constants.mjs.bak +2 -0
- package/dist/es/extractor/debug.mjs +6 -0
- package/dist/es/extractor/debug.mjs.bak +6 -0
- package/dist/es/extractor/dom-util.mjs +92 -0
- package/dist/es/extractor/dom-util.mjs.bak +92 -0
- package/dist/es/extractor/index.mjs +5 -0
- package/dist/es/extractor/index.mjs.bak +5 -0
- package/dist/es/extractor/locator.mjs +250 -0
- package/dist/es/extractor/locator.mjs.bak +250 -0
- package/dist/es/extractor/tree.mjs +78 -0
- package/dist/es/extractor/tree.mjs.bak +78 -0
- package/dist/es/extractor/util.mjs +245 -0
- package/dist/es/extractor/util.mjs.bak +245 -0
- package/dist/es/extractor/web-extractor.mjs +303 -0
- package/dist/es/extractor/web-extractor.mjs.bak +303 -0
- package/dist/es/img/box-select.mjs +824 -0
- package/dist/es/img/box-select.mjs.bak +824 -0
- package/dist/es/img/canvas-fallback.mjs +238 -0
- package/dist/es/img/canvas-fallback.mjs.bak +238 -0
- package/dist/es/img/get-photon.mjs +45 -0
- package/dist/es/img/get-photon.mjs.bak +45 -0
- package/dist/es/img/get-sharp.mjs +11 -0
- package/dist/es/img/get-sharp.mjs.bak +11 -0
- package/dist/es/img/index.mjs +4 -0
- package/dist/es/img/index.mjs.bak +4 -0
- package/dist/es/img/info.mjs +29 -0
- package/dist/es/img/info.mjs.bak +29 -0
- package/dist/es/img/transform.mjs +295 -0
- package/dist/es/img/transform.mjs.bak +295 -0
- package/dist/es/index.mjs +4 -0
- package/dist/es/index.mjs.bak +4 -0
- package/dist/es/logger.mjs +64 -0
- package/dist/es/logger.mjs.bak +64 -0
- package/dist/es/mcp/base-server.mjs +281 -0
- package/dist/es/mcp/base-server.mjs.bak +281 -0
- package/dist/es/mcp/base-tools.mjs +91 -0
- package/dist/es/mcp/base-tools.mjs.bak +91 -0
- package/dist/es/mcp/chrome-path.mjs +35 -0
- package/dist/es/mcp/chrome-path.mjs.bak +35 -0
- package/dist/es/mcp/index.mjs +7 -0
- package/dist/es/mcp/index.mjs.bak +7 -0
- package/dist/es/mcp/inject-report-html-plugin.mjs +53 -0
- package/dist/es/mcp/inject-report-html-plugin.mjs.bak +53 -0
- package/dist/es/mcp/launcher-helper.mjs +52 -0
- package/dist/es/mcp/launcher-helper.mjs.bak +52 -0
- package/dist/es/mcp/tool-generator.mjs +297 -0
- package/dist/es/mcp/tool-generator.mjs.bak +297 -0
- package/dist/es/mcp/types.mjs +3 -0
- package/dist/es/mcp/types.mjs.bak +3 -0
- package/dist/es/node/fs.mjs +44 -0
- package/dist/es/node/fs.mjs.bak +44 -0
- package/dist/es/node/index.mjs +2 -0
- package/dist/es/node/index.mjs.bak +2 -0
- package/dist/es/node/port.mjs +24 -0
- package/dist/es/node/port.mjs.bak +24 -0
- package/dist/es/oss/demo.mjs +30 -0
- package/dist/es/oss/demo.mjs.bak +30 -0
- package/dist/es/oss/index.mjs +90 -0
- package/dist/es/oss/index.mjs.bak +90 -0
- package/dist/es/polyfills/async-hooks.mjs +2 -0
- package/dist/es/polyfills/async-hooks.mjs.bak +2 -0
- package/dist/es/polyfills/index.mjs +1 -0
- package/dist/es/polyfills/index.mjs.bak +1 -0
- package/dist/es/types/index.mjs +3 -0
- package/dist/es/types/index.mjs.bak +3 -0
- package/dist/es/us-keyboard-layout.mjs +1414 -0
- package/dist/es/us-keyboard-layout.mjs.LICENSE.txt +5 -0
- package/dist/es/us-keyboard-layout.mjs.bak +1414 -0
- package/dist/es/utils.mjs +72 -0
- package/dist/es/utils.mjs.bak +72 -0
- package/dist/es/zod-schema-utils.mjs +54 -0
- package/dist/es/zod-schema-utils.mjs.bak +54 -0
- package/dist/lib/baseDB.js +149 -0
- package/dist/lib/baseDB.js.bak +149 -0
- package/dist/lib/build/copy-static.js +79 -0
- package/dist/lib/build/copy-static.js.bak +79 -0
- package/dist/lib/build/rspack-config.js +38 -0
- package/dist/lib/build/rspack-config.js.bak +38 -0
- package/dist/lib/cli/cli-runner.js +196 -0
- package/dist/lib/cli/cli-runner.js.bak +196 -0
- package/dist/lib/cli/index.js +48 -0
- package/dist/lib/cli/index.js.bak +48 -0
- package/dist/lib/common.js +93 -0
- package/dist/lib/common.js.bak +93 -0
- package/dist/lib/constants/example-code.js +260 -0
- package/dist/lib/constants/example-code.js.bak +260 -0
- package/dist/lib/constants/index.js +96 -0
- package/dist/lib/constants/index.js.bak +96 -0
- package/dist/lib/env/basic.js +40 -0
- package/dist/lib/env/basic.js.bak +40 -0
- package/dist/lib/env/constants.js +113 -0
- package/dist/lib/env/constants.js.bak +113 -0
- package/dist/lib/env/global-config-manager.js +128 -0
- package/dist/lib/env/global-config-manager.js.bak +128 -0
- package/dist/lib/env/helper.js +80 -0
- package/dist/lib/env/helper.js.bak +80 -0
- package/dist/lib/env/index.js +90 -0
- package/dist/lib/env/index.js.bak +90 -0
- package/dist/lib/env/init-debug.js +52 -0
- package/dist/lib/env/init-debug.js.bak +52 -0
- package/dist/lib/env/model-config-manager.js +113 -0
- package/dist/lib/env/model-config-manager.js.bak +113 -0
- package/dist/lib/env/parse-model-config.js +178 -0
- package/dist/lib/env/parse-model-config.js.bak +178 -0
- package/dist/lib/env/types.js +554 -0
- package/dist/lib/env/types.js.bak +554 -0
- package/dist/lib/env/utils.js +72 -0
- package/dist/lib/env/utils.js.bak +72 -0
- package/dist/lib/extractor/constants.js +42 -0
- package/dist/lib/extractor/constants.js.bak +42 -0
- package/dist/lib/extractor/debug.js +12 -0
- package/dist/lib/extractor/debug.js.bak +12 -0
- package/dist/lib/extractor/dom-util.js +153 -0
- package/dist/lib/extractor/dom-util.js.bak +153 -0
- package/dist/lib/extractor/index.js +81 -0
- package/dist/lib/extractor/index.js.bak +81 -0
- package/dist/lib/extractor/locator.js +296 -0
- package/dist/lib/extractor/locator.js.bak +296 -0
- package/dist/lib/extractor/tree.js +124 -0
- package/dist/lib/extractor/tree.js.bak +124 -0
- package/dist/lib/extractor/util.js +336 -0
- package/dist/lib/extractor/util.js.bak +336 -0
- package/dist/lib/extractor/web-extractor.js +349 -0
- package/dist/lib/extractor/web-extractor.js.bak +349 -0
- package/dist/lib/img/box-select.js +875 -0
- package/dist/lib/img/box-select.js.bak +875 -0
- package/dist/lib/img/canvas-fallback.js +305 -0
- package/dist/lib/img/canvas-fallback.js.bak +305 -0
- package/dist/lib/img/get-photon.js +82 -0
- package/dist/lib/img/get-photon.js.bak +82 -0
- package/dist/lib/img/get-sharp.js +45 -0
- package/dist/lib/img/get-sharp.js.bak +45 -0
- package/dist/lib/img/index.js +95 -0
- package/dist/lib/img/index.js.bak +95 -0
- package/dist/lib/img/info.js +83 -0
- package/dist/lib/img/info.js.bak +83 -0
- package/dist/lib/img/transform.js +387 -0
- package/dist/lib/img/transform.js.bak +387 -0
- package/dist/lib/index.js +47 -0
- package/dist/lib/index.js.bak +47 -0
- package/dist/lib/logger.js +114 -0
- package/dist/lib/logger.js.bak +114 -0
- package/dist/lib/mcp/base-server.js +331 -0
- package/dist/lib/mcp/base-server.js.bak +331 -0
- package/dist/lib/mcp/base-tools.js +125 -0
- package/dist/lib/mcp/base-tools.js.bak +125 -0
- package/dist/lib/mcp/chrome-path.js +72 -0
- package/dist/lib/mcp/chrome-path.js.bak +72 -0
- package/dist/lib/mcp/index.js +100 -0
- package/dist/lib/mcp/index.js.bak +100 -0
- package/dist/lib/mcp/inject-report-html-plugin.js +98 -0
- package/dist/lib/mcp/inject-report-html-plugin.js.bak +98 -0
- package/dist/lib/mcp/launcher-helper.js +86 -0
- package/dist/lib/mcp/launcher-helper.js.bak +86 -0
- package/dist/lib/mcp/tool-generator.js +334 -0
- package/dist/lib/mcp/tool-generator.js.bak +334 -0
- package/dist/lib/mcp/types.js +40 -0
- package/dist/lib/mcp/types.js.bak +40 -0
- package/dist/lib/node/fs.js +97 -0
- package/dist/lib/node/fs.js.bak +97 -0
- package/dist/lib/node/index.js +65 -0
- package/dist/lib/node/index.js.bak +65 -0
- package/dist/lib/node/port.js +61 -0
- package/dist/lib/node/port.js.bak +61 -0
- package/dist/lib/oss/demo.js +36 -0
- package/dist/lib/oss/demo.js.bak +36 -0
- package/dist/lib/oss/index.js +138 -0
- package/dist/lib/oss/index.js.bak +138 -0
- package/dist/lib/polyfills/async-hooks.js +36 -0
- package/dist/lib/polyfills/async-hooks.js.bak +36 -0
- package/dist/lib/polyfills/index.js +58 -0
- package/dist/lib/polyfills/index.js.bak +58 -0
- package/dist/lib/types/index.js +37 -0
- package/dist/lib/types/index.js.bak +37 -0
- package/dist/lib/us-keyboard-layout.js +1457 -0
- package/dist/lib/us-keyboard-layout.js.LICENSE.txt +5 -0
- package/dist/lib/us-keyboard-layout.js.bak +1457 -0
- package/dist/lib/utils.js +148 -0
- package/dist/lib/utils.js.bak +148 -0
- package/dist/lib/zod-schema-utils.js +97 -0
- package/dist/lib/zod-schema-utils.js.bak +97 -0
- package/dist/types/baseDB.d.ts +25 -0
- package/dist/types/baseDB.d.ts.bak +25 -0
- package/dist/types/build/copy-static.d.ts +31 -0
- package/dist/types/build/copy-static.d.ts.bak +31 -0
- package/dist/types/build/rspack-config.d.ts +8 -0
- package/dist/types/build/rspack-config.d.ts.bak +8 -0
- package/dist/types/cli/cli-runner.d.ts +14 -0
- package/dist/types/cli/cli-runner.d.ts.bak +14 -0
- package/dist/types/cli/index.d.ts +2 -0
- package/dist/types/cli/index.d.ts.bak +2 -0
- package/dist/types/common.d.ts +12 -0
- package/dist/types/common.d.ts.bak +12 -0
- package/dist/types/constants/example-code.d.ts +2 -0
- package/dist/types/constants/example-code.d.ts.bak +2 -0
- package/dist/types/constants/index.d.ts +21 -0
- package/dist/types/constants/index.d.ts.bak +21 -0
- package/dist/types/env/basic.d.ts +6 -0
- package/dist/types/env/basic.d.ts.bak +6 -0
- package/dist/types/env/constants.d.ts +40 -0
- package/dist/types/env/constants.d.ts.bak +40 -0
- package/dist/types/env/global-config-manager.d.ts +32 -0
- package/dist/types/env/global-config-manager.d.ts.bak +32 -0
- package/dist/types/env/helper.d.ts +4 -0
- package/dist/types/env/helper.d.ts.bak +4 -0
- package/dist/types/env/index.d.ts +4 -0
- package/dist/types/env/index.d.ts.bak +4 -0
- package/dist/types/env/init-debug.d.ts +1 -0
- package/dist/types/env/init-debug.d.ts.bak +1 -0
- package/dist/types/env/model-config-manager.d.ts +25 -0
- package/dist/types/env/model-config-manager.d.ts.bak +25 -0
- package/dist/types/env/parse-model-config.d.ts +31 -0
- package/dist/types/env/parse-model-config.d.ts.bak +31 -0
- package/dist/types/env/types.d.ts +318 -0
- package/dist/types/env/types.d.ts.bak +318 -0
- package/dist/types/env/utils.d.ts +38 -0
- package/dist/types/env/utils.d.ts.bak +38 -0
- package/dist/types/extractor/constants.d.ts +1 -0
- package/dist/types/extractor/constants.d.ts.bak +1 -0
- package/dist/types/extractor/debug.d.ts +1 -0
- package/dist/types/extractor/debug.d.ts.bak +1 -0
- package/dist/types/extractor/dom-util.d.ts +56 -0
- package/dist/types/extractor/dom-util.d.ts.bak +56 -0
- package/dist/types/extractor/index.d.ts +32 -0
- package/dist/types/extractor/index.d.ts.bak +32 -0
- package/dist/types/extractor/locator.d.ts +9 -0
- package/dist/types/extractor/locator.d.ts.bak +9 -0
- package/dist/types/extractor/tree.d.ts +6 -0
- package/dist/types/extractor/tree.d.ts.bak +6 -0
- package/dist/types/extractor/util.d.ts +47 -0
- package/dist/types/extractor/util.d.ts.bak +47 -0
- package/dist/types/extractor/web-extractor.d.ts +19 -0
- package/dist/types/extractor/web-extractor.d.ts.bak +19 -0
- package/dist/types/img/box-select.d.ts +26 -0
- package/dist/types/img/box-select.d.ts.bak +26 -0
- package/dist/types/img/canvas-fallback.d.ts +105 -0
- package/dist/types/img/canvas-fallback.d.ts.bak +105 -0
- package/dist/types/img/get-photon.d.ts +19 -0
- package/dist/types/img/get-photon.d.ts.bak +19 -0
- package/dist/types/img/get-sharp.d.ts +3 -0
- package/dist/types/img/get-sharp.d.ts.bak +3 -0
- package/dist/types/img/index.d.ts +3 -0
- package/dist/types/img/index.d.ts.bak +3 -0
- package/dist/types/img/info.d.ts +29 -0
- package/dist/types/img/info.d.ts.bak +29 -0
- package/dist/types/img/transform.d.ts +107 -0
- package/dist/types/img/transform.d.ts.bak +107 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.bak +4 -0
- package/dist/types/logger.d.ts +5 -0
- package/dist/types/logger.d.ts.bak +5 -0
- package/dist/types/mcp/base-server.d.ts +93 -0
- package/dist/types/mcp/base-server.d.ts.bak +93 -0
- package/dist/types/mcp/base-tools.d.ts +79 -0
- package/dist/types/mcp/base-tools.d.ts.bak +79 -0
- package/dist/types/mcp/chrome-path.d.ts +2 -0
- package/dist/types/mcp/chrome-path.d.ts.bak +2 -0
- package/dist/types/mcp/index.d.ts +7 -0
- package/dist/types/mcp/index.d.ts.bak +7 -0
- package/dist/types/mcp/inject-report-html-plugin.d.ts +18 -0
- package/dist/types/mcp/inject-report-html-plugin.d.ts.bak +18 -0
- package/dist/types/mcp/launcher-helper.d.ts +94 -0
- package/dist/types/mcp/launcher-helper.d.ts.bak +94 -0
- package/dist/types/mcp/tool-generator.d.ts +10 -0
- package/dist/types/mcp/tool-generator.d.ts.bak +10 -0
- package/dist/types/mcp/types.d.ts +103 -0
- package/dist/types/mcp/types.d.ts.bak +103 -0
- package/dist/types/node/fs.d.ts +15 -0
- package/dist/types/node/fs.d.ts.bak +15 -0
- package/dist/types/node/index.d.ts +2 -0
- package/dist/types/node/index.d.ts.bak +2 -0
- package/dist/types/node/port.d.ts +8 -0
- package/dist/types/node/port.d.ts.bak +8 -0
- package/dist/types/oss/demo.d.ts +1 -0
- package/dist/types/oss/demo.d.ts.bak +1 -0
- package/dist/types/oss/index.d.ts +34 -0
- package/dist/types/oss/index.d.ts.bak +34 -0
- package/dist/types/polyfills/async-hooks.d.ts +6 -0
- package/dist/types/polyfills/async-hooks.d.ts.bak +6 -0
- package/dist/types/polyfills/index.d.ts +4 -0
- package/dist/types/polyfills/index.d.ts.bak +4 -0
- package/dist/types/types/index.d.ts +34 -0
- package/dist/types/types/index.d.ts.bak +34 -0
- package/dist/types/us-keyboard-layout.d.ts +32 -0
- package/dist/types/us-keyboard-layout.d.ts.bak +32 -0
- package/dist/types/utils.d.ts +34 -0
- package/dist/types/utils.d.ts.bak +34 -0
- package/dist/types/zod-schema-utils.d.ts +23 -0
- package/dist/types/zod-schema-utils.d.ts.bak +23 -0
- package/package.json +132 -0
- package/src/baseDB.ts +158 -0
- package/src/build/copy-static.ts +68 -0
- package/src/build/rspack-config.ts +12 -0
- package/src/cli/cli-runner.ts +224 -0
- package/src/cli/index.ts +8 -0
- package/src/common.ts +67 -0
- package/src/constants/example-code.ts +223 -0
- package/src/constants/index.ts +29 -0
- package/src/env/basic.ts +12 -0
- package/src/env/constants.ts +234 -0
- package/src/env/global-config-manager.ts +191 -0
- package/src/env/helper.ts +58 -0
- package/src/env/index.ts +4 -0
- package/src/env/init-debug.ts +34 -0
- package/src/env/model-config-manager.ts +149 -0
- package/src/env/parse-model-config.ts +294 -0
- package/src/env/types.ts +547 -0
- package/src/env/utils.ts +89 -0
- package/src/extractor/constants.ts +5 -0
- package/src/extractor/debug.ts +10 -0
- package/src/extractor/dom-util.ts +226 -0
- package/src/extractor/index.ts +48 -0
- package/src/extractor/locator.ts +469 -0
- package/src/extractor/tree.ts +179 -0
- package/src/extractor/util.ts +482 -0
- package/src/extractor/web-extractor.ts +481 -0
- package/src/img/box-select.ts +588 -0
- package/src/img/canvas-fallback.ts +393 -0
- package/src/img/get-photon.ts +108 -0
- package/src/img/get-sharp.ts +18 -0
- package/src/img/index.ts +26 -0
- package/src/img/info.ts +75 -0
- package/src/img/transform.ts +594 -0
- package/src/index.ts +8 -0
- package/src/logger.ts +96 -0
- package/src/mcp/base-server.ts +502 -0
- package/src/mcp/base-tools.ts +185 -0
- package/src/mcp/chrome-path.ts +48 -0
- package/src/mcp/index.ts +7 -0
- package/src/mcp/inject-report-html-plugin.ts +119 -0
- package/src/mcp/launcher-helper.ts +200 -0
- package/src/mcp/tool-generator.ts +429 -0
- package/src/mcp/types.ts +112 -0
- package/src/node/fs.ts +84 -0
- package/src/node/index.ts +2 -0
- package/src/node/port.ts +37 -0
- package/src/oss/demo.ts +61 -0
- package/src/oss/index.ts +187 -0
- package/src/polyfills/async-hooks.ts +6 -0
- package/src/polyfills/index.ts +4 -0
- package/src/types/index.ts +52 -0
- package/src/us-keyboard-layout.ts +723 -0
- package/src/utils.ts +149 -0
- package/src/zod-schema-utils.ts +133 -0
package/src/utils.ts
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { sha256 } from 'js-sha256';
|
|
2
|
+
import { v4 as generateUUID } from 'uuid';
|
|
3
|
+
|
|
4
|
+
declare const WorkerGlobalScope: any;
|
|
5
|
+
|
|
6
|
+
export const ifInBrowser = typeof window !== 'undefined';
|
|
7
|
+
export const ifInWorker = typeof WorkerGlobalScope !== 'undefined';
|
|
8
|
+
export const ifInNode =
|
|
9
|
+
typeof process !== 'undefined' && process.versions?.node;
|
|
10
|
+
|
|
11
|
+
export function uuid(): string {
|
|
12
|
+
return generateUUID();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const hashMap: Record<string, string> = {}; // id - combined
|
|
16
|
+
|
|
17
|
+
export function generateHashId(rect: any, content = ''): string {
|
|
18
|
+
// Combine the input into a string
|
|
19
|
+
const combined = JSON.stringify({
|
|
20
|
+
content,
|
|
21
|
+
rect,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// Generates the sha-256 hash value and converts to a-z chars
|
|
25
|
+
let sliceLength = 5;
|
|
26
|
+
let slicedHash = '';
|
|
27
|
+
const hashHex = sha256.create().update(combined).hex();
|
|
28
|
+
|
|
29
|
+
// Convert hex to a-z by mapping each hex char to a letter
|
|
30
|
+
const toLetters = (hex: string): string => {
|
|
31
|
+
return hex
|
|
32
|
+
.split('')
|
|
33
|
+
.map((char) => {
|
|
34
|
+
const code = Number.parseInt(char, 16);
|
|
35
|
+
return String.fromCharCode(97 + (code % 26)); // 97 is 'a' in ASCII
|
|
36
|
+
})
|
|
37
|
+
.join('');
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const hashLetters = toLetters(hashHex);
|
|
41
|
+
|
|
42
|
+
while (sliceLength < hashLetters.length - 1) {
|
|
43
|
+
slicedHash = hashLetters.slice(0, sliceLength);
|
|
44
|
+
if (hashMap[slicedHash] && hashMap[slicedHash] !== combined) {
|
|
45
|
+
sliceLength++;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
hashMap[slicedHash] = combined;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
return slicedHash;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A utility function that asserts a condition and throws an error with a message if the condition is false.
|
|
56
|
+
*
|
|
57
|
+
* @param condition - The condition to assert
|
|
58
|
+
* @param message - The error message to throw if the condition is false
|
|
59
|
+
* @throws Error with the provided message if the condition is false
|
|
60
|
+
*/
|
|
61
|
+
export function assert(condition: any, message?: string): asserts condition {
|
|
62
|
+
if (!condition) {
|
|
63
|
+
throw new Error(message || 'Assertion failed');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
let isMcp = false;
|
|
68
|
+
|
|
69
|
+
export function setIsMcp(value: boolean) {
|
|
70
|
+
isMcp = value;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//mcp need use obj format to console msg: https://github.com/modelcontextprotocol/typescript-sdk/issues/244
|
|
74
|
+
export function logMsg(...message: Parameters<typeof console.log>) {
|
|
75
|
+
if (!isMcp) {
|
|
76
|
+
console.log(...message);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export async function repeat(
|
|
81
|
+
times: number,
|
|
82
|
+
fn: (index: number) => Promise<void>,
|
|
83
|
+
) {
|
|
84
|
+
for (let i = 0; i < times; i++) {
|
|
85
|
+
await fn(i);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const REGEXP_LT = /</g;
|
|
90
|
+
const REGEXP_GT = />/g;
|
|
91
|
+
const REGEXP_LT_ESCAPE = '__midscene_lt__';
|
|
92
|
+
const REGEXP_GT_ESCAPE = '__midscene_gt__';
|
|
93
|
+
|
|
94
|
+
export const escapeScriptTag = (html: string) => {
|
|
95
|
+
return html
|
|
96
|
+
.replace(REGEXP_LT, REGEXP_LT_ESCAPE)
|
|
97
|
+
.replace(REGEXP_GT, REGEXP_GT_ESCAPE);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export const antiEscapeScriptTag = (html: string) => {
|
|
101
|
+
const REGEXP_LT = new RegExp(REGEXP_LT_ESCAPE, 'g');
|
|
102
|
+
const REGEXP_GT = new RegExp(REGEXP_GT_ESCAPE, 'g');
|
|
103
|
+
|
|
104
|
+
return html.replace(REGEXP_LT, '<').replace(REGEXP_GT, '>');
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export function replaceIllegalPathCharsAndSpace(str: string) {
|
|
108
|
+
// Only replace characters that are illegal in filenames, but preserve path separators
|
|
109
|
+
return str.replace(/[:*?"<>|# ]/g, '-');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Check if a value is a plain object (not null, not array, not other types)
|
|
114
|
+
*/
|
|
115
|
+
export function isPlainObject(value: unknown): value is Record<string, any> {
|
|
116
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Normalize string for comparison: lowercase and remove spaces, dashes, and underscores.
|
|
121
|
+
* Useful for flexible app name matching.
|
|
122
|
+
*/
|
|
123
|
+
export function normalizeForComparison(str: string): string {
|
|
124
|
+
return str.toLowerCase().replace(/[\s\-_]+/g, '');
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Merge and normalize app name mappings.
|
|
129
|
+
* Keys are normalized (lowercase, no spaces/dashes/underscores) for flexible matching.
|
|
130
|
+
* User-provided mapping takes precedence over default mapping.
|
|
131
|
+
*/
|
|
132
|
+
export function mergeAndNormalizeAppNameMapping(
|
|
133
|
+
defaultMapping: Record<string, string>,
|
|
134
|
+
userMapping?: Record<string, string>,
|
|
135
|
+
): Record<string, string> {
|
|
136
|
+
const result: Record<string, string> = {};
|
|
137
|
+
|
|
138
|
+
for (const [key, value] of Object.entries(defaultMapping)) {
|
|
139
|
+
result[normalizeForComparison(key)] = value;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (userMapping) {
|
|
143
|
+
for (const [key, value] of Object.entries(userMapping)) {
|
|
144
|
+
result[normalizeForComparison(key)] = value;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Recursively unwrap optional, nullable, default, and effects wrapper types
|
|
5
|
+
* to get the actual inner Zod type
|
|
6
|
+
*/
|
|
7
|
+
export function unwrapZodField(field: unknown): unknown {
|
|
8
|
+
const f = field as {
|
|
9
|
+
_def?: { typeName?: string; innerType?: unknown; schema?: unknown };
|
|
10
|
+
};
|
|
11
|
+
if (!f._def) return f;
|
|
12
|
+
|
|
13
|
+
const typeName = f._def.typeName;
|
|
14
|
+
|
|
15
|
+
// Handle wrapper types that have innerType
|
|
16
|
+
if (
|
|
17
|
+
typeName === 'ZodOptional' ||
|
|
18
|
+
typeName === 'ZodNullable' ||
|
|
19
|
+
typeName === 'ZodDefault'
|
|
20
|
+
) {
|
|
21
|
+
return unwrapZodField(f._def.innerType);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Handle ZodEffects (transformations, refinements, preprocessors)
|
|
25
|
+
if (typeName === 'ZodEffects') {
|
|
26
|
+
if (f._def.schema) {
|
|
27
|
+
return unwrapZodField(f._def.schema);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return f;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Check if a field is a Midscene locator field
|
|
36
|
+
* Checks for either:
|
|
37
|
+
* 1. midscene_location_field_flag in shape (result schema)
|
|
38
|
+
* 2. prompt field in shape (input schema)
|
|
39
|
+
*/
|
|
40
|
+
export function isMidsceneLocatorField(field: unknown): boolean {
|
|
41
|
+
const actualField = unwrapZodField(field) as {
|
|
42
|
+
_def?: { typeName?: string; shape?: () => Record<string, unknown> };
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
if (actualField._def?.typeName === 'ZodObject') {
|
|
46
|
+
const shape = actualField._def.shape?.();
|
|
47
|
+
if (shape) {
|
|
48
|
+
// Method 1: Check for the location field flag (for result schema)
|
|
49
|
+
if ('midscene_location_field_flag' in shape) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
// Method 2: Check if it's the input schema by checking for 'prompt' field
|
|
53
|
+
if ('prompt' in shape && shape.prompt) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Get type name string from a Zod schema field
|
|
63
|
+
* @param field - Zod schema field
|
|
64
|
+
* @param locatorTypeDescription - Optional description for MidsceneLocation fields (used by core)
|
|
65
|
+
*/
|
|
66
|
+
export function getZodTypeName(
|
|
67
|
+
field: unknown,
|
|
68
|
+
locatorTypeDescription?: string,
|
|
69
|
+
): string {
|
|
70
|
+
const actualField = unwrapZodField(field) as {
|
|
71
|
+
_def?: { typeName?: string; values?: unknown[]; options?: unknown[] };
|
|
72
|
+
};
|
|
73
|
+
const fieldTypeName = actualField._def?.typeName;
|
|
74
|
+
|
|
75
|
+
if (fieldTypeName === 'ZodString') return 'string';
|
|
76
|
+
if (fieldTypeName === 'ZodNumber') return 'number';
|
|
77
|
+
if (fieldTypeName === 'ZodBoolean') return 'boolean';
|
|
78
|
+
if (fieldTypeName === 'ZodArray') return 'array';
|
|
79
|
+
if (fieldTypeName === 'ZodObject') {
|
|
80
|
+
// Check if this is a Midscene locator field
|
|
81
|
+
if (isMidsceneLocatorField(actualField)) {
|
|
82
|
+
return locatorTypeDescription || 'object';
|
|
83
|
+
}
|
|
84
|
+
return 'object';
|
|
85
|
+
}
|
|
86
|
+
if (fieldTypeName === 'ZodEnum') {
|
|
87
|
+
const values =
|
|
88
|
+
(actualField._def?.values as unknown[] | undefined)
|
|
89
|
+
?.map((option: unknown) => String(`'${option}'`))
|
|
90
|
+
.join(', ') ?? 'enum';
|
|
91
|
+
return `enum(${values})`;
|
|
92
|
+
}
|
|
93
|
+
// Handle ZodUnion by listing all option types
|
|
94
|
+
if (fieldTypeName === 'ZodUnion') {
|
|
95
|
+
const options = actualField._def?.options as unknown[] | undefined;
|
|
96
|
+
if (options && options.length > 0) {
|
|
97
|
+
const types = options.map((opt: unknown) =>
|
|
98
|
+
getZodTypeName(opt, locatorTypeDescription),
|
|
99
|
+
);
|
|
100
|
+
return types.join(' | ');
|
|
101
|
+
}
|
|
102
|
+
return 'union';
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return 'unknown';
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Get description from a Zod schema field
|
|
110
|
+
*/
|
|
111
|
+
export function getZodDescription(field: z.ZodTypeAny): string | null {
|
|
112
|
+
// Check for direct description on the original field (wrapper may have description)
|
|
113
|
+
if ('description' in field) {
|
|
114
|
+
return (field as { description?: string }).description || null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const actualField = unwrapZodField(field) as {
|
|
118
|
+
description?: string;
|
|
119
|
+
_def?: { typeName?: string; shape?: () => Record<string, unknown> };
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
// Check for description on the unwrapped field
|
|
123
|
+
if ('description' in actualField) {
|
|
124
|
+
return actualField.description || null;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Check for MidsceneLocation fields and add description
|
|
128
|
+
if (isMidsceneLocatorField(actualField)) {
|
|
129
|
+
return 'Location information for the target element';
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return null;
|
|
133
|
+
}
|