devharness 0.8.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/LICENSE +21 -0
- package/README.md +185 -0
- package/build/atomic-write.d.ts +28 -0
- package/build/atomic-write.d.ts.map +1 -0
- package/build/atomic-write.js +126 -0
- package/build/atomic-write.js.map +1 -0
- package/build/cdp-manager.d.ts +524 -0
- package/build/cdp-manager.d.ts.map +1 -0
- package/build/cdp-manager.js +1828 -0
- package/build/cdp-manager.js.map +1 -0
- package/build/cdp-manager.test.d.ts +6 -0
- package/build/cdp-manager.test.d.ts.map +1 -0
- package/build/cdp-manager.test.js +546 -0
- package/build/cdp-manager.test.js.map +1 -0
- package/build/chrome-launcher.d.ts +400 -0
- package/build/chrome-launcher.d.ts.map +1 -0
- package/build/chrome-launcher.js +1071 -0
- package/build/chrome-launcher.js.map +1 -0
- package/build/chrome-launcher.test.d.ts +11 -0
- package/build/chrome-launcher.test.d.ts.map +1 -0
- package/build/chrome-launcher.test.js +204 -0
- package/build/chrome-launcher.test.js.map +1 -0
- package/build/clickable-cache.d.ts +73 -0
- package/build/clickable-cache.d.ts.map +1 -0
- package/build/clickable-cache.js +90 -0
- package/build/clickable-cache.js.map +1 -0
- package/build/command-recorder.d.ts +401 -0
- package/build/command-recorder.d.ts.map +1 -0
- package/build/command-recorder.js +701 -0
- package/build/command-recorder.js.map +1 -0
- package/build/config.d.ts +390 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +826 -0
- package/build/config.js.map +1 -0
- package/build/config.test.d.ts +2 -0
- package/build/config.test.d.ts.map +1 -0
- package/build/config.test.js +112 -0
- package/build/config.test.js.map +1 -0
- package/build/connection-manager.d.ts +159 -0
- package/build/connection-manager.d.ts.map +1 -0
- package/build/connection-manager.js +432 -0
- package/build/connection-manager.js.map +1 -0
- package/build/connection-manager.test.d.ts +11 -0
- package/build/connection-manager.test.d.ts.map +1 -0
- package/build/connection-manager.test.js +114 -0
- package/build/connection-manager.test.js.map +1 -0
- package/build/console-monitor.d.ts +150 -0
- package/build/console-monitor.d.ts.map +1 -0
- package/build/console-monitor.js +454 -0
- package/build/console-monitor.js.map +1 -0
- package/build/dashboard/bundle.js +1 -0
- package/build/dashboard/dashboard-client.d.ts +42 -0
- package/build/dashboard/dashboard-client.d.ts.map +1 -0
- package/build/dashboard/dashboard-client.js +184 -0
- package/build/dashboard/dashboard-client.js.map +1 -0
- package/build/dashboard/dashboard-hub.d.ts +50 -0
- package/build/dashboard/dashboard-hub.d.ts.map +1 -0
- package/build/dashboard/dashboard-hub.js +654 -0
- package/build/dashboard/dashboard-hub.js.map +1 -0
- package/build/dashboard/hub-lock.d.ts +16 -0
- package/build/dashboard/hub-lock.d.ts.map +1 -0
- package/build/dashboard/hub-lock.js +77 -0
- package/build/dashboard/hub-lock.js.map +1 -0
- package/build/dashboard/index.d.ts +25 -0
- package/build/dashboard/index.d.ts.map +1 -0
- package/build/dashboard/index.js +77 -0
- package/build/dashboard/index.js.map +1 -0
- package/build/dashboard/types.d.ts +83 -0
- package/build/dashboard/types.d.ts.map +1 -0
- package/build/dashboard/types.js +6 -0
- package/build/dashboard/types.js.map +1 -0
- package/build/debug-logger.d.ts +85 -0
- package/build/debug-logger.d.ts.map +1 -0
- package/build/debug-logger.js +195 -0
- package/build/debug-logger.js.map +1 -0
- package/build/debugger-aware-wrapper.d.ts +37 -0
- package/build/debugger-aware-wrapper.d.ts.map +1 -0
- package/build/debugger-aware-wrapper.js +128 -0
- package/build/debugger-aware-wrapper.js.map +1 -0
- package/build/dom-change-monitor.d.ts +92 -0
- package/build/dom-change-monitor.d.ts.map +1 -0
- package/build/dom-change-monitor.js +437 -0
- package/build/dom-change-monitor.js.map +1 -0
- package/build/element-collector.d.ts +16 -0
- package/build/element-collector.d.ts.map +1 -0
- package/build/element-collector.js +207 -0
- package/build/element-collector.js.map +1 -0
- package/build/error-helpers.d.ts +43 -0
- package/build/error-helpers.d.ts.map +1 -0
- package/build/error-helpers.js +143 -0
- package/build/error-helpers.js.map +1 -0
- package/build/formatters/console-formatter.d.ts +160 -0
- package/build/formatters/console-formatter.d.ts.map +1 -0
- package/build/formatters/console-formatter.js +338 -0
- package/build/formatters/console-formatter.js.map +1 -0
- package/build/helpers/parser-plugins.d.ts +44 -0
- package/build/helpers/parser-plugins.d.ts.map +1 -0
- package/build/helpers/parser-plugins.js +102 -0
- package/build/helpers/parser-plugins.js.map +1 -0
- package/build/helpers/paths.d.ts +79 -0
- package/build/helpers/paths.d.ts.map +1 -0
- package/build/helpers/paths.js +168 -0
- package/build/helpers/paths.js.map +1 -0
- package/build/helpers/process-liveness.d.ts +24 -0
- package/build/helpers/process-liveness.d.ts.map +1 -0
- package/build/helpers/process-liveness.js +36 -0
- package/build/helpers/process-liveness.js.map +1 -0
- package/build/helpers/process-liveness.test.d.ts +2 -0
- package/build/helpers/process-liveness.test.d.ts.map +1 -0
- package/build/helpers/process-liveness.test.js +40 -0
- package/build/helpers/process-liveness.test.js.map +1 -0
- package/build/helpers/sequence-tree.d.ts +27 -0
- package/build/helpers/sequence-tree.d.ts.map +1 -0
- package/build/helpers/sequence-tree.js +80 -0
- package/build/helpers/sequence-tree.js.map +1 -0
- package/build/helpers/sequence-tree.test.d.ts +2 -0
- package/build/helpers/sequence-tree.test.d.ts.map +1 -0
- package/build/helpers/sequence-tree.test.js +122 -0
- package/build/helpers/sequence-tree.test.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +2007 -0
- package/build/index.js.map +1 -0
- package/build/interaction-recorder.d.ts +214 -0
- package/build/interaction-recorder.d.ts.map +1 -0
- package/build/interaction-recorder.js +2007 -0
- package/build/interaction-recorder.js.map +1 -0
- package/build/issue-tracker.d.ts +107 -0
- package/build/issue-tracker.d.ts.map +1 -0
- package/build/issue-tracker.js +582 -0
- package/build/issue-tracker.js.map +1 -0
- package/build/issue-tracker.test.d.ts +2 -0
- package/build/issue-tracker.test.d.ts.map +1 -0
- package/build/issue-tracker.test.js +88 -0
- package/build/issue-tracker.test.js.map +1 -0
- package/build/launch-chrome-port.test.d.ts +14 -0
- package/build/launch-chrome-port.test.d.ts.map +1 -0
- package/build/launch-chrome-port.test.js +97 -0
- package/build/launch-chrome-port.test.js.map +1 -0
- package/build/log-processor/orchestrator.d.ts +32 -0
- package/build/log-processor/orchestrator.d.ts.map +1 -0
- package/build/log-processor/orchestrator.js +27 -0
- package/build/log-processor/orchestrator.js.map +1 -0
- package/build/logpoint-execution-tracker.d.ts +57 -0
- package/build/logpoint-execution-tracker.d.ts.map +1 -0
- package/build/logpoint-execution-tracker.js +112 -0
- package/build/logpoint-execution-tracker.js.map +1 -0
- package/build/mcp-supervisor.d.ts +3 -0
- package/build/mcp-supervisor.d.ts.map +1 -0
- package/build/mcp-supervisor.js +211 -0
- package/build/mcp-supervisor.js.map +1 -0
- package/build/messages.d.ts +165 -0
- package/build/messages.d.ts.map +1 -0
- package/build/messages.js +574 -0
- package/build/messages.js.map +1 -0
- package/build/network-monitor.d.ts +172 -0
- package/build/network-monitor.d.ts.map +1 -0
- package/build/network-monitor.js +350 -0
- package/build/network-monitor.js.map +1 -0
- package/build/overlays.d.ts +49 -0
- package/build/overlays.d.ts.map +1 -0
- package/build/overlays.js +409 -0
- package/build/overlays.js.map +1 -0
- package/build/persistent-profiles.test.d.ts +15 -0
- package/build/persistent-profiles.test.d.ts.map +1 -0
- package/build/persistent-profiles.test.js +470 -0
- package/build/persistent-profiles.test.js.map +1 -0
- package/build/port-reserver.d.ts +32 -0
- package/build/port-reserver.d.ts.map +1 -0
- package/build/port-reserver.js +118 -0
- package/build/port-reserver.js.map +1 -0
- package/build/puppeteer-manager.d.ts +47 -0
- package/build/puppeteer-manager.d.ts.map +1 -0
- package/build/puppeteer-manager.js +116 -0
- package/build/puppeteer-manager.js.map +1 -0
- package/build/recording-coverage.test.d.ts +12 -0
- package/build/recording-coverage.test.d.ts.map +1 -0
- package/build/recording-coverage.test.js +72 -0
- package/build/recording-coverage.test.js.map +1 -0
- package/build/reference-validator.d.ts +47 -0
- package/build/reference-validator.d.ts.map +1 -0
- package/build/reference-validator.js +86 -0
- package/build/reference-validator.js.map +1 -0
- package/build/reference-validator.test.d.ts +5 -0
- package/build/reference-validator.test.d.ts.map +1 -0
- package/build/reference-validator.test.js +243 -0
- package/build/reference-validator.test.js.map +1 -0
- package/build/replay-cursor.d.ts +27 -0
- package/build/replay-cursor.d.ts.map +1 -0
- package/build/replay-cursor.js +240 -0
- package/build/replay-cursor.js.map +1 -0
- package/build/runners/docker-compose-runner.d.ts +69 -0
- package/build/runners/docker-compose-runner.d.ts.map +1 -0
- package/build/runners/docker-compose-runner.js +438 -0
- package/build/runners/docker-compose-runner.js.map +1 -0
- package/build/runners/docker-runner.d.ts +65 -0
- package/build/runners/docker-runner.d.ts.map +1 -0
- package/build/runners/docker-runner.js +414 -0
- package/build/runners/docker-runner.js.map +1 -0
- package/build/runners/index.d.ts +19 -0
- package/build/runners/index.d.ts.map +1 -0
- package/build/runners/index.js +35 -0
- package/build/runners/index.js.map +1 -0
- package/build/runners/native-runner.d.ts +95 -0
- package/build/runners/native-runner.d.ts.map +1 -0
- package/build/runners/native-runner.js +370 -0
- package/build/runners/native-runner.js.map +1 -0
- package/build/runners/types.d.ts +147 -0
- package/build/runners/types.d.ts.map +1 -0
- package/build/runners/types.js +25 -0
- package/build/runners/types.js.map +1 -0
- package/build/self-restart.d.ts +12 -0
- package/build/self-restart.d.ts.map +1 -0
- package/build/self-restart.js +41 -0
- package/build/self-restart.js.map +1 -0
- package/build/self-restart.test.d.ts +2 -0
- package/build/self-restart.test.d.ts.map +1 -0
- package/build/self-restart.test.js +34 -0
- package/build/self-restart.test.js.map +1 -0
- package/build/server-claims.d.ts +161 -0
- package/build/server-claims.d.ts.map +1 -0
- package/build/server-claims.js +382 -0
- package/build/server-claims.js.map +1 -0
- package/build/server-claims.test.d.ts +2 -0
- package/build/server-claims.test.d.ts.map +1 -0
- package/build/server-claims.test.js +197 -0
- package/build/server-claims.test.js.map +1 -0
- package/build/server-manager.d.ts +438 -0
- package/build/server-manager.d.ts.map +1 -0
- package/build/server-manager.js +1674 -0
- package/build/server-manager.js.map +1 -0
- package/build/server-manager.test.d.ts +17 -0
- package/build/server-manager.test.d.ts.map +1 -0
- package/build/server-manager.test.js +122 -0
- package/build/server-manager.test.js.map +1 -0
- package/build/server-ownership.test.d.ts +2 -0
- package/build/server-ownership.test.d.ts.map +1 -0
- package/build/server-ownership.test.js +238 -0
- package/build/server-ownership.test.js.map +1 -0
- package/build/server-watcher.d.ts +21 -0
- package/build/server-watcher.d.ts.map +1 -0
- package/build/server-watcher.js +105 -0
- package/build/server-watcher.js.map +1 -0
- package/build/session-detector.d.ts +47 -0
- package/build/session-detector.d.ts.map +1 -0
- package/build/session-detector.js +229 -0
- package/build/session-detector.js.map +1 -0
- package/build/session-detector.test.d.ts +9 -0
- package/build/session-detector.test.d.ts.map +1 -0
- package/build/session-detector.test.js +45 -0
- package/build/session-detector.test.js.map +1 -0
- package/build/sourcemap-handler.d.ts +114 -0
- package/build/sourcemap-handler.d.ts.map +1 -0
- package/build/sourcemap-handler.js +479 -0
- package/build/sourcemap-handler.js.map +1 -0
- package/build/supervisor/child-manager.d.ts +43 -0
- package/build/supervisor/child-manager.d.ts.map +1 -0
- package/build/supervisor/child-manager.js +148 -0
- package/build/supervisor/child-manager.js.map +1 -0
- package/build/supervisor/child-manager.test.d.ts +2 -0
- package/build/supervisor/child-manager.test.d.ts.map +1 -0
- package/build/supervisor/child-manager.test.js +107 -0
- package/build/supervisor/child-manager.test.js.map +1 -0
- package/build/supervisor/client-watcher.d.ts +48 -0
- package/build/supervisor/client-watcher.d.ts.map +1 -0
- package/build/supervisor/client-watcher.js +186 -0
- package/build/supervisor/client-watcher.js.map +1 -0
- package/build/supervisor/client-watcher.test.d.ts +2 -0
- package/build/supervisor/client-watcher.test.d.ts.map +1 -0
- package/build/supervisor/client-watcher.test.js +121 -0
- package/build/supervisor/client-watcher.test.js.map +1 -0
- package/build/supervisor/idle-config.d.ts +30 -0
- package/build/supervisor/idle-config.d.ts.map +1 -0
- package/build/supervisor/idle-config.js +76 -0
- package/build/supervisor/idle-config.js.map +1 -0
- package/build/supervisor/idle-config.test.d.ts +2 -0
- package/build/supervisor/idle-config.test.d.ts.map +1 -0
- package/build/supervisor/idle-config.test.js +119 -0
- package/build/supervisor/idle-config.test.js.map +1 -0
- package/build/supervisor/ndjson-reader.d.ts +47 -0
- package/build/supervisor/ndjson-reader.d.ts.map +1 -0
- package/build/supervisor/ndjson-reader.js +75 -0
- package/build/supervisor/ndjson-reader.js.map +1 -0
- package/build/supervisor/ndjson-reader.test.d.ts +2 -0
- package/build/supervisor/ndjson-reader.test.d.ts.map +1 -0
- package/build/supervisor/ndjson-reader.test.js +92 -0
- package/build/supervisor/ndjson-reader.test.js.map +1 -0
- package/build/supervisor/pidfile.d.ts +11 -0
- package/build/supervisor/pidfile.d.ts.map +1 -0
- package/build/supervisor/pidfile.js +29 -0
- package/build/supervisor/pidfile.js.map +1 -0
- package/build/supervisor/pidfile.test.d.ts +8 -0
- package/build/supervisor/pidfile.test.d.ts.map +1 -0
- package/build/supervisor/pidfile.test.js +46 -0
- package/build/supervisor/pidfile.test.js.map +1 -0
- package/build/supervisor/restart-coordinator.d.ts +73 -0
- package/build/supervisor/restart-coordinator.d.ts.map +1 -0
- package/build/supervisor/restart-coordinator.js +300 -0
- package/build/supervisor/restart-coordinator.js.map +1 -0
- package/build/supervisor/restart-coordinator.test.d.ts +2 -0
- package/build/supervisor/restart-coordinator.test.d.ts.map +1 -0
- package/build/supervisor/restart-coordinator.test.js +434 -0
- package/build/supervisor/restart-coordinator.test.js.map +1 -0
- package/build/test-support/fake-execute-tool-call.d.ts +11 -0
- package/build/test-support/fake-execute-tool-call.d.ts.map +1 -0
- package/build/test-support/fake-execute-tool-call.js +19 -0
- package/build/test-support/fake-execute-tool-call.js.map +1 -0
- package/build/tool-error.d.ts +14 -0
- package/build/tool-error.d.ts.map +1 -0
- package/build/tool-error.js +18 -0
- package/build/tool-error.js.map +1 -0
- package/build/tool-response.d.ts +293 -0
- package/build/tool-response.d.ts.map +1 -0
- package/build/tool-response.js +365 -0
- package/build/tool-response.js.map +1 -0
- package/build/tools/assert-tools.d.ts +62 -0
- package/build/tools/assert-tools.d.ts.map +1 -0
- package/build/tools/assert-tools.js +330 -0
- package/build/tools/assert-tools.js.map +1 -0
- package/build/tools/breakpoint-await-abort.test.d.ts +2 -0
- package/build/tools/breakpoint-await-abort.test.d.ts.map +1 -0
- package/build/tools/breakpoint-await-abort.test.js +124 -0
- package/build/tools/breakpoint-await-abort.test.js.map +1 -0
- package/build/tools/breakpoint-tools.d.ts +99 -0
- package/build/tools/breakpoint-tools.d.ts.map +1 -0
- package/build/tools/breakpoint-tools.js +1197 -0
- package/build/tools/breakpoint-tools.js.map +1 -0
- package/build/tools/config-tools.d.ts +58 -0
- package/build/tools/config-tools.d.ts.map +1 -0
- package/build/tools/config-tools.js +180 -0
- package/build/tools/config-tools.js.map +1 -0
- package/build/tools/connection-routing.test.d.ts +12 -0
- package/build/tools/connection-routing.test.d.ts.map +1 -0
- package/build/tools/connection-routing.test.js +206 -0
- package/build/tools/connection-routing.test.js.map +1 -0
- package/build/tools/console-tools.d.ts +84 -0
- package/build/tools/console-tools.d.ts.map +1 -0
- package/build/tools/console-tools.js +241 -0
- package/build/tools/console-tools.js.map +1 -0
- package/build/tools/content-tools.d.ts +74 -0
- package/build/tools/content-tools.d.ts.map +1 -0
- package/build/tools/content-tools.js +582 -0
- package/build/tools/content-tools.js.map +1 -0
- package/build/tools/dashboard-tools.d.ts +38 -0
- package/build/tools/dashboard-tools.d.ts.map +1 -0
- package/build/tools/dashboard-tools.js +123 -0
- package/build/tools/dashboard-tools.js.map +1 -0
- package/build/tools/dom-tools.d.ts +41 -0
- package/build/tools/dom-tools.d.ts.map +1 -0
- package/build/tools/dom-tools.js +277 -0
- package/build/tools/dom-tools.js.map +1 -0
- package/build/tools/download-tools.d.ts +55 -0
- package/build/tools/download-tools.d.ts.map +1 -0
- package/build/tools/download-tools.js +280 -0
- package/build/tools/download-tools.js.map +1 -0
- package/build/tools/execution-tools.d.ts +40 -0
- package/build/tools/execution-tools.d.ts.map +1 -0
- package/build/tools/execution-tools.js +121 -0
- package/build/tools/execution-tools.js.map +1 -0
- package/build/tools/input-abort.test.d.ts +2 -0
- package/build/tools/input-abort.test.d.ts.map +1 -0
- package/build/tools/input-abort.test.js +227 -0
- package/build/tools/input-abort.test.js.map +1 -0
- package/build/tools/input-ambiguous-selector.test.d.ts +2 -0
- package/build/tools/input-ambiguous-selector.test.d.ts.map +1 -0
- package/build/tools/input-ambiguous-selector.test.js +34 -0
- package/build/tools/input-ambiguous-selector.test.js.map +1 -0
- package/build/tools/input-tools.d.ts +168 -0
- package/build/tools/input-tools.d.ts.map +1 -0
- package/build/tools/input-tools.js +1397 -0
- package/build/tools/input-tools.js.map +1 -0
- package/build/tools/inspection-tools.d.ts +112 -0
- package/build/tools/inspection-tools.d.ts.map +1 -0
- package/build/tools/inspection-tools.js +637 -0
- package/build/tools/inspection-tools.js.map +1 -0
- package/build/tools/interpolation.d.ts +30 -0
- package/build/tools/interpolation.d.ts.map +1 -0
- package/build/tools/interpolation.js +143 -0
- package/build/tools/interpolation.js.map +1 -0
- package/build/tools/issues-abort-hygiene.test.d.ts +2 -0
- package/build/tools/issues-abort-hygiene.test.d.ts.map +1 -0
- package/build/tools/issues-abort-hygiene.test.js +79 -0
- package/build/tools/issues-abort-hygiene.test.js.map +1 -0
- package/build/tools/issues-tools.d.ts +98 -0
- package/build/tools/issues-tools.d.ts.map +1 -0
- package/build/tools/issues-tools.js +821 -0
- package/build/tools/issues-tools.js.map +1 -0
- package/build/tools/issues-tools.test.d.ts +8 -0
- package/build/tools/issues-tools.test.d.ts.map +1 -0
- package/build/tools/issues-tools.test.js +184 -0
- package/build/tools/issues-tools.test.js.map +1 -0
- package/build/tools/modal-tools.d.ts +73 -0
- package/build/tools/modal-tools.d.ts.map +1 -0
- package/build/tools/modal-tools.js +161 -0
- package/build/tools/modal-tools.js.map +1 -0
- package/build/tools/network-tools.d.ts +72 -0
- package/build/tools/network-tools.d.ts.map +1 -0
- package/build/tools/network-tools.js +432 -0
- package/build/tools/network-tools.js.map +1 -0
- package/build/tools/page-tools.d.ts +78 -0
- package/build/tools/page-tools.d.ts.map +1 -0
- package/build/tools/page-tools.js +255 -0
- package/build/tools/page-tools.js.map +1 -0
- package/build/tools/plugin-tools.d.ts +16 -0
- package/build/tools/plugin-tools.d.ts.map +1 -0
- package/build/tools/plugin-tools.js +17 -0
- package/build/tools/plugin-tools.js.map +1 -0
- package/build/tools/replay-abort.test.d.ts +2 -0
- package/build/tools/replay-abort.test.d.ts.map +1 -0
- package/build/tools/replay-abort.test.js +259 -0
- package/build/tools/replay-abort.test.js.map +1 -0
- package/build/tools/replay-add-conditional.test.d.ts +2 -0
- package/build/tools/replay-add-conditional.test.d.ts.map +1 -0
- package/build/tools/replay-add-conditional.test.js +205 -0
- package/build/tools/replay-add-conditional.test.js.map +1 -0
- package/build/tools/replay-background-run.test.d.ts +2 -0
- package/build/tools/replay-background-run.test.d.ts.map +1 -0
- package/build/tools/replay-background-run.test.js +176 -0
- package/build/tools/replay-background-run.test.js.map +1 -0
- package/build/tools/replay-capture-variables.test.d.ts +2 -0
- package/build/tools/replay-capture-variables.test.d.ts.map +1 -0
- package/build/tools/replay-capture-variables.test.js +331 -0
- package/build/tools/replay-capture-variables.test.js.map +1 -0
- package/build/tools/replay-conditional-idb-and-launch.test.d.ts +11 -0
- package/build/tools/replay-conditional-idb-and-launch.test.d.ts.map +1 -0
- package/build/tools/replay-conditional-idb-and-launch.test.js +429 -0
- package/build/tools/replay-conditional-idb-and-launch.test.js.map +1 -0
- package/build/tools/replay-conditional-timeout.test.d.ts +14 -0
- package/build/tools/replay-conditional-timeout.test.d.ts.map +1 -0
- package/build/tools/replay-conditional-timeout.test.js +126 -0
- package/build/tools/replay-conditional-timeout.test.js.map +1 -0
- package/build/tools/replay-declare.test.d.ts +2 -0
- package/build/tools/replay-declare.test.d.ts.map +1 -0
- package/build/tools/replay-declare.test.js +106 -0
- package/build/tools/replay-declare.test.js.map +1 -0
- package/build/tools/replay-declared-browser-cleanup.test.d.ts +2 -0
- package/build/tools/replay-declared-browser-cleanup.test.d.ts.map +1 -0
- package/build/tools/replay-declared-browser-cleanup.test.js +103 -0
- package/build/tools/replay-declared-browser-cleanup.test.js.map +1 -0
- package/build/tools/replay-declared-profile.test.d.ts +2 -0
- package/build/tools/replay-declared-profile.test.d.ts.map +1 -0
- package/build/tools/replay-declared-profile.test.js +116 -0
- package/build/tools/replay-declared-profile.test.js.map +1 -0
- package/build/tools/replay-executor.d.ts +556 -0
- package/build/tools/replay-executor.d.ts.map +1 -0
- package/build/tools/replay-executor.js +2347 -0
- package/build/tools/replay-executor.js.map +1 -0
- package/build/tools/replay-folder-save.test.d.ts +2 -0
- package/build/tools/replay-folder-save.test.d.ts.map +1 -0
- package/build/tools/replay-folder-save.test.js +63 -0
- package/build/tools/replay-folder-save.test.js.map +1 -0
- package/build/tools/replay-formatters.d.ts +148 -0
- package/build/tools/replay-formatters.d.ts.map +1 -0
- package/build/tools/replay-formatters.js +856 -0
- package/build/tools/replay-formatters.js.map +1 -0
- package/build/tools/replay-kill-chrome-on-finish.test.d.ts +2 -0
- package/build/tools/replay-kill-chrome-on-finish.test.d.ts.map +1 -0
- package/build/tools/replay-kill-chrome-on-finish.test.js +175 -0
- package/build/tools/replay-kill-chrome-on-finish.test.js.map +1 -0
- package/build/tools/replay-multi-connection.test.d.ts +2 -0
- package/build/tools/replay-multi-connection.test.d.ts.map +1 -0
- package/build/tools/replay-multi-connection.test.js +547 -0
- package/build/tools/replay-multi-connection.test.js.map +1 -0
- package/build/tools/replay-output-and-record-options.test.d.ts +2 -0
- package/build/tools/replay-output-and-record-options.test.d.ts.map +1 -0
- package/build/tools/replay-output-and-record-options.test.js +240 -0
- package/build/tools/replay-output-and-record-options.test.js.map +1 -0
- package/build/tools/replay-production-error-shape.test.d.ts +7 -0
- package/build/tools/replay-production-error-shape.test.d.ts.map +1 -0
- package/build/tools/replay-production-error-shape.test.js +93 -0
- package/build/tools/replay-production-error-shape.test.js.map +1 -0
- package/build/tools/replay-rebase.test.d.ts +2 -0
- package/build/tools/replay-rebase.test.d.ts.map +1 -0
- package/build/tools/replay-rebase.test.js +58 -0
- package/build/tools/replay-rebase.test.js.map +1 -0
- package/build/tools/replay-retry-classification.test.d.ts +9 -0
- package/build/tools/replay-retry-classification.test.d.ts.map +1 -0
- package/build/tools/replay-retry-classification.test.js +57 -0
- package/build/tools/replay-retry-classification.test.js.map +1 -0
- package/build/tools/replay-run-registry.d.ts +55 -0
- package/build/tools/replay-run-registry.d.ts.map +1 -0
- package/build/tools/replay-run-registry.js +65 -0
- package/build/tools/replay-run-registry.js.map +1 -0
- package/build/tools/replay-sequence-reload.test.d.ts +2 -0
- package/build/tools/replay-sequence-reload.test.d.ts.map +1 -0
- package/build/tools/replay-sequence-reload.test.js +82 -0
- package/build/tools/replay-sequence-reload.test.js.map +1 -0
- package/build/tools/replay-socket-scope.test.d.ts +2 -0
- package/build/tools/replay-socket-scope.test.d.ts.map +1 -0
- package/build/tools/replay-socket-scope.test.js +75 -0
- package/build/tools/replay-socket-scope.test.js.map +1 -0
- package/build/tools/replay-step-connection.test.d.ts +2 -0
- package/build/tools/replay-step-connection.test.d.ts.map +1 -0
- package/build/tools/replay-step-connection.test.js +292 -0
- package/build/tools/replay-step-connection.test.js.map +1 -0
- package/build/tools/replay-step-timeout.test.d.ts +2 -0
- package/build/tools/replay-step-timeout.test.d.ts.map +1 -0
- package/build/tools/replay-step-timeout.test.js +204 -0
- package/build/tools/replay-step-timeout.test.js.map +1 -0
- package/build/tools/replay-tags.test.d.ts +2 -0
- package/build/tools/replay-tags.test.d.ts.map +1 -0
- package/build/tools/replay-tags.test.js +99 -0
- package/build/tools/replay-tags.test.js.map +1 -0
- package/build/tools/replay-teardown-and-foreach.test.d.ts +13 -0
- package/build/tools/replay-teardown-and-foreach.test.d.ts.map +1 -0
- package/build/tools/replay-teardown-and-foreach.test.js +318 -0
- package/build/tools/replay-teardown-and-foreach.test.js.map +1 -0
- package/build/tools/replay-tool-name-validation.test.d.ts +2 -0
- package/build/tools/replay-tool-name-validation.test.d.ts.map +1 -0
- package/build/tools/replay-tool-name-validation.test.js +280 -0
- package/build/tools/replay-tool-name-validation.test.js.map +1 -0
- package/build/tools/replay-tools.d.ts +288 -0
- package/build/tools/replay-tools.d.ts.map +1 -0
- package/build/tools/replay-tools.js +2994 -0
- package/build/tools/replay-tools.js.map +1 -0
- package/build/tools/request-abort.test.d.ts +2 -0
- package/build/tools/request-abort.test.d.ts.map +1 -0
- package/build/tools/request-abort.test.js +130 -0
- package/build/tools/request-abort.test.js.map +1 -0
- package/build/tools/request-tools.d.ts +56 -0
- package/build/tools/request-tools.d.ts.map +1 -0
- package/build/tools/request-tools.js +174 -0
- package/build/tools/request-tools.js.map +1 -0
- package/build/tools/screenshot-tools.d.ts +135 -0
- package/build/tools/screenshot-tools.d.ts.map +1 -0
- package/build/tools/screenshot-tools.js +636 -0
- package/build/tools/screenshot-tools.js.map +1 -0
- package/build/tools/server-tools.d.ts +88 -0
- package/build/tools/server-tools.d.ts.map +1 -0
- package/build/tools/server-tools.js +485 -0
- package/build/tools/server-tools.js.map +1 -0
- package/build/tools/source-tools.d.ts +46 -0
- package/build/tools/source-tools.d.ts.map +1 -0
- package/build/tools/source-tools.js +47 -0
- package/build/tools/source-tools.js.map +1 -0
- package/build/tools/storage-tools.d.ts +141 -0
- package/build/tools/storage-tools.d.ts.map +1 -0
- package/build/tools/storage-tools.js +894 -0
- package/build/tools/storage-tools.js.map +1 -0
- package/build/tools/storage-tools.test.d.ts +13 -0
- package/build/tools/storage-tools.test.d.ts.map +1 -0
- package/build/tools/storage-tools.test.js +707 -0
- package/build/tools/storage-tools.test.js.map +1 -0
- package/build/tools/tab-tools.d.ts +42 -0
- package/build/tools/tab-tools.d.ts.map +1 -0
- package/build/tools/tab-tools.js +296 -0
- package/build/tools/tab-tools.js.map +1 -0
- package/build/tools/wait-tools.d.ts +85 -0
- package/build/tools/wait-tools.d.ts.map +1 -0
- package/build/tools/wait-tools.js +236 -0
- package/build/tools/wait-tools.js.map +1 -0
- package/build/tools/wait-tools.test.d.ts +9 -0
- package/build/tools/wait-tools.test.d.ts.map +1 -0
- package/build/tools/wait-tools.test.js +193 -0
- package/build/tools/wait-tools.test.js.map +1 -0
- package/build/types.d.ts +133 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +5 -0
- package/build/types.js.map +1 -0
- package/build/ui-verifier.d.ts +88 -0
- package/build/ui-verifier.d.ts.map +1 -0
- package/build/ui-verifier.js +540 -0
- package/build/ui-verifier.js.map +1 -0
- package/build/utils/abort.d.ts +68 -0
- package/build/utils/abort.d.ts.map +1 -0
- package/build/utils/abort.js +159 -0
- package/build/utils/abort.js.map +1 -0
- package/build/utils/abort.test.d.ts +2 -0
- package/build/utils/abort.test.d.ts.map +1 -0
- package/build/utils/abort.test.js +174 -0
- package/build/utils/abort.test.js.map +1 -0
- package/build/utils/modal-detection-core.d.ts +150 -0
- package/build/utils/modal-detection-core.d.ts.map +1 -0
- package/build/utils/modal-detection-core.js +332 -0
- package/build/utils/modal-detection-core.js.map +1 -0
- package/build/utils/modal-detection-core.test.d.ts +5 -0
- package/build/utils/modal-detection-core.test.d.ts.map +1 -0
- package/build/utils/modal-detection-core.test.js +492 -0
- package/build/utils/modal-detection-core.test.js.map +1 -0
- package/build/utils/modal-detector.d.ts +29 -0
- package/build/utils/modal-detector.d.ts.map +1 -0
- package/build/utils/modal-detector.js +281 -0
- package/build/utils/modal-detector.js.map +1 -0
- package/build/utils/modal-dismissal.d.ts +32 -0
- package/build/utils/modal-dismissal.d.ts.map +1 -0
- package/build/utils/modal-dismissal.js +190 -0
- package/build/utils/modal-dismissal.js.map +1 -0
- package/build/utils/port-check.d.ts +31 -0
- package/build/utils/port-check.d.ts.map +1 -0
- package/build/utils/port-check.js +87 -0
- package/build/utils/port-check.js.map +1 -0
- package/build/utils/port-check.test.d.ts +2 -0
- package/build/utils/port-check.test.d.ts.map +1 -0
- package/build/utils/port-check.test.js +66 -0
- package/build/utils/port-check.test.js.map +1 -0
- package/build/utils/selector-resolver.d.ts +66 -0
- package/build/utils/selector-resolver.d.ts.map +1 -0
- package/build/utils/selector-resolver.js +200 -0
- package/build/utils/selector-resolver.js.map +1 -0
- package/build/validation-helpers.d.ts +41 -0
- package/build/validation-helpers.d.ts.map +1 -0
- package/build/validation-helpers.js +236 -0
- package/build/validation-helpers.js.map +1 -0
- package/build/window-sizing.d.ts +26 -0
- package/build/window-sizing.d.ts.map +1 -0
- package/build/window-sizing.js +87 -0
- package/build/window-sizing.js.map +1 -0
- package/build/window-sizing.test.d.ts +8 -0
- package/build/window-sizing.test.d.ts.map +1 -0
- package/build/window-sizing.test.js +113 -0
- package/build/window-sizing.test.js.map +1 -0
- package/docs/README.md +74 -0
- package/docs/automation.md +562 -0
- package/docs/debugging.md +229 -0
- package/docs/installation.md +133 -0
- package/docs/instructions.md +227 -0
- package/docs/mcp-instructions.md +15 -0
- package/docs/message-system.md +327 -0
- package/docs/messages.md +3480 -0
- package/docs/parser-plugins.md +132 -0
- package/docs/replay.md +1411 -0
- package/docs/troubleshooting.md +272 -0
- package/docs/working_with_llm_notes.md +5 -0
- package/package.json +87 -0
- package/skills/devharness/SKILL.md +195 -0
- package/skills/devharness/references/sequences.md +613 -0
- package/skills/devharness/references/tool-categories.md +99 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abort utilities (#110) - the shared vocabulary for cancellation.
|
|
3
|
+
*
|
|
4
|
+
* Handlers that observe an AbortSignal THROW an abort-shaped error (never
|
|
5
|
+
* return an isError response); callers classify with isAbortError. linkSignals
|
|
6
|
+
* is hand-rolled instead of AbortSignal.any because (a) `engines` allows Node
|
|
7
|
+
* >=18.0.0 and AbortSignal.any needs 18.17/20.3, and (b) AbortSignal.any can
|
|
8
|
+
* never detach its listeners - this code links against a long-lived run
|
|
9
|
+
* signal once per step, so dispose() in a `finally` is mandatory to keep a
|
|
10
|
+
* 500-step run from accumulating hundreds of dead listeners.
|
|
11
|
+
*/
|
|
12
|
+
/** Error thrown when an operation is cancelled via an AbortSignal. */
|
|
13
|
+
export declare class AbortError extends Error {
|
|
14
|
+
readonly reason?: unknown | undefined;
|
|
15
|
+
readonly code = "ABORTED";
|
|
16
|
+
constructor(message?: string, reason?: unknown | undefined);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Whether an error means "cancelled" rather than "failed".
|
|
20
|
+
*
|
|
21
|
+
* Matches by name, not instanceof, because aborts arrive in several shapes:
|
|
22
|
+
* our own AbortError class, the DOMException fetch throws (NOT instanceof
|
|
23
|
+
* Error in every runtime), and whatever `signal.throwIfAborted()` rethrows
|
|
24
|
+
* (the signal's reason - a DOMException by default, anything the aborter
|
|
25
|
+
* passed otherwise). Getting this wrong turns a user's cancel into a
|
|
26
|
+
* "genuine failure" with diagnostics gathered against a browser they just
|
|
27
|
+
* tore down.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isAbortError(err: unknown): boolean;
|
|
30
|
+
/** The abort-shaped error to raise for `signal`: its reason when the reason
|
|
31
|
+
* is itself abort-shaped, a fresh AbortError wrapping it otherwise. */
|
|
32
|
+
export declare function abortErrorFor(signal: AbortSignal): Error;
|
|
33
|
+
/** Throw the abort-shaped error for `signal` if it has already aborted. */
|
|
34
|
+
export declare function throwIfAborted(signal?: AbortSignal): void;
|
|
35
|
+
export interface LinkedSignal {
|
|
36
|
+
signal: AbortSignal;
|
|
37
|
+
/** Detach every listener this link attached to its input signals. MUST be
|
|
38
|
+
* called (in a `finally`) once the linked operation settles - the inputs
|
|
39
|
+
* may be long-lived run signals that outlive the operation by minutes. */
|
|
40
|
+
dispose(): void;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Combine signals: the returned signal aborts as soon as ANY input does
|
|
44
|
+
* (immediately, if one already has), carrying that input's reason.
|
|
45
|
+
* Undefined inputs are skipped so optional signals compose without ceremony.
|
|
46
|
+
*/
|
|
47
|
+
export declare function linkSignals(...signals: Array<AbortSignal | undefined>): LinkedSignal;
|
|
48
|
+
/**
|
|
49
|
+
* Sleep that REJECTS (with an abort-shaped error) when `signal` aborts.
|
|
50
|
+
* Listener and timer are cleaned up on every path.
|
|
51
|
+
*/
|
|
52
|
+
export declare function abortableSleep(ms: number, signal?: AbortSignal): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Await `promise` unless `signal` aborts first, in which case REJECT with an
|
|
55
|
+
* abort-shaped error and stop waiting. The underlying work is NOT cancelled -
|
|
56
|
+
* this is "stop waiting", for operations with no cancellation API (a page
|
|
57
|
+
* navigation already handed to the browser). On abort the orphaned promise
|
|
58
|
+
* gets a no-op catch so its eventual rejection never surfaces as unhandled.
|
|
59
|
+
* The listener is detached on every path.
|
|
60
|
+
*/
|
|
61
|
+
export declare function raceAbort<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
62
|
+
/**
|
|
63
|
+
* Non-throwing sleep variant preserving the replay executor's shape: resolves
|
|
64
|
+
* `true` if the signal aborted before the delay elapsed, `false` otherwise.
|
|
65
|
+
* Unlike the bespoke helper it replaces, cleanup leaves no extra timer alive.
|
|
66
|
+
*/
|
|
67
|
+
export declare function abortableDelayResult(ms: number, signal?: AbortSignal): Promise<boolean>;
|
|
68
|
+
//# sourceMappingURL=abort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../src/utils/abort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,sEAAsE;AACtE,qBAAa,UAAW,SAAQ,KAAK;aAEwB,MAAM,CAAC,EAAE,OAAO;IAD3E,QAAQ,CAAC,IAAI,aAAa;gBACd,OAAO,SAAsB,EAAkB,MAAM,CAAC,EAAE,OAAO,YAAA;CAI5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAMlD;AAED;wEACwE;AACxE,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAIxD;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAEzD;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB;;+EAE2E;IAC3E,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,YAAY,CAiCpF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB9E;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAuBlF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBvF"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abort utilities (#110) - the shared vocabulary for cancellation.
|
|
3
|
+
*
|
|
4
|
+
* Handlers that observe an AbortSignal THROW an abort-shaped error (never
|
|
5
|
+
* return an isError response); callers classify with isAbortError. linkSignals
|
|
6
|
+
* is hand-rolled instead of AbortSignal.any because (a) `engines` allows Node
|
|
7
|
+
* >=18.0.0 and AbortSignal.any needs 18.17/20.3, and (b) AbortSignal.any can
|
|
8
|
+
* never detach its listeners - this code links against a long-lived run
|
|
9
|
+
* signal once per step, so dispose() in a `finally` is mandatory to keep a
|
|
10
|
+
* 500-step run from accumulating hundreds of dead listeners.
|
|
11
|
+
*/
|
|
12
|
+
/** Error thrown when an operation is cancelled via an AbortSignal. */
|
|
13
|
+
export class AbortError extends Error {
|
|
14
|
+
reason;
|
|
15
|
+
code = 'ABORTED';
|
|
16
|
+
constructor(message = 'Operation aborted', reason) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.reason = reason;
|
|
19
|
+
this.name = 'AbortError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Whether an error means "cancelled" rather than "failed".
|
|
24
|
+
*
|
|
25
|
+
* Matches by name, not instanceof, because aborts arrive in several shapes:
|
|
26
|
+
* our own AbortError class, the DOMException fetch throws (NOT instanceof
|
|
27
|
+
* Error in every runtime), and whatever `signal.throwIfAborted()` rethrows
|
|
28
|
+
* (the signal's reason - a DOMException by default, anything the aborter
|
|
29
|
+
* passed otherwise). Getting this wrong turns a user's cancel into a
|
|
30
|
+
* "genuine failure" with diagnostics gathered against a browser they just
|
|
31
|
+
* tore down.
|
|
32
|
+
*/
|
|
33
|
+
export function isAbortError(err) {
|
|
34
|
+
return (typeof err === 'object' &&
|
|
35
|
+
err !== null &&
|
|
36
|
+
err.name === 'AbortError');
|
|
37
|
+
}
|
|
38
|
+
/** The abort-shaped error to raise for `signal`: its reason when the reason
|
|
39
|
+
* is itself abort-shaped, a fresh AbortError wrapping it otherwise. */
|
|
40
|
+
export function abortErrorFor(signal) {
|
|
41
|
+
const reason = signal.reason;
|
|
42
|
+
if (isAbortError(reason))
|
|
43
|
+
return reason;
|
|
44
|
+
return new AbortError('Operation aborted', reason);
|
|
45
|
+
}
|
|
46
|
+
/** Throw the abort-shaped error for `signal` if it has already aborted. */
|
|
47
|
+
export function throwIfAborted(signal) {
|
|
48
|
+
if (signal?.aborted)
|
|
49
|
+
throw abortErrorFor(signal);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Combine signals: the returned signal aborts as soon as ANY input does
|
|
53
|
+
* (immediately, if one already has), carrying that input's reason.
|
|
54
|
+
* Undefined inputs are skipped so optional signals compose without ceremony.
|
|
55
|
+
*/
|
|
56
|
+
export function linkSignals(...signals) {
|
|
57
|
+
const controller = new AbortController();
|
|
58
|
+
const inputs = signals.filter((s) => s !== undefined);
|
|
59
|
+
const attached = [];
|
|
60
|
+
const dispose = () => {
|
|
61
|
+
for (const { signal, onAbort } of attached) {
|
|
62
|
+
signal.removeEventListener('abort', onAbort);
|
|
63
|
+
}
|
|
64
|
+
attached.length = 0;
|
|
65
|
+
};
|
|
66
|
+
const forward = (source) => {
|
|
67
|
+
if (!controller.signal.aborted) {
|
|
68
|
+
controller.abort(source.reason ?? new AbortError());
|
|
69
|
+
}
|
|
70
|
+
// Once aborted the link is settled - the other inputs no longer matter.
|
|
71
|
+
dispose();
|
|
72
|
+
};
|
|
73
|
+
for (const input of inputs) {
|
|
74
|
+
if (input.aborted) {
|
|
75
|
+
forward(input);
|
|
76
|
+
return { signal: controller.signal, dispose };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
for (const input of inputs) {
|
|
80
|
+
const onAbort = () => forward(input);
|
|
81
|
+
input.addEventListener('abort', onAbort, { once: true });
|
|
82
|
+
attached.push({ signal: input, onAbort });
|
|
83
|
+
}
|
|
84
|
+
return { signal: controller.signal, dispose };
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Sleep that REJECTS (with an abort-shaped error) when `signal` aborts.
|
|
88
|
+
* Listener and timer are cleaned up on every path.
|
|
89
|
+
*/
|
|
90
|
+
export function abortableSleep(ms, signal) {
|
|
91
|
+
return new Promise((resolve, reject) => {
|
|
92
|
+
if (signal?.aborted) {
|
|
93
|
+
reject(abortErrorFor(signal));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const onAbort = () => {
|
|
97
|
+
clearTimeout(timer);
|
|
98
|
+
reject(abortErrorFor(signal));
|
|
99
|
+
};
|
|
100
|
+
const timer = setTimeout(() => {
|
|
101
|
+
signal?.removeEventListener('abort', onAbort);
|
|
102
|
+
resolve();
|
|
103
|
+
}, ms);
|
|
104
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Await `promise` unless `signal` aborts first, in which case REJECT with an
|
|
109
|
+
* abort-shaped error and stop waiting. The underlying work is NOT cancelled -
|
|
110
|
+
* this is "stop waiting", for operations with no cancellation API (a page
|
|
111
|
+
* navigation already handed to the browser). On abort the orphaned promise
|
|
112
|
+
* gets a no-op catch so its eventual rejection never surfaces as unhandled.
|
|
113
|
+
* The listener is detached on every path.
|
|
114
|
+
*/
|
|
115
|
+
export function raceAbort(promise, signal) {
|
|
116
|
+
if (!signal)
|
|
117
|
+
return promise;
|
|
118
|
+
if (signal.aborted) {
|
|
119
|
+
promise.catch(() => { });
|
|
120
|
+
return Promise.reject(abortErrorFor(signal));
|
|
121
|
+
}
|
|
122
|
+
return new Promise((resolve, reject) => {
|
|
123
|
+
const onAbort = () => {
|
|
124
|
+
promise.catch(() => { });
|
|
125
|
+
reject(abortErrorFor(signal));
|
|
126
|
+
};
|
|
127
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
128
|
+
promise.then((value) => {
|
|
129
|
+
signal.removeEventListener('abort', onAbort);
|
|
130
|
+
resolve(value);
|
|
131
|
+
}, (err) => {
|
|
132
|
+
signal.removeEventListener('abort', onAbort);
|
|
133
|
+
reject(err);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Non-throwing sleep variant preserving the replay executor's shape: resolves
|
|
139
|
+
* `true` if the signal aborted before the delay elapsed, `false` otherwise.
|
|
140
|
+
* Unlike the bespoke helper it replaces, cleanup leaves no extra timer alive.
|
|
141
|
+
*/
|
|
142
|
+
export function abortableDelayResult(ms, signal) {
|
|
143
|
+
return new Promise((resolve) => {
|
|
144
|
+
if (signal?.aborted) {
|
|
145
|
+
resolve(true);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const onAbort = () => {
|
|
149
|
+
clearTimeout(timer);
|
|
150
|
+
resolve(true);
|
|
151
|
+
};
|
|
152
|
+
const timer = setTimeout(() => {
|
|
153
|
+
signal?.removeEventListener('abort', onAbort);
|
|
154
|
+
resolve(false);
|
|
155
|
+
}, ms);
|
|
156
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=abort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.js","sourceRoot":"","sources":["../../src/utils/abort.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.test.d.ts","sourceRoot":"","sources":["../../src/utils/abort.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// @vitest-environment node
|
|
2
|
+
// (node, not happy-dom: events.getEventListeners only accepts Node's own
|
|
3
|
+
// EventTarget, and these tests assert listener hygiene on real AbortSignals)
|
|
4
|
+
/**
|
|
5
|
+
* Abort utilities (#110): linkSignals lifecycle/hygiene, abort-shape
|
|
6
|
+
* classification (including the DOMException fetch throws), and both sleep
|
|
7
|
+
* variants' cleanup behaviour.
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it, expect } from 'vitest';
|
|
10
|
+
import { getEventListeners } from 'node:events';
|
|
11
|
+
import { AbortError, isAbortError, abortErrorFor, throwIfAborted, linkSignals, abortableSleep, abortableDelayResult, } from './abort.js';
|
|
12
|
+
const listenerCount = (signal) => getEventListeners(signal, 'abort').length;
|
|
13
|
+
describe('isAbortError', () => {
|
|
14
|
+
it('matches our AbortError class', () => {
|
|
15
|
+
expect(isAbortError(new AbortError())).toBe(true);
|
|
16
|
+
});
|
|
17
|
+
it('matches the DOMException a real fetch abort produces', async () => {
|
|
18
|
+
const controller = new AbortController();
|
|
19
|
+
controller.abort();
|
|
20
|
+
// An already-aborted signal rejects before any connection is attempted.
|
|
21
|
+
const err = await fetch('http://127.0.0.1:1/', { signal: controller.signal })
|
|
22
|
+
.then(() => null, (e) => e);
|
|
23
|
+
expect(err).not.toBeNull();
|
|
24
|
+
expect(isAbortError(err)).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
it('matches what signal.throwIfAborted() throws (the default abort reason)', () => {
|
|
27
|
+
const controller = new AbortController();
|
|
28
|
+
controller.abort();
|
|
29
|
+
let thrown;
|
|
30
|
+
try {
|
|
31
|
+
controller.signal.throwIfAborted();
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
thrown = e;
|
|
35
|
+
}
|
|
36
|
+
expect(isAbortError(thrown)).toBe(true);
|
|
37
|
+
});
|
|
38
|
+
it('rejects genuine failures', () => {
|
|
39
|
+
expect(isAbortError(new Error('boom'))).toBe(false);
|
|
40
|
+
expect(isAbortError(new RangeError('nope'))).toBe(false);
|
|
41
|
+
expect(isAbortError(undefined)).toBe(false);
|
|
42
|
+
expect(isAbortError('AbortError')).toBe(false);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('throwIfAborted / abortErrorFor', () => {
|
|
46
|
+
it('throws an abort-shaped error carrying a custom reason', () => {
|
|
47
|
+
const controller = new AbortController();
|
|
48
|
+
const reason = new AbortError('run cancelled');
|
|
49
|
+
controller.abort(reason);
|
|
50
|
+
let thrown;
|
|
51
|
+
try {
|
|
52
|
+
throwIfAborted(controller.signal);
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
thrown = e;
|
|
56
|
+
}
|
|
57
|
+
expect(thrown).toBe(reason);
|
|
58
|
+
expect(isAbortError(abortErrorFor(controller.signal))).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
it('is a no-op on a live or missing signal', () => {
|
|
61
|
+
expect(() => throwIfAborted(new AbortController().signal)).not.toThrow();
|
|
62
|
+
expect(() => throwIfAborted(undefined)).not.toThrow();
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('linkSignals', () => {
|
|
66
|
+
it('aborts when either input aborts, carrying the reason', () => {
|
|
67
|
+
const a = new AbortController();
|
|
68
|
+
const b = new AbortController();
|
|
69
|
+
const link = linkSignals(a.signal, b.signal);
|
|
70
|
+
try {
|
|
71
|
+
expect(link.signal.aborted).toBe(false);
|
|
72
|
+
const reason = new AbortError('b fired');
|
|
73
|
+
b.abort(reason);
|
|
74
|
+
expect(link.signal.aborted).toBe(true);
|
|
75
|
+
expect(link.signal.reason).toBe(reason);
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
link.dispose();
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
it('aborts synchronously when an input is already aborted', () => {
|
|
82
|
+
const a = new AbortController();
|
|
83
|
+
a.abort(new AbortError('pre-aborted'));
|
|
84
|
+
const link = linkSignals(a.signal, new AbortController().signal);
|
|
85
|
+
expect(link.signal.aborted).toBe(true);
|
|
86
|
+
link.dispose();
|
|
87
|
+
});
|
|
88
|
+
it('skips undefined inputs', () => {
|
|
89
|
+
const a = new AbortController();
|
|
90
|
+
const link = linkSignals(undefined, a.signal, undefined);
|
|
91
|
+
try {
|
|
92
|
+
a.abort();
|
|
93
|
+
expect(link.signal.aborted).toBe(true);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
link.dispose();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
it('dispose() detaches every listener from the inputs', () => {
|
|
100
|
+
const a = new AbortController();
|
|
101
|
+
const b = new AbortController();
|
|
102
|
+
const link = linkSignals(a.signal, b.signal);
|
|
103
|
+
expect(listenerCount(a.signal)).toBe(1);
|
|
104
|
+
expect(listenerCount(b.signal)).toBe(1);
|
|
105
|
+
link.dispose();
|
|
106
|
+
expect(listenerCount(a.signal)).toBe(0);
|
|
107
|
+
expect(listenerCount(b.signal)).toBe(0);
|
|
108
|
+
// A post-dispose abort no longer propagates
|
|
109
|
+
a.abort();
|
|
110
|
+
expect(link.signal.aborted).toBe(false);
|
|
111
|
+
});
|
|
112
|
+
it('detaches from ALL inputs as soon as one aborts (no leak on the survivor)', () => {
|
|
113
|
+
const runController = new AbortController(); // long-lived
|
|
114
|
+
const step = new AbortController();
|
|
115
|
+
const link = linkSignals(runController.signal, step.signal);
|
|
116
|
+
step.abort();
|
|
117
|
+
expect(link.signal.aborted).toBe(true);
|
|
118
|
+
expect(listenerCount(runController.signal)).toBe(0);
|
|
119
|
+
link.dispose(); // idempotent
|
|
120
|
+
expect(listenerCount(runController.signal)).toBe(0);
|
|
121
|
+
});
|
|
122
|
+
it('leaves no listeners on a long-lived signal after many link/dispose cycles', () => {
|
|
123
|
+
const run = new AbortController();
|
|
124
|
+
for (let i = 0; i < 200; i++) {
|
|
125
|
+
const link = linkSignals(run.signal, new AbortController().signal);
|
|
126
|
+
link.dispose();
|
|
127
|
+
}
|
|
128
|
+
expect(listenerCount(run.signal)).toBe(0);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe('abortableSleep', () => {
|
|
132
|
+
it('resolves normally and leaves no listener behind', async () => {
|
|
133
|
+
const controller = new AbortController();
|
|
134
|
+
await abortableSleep(10, controller.signal);
|
|
135
|
+
expect(listenerCount(controller.signal)).toBe(0);
|
|
136
|
+
});
|
|
137
|
+
it('rejects with an abort-shaped error when aborted mid-sleep', async () => {
|
|
138
|
+
const controller = new AbortController();
|
|
139
|
+
const p = abortableSleep(5000, controller.signal);
|
|
140
|
+
setTimeout(() => controller.abort(), 10);
|
|
141
|
+
const start = Date.now();
|
|
142
|
+
await expect(p).rejects.toSatisfy(isAbortError);
|
|
143
|
+
expect(Date.now() - start).toBeLessThan(1000);
|
|
144
|
+
});
|
|
145
|
+
it('rejects immediately on an already-aborted signal', async () => {
|
|
146
|
+
const controller = new AbortController();
|
|
147
|
+
controller.abort();
|
|
148
|
+
await expect(abortableSleep(5000, controller.signal)).rejects.toSatisfy(isAbortError);
|
|
149
|
+
});
|
|
150
|
+
it('works without a signal', async () => {
|
|
151
|
+
await expect(abortableSleep(1)).resolves.toBeUndefined();
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('abortableDelayResult', () => {
|
|
155
|
+
it('resolves false when the delay elapses, with no leaked listener or timer', async () => {
|
|
156
|
+
const controller = new AbortController();
|
|
157
|
+
await expect(abortableDelayResult(10, controller.signal)).resolves.toBe(false);
|
|
158
|
+
expect(listenerCount(controller.signal)).toBe(0);
|
|
159
|
+
});
|
|
160
|
+
it('resolves true promptly when aborted mid-delay', async () => {
|
|
161
|
+
const controller = new AbortController();
|
|
162
|
+
const p = abortableDelayResult(5000, controller.signal);
|
|
163
|
+
setTimeout(() => controller.abort(), 10);
|
|
164
|
+
const start = Date.now();
|
|
165
|
+
await expect(p).resolves.toBe(true);
|
|
166
|
+
expect(Date.now() - start).toBeLessThan(1000);
|
|
167
|
+
});
|
|
168
|
+
it('resolves true immediately on an already-aborted signal', async () => {
|
|
169
|
+
const controller = new AbortController();
|
|
170
|
+
controller.abort();
|
|
171
|
+
await expect(abortableDelayResult(5000, controller.signal)).resolves.toBe(true);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
//# sourceMappingURL=abort.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.test.js","sourceRoot":"","sources":["../../src/utils/abort.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core modal detection utilities
|
|
3
|
+
*
|
|
4
|
+
* This module contains the fundamental logic for detecting modals and overlays
|
|
5
|
+
* on web pages. It uses a combination of:
|
|
6
|
+
* - Visual analysis (position, z-index, viewport coverage)
|
|
7
|
+
* - DOM structure analysis (ARIA attributes, common patterns)
|
|
8
|
+
* - Reverse detection (elementFromPoint for accuracy)
|
|
9
|
+
*
|
|
10
|
+
* NOTE: Functions in this file are serialized and executed in browser context.
|
|
11
|
+
* We use `as any` type assertions because these functions access DOM APIs
|
|
12
|
+
* (window, document, Element) that aren't available in Node.js types.
|
|
13
|
+
* At runtime, these functions execute in the browser where DOM APIs exist.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Modal type classification
|
|
17
|
+
*/
|
|
18
|
+
export type ModalType = 'cookie-consent' | 'newsletter-popup' | 'age-verification' | 'generic-dialog' | 'blocking-overlay' | 'unknown';
|
|
19
|
+
/**
|
|
20
|
+
* Available dismiss strategies
|
|
21
|
+
*/
|
|
22
|
+
export type DismissStrategy = 'accept' | 'reject' | 'close' | 'remove';
|
|
23
|
+
/**
|
|
24
|
+
* Bounding box coordinates
|
|
25
|
+
*/
|
|
26
|
+
export interface BoundingBox {
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Modal detection options
|
|
34
|
+
*/
|
|
35
|
+
export interface ModalDetectionOptions {
|
|
36
|
+
minZIndex?: number;
|
|
37
|
+
minViewportCoverage?: number;
|
|
38
|
+
includeBackdrops?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Modal classification result
|
|
42
|
+
*/
|
|
43
|
+
export interface ModalClassification {
|
|
44
|
+
type: ModalType;
|
|
45
|
+
confidence: number;
|
|
46
|
+
description: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Detected modal information (returned from page.evaluate)
|
|
50
|
+
*/
|
|
51
|
+
export interface DetectedModalInfo {
|
|
52
|
+
selector: string;
|
|
53
|
+
type: ModalType;
|
|
54
|
+
zIndex: number;
|
|
55
|
+
boundingBox: BoundingBox;
|
|
56
|
+
dismissStrategies: DismissStrategy[];
|
|
57
|
+
confidence: number;
|
|
58
|
+
description: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Browser-side modal detection types
|
|
62
|
+
* These types are used within page.evaluate() context
|
|
63
|
+
*/
|
|
64
|
+
export interface BrowserModalInfo {
|
|
65
|
+
selector: string;
|
|
66
|
+
type: string;
|
|
67
|
+
zIndex: number;
|
|
68
|
+
boundingBox: {
|
|
69
|
+
x: number;
|
|
70
|
+
y: number;
|
|
71
|
+
width: number;
|
|
72
|
+
height: number;
|
|
73
|
+
};
|
|
74
|
+
dismissStrategies: string[];
|
|
75
|
+
confidence: number;
|
|
76
|
+
description: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Common modal/dialog selectors and patterns
|
|
80
|
+
*/
|
|
81
|
+
export declare const MODAL_PATTERNS: {
|
|
82
|
+
cookieConsent: {
|
|
83
|
+
selectors: string[];
|
|
84
|
+
textPatterns: RegExp;
|
|
85
|
+
};
|
|
86
|
+
newsletter: {
|
|
87
|
+
selectors: string[];
|
|
88
|
+
textPatterns: RegExp;
|
|
89
|
+
};
|
|
90
|
+
ageVerification: {
|
|
91
|
+
selectors: string[];
|
|
92
|
+
textPatterns: RegExp;
|
|
93
|
+
};
|
|
94
|
+
genericDialog: {
|
|
95
|
+
selectors: string[];
|
|
96
|
+
textPatterns: null;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Common selectors for finding modal elements
|
|
101
|
+
*/
|
|
102
|
+
export declare const COMMON_MODAL_SELECTORS: string[];
|
|
103
|
+
/**
|
|
104
|
+
* Check if element meets basic visibility criteria
|
|
105
|
+
* Runs in browser context via page.evaluate()
|
|
106
|
+
*/
|
|
107
|
+
export declare function isBasicVisible(el: any): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Check if element is positioned to block viewport
|
|
110
|
+
* Runs in browser context via page.evaluate()
|
|
111
|
+
*/
|
|
112
|
+
export declare function isBlockingPosition(el: any): boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Check if element has sufficient z-index
|
|
115
|
+
* Runs in browser context via page.evaluate()
|
|
116
|
+
*/
|
|
117
|
+
export declare function hasMinimumZIndex(el: any, minZIndex: number): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Check if element covers sufficient viewport area
|
|
120
|
+
* Runs in browser context via page.evaluate()
|
|
121
|
+
*/
|
|
122
|
+
export declare function coversMinimumViewport(el: any, minCoverage: number): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Check if element is actually visible on top using elementFromPoint
|
|
125
|
+
* This is the most reliable method - it verifies the element is truly on top
|
|
126
|
+
* Runs in browser context via page.evaluate()
|
|
127
|
+
*/
|
|
128
|
+
export declare function isVisibleOnTop(el: any): boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Combined check: is element blocking the viewport?
|
|
131
|
+
* Uses all visibility checks including elementFromPoint for accuracy
|
|
132
|
+
* Runs in browser context via page.evaluate()
|
|
133
|
+
*/
|
|
134
|
+
export declare function isElementBlockingViewport(el: any, minZIndex: number, minViewportCoverage: number): boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Classify modal type based on content and attributes
|
|
137
|
+
* Runs in browser context via page.evaluate()
|
|
138
|
+
*/
|
|
139
|
+
export declare function classifyModal(el: any, patterns: typeof MODAL_PATTERNS): ModalClassification;
|
|
140
|
+
/**
|
|
141
|
+
* Determine dismissal strategies available for a modal
|
|
142
|
+
* Runs in browser context via page.evaluate()
|
|
143
|
+
*/
|
|
144
|
+
export declare function getDismissStrategies(el: any, modalType: string): DismissStrategy[];
|
|
145
|
+
/**
|
|
146
|
+
* Generate unique CSS selector for an element
|
|
147
|
+
* Runs in browser context via page.evaluate()
|
|
148
|
+
*/
|
|
149
|
+
export declare function getUniqueSelector(el: any): string;
|
|
150
|
+
//# sourceMappingURL=modal-detection-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal-detection-core.d.ts","sourceRoot":"","sources":["../../src/utils/modal-detection-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QACX,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;CA8C1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,UAYlC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAS/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAMnD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAOpE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAQ3E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAkB/C;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,GAAG,EACP,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAQT;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,GAAG,EACP,QAAQ,EAAE,OAAO,cAAc,GAC9B,mBAAmB,CA8FrB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,CA2ClF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,GAAG,GAAG,MAAM,CA4CjD"}
|