claude-in-mobile 3.13.0 → 4.0.0-dev
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 +61 -574
- package/dist/a11y/types.d.ts +1 -1
- package/dist/a11y/types.d.ts.map +1 -1
- package/dist/adapters/contracts.d.ts +66 -0
- package/dist/adapters/contracts.d.ts.map +1 -0
- package/dist/adapters/contracts.js +15 -0
- package/dist/adapters/contracts.js.map +1 -0
- package/dist/adapters/index.d.ts +0 -5
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +1 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/autopilot/explorer.js +1 -1
- package/dist/autopilot/explorer.js.map +1 -1
- package/dist/autopilot/healer.d.ts +1 -1
- package/dist/autopilot/healer.d.ts.map +1 -1
- package/dist/autopilot/screen-fingerprint.d.ts +1 -1
- package/dist/autopilot/screen-fingerprint.d.ts.map +1 -1
- package/dist/autopilot/types.d.ts +1 -1
- package/dist/autopilot/types.d.ts.map +1 -1
- package/dist/device/client-cache.d.ts +1 -1
- package/dist/device/client-cache.d.ts.map +1 -1
- package/dist/device/client-cache.js +4 -24
- package/dist/device/client-cache.js.map +1 -1
- package/dist/device/proxies/desktop-facade.d.ts +5 -8
- package/dist/device/proxies/desktop-facade.d.ts.map +1 -1
- package/dist/device/proxies/desktop-facade.js +12 -14
- package/dist/device/proxies/desktop-facade.js.map +1 -1
- package/dist/device-manager.d.ts +16 -16
- package/dist/device-manager.d.ts.map +1 -1
- package/dist/device-manager.js +23 -17
- package/dist/device-manager.js.map +1 -1
- package/dist/index.js +21 -6
- package/dist/index.js.map +1 -1
- package/dist/perf/collector.d.ts +5 -5
- package/dist/perf/collector.d.ts.map +1 -1
- package/dist/perf/collector.js.map +1 -1
- package/dist/plugins/repl/client.d.ts +15 -1
- package/dist/plugins/repl/client.d.ts.map +1 -1
- package/dist/plugins/repl/client.js +65 -8
- package/dist/plugins/repl/client.js.map +1 -1
- package/dist/plugins/repl/index.d.ts +2 -0
- package/dist/plugins/repl/index.d.ts.map +1 -1
- package/dist/plugins/repl/index.js +22 -3
- package/dist/plugins/repl/index.js.map +1 -1
- package/dist/plugins/repl/types.d.ts +6 -0
- package/dist/plugins/repl/types.d.ts.map +1 -1
- package/dist/runtime/bootstrap.d.ts +7 -0
- package/dist/runtime/bootstrap.d.ts.map +1 -1
- package/dist/runtime/bootstrap.js +87 -15
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/cli.d.ts.map +1 -1
- package/dist/runtime/cli.js +14 -0
- package/dist/runtime/cli.js.map +1 -1
- package/dist/runtime/platform-cli.d.ts +24 -0
- package/dist/runtime/platform-cli.d.ts.map +1 -0
- package/dist/runtime/platform-cli.js +116 -0
- package/dist/runtime/platform-cli.js.map +1 -0
- package/dist/runtime/platform-config.d.ts +21 -0
- package/dist/runtime/platform-config.d.ts.map +1 -0
- package/dist/runtime/platform-config.js +71 -0
- package/dist/runtime/platform-config.js.map +1 -0
- package/dist/tools/browser-tools.js.map +1 -1
- package/dist/tools/clipboard-tools.js +1 -1
- package/dist/tools/clipboard-tools.js.map +1 -1
- package/dist/tools/context/hints.d.ts +1 -1
- package/dist/tools/context/hints.d.ts.map +1 -1
- package/dist/tools/context/hints.js +1 -1
- package/dist/tools/context/hints.js.map +1 -1
- package/dist/tools/context/ios-helpers.d.ts +1 -1
- package/dist/tools/context/ios-helpers.d.ts.map +1 -1
- package/dist/tools/context/shared-state-class.d.ts +1 -1
- package/dist/tools/context/shared-state-class.d.ts.map +1 -1
- package/dist/tools/context/shared-state.d.ts +1 -1
- package/dist/tools/context/shared-state.d.ts.map +1 -1
- package/dist/tools/context.d.ts +2 -1
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +17 -9
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/desktop-tools.d.ts.map +1 -1
- package/dist/tools/desktop-tools.js.map +1 -1
- package/dist/tools/flow/common.js +1 -1
- package/dist/tools/flow/common.js.map +1 -1
- package/dist/tools/flow/run.js +1 -1
- package/dist/tools/flow/run.js.map +1 -1
- package/dist/tools/helpers/get-elements.d.ts +1 -1
- package/dist/tools/helpers/get-elements.d.ts.map +1 -1
- package/dist/tools/helpers/get-elements.js +1 -1
- package/dist/tools/helpers/get-elements.js.map +1 -1
- package/dist/tools/helpers/resolve-element.js +1 -1
- package/dist/tools/helpers/resolve-element.js.map +1 -1
- package/dist/tools/screenshot-tools.js +1 -1
- package/dist/tools/screenshot-tools.js.map +1 -1
- package/dist/tools/ui/analyze.js +1 -1
- package/dist/tools/ui/analyze.js.map +1 -1
- package/dist/tools/ui/assert.js +1 -1
- package/dist/tools/ui/assert.js.map +1 -1
- package/dist/tools/ui/find.js +1 -1
- package/dist/tools/ui/find.js.map +1 -1
- package/dist/tools/ui/tree.js +1 -1
- package/dist/tools/ui/tree.js.map +1 -1
- package/dist/tools/ui/wait.js +1 -1
- package/dist/tools/ui/wait.js.map +1 -1
- package/dist/ui-tree/ui-parser/diff-engine.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/diff-engine.js.map +1 -0
- package/dist/ui-tree/ui-parser/element-builder.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/element-builder.js.map +1 -0
- package/dist/ui-tree/ui-parser/element-finders.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/element-finders.js.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/compact.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/compact.js.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/full.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/full.js.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/index.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/index.js.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/semantic.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/semantic.js.map +1 -0
- package/dist/ui-tree/ui-parser/node-parser.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/node-parser.js.map +1 -0
- package/dist/ui-tree/ui-parser/screen-analyzer.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/screen-analyzer.js.map +1 -0
- package/dist/ui-tree/ui-parser/types.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/types.js.map +1 -0
- package/dist/ui-tree/ui-parser.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser.js.map +1 -0
- package/dist/ui-tree/ui-scoring.d.ts.map +1 -0
- package/dist/ui-tree/ui-scoring.js.map +1 -0
- package/dist/ui-tree/ui-tree-cache.d.ts.map +1 -0
- package/dist/ui-tree/ui-tree-cache.js.map +1 -0
- package/dist/utils/image/annotate.d.ts +1 -1
- package/dist/utils/image/annotate.d.ts.map +1 -1
- package/package.json +11 -6
- package/dist/adapters/android-adapter.d.ts +0 -64
- package/dist/adapters/android-adapter.d.ts.map +0 -1
- package/dist/adapters/android-adapter.js +0 -164
- package/dist/adapters/android-adapter.js.map +0 -1
- package/dist/adapters/aurora-adapter.d.ts +0 -56
- package/dist/adapters/aurora-adapter.d.ts.map +0 -1
- package/dist/adapters/aurora-adapter.js +0 -118
- package/dist/adapters/aurora-adapter.js.map +0 -1
- package/dist/adapters/browser-adapter.d.ts +0 -51
- package/dist/adapters/browser-adapter.d.ts.map +0 -1
- package/dist/adapters/browser-adapter.js +0 -223
- package/dist/adapters/browser-adapter.js.map +0 -1
- package/dist/adapters/desktop-adapter.d.ts +0 -64
- package/dist/adapters/desktop-adapter.d.ts.map +0 -1
- package/dist/adapters/desktop-adapter.js +0 -202
- package/dist/adapters/desktop-adapter.js.map +0 -1
- package/dist/adapters/ios-adapter.d.ts +0 -60
- package/dist/adapters/ios-adapter.d.ts.map +0 -1
- package/dist/adapters/ios-adapter.js +0 -146
- package/dist/adapters/ios-adapter.js.map +0 -1
- package/dist/adb/client.d.ts +0 -238
- package/dist/adb/client.d.ts.map +0 -1
- package/dist/adb/client.js +0 -462
- package/dist/adb/client.js.map +0 -1
- package/dist/adb/exec.d.ts +0 -23
- package/dist/adb/exec.d.ts.map +0 -1
- package/dist/adb/exec.js +0 -98
- package/dist/adb/exec.js.map +0 -1
- package/dist/adb/index.d.ts +0 -5
- package/dist/adb/index.d.ts.map +0 -1
- package/dist/adb/index.js +0 -3
- package/dist/adb/index.js.map +0 -1
- package/dist/adb/keycodes.d.ts +0 -22
- package/dist/adb/keycodes.d.ts.map +0 -1
- package/dist/adb/keycodes.js +0 -69
- package/dist/adb/keycodes.js.map +0 -1
- package/dist/adb/logcat.d.ts +0 -23
- package/dist/adb/logcat.d.ts.map +0 -1
- package/dist/adb/logcat.js +0 -40
- package/dist/adb/logcat.js.map +0 -1
- package/dist/adb/parsers.d.ts +0 -60
- package/dist/adb/parsers.d.ts.map +0 -1
- package/dist/adb/parsers.js +0 -118
- package/dist/adb/parsers.js.map +0 -1
- package/dist/adb/resolver.d.ts +0 -24
- package/dist/adb/resolver.d.ts.map +0 -1
- package/dist/adb/resolver.js +0 -130
- package/dist/adb/resolver.js.map +0 -1
- package/dist/adb/text-escape.d.ts +0 -23
- package/dist/adb/text-escape.d.ts.map +0 -1
- package/dist/adb/text-escape.js +0 -41
- package/dist/adb/text-escape.js.map +0 -1
- package/dist/adb/ui-parser/diff-engine.d.ts.map +0 -1
- package/dist/adb/ui-parser/diff-engine.js.map +0 -1
- package/dist/adb/ui-parser/element-builder.d.ts.map +0 -1
- package/dist/adb/ui-parser/element-builder.js.map +0 -1
- package/dist/adb/ui-parser/element-finders.d.ts.map +0 -1
- package/dist/adb/ui-parser/element-finders.js.map +0 -1
- package/dist/adb/ui-parser/formatters/compact.d.ts.map +0 -1
- package/dist/adb/ui-parser/formatters/compact.js.map +0 -1
- package/dist/adb/ui-parser/formatters/full.d.ts.map +0 -1
- package/dist/adb/ui-parser/formatters/full.js.map +0 -1
- package/dist/adb/ui-parser/formatters/index.d.ts.map +0 -1
- package/dist/adb/ui-parser/formatters/index.js.map +0 -1
- package/dist/adb/ui-parser/formatters/semantic.d.ts.map +0 -1
- package/dist/adb/ui-parser/formatters/semantic.js.map +0 -1
- package/dist/adb/ui-parser/node-parser.d.ts.map +0 -1
- package/dist/adb/ui-parser/node-parser.js.map +0 -1
- package/dist/adb/ui-parser/screen-analyzer.d.ts.map +0 -1
- package/dist/adb/ui-parser/screen-analyzer.js.map +0 -1
- package/dist/adb/ui-parser/types.d.ts.map +0 -1
- package/dist/adb/ui-parser/types.js.map +0 -1
- package/dist/adb/ui-parser.d.ts.map +0 -1
- package/dist/adb/ui-parser.js.map +0 -1
- package/dist/adb/ui-scoring.d.ts.map +0 -1
- package/dist/adb/ui-scoring.js.map +0 -1
- package/dist/adb/ui-tree-cache.d.ts.map +0 -1
- package/dist/adb/ui-tree-cache.js.map +0 -1
- package/dist/adb/webview.d.ts +0 -59
- package/dist/adb/webview.d.ts.map +0 -1
- package/dist/adb/webview.js +0 -169
- package/dist/adb/webview.js.map +0 -1
- package/dist/aurora/client.d.ts +0 -180
- package/dist/aurora/client.d.ts.map +0 -1
- package/dist/aurora/client.js +0 -324
- package/dist/aurora/client.js.map +0 -1
- package/dist/aurora/index.d.ts +0 -2
- package/dist/aurora/index.d.ts.map +0 -1
- package/dist/aurora/index.js +0 -2
- package/dist/aurora/index.js.map +0 -1
- package/dist/browser/cdp-helpers.d.ts +0 -17
- package/dist/browser/cdp-helpers.d.ts.map +0 -1
- package/dist/browser/cdp-helpers.js +0 -79
- package/dist/browser/cdp-helpers.js.map +0 -1
- package/dist/browser/cdp-types.d.ts +0 -167
- package/dist/browser/cdp-types.d.ts.map +0 -1
- package/dist/browser/cdp-types.js +0 -9
- package/dist/browser/cdp-types.js.map +0 -1
- package/dist/browser/client.d.ts +0 -29
- package/dist/browser/client.d.ts.map +0 -1
- package/dist/browser/client.js +0 -391
- package/dist/browser/client.js.map +0 -1
- package/dist/browser/index.d.ts +0 -5
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -4
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/key-map.d.ts +0 -16
- package/dist/browser/key-map.d.ts.map +0 -1
- package/dist/browser/key-map.js +0 -35
- package/dist/browser/key-map.js.map +0 -1
- package/dist/browser/session-manager.d.ts +0 -21
- package/dist/browser/session-manager.d.ts.map +0 -1
- package/dist/browser/session-manager.js +0 -109
- package/dist/browser/session-manager.js.map +0 -1
- package/dist/browser/snapshot-builder.d.ts +0 -4
- package/dist/browser/snapshot-builder.d.ts.map +0 -1
- package/dist/browser/snapshot-builder.js +0 -76
- package/dist/browser/snapshot-builder.js.map +0 -1
- package/dist/browser/types.d.ts +0 -75
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -11
- package/dist/browser/types.js.map +0 -1
- package/dist/desktop/client.d.ts +0 -196
- package/dist/desktop/client.d.ts.map +0 -1
- package/dist/desktop/client.js +0 -540
- package/dist/desktop/client.js.map +0 -1
- package/dist/desktop/gradle.d.ts +0 -45
- package/dist/desktop/gradle.d.ts.map +0 -1
- package/dist/desktop/gradle.js +0 -234
- package/dist/desktop/gradle.js.map +0 -1
- package/dist/desktop/index.d.ts +0 -7
- package/dist/desktop/index.d.ts.map +0 -1
- package/dist/desktop/index.js +0 -7
- package/dist/desktop/index.js.map +0 -1
- package/dist/desktop/launch-options.d.ts +0 -13
- package/dist/desktop/launch-options.d.ts.map +0 -1
- package/dist/desktop/launch-options.js +0 -54
- package/dist/desktop/launch-options.js.map +0 -1
- package/dist/desktop/launchers.d.ts +0 -52
- package/dist/desktop/launchers.d.ts.map +0 -1
- package/dist/desktop/launchers.js +0 -125
- package/dist/desktop/launchers.js.map +0 -1
- package/dist/desktop/log-ring.d.ts +0 -21
- package/dist/desktop/log-ring.d.ts.map +0 -1
- package/dist/desktop/log-ring.js +0 -45
- package/dist/desktop/log-ring.js.map +0 -1
- package/dist/desktop/permission-allowlist.d.ts +0 -47
- package/dist/desktop/permission-allowlist.d.ts.map +0 -1
- package/dist/desktop/permission-allowlist.js +0 -148
- package/dist/desktop/permission-allowlist.js.map +0 -1
- package/dist/desktop/types.d.ts +0 -177
- package/dist/desktop/types.d.ts.map +0 -1
- package/dist/desktop/types.js +0 -5
- package/dist/desktop/types.js.map +0 -1
- package/dist/ios/client.d.ts +0 -194
- package/dist/ios/client.d.ts.map +0 -1
- package/dist/ios/client.js +0 -457
- package/dist/ios/client.js.map +0 -1
- package/dist/ios/index.d.ts +0 -2
- package/dist/ios/index.d.ts.map +0 -1
- package/dist/ios/index.js +0 -2
- package/dist/ios/index.js.map +0 -1
- package/dist/ios/keymap.d.ts +0 -20
- package/dist/ios/keymap.d.ts.map +0 -1
- package/dist/ios/keymap.js +0 -33
- package/dist/ios/keymap.js.map +0 -1
- package/dist/ios/simctl-commands.d.ts +0 -35
- package/dist/ios/simctl-commands.d.ts.map +0 -1
- package/dist/ios/simctl-commands.js +0 -60
- package/dist/ios/simctl-commands.js.map +0 -1
- package/dist/ios/simctl-exec.d.ts +0 -19
- package/dist/ios/simctl-exec.d.ts.map +0 -1
- package/dist/ios/simctl-exec.js +0 -55
- package/dist/ios/simctl-exec.js.map +0 -1
- package/dist/ios/simctl-parsers.d.ts +0 -10
- package/dist/ios/simctl-parsers.d.ts.map +0 -1
- package/dist/ios/simctl-parsers.js +0 -29
- package/dist/ios/simctl-parsers.js.map +0 -1
- package/dist/ios/types.d.ts +0 -8
- package/dist/ios/types.d.ts.map +0 -1
- package/dist/ios/types.js +0 -2
- package/dist/ios/types.js.map +0 -1
- package/dist/ios/wda/index.d.ts +0 -4
- package/dist/ios/wda/index.d.ts.map +0 -1
- package/dist/ios/wda/index.js +0 -4
- package/dist/ios/wda/index.js.map +0 -1
- package/dist/ios/wda/wda-client.d.ts +0 -27
- package/dist/ios/wda/wda-client.d.ts.map +0 -1
- package/dist/ios/wda/wda-client.js +0 -237
- package/dist/ios/wda/wda-client.js.map +0 -1
- package/dist/ios/wda/wda-manager.d.ts +0 -18
- package/dist/ios/wda/wda-manager.d.ts.map +0 -1
- package/dist/ios/wda/wda-manager.js +0 -238
- package/dist/ios/wda/wda-manager.js.map +0 -1
- package/dist/ios/wda/wda-types.d.ts +0 -39
- package/dist/ios/wda/wda-types.d.ts.map +0 -1
- package/dist/ios/wda/wda-types.js +0 -2
- package/dist/ios/wda/wda-types.js.map +0 -1
- package/dist/ios/wda-errors.d.ts +0 -8
- package/dist/ios/wda-errors.d.ts.map +0 -1
- package/dist/ios/wda-errors.js +0 -13
- package/dist/ios/wda-errors.js.map +0 -1
- package/dist/ios/wda-payloads.d.ts +0 -32
- package/dist/ios/wda-payloads.d.ts.map +0 -1
- package/dist/ios/wda-payloads.js +0 -31
- package/dist/ios/wda-payloads.js.map +0 -1
- package/dist/plugins/android/index.d.ts +0 -23
- package/dist/plugins/android/index.d.ts.map +0 -1
- package/dist/plugins/android/index.js +0 -45
- package/dist/plugins/android/index.js.map +0 -1
- package/dist/plugins/aurora/index.d.ts +0 -17
- package/dist/plugins/aurora/index.d.ts.map +0 -1
- package/dist/plugins/aurora/index.js +0 -27
- package/dist/plugins/aurora/index.js.map +0 -1
- package/dist/plugins/desktop/index.d.ts +0 -18
- package/dist/plugins/desktop/index.d.ts.map +0 -1
- package/dist/plugins/desktop/index.js +0 -28
- package/dist/plugins/desktop/index.js.map +0 -1
- package/dist/plugins/ios/index.d.ts +0 -17
- package/dist/plugins/ios/index.d.ts.map +0 -1
- package/dist/plugins/ios/index.js +0 -36
- package/dist/plugins/ios/index.js.map +0 -1
- package/dist/plugins/web/index.d.ts +0 -17
- package/dist/plugins/web/index.d.ts.map +0 -1
- package/dist/plugins/web/index.js +0 -27
- package/dist/plugins/web/index.js.map +0 -1
- /package/dist/{adb → ui-tree}/ui-parser/diff-engine.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/diff-engine.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/element-builder.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/element-builder.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/element-finders.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/element-finders.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/compact.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/compact.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/full.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/full.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/index.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/index.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/semantic.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/semantic.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/node-parser.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/node-parser.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/screen-analyzer.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/screen-analyzer.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/types.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/types.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser.js +0 -0
- /package/dist/{adb → ui-tree}/ui-scoring.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-scoring.js +0 -0
- /package/dist/{adb → ui-tree}/ui-tree-cache.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-tree-cache.js +0 -0
package/dist/ios/client.js
DELETED
|
@@ -1,457 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from "child_process";
|
|
2
|
-
import { tmpdir } from "os";
|
|
3
|
-
import { join } from "path";
|
|
4
|
-
import { readFileSync, unlinkSync } from "fs";
|
|
5
|
-
import { WDAManager } from "./wda/index.js";
|
|
6
|
-
import { classifySimctlError } from "../errors.js";
|
|
7
|
-
import { validateDeviceId, validateBundleId } from "../utils/sanitize.js";
|
|
8
|
-
import { execSimctl, execSimctlQuiet, SIMCTL_EXEC_TIMEOUT_MS } from "./simctl-exec.js";
|
|
9
|
-
import { buildAppLogArgs, buildLogShowArgs, formatLatLon, sliceLastLines, splitArgs, } from "./simctl-commands.js";
|
|
10
|
-
import { parseDevicesJson } from "./simctl-parsers.js";
|
|
11
|
-
import { wdaRequiredError } from "./wda-errors.js";
|
|
12
|
-
import { ACTIVATE_SIMULATOR_OSASCRIPT_ARGS, HOME_KEY_OSASCRIPT_ARGS, mapKey, } from "./keymap.js";
|
|
13
|
-
import { buildFindElementsSelectors, buildSwipeCoords, } from "./wda-payloads.js";
|
|
14
|
-
export class IosClient {
|
|
15
|
-
deviceId;
|
|
16
|
-
wdaManager = new WDAManager();
|
|
17
|
-
wdaClient;
|
|
18
|
-
constructor(deviceId) {
|
|
19
|
-
if (deviceId) {
|
|
20
|
-
validateDeviceId(deviceId);
|
|
21
|
-
}
|
|
22
|
-
this.deviceId = deviceId;
|
|
23
|
-
}
|
|
24
|
-
cleanup() {
|
|
25
|
-
this.wdaManager.cleanup();
|
|
26
|
-
this.wdaClient = undefined;
|
|
27
|
-
}
|
|
28
|
-
async ensureWDA(deviceIdOverride) {
|
|
29
|
-
const effectiveId = deviceIdOverride ?? this.deviceId;
|
|
30
|
-
if (!effectiveId) {
|
|
31
|
-
const booted = this.getBootedDevices();
|
|
32
|
-
if (booted.length === 0) {
|
|
33
|
-
throw new Error("No booted iOS simulator found. Boot a simulator first.");
|
|
34
|
-
}
|
|
35
|
-
this.deviceId = booted[0].id;
|
|
36
|
-
this.wdaClient = await this.wdaManager.ensureWDAReady(this.deviceId);
|
|
37
|
-
return this.wdaClient;
|
|
38
|
-
}
|
|
39
|
-
// Per-call override: don't cache on instance if different from default
|
|
40
|
-
if (deviceIdOverride && deviceIdOverride !== this.deviceId) {
|
|
41
|
-
return this.wdaManager.ensureWDAReady(deviceIdOverride);
|
|
42
|
-
}
|
|
43
|
-
if (!this.wdaClient) {
|
|
44
|
-
this.wdaClient = await this.wdaManager.ensureWDAReady(effectiveId);
|
|
45
|
-
}
|
|
46
|
-
return this.wdaClient;
|
|
47
|
-
}
|
|
48
|
-
/** Thin instance wrapper around `execSimctl` (argv-form, no shell). */
|
|
49
|
-
execArgs(args) {
|
|
50
|
-
return execSimctl(args);
|
|
51
|
-
}
|
|
52
|
-
/** Thin instance wrapper around `execSimctlQuiet` (stderr suppressed). */
|
|
53
|
-
execArgsQuiet(args) {
|
|
54
|
-
return execSimctlQuiet(args);
|
|
55
|
-
}
|
|
56
|
-
/** Legacy string form: whitespace-split into argv tokens, then `execSimctl`. */
|
|
57
|
-
exec(command) {
|
|
58
|
-
return execSimctl(splitArgs(command));
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Get the active device ID or 'booted'
|
|
62
|
-
*/
|
|
63
|
-
get targetDevice() {
|
|
64
|
-
return this.deviceId ?? "booted";
|
|
65
|
-
}
|
|
66
|
-
/** Resolve target device for a per-call override or fall back to instance default. */
|
|
67
|
-
targetDeviceFor(deviceIdOverride) {
|
|
68
|
-
return deviceIdOverride ?? this.deviceId ?? "booted";
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Get list of iOS simulators
|
|
72
|
-
*/
|
|
73
|
-
getDevices() {
|
|
74
|
-
return parseDevicesJson(this.exec("list devices -j"));
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Get booted simulators
|
|
78
|
-
*/
|
|
79
|
-
getBootedDevices() {
|
|
80
|
-
return this.getDevices().filter(d => d.state === "booted");
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Set active device
|
|
84
|
-
*/
|
|
85
|
-
setDevice(deviceId) {
|
|
86
|
-
validateDeviceId(deviceId);
|
|
87
|
-
if (this.deviceId !== deviceId) {
|
|
88
|
-
this.wdaClient = undefined;
|
|
89
|
-
}
|
|
90
|
-
this.deviceId = deviceId;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Get currently configured device ID
|
|
94
|
-
*/
|
|
95
|
-
getDeviceId() {
|
|
96
|
-
return this.deviceId;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Boot simulator
|
|
100
|
-
*/
|
|
101
|
-
boot(deviceId) {
|
|
102
|
-
const target = deviceId ?? this.deviceId;
|
|
103
|
-
if (!target)
|
|
104
|
-
throw new Error("No device specified");
|
|
105
|
-
validateDeviceId(target);
|
|
106
|
-
this.execArgs(["boot", target]);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Shutdown simulator
|
|
110
|
-
*/
|
|
111
|
-
shutdown(deviceId) {
|
|
112
|
-
const target = deviceId ?? this.deviceId ?? "booted";
|
|
113
|
-
if (target !== "booted")
|
|
114
|
-
validateDeviceId(target);
|
|
115
|
-
this.execArgs(["shutdown", target]);
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Take screenshot and return raw PNG buffer
|
|
119
|
-
*/
|
|
120
|
-
screenshotRaw(deviceIdOverride) {
|
|
121
|
-
const target = this.targetDeviceFor(deviceIdOverride);
|
|
122
|
-
const tmpFile = join(tmpdir(), `ios-screenshot-${Date.now()}.png`);
|
|
123
|
-
try {
|
|
124
|
-
// Path passed as distinct argv slot — spaces in tmpdir are safe.
|
|
125
|
-
this.execArgs(["io", target, "screenshot", tmpFile]);
|
|
126
|
-
return readFileSync(tmpFile);
|
|
127
|
-
}
|
|
128
|
-
finally {
|
|
129
|
-
try {
|
|
130
|
-
unlinkSync(tmpFile);
|
|
131
|
-
}
|
|
132
|
-
catch { }
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Take screenshot and return as base64 (legacy)
|
|
137
|
-
*/
|
|
138
|
-
screenshot(deviceIdOverride) {
|
|
139
|
-
return this.screenshotRaw(deviceIdOverride).toString("base64");
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Tap at coordinates
|
|
143
|
-
*/
|
|
144
|
-
async tap(x, y, deviceIdOverride) {
|
|
145
|
-
try {
|
|
146
|
-
const wdaClient = await this.ensureWDA(deviceIdOverride);
|
|
147
|
-
await wdaClient.tapByCoordinates(x, y);
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
throw wdaRequiredError("Tap", error);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Swipe gesture
|
|
155
|
-
*/
|
|
156
|
-
async swipe(x1, y1, x2, y2, durationMs = 300, deviceIdOverride) {
|
|
157
|
-
try {
|
|
158
|
-
const wdaClient = await this.ensureWDA(deviceIdOverride);
|
|
159
|
-
await wdaClient.swipe(x1, y1, x2, y2, durationMs);
|
|
160
|
-
}
|
|
161
|
-
catch (error) {
|
|
162
|
-
throw wdaRequiredError("Swipe", error);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Long press at coordinates via WDA Actions API
|
|
167
|
-
*/
|
|
168
|
-
async longPress(x, y, durationMs = 1000, deviceIdOverride) {
|
|
169
|
-
try {
|
|
170
|
-
const wdaClient = await this.ensureWDA(deviceIdOverride);
|
|
171
|
-
await wdaClient.longPress(x, y, durationMs);
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
throw wdaRequiredError("Long press", error);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Swipe in direction (uses actual screen center from WDA, not hardcoded)
|
|
179
|
-
*/
|
|
180
|
-
async swipeDirection(direction, distance = 400) {
|
|
181
|
-
// Get actual screen size from WDA instead of using hardcoded values
|
|
182
|
-
let centerX = 200;
|
|
183
|
-
let centerY = 400;
|
|
184
|
-
try {
|
|
185
|
-
const wdaClient = await this.ensureWDA();
|
|
186
|
-
const size = await wdaClient.getWindowSize();
|
|
187
|
-
centerX = Math.floor(size.width / 2);
|
|
188
|
-
centerY = Math.floor(size.height / 2);
|
|
189
|
-
}
|
|
190
|
-
catch {
|
|
191
|
-
// Fallback to defaults if WDA not available
|
|
192
|
-
}
|
|
193
|
-
const { x1, y1, x2, y2 } = buildSwipeCoords(direction, centerX, centerY, distance);
|
|
194
|
-
await this.swipe(x1, y1, x2, y2);
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Input text via WDA (types into the currently focused element)
|
|
198
|
-
*/
|
|
199
|
-
async inputText(text, deviceIdOverride) {
|
|
200
|
-
try {
|
|
201
|
-
const wdaClient = await this.ensureWDA(deviceIdOverride);
|
|
202
|
-
await wdaClient.typeText(text);
|
|
203
|
-
}
|
|
204
|
-
catch (error) {
|
|
205
|
-
throw wdaRequiredError("Text input", error);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Press key
|
|
210
|
-
*
|
|
211
|
-
* SECURITY: AppleScript invocations use execFileSync("osascript", ["-e", literal])
|
|
212
|
-
* — the script literal is a single argv slot, so /bin/sh never parses its contents.
|
|
213
|
-
* The `key` argument is whitelisted via keyMap; only fixed AppleScript literals reach
|
|
214
|
-
* osascript.
|
|
215
|
-
*/
|
|
216
|
-
pressKey(key) {
|
|
217
|
-
const mappedKey = mapKey(key);
|
|
218
|
-
// Use simctl io for button presses
|
|
219
|
-
if (mappedKey === "home") {
|
|
220
|
-
this.execArgs(["io", this.targetDevice, "enumerate"]);
|
|
221
|
-
// Trigger home button via keyboard shortcut
|
|
222
|
-
execFileSync("osascript", [...HOME_KEY_OSASCRIPT_ARGS], { encoding: "utf-8", timeout: SIMCTL_EXEC_TIMEOUT_MS });
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
// Try generic approach
|
|
226
|
-
execFileSync("osascript", [...ACTIVATE_SIMULATOR_OSASCRIPT_ARGS], { encoding: "utf-8", timeout: SIMCTL_EXEC_TIMEOUT_MS });
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Launch app by bundle ID
|
|
231
|
-
*/
|
|
232
|
-
launchApp(bundleId, deviceIdOverride) {
|
|
233
|
-
validateBundleId(bundleId);
|
|
234
|
-
this.execArgs(["launch", this.targetDeviceFor(deviceIdOverride), bundleId]);
|
|
235
|
-
return `Launched ${bundleId}`;
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Terminate app
|
|
239
|
-
*/
|
|
240
|
-
stopApp(bundleId, deviceIdOverride) {
|
|
241
|
-
validateBundleId(bundleId);
|
|
242
|
-
try {
|
|
243
|
-
this.execArgs(["terminate", this.targetDeviceFor(deviceIdOverride), bundleId]);
|
|
244
|
-
}
|
|
245
|
-
catch {
|
|
246
|
-
// App might not be running
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Install app (.app bundle or .ipa)
|
|
251
|
-
*/
|
|
252
|
-
installApp(path) {
|
|
253
|
-
// Path passed as distinct argv slot — spaces in path are safe; no shell parsing.
|
|
254
|
-
this.execArgs(["install", this.targetDevice, path]);
|
|
255
|
-
return `Installed ${path}`;
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Uninstall app
|
|
259
|
-
*/
|
|
260
|
-
uninstallApp(bundleId) {
|
|
261
|
-
validateBundleId(bundleId);
|
|
262
|
-
this.execArgs(["uninstall", this.targetDevice, bundleId]);
|
|
263
|
-
return `Uninstalled ${bundleId}`;
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Get UI hierarchy (limited on iOS simulator)
|
|
267
|
-
* Returns accessibility info if available
|
|
268
|
-
*/
|
|
269
|
-
async getUiHierarchy(deviceIdOverride) {
|
|
270
|
-
try {
|
|
271
|
-
const wdaClient = await this.ensureWDA(deviceIdOverride);
|
|
272
|
-
const tree = await wdaClient.getAccessibleSource();
|
|
273
|
-
return JSON.stringify(tree, null, 2);
|
|
274
|
-
}
|
|
275
|
-
catch (error) {
|
|
276
|
-
throw wdaRequiredError("WebDriverAgent", error);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Find element by text or label
|
|
281
|
-
*/
|
|
282
|
-
async findElement(criteria) {
|
|
283
|
-
const wdaClient = await this.ensureWDA();
|
|
284
|
-
if (criteria.label) {
|
|
285
|
-
return await wdaClient.findElement("accessibility id", criteria.label);
|
|
286
|
-
}
|
|
287
|
-
if (criteria.text) {
|
|
288
|
-
return await wdaClient.findElement("name", criteria.text);
|
|
289
|
-
}
|
|
290
|
-
throw new Error("Provide text or label to find element");
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Find multiple elements by criteria
|
|
294
|
-
*/
|
|
295
|
-
async findElements(criteria) {
|
|
296
|
-
const wdaClient = await this.ensureWDA();
|
|
297
|
-
const elements = [];
|
|
298
|
-
for (const sel of buildFindElementsSelectors(criteria)) {
|
|
299
|
-
const found = await wdaClient.findElements(sel.using, sel.value);
|
|
300
|
-
elements.push(...found);
|
|
301
|
-
}
|
|
302
|
-
const results = await Promise.all(elements.map(async (el) => {
|
|
303
|
-
try {
|
|
304
|
-
const rect = await wdaClient.getElementRect(el.ELEMENT);
|
|
305
|
-
const text = await wdaClient.getElementText(el.ELEMENT).catch(() => "");
|
|
306
|
-
const displayed = criteria.visible !== undefined
|
|
307
|
-
? await wdaClient.isElementDisplayed(el.ELEMENT)
|
|
308
|
-
: true;
|
|
309
|
-
if (criteria.visible !== undefined && displayed !== criteria.visible) {
|
|
310
|
-
return null;
|
|
311
|
-
}
|
|
312
|
-
return {
|
|
313
|
-
id: el.ELEMENT,
|
|
314
|
-
type: criteria.type || "Unknown",
|
|
315
|
-
label: text,
|
|
316
|
-
rect,
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
catch {
|
|
320
|
-
return null;
|
|
321
|
-
}
|
|
322
|
-
}));
|
|
323
|
-
return results.filter((r) => r !== null);
|
|
324
|
-
}
|
|
325
|
-
/**
|
|
326
|
-
* Get element rect (position + size) by element ID
|
|
327
|
-
*/
|
|
328
|
-
async getElementRect(elementId) {
|
|
329
|
-
try {
|
|
330
|
-
const wdaClient = await this.ensureWDA();
|
|
331
|
-
return await wdaClient.getElementRect(elementId);
|
|
332
|
-
}
|
|
333
|
-
catch {
|
|
334
|
-
return null;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
/**
|
|
338
|
-
* Tap element by element ID
|
|
339
|
-
*/
|
|
340
|
-
async tapElement(elementId) {
|
|
341
|
-
const wdaClient = await this.ensureWDA();
|
|
342
|
-
await wdaClient.clickElement(elementId);
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Open URL in simulator
|
|
346
|
-
*
|
|
347
|
-
* SECURITY: URL passes as a single argv slot to xcrun (no /bin/sh -c).
|
|
348
|
-
* Any shell metacharacters in `url` are not parsed by the host shell.
|
|
349
|
-
* Scheme validation happens at the tool layer (validateUrl).
|
|
350
|
-
*/
|
|
351
|
-
openUrl(url) {
|
|
352
|
-
try {
|
|
353
|
-
this.execArgs(["openurl", this.targetDevice, url]);
|
|
354
|
-
}
|
|
355
|
-
catch (error) {
|
|
356
|
-
const e = error;
|
|
357
|
-
throw classifySimctlError(e.stderr?.toString() ?? e.message ?? String(error), `simctl openurl ${url}`);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
/**
|
|
361
|
-
* Add photo to simulator
|
|
362
|
-
*/
|
|
363
|
-
addPhoto(imagePath) {
|
|
364
|
-
// Path passed as distinct argv slot — spaces in path are safe.
|
|
365
|
-
this.execArgs(["addmedia", this.targetDevice, imagePath]);
|
|
366
|
-
}
|
|
367
|
-
/**
|
|
368
|
-
* Set location
|
|
369
|
-
*/
|
|
370
|
-
setLocation(lat, lon) {
|
|
371
|
-
this.execArgs(["location", this.targetDevice, "set", formatLatLon(lat, lon)]);
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Get device info
|
|
375
|
-
*/
|
|
376
|
-
getDeviceInfo() {
|
|
377
|
-
const output = this.execArgs(["getenv", this.targetDevice, "SIMULATOR_DEVICE_NAME"]);
|
|
378
|
-
return { name: output };
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* Execute arbitrary simctl command
|
|
382
|
-
*
|
|
383
|
-
* SECURITY: `command` is whitespace-split into argv tokens before reaching
|
|
384
|
-
* execFileSync. Shell metacharacters (;, &, |, $(), backticks, etc.) cannot
|
|
385
|
-
* spawn a host shell from this path. The MCP tool layer additionally validates
|
|
386
|
-
* via validateShellCommand as defense in depth.
|
|
387
|
-
*/
|
|
388
|
-
shell(command) {
|
|
389
|
-
return this.exec(command);
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* Get device logs
|
|
393
|
-
*/
|
|
394
|
-
getLogs(options = {}) {
|
|
395
|
-
try {
|
|
396
|
-
const output = this.execArgs(buildLogShowArgs(this.targetDevice, "5m", options));
|
|
397
|
-
return options.lines ? sliceLastLines(output, options.lines) : output;
|
|
398
|
-
}
|
|
399
|
-
catch {
|
|
400
|
-
// Fallback: try system log (last 1m, swallow stderr — replaces prior `2>/dev/null`).
|
|
401
|
-
try {
|
|
402
|
-
const fallback = this.execArgsQuiet(buildLogShowArgs(this.targetDevice, "1m"));
|
|
403
|
-
return sliceLastLines(fallback, 100);
|
|
404
|
-
}
|
|
405
|
-
catch {
|
|
406
|
-
return "Unable to retrieve logs. Make sure the simulator is running.";
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* Get app-specific logs
|
|
412
|
-
*
|
|
413
|
-
* SECURITY: bundleId is validated against the reverse-DNS whitelist before
|
|
414
|
-
* embedding into the simctl predicate string. The predicate itself is passed
|
|
415
|
-
* as ONE argv slot — the host shell never parses it; simctl parses it
|
|
416
|
-
* internally as its own DSL.
|
|
417
|
-
*/
|
|
418
|
-
getAppLogs(bundleId, lines = 100) {
|
|
419
|
-
validateBundleId(bundleId);
|
|
420
|
-
try {
|
|
421
|
-
const output = this.execArgs(buildAppLogArgs(this.targetDevice, bundleId));
|
|
422
|
-
return sliceLastLines(output, lines);
|
|
423
|
-
}
|
|
424
|
-
catch {
|
|
425
|
-
return `Unable to retrieve logs for ${bundleId}`;
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
/**
|
|
429
|
-
* Clear logs (not fully supported on iOS, but we can note the timestamp)
|
|
430
|
-
*/
|
|
431
|
-
clearLogs() {
|
|
432
|
-
return "iOS simulator logs cannot be cleared. Use --last parameter to filter recent logs.";
|
|
433
|
-
}
|
|
434
|
-
/**
|
|
435
|
-
* Grant privacy permission on iOS simulator
|
|
436
|
-
* Services: camera, microphone, photos, location, contacts, calendar, reminders, motion, health, speech-recognition
|
|
437
|
-
*/
|
|
438
|
-
grantPermission(bundleId, service) {
|
|
439
|
-
validateBundleId(bundleId);
|
|
440
|
-
return this.execArgs(["privacy", this.targetDevice, "grant", service, bundleId]);
|
|
441
|
-
}
|
|
442
|
-
/**
|
|
443
|
-
* Revoke privacy permission on iOS simulator
|
|
444
|
-
*/
|
|
445
|
-
revokePermission(bundleId, service) {
|
|
446
|
-
validateBundleId(bundleId);
|
|
447
|
-
return this.execArgs(["privacy", this.targetDevice, "revoke", service, bundleId]);
|
|
448
|
-
}
|
|
449
|
-
/**
|
|
450
|
-
* Reset all privacy permissions for an app on iOS simulator
|
|
451
|
-
*/
|
|
452
|
-
resetPermissions(bundleId) {
|
|
453
|
-
validateBundleId(bundleId);
|
|
454
|
-
return this.execArgs(["privacy", this.targetDevice, "reset", "all", bundleId]);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
//# sourceMappingURL=client.js.map
|
package/dist/ios/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/ios/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAkC,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAEvF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,SAAS,GACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,iCAAiC,EACjC,uBAAuB,EACvB,MAAM,GACP,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,GAEjB,MAAM,mBAAmB,CAAC;AAI3B,MAAM,OAAO,SAAS;IACZ,QAAQ,CAAU;IAClB,UAAU,GAAe,IAAI,UAAU,EAAE,CAAC;IAC1C,SAAS,CAAa;IAE9B,YAAY,QAAiB;QAC3B,IAAI,QAAQ,EAAE,CAAC;YACb,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,gBAAyB;QAC/C,MAAM,WAAW,GAAG,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC;QAEtD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QAED,uEAAuE;QACvE,IAAI,gBAAgB,IAAI,gBAAgB,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,uEAAuE;IAC/D,QAAQ,CAAC,IAAc;QAC7B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,0EAA0E;IAClE,aAAa,CAAC,IAAc;QAClC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,gFAAgF;IACxE,IAAI,CAAC,OAAe;QAC1B,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,sFAAsF;IAC9E,eAAe,CAAC,gBAAyB;QAC/C,OAAO,gBAAgB,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAgB;QACxB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,QAAiB;QACpB,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACpD,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAiB;QACxB,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;QACrD,IAAI,MAAM,KAAK,QAAQ;YAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,gBAAyB;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnE,IAAI,CAAC;YACH,iEAAiE;YACjE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YACrD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,gBAAyB;QAClC,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,gBAAyB;QACvD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACzD,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,aAAqB,GAAG,EAAE,gBAAyB;QAC7G,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACzD,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,aAAqB,IAAI,EAAE,gBAAyB;QACxF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACzD,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,SAA2C,EAAE,WAAmB,GAAG;QACtF,oEAAoE;QACpE,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,OAAO,GAAG,GAAG,CAAC;QAElB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,aAAa,EAAE,CAAC;YAC7C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACrC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnF,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,gBAAyB;QACrD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACzD,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAW;QAClB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAE9B,mCAAmC;QACnC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;YACtD,4CAA4C;YAC5C,YAAY,CACV,WAAW,EACX,CAAC,GAAG,uBAAuB,CAAC,EAC5B,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,CACvD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,YAAY,CACV,WAAW,EACX,CAAC,GAAG,iCAAiC,CAAC,EACtC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAgB,EAAE,gBAAyB;QACnD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5E,OAAO,YAAY,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,QAAgB,EAAE,gBAAyB;QACjD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,iFAAiF;QACjF,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QACpD,OAAO,aAAa,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAgB;QAC3B,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1D,OAAO,eAAe,QAAQ,EAAE,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,gBAAyB;QAC5C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,mBAAmB,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,QAA2C;QAC3D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAEzC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,MAAM,SAAS,CAAC,WAAW,CAAC,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,MAAM,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,QAA8B;QAC/C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAElC,KAAK,MAAM,GAAG,IAAI,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACjE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACxB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBACxD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACxE,MAAM,SAAS,GACb,QAAQ,CAAC,OAAO,KAAK,SAAS;oBAC5B,CAAC,CAAC,MAAM,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,CAAC;oBAChD,CAAC,CAAC,IAAI,CAAC;gBAEX,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACrE,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,OAAO;oBACL,EAAE,EAAE,EAAE,CAAC,OAAO;oBACd,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,SAAS;oBAChC,KAAK,EAAE,IAAI;oBACX,IAAI;iBACL,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,OAAO,MAAM,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,GAAW;QACjB,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,KAAuD,CAAC;YAClE,MAAM,mBAAmB,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,kBAAkB,GAAG,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,SAAiB;QACxB,+DAA+D;QAC/D,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAW,EAAE,GAAW;QAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC,CAAC;QACrF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAe;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,UAIJ,EAAE;QACJ,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YACjF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,qFAAqF;YACrF,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC/E,OAAO,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,8DAA8D,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,QAAgB,EAAE,QAAgB,GAAG;QAC9C,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC3E,OAAO,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,+BAA+B,QAAQ,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,mFAAmF,CAAC;IAC7F,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,QAAgB,EAAE,OAAe;QAC/C,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnF,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAgB,EAAE,OAAe;QAChD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAgB;QAC/B,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjF,CAAC;CACF"}
|
package/dist/ios/index.d.ts
DELETED
package/dist/ios/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ios/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/ios/index.js
DELETED
package/dist/ios/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ios/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC"}
|
package/dist/ios/keymap.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* iOS key mapping and AppleScript literals for the Simulator host.
|
|
3
|
-
*
|
|
4
|
-
* SECURITY: AppleScript strings here are fixed literals passed as distinct
|
|
5
|
-
* argv slots to execFileSync("osascript", [...]). They never reach /bin/sh.
|
|
6
|
-
*/
|
|
7
|
-
export declare const IOS_KEY_MAP: Record<string, string>;
|
|
8
|
-
/**
|
|
9
|
-
* Resolve a logical key name to its simctl/AppleScript token.
|
|
10
|
-
*/
|
|
11
|
-
export declare function mapKey(key: string): string;
|
|
12
|
-
/**
|
|
13
|
-
* AppleScript argv that activates Simulator and triggers Cmd+Shift+H (home).
|
|
14
|
-
*/
|
|
15
|
-
export declare const HOME_KEY_OSASCRIPT_ARGS: readonly string[];
|
|
16
|
-
/**
|
|
17
|
-
* AppleScript argv that just brings Simulator to focus.
|
|
18
|
-
*/
|
|
19
|
-
export declare const ACTIVATE_SIMULATOR_OSASCRIPT_ARGS: readonly string[];
|
|
20
|
-
//# sourceMappingURL=keymap.d.ts.map
|
package/dist/ios/keymap.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keymap.d.ts","sourceRoot":"","sources":["../../src/ios/keymap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM9C,CAAC;AAEF;;GAEG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAGpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iCAAiC,EAAE,SAAS,MAAM,EAE9D,CAAC"}
|
package/dist/ios/keymap.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* iOS key mapping and AppleScript literals for the Simulator host.
|
|
3
|
-
*
|
|
4
|
-
* SECURITY: AppleScript strings here are fixed literals passed as distinct
|
|
5
|
-
* argv slots to execFileSync("osascript", [...]). They never reach /bin/sh.
|
|
6
|
-
*/
|
|
7
|
-
export const IOS_KEY_MAP = {
|
|
8
|
-
HOME: "home",
|
|
9
|
-
BACK: "home", // iOS doesn't have back, use home
|
|
10
|
-
VOLUME_UP: "volumeUp",
|
|
11
|
-
VOLUME_DOWN: "volumeDown",
|
|
12
|
-
LOCK: "lock",
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Resolve a logical key name to its simctl/AppleScript token.
|
|
16
|
-
*/
|
|
17
|
-
export function mapKey(key) {
|
|
18
|
-
return IOS_KEY_MAP[key.toUpperCase()] ?? key.toLowerCase();
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* AppleScript argv that activates Simulator and triggers Cmd+Shift+H (home).
|
|
22
|
-
*/
|
|
23
|
-
export const HOME_KEY_OSASCRIPT_ARGS = [
|
|
24
|
-
"-e", 'tell application "Simulator" to activate',
|
|
25
|
-
"-e", 'tell application "System Events" to keystroke "h" using {command down, shift down}',
|
|
26
|
-
];
|
|
27
|
-
/**
|
|
28
|
-
* AppleScript argv that just brings Simulator to focus.
|
|
29
|
-
*/
|
|
30
|
-
export const ACTIVATE_SIMULATOR_OSASCRIPT_ARGS = [
|
|
31
|
-
"-e", 'tell application "Simulator" to activate',
|
|
32
|
-
];
|
|
33
|
-
//# sourceMappingURL=keymap.js.map
|
package/dist/ios/keymap.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keymap.js","sourceRoot":"","sources":["../../src/ios/keymap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM,EAAE,kCAAkC;IAChD,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,YAAY;IACzB,IAAI,EAAE,MAAM;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,IAAI,EAAE,0CAA0C;IAChD,IAAI,EAAE,oFAAoF;CAC3F,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAsB;IAClE,IAAI,EAAE,0CAA0C;CACjD,CAAC"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure simctl argv builders. No I/O.
|
|
3
|
-
*
|
|
4
|
-
* SECURITY: All builders return string[] for execFileSync — no shell parsing.
|
|
5
|
-
* Predicate strings and paths travel as distinct argv slots.
|
|
6
|
-
*/
|
|
7
|
-
export interface LogShowOptions {
|
|
8
|
-
predicate?: string;
|
|
9
|
-
level?: "debug" | "info" | "default" | "error" | "fault";
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Build argv for `simctl spawn <device> log show ...`.
|
|
13
|
-
*/
|
|
14
|
-
export declare function buildLogShowArgs(device: string, lastWindow: string, options?: LogShowOptions): string[];
|
|
15
|
-
/**
|
|
16
|
-
* Build argv for app-scoped log query (predicate = subsystem == "<bundleId>").
|
|
17
|
-
* Caller must validate bundleId BEFORE calling this builder.
|
|
18
|
-
*/
|
|
19
|
-
export declare function buildAppLogArgs(device: string, bundleId: string, lastWindow?: string): string[];
|
|
20
|
-
/**
|
|
21
|
-
* Split a whitespace-separated command into argv tokens.
|
|
22
|
-
* Safe only for commands without quoted strings / spaces inside args.
|
|
23
|
-
*/
|
|
24
|
-
export declare function splitArgs(command: string): string[];
|
|
25
|
-
/**
|
|
26
|
-
* Slice the last `n` lines from a newline-delimited string.
|
|
27
|
-
* Node-side replacement for `| tail -n` (no shell needed).
|
|
28
|
-
*/
|
|
29
|
-
export declare function sliceLastLines(text: string, n: number): string;
|
|
30
|
-
/**
|
|
31
|
-
* Coerce a lat/lon pair into finite numbers; throw on NaN/Infinity.
|
|
32
|
-
* Returns the canonical `lat,lon` argument string expected by `simctl location set`.
|
|
33
|
-
*/
|
|
34
|
-
export declare function formatLatLon(lat: number, lon: number): string;
|
|
35
|
-
//# sourceMappingURL=simctl-commands.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simctl-commands.d.ts","sourceRoot":"","sources":["../../src/ios/simctl-commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;CAC1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,cAAmB,GAC3B,MAAM,EAAE,CAWV;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,MAAa,GAAG,MAAM,EAAE,CAMrG;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAO7D"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure simctl argv builders. No I/O.
|
|
3
|
-
*
|
|
4
|
-
* SECURITY: All builders return string[] for execFileSync — no shell parsing.
|
|
5
|
-
* Predicate strings and paths travel as distinct argv slots.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Build argv for `simctl spawn <device> log show ...`.
|
|
9
|
-
*/
|
|
10
|
-
export function buildLogShowArgs(device, lastWindow, options = {}) {
|
|
11
|
-
const args = [
|
|
12
|
-
"spawn", device, "log", "show", "--style", "compact", "--last", lastWindow,
|
|
13
|
-
];
|
|
14
|
-
if (options.level) {
|
|
15
|
-
args.push("--predicate", `messageType == ${options.level}`);
|
|
16
|
-
}
|
|
17
|
-
if (options.predicate) {
|
|
18
|
-
args.push("--predicate", options.predicate);
|
|
19
|
-
}
|
|
20
|
-
return args;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Build argv for app-scoped log query (predicate = subsystem == "<bundleId>").
|
|
24
|
-
* Caller must validate bundleId BEFORE calling this builder.
|
|
25
|
-
*/
|
|
26
|
-
export function buildAppLogArgs(device, bundleId, lastWindow = "5m") {
|
|
27
|
-
return [
|
|
28
|
-
"spawn", device, "log", "show", "--style", "compact",
|
|
29
|
-
"--last", lastWindow,
|
|
30
|
-
"--predicate", `subsystem == "${bundleId}"`,
|
|
31
|
-
];
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Split a whitespace-separated command into argv tokens.
|
|
35
|
-
* Safe only for commands without quoted strings / spaces inside args.
|
|
36
|
-
*/
|
|
37
|
-
export function splitArgs(command) {
|
|
38
|
-
return command.split(/\s+/).filter(Boolean);
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Slice the last `n` lines from a newline-delimited string.
|
|
42
|
-
* Node-side replacement for `| tail -n` (no shell needed).
|
|
43
|
-
*/
|
|
44
|
-
export function sliceLastLines(text, n) {
|
|
45
|
-
const linesN = Math.trunc(Math.max(0, n));
|
|
46
|
-
return text.split("\n").slice(-linesN).join("\n");
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Coerce a lat/lon pair into finite numbers; throw on NaN/Infinity.
|
|
50
|
-
* Returns the canonical `lat,lon` argument string expected by `simctl location set`.
|
|
51
|
-
*/
|
|
52
|
-
export function formatLatLon(lat, lon) {
|
|
53
|
-
const latN = Number(lat);
|
|
54
|
-
const lonN = Number(lon);
|
|
55
|
-
if (!Number.isFinite(latN) || !Number.isFinite(lonN)) {
|
|
56
|
-
throw new Error(`Invalid coordinates: lat=${lat}, lon=${lon}`);
|
|
57
|
-
}
|
|
58
|
-
return `${latN},${lonN}`;
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=simctl-commands.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simctl-commands.js","sourceRoot":"","sources":["../../src/ios/simctl-commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,UAAkB,EAClB,UAA0B,EAAE;IAE5B,MAAM,IAAI,GAAa;QACrB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU;KAC3E,CAAC;IACF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,QAAgB,EAAE,aAAqB,IAAI;IACzF,OAAO;QACL,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;QACpD,QAAQ,EAAE,UAAU;QACpB,aAAa,EAAE,iBAAiB,QAAQ,GAAG;KAC5C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,CAAS;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|