@browserbasehq/orca 3.1.0-patch.0 → 3.1.0-patch.1
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/dist/cjs/cli.js +183 -0
- package/dist/cjs/cli.js.map +7 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +24956 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/lib/inference.d.ts +65 -0
- package/dist/cjs/lib/inferenceLogUtils.d.ts +12 -0
- package/dist/cjs/lib/logger.d.ts +69 -0
- package/dist/cjs/lib/modelUtils.d.ts +11 -0
- package/dist/cjs/lib/prompt.d.ts +14 -0
- package/dist/cjs/lib/utils.d.ts +68 -0
- package/dist/cjs/lib/v3/agent/AgentClient.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +20 -0
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/act.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/tools/click.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
- package/dist/cjs/lib/v3/agent/tools/extract.d.ts +20 -0
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/goto.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/index.d.ts +92 -0
- package/dist/cjs/lib/v3/agent/tools/keys.d.ts +24 -0
- package/dist/cjs/lib/v3/agent/tools/navback.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/scroll.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/tools/search.d.ts +15 -0
- package/dist/cjs/lib/v3/agent/tools/think.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/type.d.ts +7 -0
- package/dist/cjs/lib/v3/agent/tools/wait.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/utils/actionMapping.d.ts +3 -0
- package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
- package/dist/cjs/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
- package/dist/cjs/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
- package/dist/cjs/lib/v3/agent/utils/imageCompression.d.ts +53 -0
- package/dist/cjs/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
- package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
- package/dist/cjs/lib/v3/agent/utils/xpath.d.ts +11 -0
- package/dist/cjs/lib/v3/api.d.ts +86 -0
- package/dist/cjs/lib/v3/cache/ActCache.d.ts +23 -0
- package/dist/cjs/lib/v3/cache/AgentCache.d.ts +109 -0
- package/dist/cjs/lib/v3/cache/CacheStorage.d.ts +17 -0
- package/dist/cjs/lib/v3/cache/serverAgentCache.d.ts +7 -0
- package/dist/cjs/lib/v3/cache/utils.d.ts +15 -0
- package/dist/cjs/lib/v3/cli.d.ts +2 -0
- package/dist/cjs/lib/v3/dom/a11yScripts/index.d.ts +11 -0
- package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
- package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
- package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/rerender-index.js +1 -0
- package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.js +1 -0
- package/dist/cjs/lib/v3/dom/genA11yScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genDomScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genLocatorScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/index.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/index.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
- package/dist/cjs/lib/v3/dom/piercer.entry.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/piercer.runtime.d.ts +23 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
- package/dist/cjs/lib/v3/external_clients/aisdk.d.ts +11 -0
- package/dist/cjs/lib/v3/external_clients/customOpenAI.d.ts +18 -0
- package/dist/cjs/lib/v3/flowLogger.d.ts +139 -0
- package/dist/cjs/lib/v3/handlers/actHandler.d.ts +21 -0
- package/dist/cjs/lib/v3/handlers/extractHandler.d.ts +31 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
- package/dist/cjs/lib/v3/handlers/observeHandler.d.ts +17 -0
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
- package/dist/cjs/lib/v3/index.d.ts +18 -0
- package/dist/cjs/lib/v3/launch/browserbase.d.ts +7 -0
- package/dist/cjs/lib/v3/launch/local.d.ts +15 -0
- package/dist/cjs/lib/v3/llm/AnthropicClient.d.ts +16 -0
- package/dist/cjs/lib/v3/llm/CerebrasClient.d.ts +17 -0
- package/dist/cjs/lib/v3/llm/GoogleClient.d.ts +19 -0
- package/dist/cjs/lib/v3/llm/GroqClient.d.ts +17 -0
- package/dist/cjs/lib/v3/llm/LLMClient.d.ts +121 -0
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +13 -0
- package/dist/cjs/lib/v3/llm/OpenAIClient.d.ts +15 -0
- package/dist/cjs/lib/v3/llm/aisdk.d.ts +15 -0
- package/dist/cjs/lib/v3/logger.d.ts +9 -0
- package/dist/cjs/lib/v3/mcp/connection.d.ts +11 -0
- package/dist/cjs/lib/v3/mcp/utils.d.ts +3 -0
- package/dist/cjs/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
- package/dist/cjs/lib/v3/shutdown/supervisor.d.ts +11 -0
- package/dist/cjs/lib/v3/shutdown/supervisorClient.d.ts +15 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js +113 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js +102 -0
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +374 -0
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js +354 -0
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js +105 -0
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js +126 -0
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js +44 -0
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/click-count.spec.js +147 -0
- package/dist/cjs/lib/v3/tests/click-count.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +176 -0
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js +53 -0
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/downloads.spec.js +80 -0
- package/dist/cjs/lib/v3/tests/downloads.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js +493 -0
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.child.js +92 -0
- package/dist/cjs/lib/v3/tests/keep-alive.child.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js +568 -0
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js +15 -0
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keyboard.spec.js +296 -0
- package/dist/cjs/lib/v3/tests/keyboard.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +191 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js +108 -0
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-count.spec.js +71 -0
- package/dist/cjs/lib/v3/tests/locator-count.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js +118 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +136 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js +157 -0
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +242 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js +547 -0
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js +269 -0
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/nested-div.spec.js +23 -0
- package/dist/cjs/lib/v3/tests/nested-div.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +90 -0
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-console.spec.js +56 -0
- package/dist/cjs/lib/v3/tests/page-console.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js +35 -0
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-hover.spec.js +167 -0
- package/dist/cjs/lib/v3/tests/page-hover.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js +295 -0
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js +182 -0
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js +46 -0
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js +98 -0
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js +148 -0
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js +156 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js +156 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/testUtils.js +54 -0
- package/dist/cjs/lib/v3/tests/testUtils.js.map +7 -0
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js +100 -0
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/timeouts.spec.js +32 -0
- package/dist/cjs/lib/v3/tests/timeouts.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js +65 -0
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.config.js +36 -0
- package/dist/cjs/lib/v3/tests/v3.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js +67 -0
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js +61 -0
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js +593 -0
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js +97 -0
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
- package/dist/cjs/lib/v3/timeoutConfig.d.ts +2 -0
- package/dist/cjs/lib/v3/types/private/agent.d.ts +6 -0
- package/dist/cjs/lib/v3/types/private/api.d.ts +11 -0
- package/dist/cjs/lib/v3/types/private/cache.d.ts +128 -0
- package/dist/cjs/lib/v3/types/private/evaluator.d.ts +40 -0
- package/dist/cjs/lib/v3/types/private/handlers.d.ts +38 -0
- package/dist/cjs/lib/v3/types/private/index.d.ts +7 -0
- package/dist/cjs/lib/v3/types/private/internal.d.ts +39 -0
- package/dist/cjs/lib/v3/types/private/locator.d.ts +9 -0
- package/dist/cjs/lib/v3/types/private/network.d.ts +34 -0
- package/dist/cjs/lib/v3/types/private/shutdown.d.ts +19 -0
- package/dist/cjs/lib/v3/types/private/shutdownErrors.d.ts +12 -0
- package/dist/cjs/lib/v3/types/private/snapshot.d.ts +117 -0
- package/dist/cjs/lib/v3/types/public/agent.d.ts +595 -0
- package/dist/cjs/lib/v3/types/public/api.d.ts +1211 -0
- package/dist/cjs/lib/v3/types/public/apiErrors.d.ts +18 -0
- package/dist/cjs/lib/v3/types/public/index.d.ts +12 -0
- package/dist/cjs/lib/v3/types/public/locator.d.ts +9 -0
- package/dist/cjs/lib/v3/types/public/logs.d.ts +23 -0
- package/dist/cjs/lib/v3/types/public/methods.d.ts +56 -0
- package/dist/cjs/lib/v3/types/public/metrics.d.ts +27 -0
- package/dist/cjs/lib/v3/types/public/model.d.ts +65 -0
- package/dist/cjs/lib/v3/types/public/options.d.ts +70 -0
- package/dist/cjs/lib/v3/types/public/page.d.ts +18 -0
- package/dist/cjs/lib/v3/types/public/screenshotTypes.d.ts +25 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +152 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
- package/dist/cjs/lib/v3/understudy/a11yInvocation.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/cdp.d.ts +69 -0
- package/dist/cjs/lib/v3/understudy/consoleMessage.d.ts +22 -0
- package/dist/cjs/lib/v3/understudy/context.d.ts +132 -0
- package/dist/cjs/lib/v3/understudy/deepLocator.d.ts +87 -0
- package/dist/cjs/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
- package/dist/cjs/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
- package/dist/cjs/lib/v3/understudy/frame.d.ts +69 -0
- package/dist/cjs/lib/v3/understudy/frameLocator.d.ts +50 -0
- package/dist/cjs/lib/v3/understudy/frameRegistry.d.ts +101 -0
- package/dist/cjs/lib/v3/understudy/initScripts.d.ts +2 -0
- package/dist/cjs/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
- package/dist/cjs/lib/v3/understudy/locator.d.ts +194 -0
- package/dist/cjs/lib/v3/understudy/locatorInvocation.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
- package/dist/cjs/lib/v3/understudy/networkManager.d.ts +53 -0
- package/dist/cjs/lib/v3/understudy/page.d.ts +354 -0
- package/dist/cjs/lib/v3/understudy/piercer.d.ts +4 -0
- package/dist/cjs/lib/v3/understudy/response.d.ts +137 -0
- package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +16 -0
- package/dist/cjs/lib/v3/understudy/selectorResolver.d.ts +38 -0
- package/dist/cjs/lib/v3/v3.d.ts +191 -0
- package/dist/cjs/lib/v3/zodCompat.d.ts +12 -0
- package/dist/cjs/lib/v3Evaluator.d.ts +19 -0
- package/dist/cjs/lib/version.d.ts +5 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/tests/browserbase-session-accessors.test.js +101 -0
- package/dist/cjs/tests/browserbase-session-accessors.test.js.map +7 -0
- package/dist/cjs/tests/cache-llm-resolution.test.js +187 -0
- package/dist/cjs/tests/cache-llm-resolution.test.js.map +7 -0
- package/dist/cjs/tests/helpers/mockCDPSession.js +50 -0
- package/dist/cjs/tests/helpers/mockCDPSession.js.map +7 -0
- package/dist/cjs/tests/llm-provider.test.js +57 -0
- package/dist/cjs/tests/llm-provider.test.js.map +7 -0
- package/dist/cjs/tests/model-deprecation.test.js +132 -0
- package/dist/cjs/tests/model-deprecation.test.js.map +7 -0
- package/dist/cjs/tests/page-snapshot.test.js +58 -0
- package/dist/cjs/tests/page-snapshot.test.js.map +7 -0
- package/dist/cjs/tests/public-api/export-surface.test.js +76 -0
- package/dist/cjs/tests/public-api/export-surface.test.js.map +7 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js +150 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +7 -0
- package/dist/cjs/tests/public-api/public-error-types.test.js +104 -0
- package/dist/cjs/tests/public-api/public-error-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/public-types.test.js +74 -0
- package/dist/cjs/tests/public-api/public-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/runtime-utils.test.js +53 -0
- package/dist/cjs/tests/public-api/runtime-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/schema-utils.test.js +100 -0
- package/dist/cjs/tests/public-api/schema-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/timeout-error-types.test.js +103 -0
- package/dist/cjs/tests/public-api/timeout-error-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/tool-type-export.test.js +47 -0
- package/dist/cjs/tests/public-api/tool-type-export.test.js.map +7 -0
- package/dist/cjs/tests/public-api/v3-core.test.js +104 -0
- package/dist/cjs/tests/public-api/v3-core.test.js.map +7 -0
- package/dist/cjs/tests/safety-confirmation.test.js +134 -0
- package/dist/cjs/tests/safety-confirmation.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js +370 -0
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js +294 -0
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js +403 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-cbor.test.js +197 -0
- package/dist/cjs/tests/snapshot-cbor.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js +246 -0
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js +104 -0
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js +45 -0
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-frame-merge.test.js +388 -0
- package/dist/cjs/tests/snapshot-frame-merge.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js +106 -0
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-xpath-utils.test.js +74 -0
- package/dist/cjs/tests/snapshot-xpath-utils.test.js.map +7 -0
- package/dist/cjs/tests/timeout-handlers.test.js +864 -0
- package/dist/cjs/tests/timeout-handlers.test.js.map +7 -0
- package/dist/cjs/tests/xpath-parser.test.js +314 -0
- package/dist/cjs/tests/xpath-parser.test.js.map +7 -0
- package/dist/cjs/tests/xpath-resolver.test.js +70 -0
- package/dist/cjs/tests/xpath-resolver.test.js.map +7 -0
- package/dist/cjs/tests/zod-enum-compatibility.test.js +119 -0
- package/dist/cjs/tests/zod-enum-compatibility.test.js.map +7 -0
- package/dist/esm/lib/modelUtils.d.ts +0 -3
- package/dist/esm/lib/modelUtils.js +2 -7
- package/dist/esm/lib/modelUtils.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -2
- package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/extract.d.ts +1 -2
- package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillform.d.ts +1 -2
- package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/index.d.ts +2 -2
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/esm/lib/v3/cli.d.ts +2 -0
- package/dist/esm/lib/v3/cli.js +10 -0
- package/dist/esm/lib/v3/cli.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/esm/lib/v3/dom/build/v3-index.js.map +1 -0
- package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +1 -0
- package/dist/esm/lib/v3/index.js +1 -0
- package/dist/esm/lib/v3/index.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisor.d.ts +7 -5
- package/dist/esm/lib/v3/shutdown/supervisor.js +62 -52
- package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisorClient.js +48 -52
- package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
- package/dist/esm/lib/v3/tests/click-count.spec.js +47 -12
- package/dist/esm/lib/v3/tests/click-count.spec.js.map +2 -2
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +67 -21
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +2 -2
- package/dist/esm/lib/v3/tests/v3.playwright.config.js +3 -60
- package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +2 -2
- package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -13
- package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
- package/dist/esm/lib/v3/understudy/context.js +10 -1
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/locator.js +2 -2
- package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.js +2 -1
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/v3.js +10 -13
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/tests/public-api/export-surface.test.js +1 -0
- package/dist/esm/tests/public-api/export-surface.test.js.map +2 -2
- package/package.json +13 -9
- package/dist/esm/lib/v3/tests/envReporter.js +0 -57
- package/dist/esm/lib/v3/tests/envReporter.js.map +0 -7
- package/dist/esm/tests/agent-execution-model.test.js +0 -139
- package/dist/esm/tests/agent-execution-model.test.js.map +0 -7
- package/dist/esm/tests/model-utils.test.js +0 -43
- package/dist/esm/tests/model-utils.test.js.map +0 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../tests/snapshot-cbor.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { describe, expect, it } from \"vitest\";\nimport type { Protocol } from \"devtools-protocol\";\n\nimport { captureHybridSnapshot } from \"../lib/v3/understudy/a11y/snapshot/index.js\";\nimport { MockCDPSession } from \"./helpers/mockCDPSession.js\";\nimport type { Page } from \"../lib/v3/understudy/page.js\";\nimport { StagehandDomProcessError } from \"../lib/v3/types/public/sdkErrors.js\";\nimport { CDPSessionLike } from \"../lib/v3/understudy/cdp.js\";\n\ntype Handler = (params?: Record<string, unknown>) => Promise<unknown> | unknown;\n\nfunction createFakePage(session: CDPSessionLike): Page {\n const frameTree: Protocol.Page.FrameTree = {\n frame: {\n id: \"root\" as Protocol.Page.FrameId,\n loaderId: \"root-loader\" as Protocol.Network.LoaderId,\n url: \"http://fake\",\n domainAndRegistry: \"fake\",\n securityOrigin: \"http://fake\",\n mimeType: \"text/html\",\n secureContextType: \"Secure\",\n crossOriginIsolatedContextType: \"NotIsolated\",\n gatedAPIFeatures: [],\n },\n childFrames: [],\n };\n\n return {\n mainFrameId: () => \"root\",\n asProtocolFrameTree: () => frameTree,\n listAllFrameIds: () => [\"root\"],\n getSessionForFrame: () => session,\n getOrdinal: () => 0,\n } as unknown as Page;\n}\n\nfunction completeDomTree(): Protocol.DOM.Node {\n return {\n nodeId: 1,\n backendNodeId: 1,\n nodeType: 9,\n nodeName: \"#document\",\n childNodeCount: 1,\n children: [\n {\n nodeId: 2,\n backendNodeId: 2,\n nodeType: 1,\n nodeName: \"HTML\",\n childNodeCount: 1,\n children: [\n {\n nodeId: 3,\n backendNodeId: 3,\n nodeType: 1,\n nodeName: \"BODY\",\n childNodeCount: 1,\n children: [\n {\n nodeId: 4,\n backendNodeId: 4,\n nodeType: 1,\n nodeName: \"DIV\",\n childNodeCount: 0,\n children: [],\n },\n ],\n },\n ],\n },\n ],\n } as Protocol.DOM.Node;\n}\n\nfunction truncatedDomTree(): Protocol.DOM.Node {\n return {\n nodeId: 1,\n backendNodeId: 1,\n nodeType: 9,\n nodeName: \"#document\",\n childNodeCount: 1,\n children: [\n {\n nodeId: 2,\n backendNodeId: 2,\n nodeType: 1,\n nodeName: \"HTML\",\n childNodeCount: 1,\n children: [],\n },\n ],\n } as Protocol.DOM.Node;\n}\n\nfunction htmlWithChildren(): Protocol.DOM.Node {\n return {\n nodeId: 2,\n backendNodeId: 2,\n nodeType: 1,\n nodeName: \"HTML\",\n childNodeCount: 1,\n children: [\n {\n nodeId: 3,\n backendNodeId: 3,\n nodeType: 1,\n nodeName: \"BODY\",\n childNodeCount: 1,\n children: [\n {\n nodeId: 4,\n backendNodeId: 4,\n nodeType: 1,\n nodeName: \"DIV\",\n childNodeCount: 0,\n children: [],\n },\n ],\n },\n ],\n } as Protocol.DOM.Node;\n}\n\nfunction simpleAxNodes(): Protocol.Accessibility.AXNode[] {\n const stringType: Protocol.Accessibility.AXValueType = \"string\";\n return [\n {\n nodeId: \"1\",\n role: { type: stringType, value: \"RootWebArea\" },\n backendDOMNodeId: 2,\n childIds: [\"2\"],\n ignored: false,\n },\n {\n nodeId: \"2\",\n role: { type: stringType, value: \"generic\" },\n name: { type: stringType, value: \"Content\" },\n backendDOMNodeId: 4,\n parentId: \"1\",\n childIds: [] as string[],\n ignored: false,\n },\n ];\n}\n\nconst baseHandlers: Record<string, Handler> = {\n \"DOM.enable\": async () => ({}),\n \"Runtime.enable\": async () => ({}),\n \"Accessibility.enable\": async () => ({}),\n \"Accessibility.getFullAXTree\": async () => ({ nodes: simpleAxNodes() }),\n};\n\nfunction makeCborError(): Error {\n return new Error(\"CBOR: stack limit exceeded\");\n}\n\ndescribe(\"captureHybridSnapshot CBOR fallbacks\", () => {\n it(\"retries DOM.getDocument with reduced depths before succeeding\", async () => {\n let domCalls = 0;\n const session = new MockCDPSession({\n ...baseHandlers,\n \"DOM.getDocument\": async (params) => {\n domCalls += 1;\n if (domCalls === 1) throw makeCborError();\n expect(params?.depth).toBe(256);\n return { root: completeDomTree() };\n },\n });\n\n const page = createFakePage(session);\n const snapshot = await captureHybridSnapshot(page);\n\n expect(snapshot.combinedTree).toContain(\"html\");\n const depths = session\n .callsFor(\"DOM.getDocument\")\n .map((c) => c.params?.depth);\n expect(depths).toEqual([-1, 256]);\n });\n\n it(\"throws StagehandDomProcessError after all DOM.getDocument attempts fail\", async () => {\n const session = new MockCDPSession({\n ...baseHandlers,\n \"DOM.getDocument\": async () => {\n throw makeCborError();\n },\n });\n\n const page = createFakePage(session);\n await expect(captureHybridSnapshot(page)).rejects.toThrow(\n StagehandDomProcessError,\n );\n });\n\n it(\"hydrates truncated nodes by retrying DOM.describeNode depths\", async () => {\n let domAttempts = 0;\n let describeAttempts = 0;\n\n const session = new MockCDPSession({\n ...baseHandlers,\n \"DOM.getDocument\": async (params) => {\n domAttempts += 1;\n if (domAttempts === 1) throw makeCborError();\n expect(params?.depth).toBe(256);\n return { root: truncatedDomTree() };\n },\n \"DOM.describeNode\": async (params) => {\n describeAttempts += 1;\n if (describeAttempts === 1) throw makeCborError();\n expect(params?.depth).toBe(64);\n return { node: htmlWithChildren() };\n },\n });\n\n const page = createFakePage(session);\n const snapshot = await captureHybridSnapshot(page);\n\n const describeDepths = session\n .callsFor(\"DOM.describeNode\")\n .map((c) => c.params?.depth);\n expect(describeDepths).toEqual([-1, 64]);\n expect(snapshot.combinedXpathMap[\"0-4\"]).toBe(\"/html[1]/body[1]/div[1]\");\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
var import_vitest = require("vitest");
|
|
2
|
+
var import_domTree = require("../lib/v3/understudy/a11y/snapshot/domTree.js");
|
|
3
|
+
var import_sdkErrors = require("../lib/v3/types/public/sdkErrors.js");
|
|
4
|
+
var import_mockCDPSession = require("./helpers/mockCDPSession.js");
|
|
5
|
+
let nextNodeId = 1;
|
|
6
|
+
const makeDomNode = (overrides = {}) => {
|
|
7
|
+
const nodeId = overrides.nodeId ?? nextNodeId++;
|
|
8
|
+
const backendNodeId = overrides.backendNodeId ?? nextNodeId++;
|
|
9
|
+
const nodeName = overrides.nodeName ?? "DIV";
|
|
10
|
+
const nodeType = overrides.nodeType ?? 1;
|
|
11
|
+
const children = overrides.children ?? [];
|
|
12
|
+
return {
|
|
13
|
+
nodeId,
|
|
14
|
+
backendNodeId,
|
|
15
|
+
nodeName,
|
|
16
|
+
nodeType,
|
|
17
|
+
localName: overrides.localName ?? nodeName.toLowerCase(),
|
|
18
|
+
nodeValue: overrides.nodeValue ?? "",
|
|
19
|
+
childNodeCount: overrides.childNodeCount ?? children.length,
|
|
20
|
+
children,
|
|
21
|
+
shadowRoots: overrides.shadowRoots,
|
|
22
|
+
contentDocument: overrides.contentDocument,
|
|
23
|
+
isScrollable: overrides.isScrollable
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
const buildSampleDomTree = () => {
|
|
27
|
+
const iframeChild = makeDomNode({ nodeName: "P" });
|
|
28
|
+
const iframeBody = makeDomNode({
|
|
29
|
+
nodeName: "BODY",
|
|
30
|
+
children: [iframeChild],
|
|
31
|
+
isScrollable: true
|
|
32
|
+
});
|
|
33
|
+
const iframeHtml = makeDomNode({ nodeName: "HTML", children: [iframeBody] });
|
|
34
|
+
const iframeDoc = makeDomNode({
|
|
35
|
+
nodeName: "#document",
|
|
36
|
+
nodeType: 9,
|
|
37
|
+
children: [iframeHtml]
|
|
38
|
+
});
|
|
39
|
+
const iframeElement = makeDomNode({
|
|
40
|
+
nodeName: "IFRAME",
|
|
41
|
+
contentDocument: iframeDoc
|
|
42
|
+
});
|
|
43
|
+
const scrollDiv = makeDomNode({
|
|
44
|
+
nodeName: "DIV",
|
|
45
|
+
isScrollable: true
|
|
46
|
+
});
|
|
47
|
+
const body = makeDomNode({
|
|
48
|
+
nodeName: "BODY",
|
|
49
|
+
children: [scrollDiv, iframeElement]
|
|
50
|
+
});
|
|
51
|
+
const html = makeDomNode({ nodeName: "HTML", children: [body] });
|
|
52
|
+
const root = makeDomNode({
|
|
53
|
+
nodeName: "#document",
|
|
54
|
+
nodeType: 9,
|
|
55
|
+
children: [html]
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
root,
|
|
59
|
+
html,
|
|
60
|
+
body,
|
|
61
|
+
scrollDiv,
|
|
62
|
+
iframeElement,
|
|
63
|
+
iframeDoc,
|
|
64
|
+
iframeHtml,
|
|
65
|
+
iframeBody,
|
|
66
|
+
iframeChild
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
(0, import_vitest.describe)("hydrateDomTree", () => {
|
|
70
|
+
(0, import_vitest.it)("expands truncated nodes by calling DOM.describeNode", async () => {
|
|
71
|
+
const child = makeDomNode({ nodeName: "DIV" });
|
|
72
|
+
const root = makeDomNode({
|
|
73
|
+
nodeName: "HTML",
|
|
74
|
+
childNodeCount: 1,
|
|
75
|
+
children: []
|
|
76
|
+
});
|
|
77
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
78
|
+
"DOM.describeNode": async () => ({
|
|
79
|
+
node: {
|
|
80
|
+
...root,
|
|
81
|
+
children: [child],
|
|
82
|
+
childNodeCount: 1
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
});
|
|
86
|
+
await (0, import_domTree.hydrateDomTree)(session, root, true);
|
|
87
|
+
(0, import_vitest.expect)(root.children).toEqual([child]);
|
|
88
|
+
});
|
|
89
|
+
(0, import_vitest.it)("retries describeNode when CBOR errors occur before succeeding", async () => {
|
|
90
|
+
const child = makeDomNode({ nodeName: "DIV" });
|
|
91
|
+
const root = makeDomNode({
|
|
92
|
+
nodeName: "HTML",
|
|
93
|
+
childNodeCount: 1,
|
|
94
|
+
children: []
|
|
95
|
+
});
|
|
96
|
+
let attempts = 0;
|
|
97
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
98
|
+
"DOM.describeNode": async () => {
|
|
99
|
+
attempts++;
|
|
100
|
+
if (attempts === 1) throw new Error("CBOR: stack limit exceeded");
|
|
101
|
+
return { node: { ...root, children: [child], childNodeCount: 1 } };
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
await (0, import_domTree.hydrateDomTree)(session, root, true);
|
|
105
|
+
(0, import_vitest.expect)(attempts).toBe(2);
|
|
106
|
+
(0, import_vitest.expect)(root.children).toEqual([child]);
|
|
107
|
+
});
|
|
108
|
+
(0, import_vitest.it)("throws StagehandDomProcessError after exhausting describeNode retries", async () => {
|
|
109
|
+
const root = makeDomNode({
|
|
110
|
+
nodeName: "HTML",
|
|
111
|
+
childNodeCount: 1,
|
|
112
|
+
children: []
|
|
113
|
+
});
|
|
114
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
115
|
+
"DOM.describeNode": async () => {
|
|
116
|
+
throw new Error("CBOR: stack limit exceeded");
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
await (0, import_vitest.expect)((0, import_domTree.hydrateDomTree)(session, root, true)).rejects.toBeInstanceOf(
|
|
120
|
+
import_sdkErrors.StagehandDomProcessError
|
|
121
|
+
);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
(0, import_vitest.describe)("getDomTreeWithFallback", () => {
|
|
125
|
+
(0, import_vitest.it)("retries DOM.getDocument after CBOR errors and returns the hydrated root", async () => {
|
|
126
|
+
const root = makeDomNode({
|
|
127
|
+
nodeName: "#document",
|
|
128
|
+
nodeType: 9,
|
|
129
|
+
children: []
|
|
130
|
+
});
|
|
131
|
+
const depths = [];
|
|
132
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
133
|
+
"DOM.getDocument": async (params) => {
|
|
134
|
+
const depth = params?.depth ?? 0;
|
|
135
|
+
depths.push(depth);
|
|
136
|
+
if (depth === -1) throw new Error("CBOR: stack limit exceeded");
|
|
137
|
+
return { root };
|
|
138
|
+
},
|
|
139
|
+
"DOM.describeNode": async () => ({ node: root })
|
|
140
|
+
});
|
|
141
|
+
const result = await (0, import_domTree.getDomTreeWithFallback)(session, true);
|
|
142
|
+
(0, import_vitest.expect)(result).toBe(root);
|
|
143
|
+
(0, import_vitest.expect)(depths).toEqual([-1, 256]);
|
|
144
|
+
});
|
|
145
|
+
(0, import_vitest.it)("propagates non-CBOR DOM.getDocument errors", async () => {
|
|
146
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
147
|
+
"DOM.getDocument": async () => {
|
|
148
|
+
throw new Error("network fail");
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
await (0, import_vitest.expect)((0, import_domTree.getDomTreeWithFallback)(session, false)).rejects.toThrow(
|
|
152
|
+
"network fail"
|
|
153
|
+
);
|
|
154
|
+
});
|
|
155
|
+
(0, import_vitest.it)("throws StagehandDomProcessError when all depth attempts hit CBOR limits", async () => {
|
|
156
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
157
|
+
"DOM.getDocument": async () => {
|
|
158
|
+
throw new Error("CBOR: stack limit exceeded");
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
await (0, import_vitest.expect)((0, import_domTree.getDomTreeWithFallback)(session, false)).rejects.toBeInstanceOf(
|
|
162
|
+
import_sdkErrors.StagehandDomProcessError
|
|
163
|
+
);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
(0, import_vitest.describe)("buildSessionDomIndex", () => {
|
|
167
|
+
(0, import_vitest.it)("collects absolute paths, scrollability, and content-document metadata", async () => {
|
|
168
|
+
const tree = buildSampleDomTree();
|
|
169
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
170
|
+
"DOM.enable": async () => ({}),
|
|
171
|
+
"DOM.getDocument": async () => ({ root: tree.root }),
|
|
172
|
+
"DOM.describeNode": async () => ({ node: tree.root })
|
|
173
|
+
});
|
|
174
|
+
const index = await (0, import_domTree.buildSessionDomIndex)(session, true);
|
|
175
|
+
(0, import_vitest.expect)(index.rootBackend).toBe(tree.root.backendNodeId);
|
|
176
|
+
(0, import_vitest.expect)(index.absByBe.get(tree.body.backendNodeId)).toBe("/html[1]/body[1]");
|
|
177
|
+
(0, import_vitest.expect)(index.absByBe.get(tree.scrollDiv.backendNodeId)).toBe(
|
|
178
|
+
"/html[1]/body[1]/div[1]"
|
|
179
|
+
);
|
|
180
|
+
(0, import_vitest.expect)(index.scrollByBe.get(tree.scrollDiv.backendNodeId)).toBe(true);
|
|
181
|
+
(0, import_vitest.expect)(index.docRootOf.get(tree.iframeHtml.backendNodeId)).toBe(
|
|
182
|
+
tree.iframeDoc.backendNodeId
|
|
183
|
+
);
|
|
184
|
+
(0, import_vitest.expect)(
|
|
185
|
+
index.contentDocRootByIframe.get(tree.iframeElement.backendNodeId)
|
|
186
|
+
).toBe(tree.iframeDoc.backendNodeId);
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
(0, import_vitest.describe)("domMapsForSession", () => {
|
|
190
|
+
(0, import_vitest.it)("derives frame-relative xpath/tag/scrollable maps for a frame's document root", async () => {
|
|
191
|
+
const tree = buildSampleDomTree();
|
|
192
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
193
|
+
"DOM.enable": async () => ({}),
|
|
194
|
+
"DOM.getDocument": async () => ({ root: tree.root }),
|
|
195
|
+
"DOM.getFrameOwner": async () => ({
|
|
196
|
+
backendNodeId: tree.iframeElement.backendNodeId
|
|
197
|
+
}),
|
|
198
|
+
"DOM.describeNode": async () => ({ node: tree.root })
|
|
199
|
+
});
|
|
200
|
+
const encode = (frameId, backendNodeId) => `${frameId}-${backendNodeId}`;
|
|
201
|
+
const maps = await (0, import_domTree.domMapsForSession)(
|
|
202
|
+
session,
|
|
203
|
+
"frame-A",
|
|
204
|
+
true,
|
|
205
|
+
encode,
|
|
206
|
+
true
|
|
207
|
+
);
|
|
208
|
+
const iframeDocKey = `frame-A-${tree.iframeDoc.backendNodeId}`;
|
|
209
|
+
const iframeBodyKey = `frame-A-${tree.iframeBody.backendNodeId}`;
|
|
210
|
+
const iframeChildKey = `frame-A-${tree.iframeChild.backendNodeId}`;
|
|
211
|
+
(0, import_vitest.expect)(maps.tagNameMap[iframeDocKey]).toBe("#document");
|
|
212
|
+
(0, import_vitest.expect)(maps.xpathMap[iframeDocKey]).toBe("/");
|
|
213
|
+
(0, import_vitest.expect)(maps.xpathMap[iframeBodyKey]).toBe("/html[1]/body[1]");
|
|
214
|
+
(0, import_vitest.expect)(maps.xpathMap[iframeChildKey]).toBe("/html[1]/body[1]/p[1]");
|
|
215
|
+
(0, import_vitest.expect)(maps.scrollableMap[iframeBodyKey]).toBe(true);
|
|
216
|
+
(0, import_vitest.expect)(Object.keys(maps.tagNameMap)).not.toContain(
|
|
217
|
+
`frame-A-${tree.html.backendNodeId}`
|
|
218
|
+
);
|
|
219
|
+
});
|
|
220
|
+
(0, import_vitest.it)("falls back to the root document when frame owner lookup fails", async () => {
|
|
221
|
+
const tree = buildSampleDomTree();
|
|
222
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
223
|
+
"DOM.enable": async () => ({}),
|
|
224
|
+
"DOM.getDocument": async () => ({ root: tree.root }),
|
|
225
|
+
"DOM.getFrameOwner": async () => {
|
|
226
|
+
throw new Error("owner lookup failed");
|
|
227
|
+
},
|
|
228
|
+
"DOM.describeNode": async () => ({ node: tree.root })
|
|
229
|
+
});
|
|
230
|
+
const encode = (frameId, backendNodeId) => `${frameId}-${backendNodeId}`;
|
|
231
|
+
const maps = await (0, import_domTree.domMapsForSession)(
|
|
232
|
+
session,
|
|
233
|
+
"frame-B",
|
|
234
|
+
false,
|
|
235
|
+
encode,
|
|
236
|
+
true
|
|
237
|
+
);
|
|
238
|
+
(0, import_vitest.expect)(maps.xpathMap[`frame-B-${tree.html.backendNodeId}`]).toBe(
|
|
239
|
+
"/html[1]"
|
|
240
|
+
);
|
|
241
|
+
(0, import_vitest.expect)(maps.xpathMap[`frame-B-${tree.scrollDiv.backendNodeId}`]).toBe(
|
|
242
|
+
"/html[1]/body[1]/div[1]"
|
|
243
|
+
);
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
//# sourceMappingURL=snapshot-dom-session-builders.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../tests/snapshot-dom-session-builders.test.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Protocol } from \"devtools-protocol\";\nimport { describe, expect, it } from \"vitest\";\nimport {\n buildSessionDomIndex,\n domMapsForSession,\n getDomTreeWithFallback,\n hydrateDomTree,\n} from \"../lib/v3/understudy/a11y/snapshot/domTree.js\";\nimport { StagehandDomProcessError } from \"../lib/v3/types/public/sdkErrors.js\";\nimport { MockCDPSession } from \"./helpers/mockCDPSession.js\";\n\nlet nextNodeId = 1;\nconst makeDomNode = (\n overrides: Partial<Protocol.DOM.Node> = {},\n): Protocol.DOM.Node => {\n const nodeId = overrides.nodeId ?? nextNodeId++;\n const backendNodeId = overrides.backendNodeId ?? nextNodeId++;\n const nodeName = overrides.nodeName ?? \"DIV\";\n const nodeType = overrides.nodeType ?? 1;\n const children = overrides.children ?? [];\n return {\n nodeId,\n backendNodeId,\n nodeName,\n nodeType,\n localName: overrides.localName ?? nodeName.toLowerCase(),\n nodeValue: overrides.nodeValue ?? \"\",\n childNodeCount: overrides.childNodeCount ?? children.length,\n children,\n shadowRoots: overrides.shadowRoots,\n contentDocument: overrides.contentDocument,\n isScrollable: overrides.isScrollable,\n };\n};\n\nconst buildSampleDomTree = () => {\n const iframeChild = makeDomNode({ nodeName: \"P\" });\n const iframeBody = makeDomNode({\n nodeName: \"BODY\",\n children: [iframeChild],\n isScrollable: true,\n });\n const iframeHtml = makeDomNode({ nodeName: \"HTML\", children: [iframeBody] });\n const iframeDoc = makeDomNode({\n nodeName: \"#document\",\n nodeType: 9,\n children: [iframeHtml],\n });\n const iframeElement = makeDomNode({\n nodeName: \"IFRAME\",\n contentDocument: iframeDoc,\n });\n const scrollDiv = makeDomNode({\n nodeName: \"DIV\",\n isScrollable: true,\n });\n const body = makeDomNode({\n nodeName: \"BODY\",\n children: [scrollDiv, iframeElement],\n });\n const html = makeDomNode({ nodeName: \"HTML\", children: [body] });\n const root = makeDomNode({\n nodeName: \"#document\",\n nodeType: 9,\n children: [html],\n });\n return {\n root,\n html,\n body,\n scrollDiv,\n iframeElement,\n iframeDoc,\n iframeHtml,\n iframeBody,\n iframeChild,\n };\n};\n\ndescribe(\"hydrateDomTree\", () => {\n it(\"expands truncated nodes by calling DOM.describeNode\", async () => {\n const child = makeDomNode({ nodeName: \"DIV\" });\n const root = makeDomNode({\n nodeName: \"HTML\",\n childNodeCount: 1,\n children: [],\n });\n\n const session = new MockCDPSession({\n \"DOM.describeNode\": async () => ({\n node: {\n ...root,\n children: [child],\n childNodeCount: 1,\n },\n }),\n });\n\n await hydrateDomTree(session, root, true);\n expect(root.children).toEqual([child]);\n });\n\n it(\"retries describeNode when CBOR errors occur before succeeding\", async () => {\n const child = makeDomNode({ nodeName: \"DIV\" });\n const root = makeDomNode({\n nodeName: \"HTML\",\n childNodeCount: 1,\n children: [],\n });\n\n let attempts = 0;\n const session = new MockCDPSession({\n \"DOM.describeNode\": async () => {\n attempts++;\n if (attempts === 1) throw new Error(\"CBOR: stack limit exceeded\");\n return { node: { ...root, children: [child], childNodeCount: 1 } };\n },\n });\n\n await hydrateDomTree(session, root, true);\n expect(attempts).toBe(2);\n expect(root.children).toEqual([child]);\n });\n\n it(\"throws StagehandDomProcessError after exhausting describeNode retries\", async () => {\n const root = makeDomNode({\n nodeName: \"HTML\",\n childNodeCount: 1,\n children: [],\n });\n const session = new MockCDPSession({\n \"DOM.describeNode\": async () => {\n throw new Error(\"CBOR: stack limit exceeded\");\n },\n });\n\n await expect(hydrateDomTree(session, root, true)).rejects.toBeInstanceOf(\n StagehandDomProcessError,\n );\n });\n});\n\ndescribe(\"getDomTreeWithFallback\", () => {\n it(\"retries DOM.getDocument after CBOR errors and returns the hydrated root\", async () => {\n const root = makeDomNode({\n nodeName: \"#document\",\n nodeType: 9,\n children: [],\n });\n const depths: number[] = [];\n const session = new MockCDPSession({\n \"DOM.getDocument\": async (params) => {\n const depth = (params?.depth ?? 0) as number;\n depths.push(depth);\n if (depth === -1) throw new Error(\"CBOR: stack limit exceeded\");\n return { root };\n },\n \"DOM.describeNode\": async () => ({ node: root }),\n });\n\n const result = await getDomTreeWithFallback(session, true);\n expect(result).toBe(root);\n expect(depths).toEqual([-1, 256]);\n });\n\n it(\"propagates non-CBOR DOM.getDocument errors\", async () => {\n const session = new MockCDPSession({\n \"DOM.getDocument\": async () => {\n throw new Error(\"network fail\");\n },\n });\n await expect(getDomTreeWithFallback(session, false)).rejects.toThrow(\n \"network fail\",\n );\n });\n\n it(\"throws StagehandDomProcessError when all depth attempts hit CBOR limits\", async () => {\n const session = new MockCDPSession({\n \"DOM.getDocument\": async () => {\n throw new Error(\"CBOR: stack limit exceeded\");\n },\n });\n await expect(getDomTreeWithFallback(session, false)).rejects.toBeInstanceOf(\n StagehandDomProcessError,\n );\n });\n});\n\ndescribe(\"buildSessionDomIndex\", () => {\n it(\"collects absolute paths, scrollability, and content-document metadata\", async () => {\n const tree = buildSampleDomTree();\n const session = new MockCDPSession({\n \"DOM.enable\": async () => ({}),\n \"DOM.getDocument\": async () => ({ root: tree.root }),\n \"DOM.describeNode\": async () => ({ node: tree.root }),\n });\n\n const index = await buildSessionDomIndex(session, true);\n\n expect(index.rootBackend).toBe(tree.root.backendNodeId);\n expect(index.absByBe.get(tree.body.backendNodeId)).toBe(\"/html[1]/body[1]\");\n expect(index.absByBe.get(tree.scrollDiv.backendNodeId)).toBe(\n \"/html[1]/body[1]/div[1]\",\n );\n expect(index.scrollByBe.get(tree.scrollDiv.backendNodeId)).toBe(true);\n expect(index.docRootOf.get(tree.iframeHtml.backendNodeId)).toBe(\n tree.iframeDoc.backendNodeId,\n );\n expect(\n index.contentDocRootByIframe.get(tree.iframeElement.backendNodeId),\n ).toBe(tree.iframeDoc.backendNodeId);\n });\n});\n\ndescribe(\"domMapsForSession\", () => {\n it(\"derives frame-relative xpath/tag/scrollable maps for a frame's document root\", async () => {\n const tree = buildSampleDomTree();\n const session = new MockCDPSession({\n \"DOM.enable\": async () => ({}),\n \"DOM.getDocument\": async () => ({ root: tree.root }),\n \"DOM.getFrameOwner\": async () => ({\n backendNodeId: tree.iframeElement.backendNodeId,\n }),\n \"DOM.describeNode\": async () => ({ node: tree.root }),\n });\n\n const encode = (frameId: string, backendNodeId: number) =>\n `${frameId}-${backendNodeId}`;\n const maps = await domMapsForSession(\n session,\n \"frame-A\",\n true,\n encode,\n true,\n );\n\n const iframeDocKey = `frame-A-${tree.iframeDoc.backendNodeId}`;\n const iframeBodyKey = `frame-A-${tree.iframeBody.backendNodeId}`;\n const iframeChildKey = `frame-A-${tree.iframeChild.backendNodeId}`;\n\n expect(maps.tagNameMap[iframeDocKey]).toBe(\"#document\");\n expect(maps.xpathMap[iframeDocKey]).toBe(\"/\");\n expect(maps.xpathMap[iframeBodyKey]).toBe(\"/html[1]/body[1]\");\n expect(maps.xpathMap[iframeChildKey]).toBe(\"/html[1]/body[1]/p[1]\");\n expect(maps.scrollableMap[iframeBodyKey]).toBe(true);\n expect(Object.keys(maps.tagNameMap)).not.toContain(\n `frame-A-${tree.html.backendNodeId}`,\n );\n });\n\n it(\"falls back to the root document when frame owner lookup fails\", async () => {\n const tree = buildSampleDomTree();\n const session = new MockCDPSession({\n \"DOM.enable\": async () => ({}),\n \"DOM.getDocument\": async () => ({ root: tree.root }),\n \"DOM.getFrameOwner\": async () => {\n throw new Error(\"owner lookup failed\");\n },\n \"DOM.describeNode\": async () => ({ node: tree.root }),\n });\n\n const encode = (frameId: string, backendNodeId: number) =>\n `${frameId}-${backendNodeId}`;\n const maps = await domMapsForSession(\n session,\n \"frame-B\",\n false,\n encode,\n true,\n );\n\n expect(maps.xpathMap[`frame-B-${tree.html.backendNodeId}`]).toBe(\n \"/html[1]\",\n );\n expect(maps.xpathMap[`frame-B-${tree.scrollDiv.backendNodeId}`]).toBe(\n \"/html[1]/body[1]/div[1]\",\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
var import_vitest = require("vitest");
|
|
2
|
+
var import_domTree = require("../lib/v3/understudy/a11y/snapshot/domTree.js");
|
|
3
|
+
let nextNodeId = 1;
|
|
4
|
+
const makeNode = (overrides = {}) => {
|
|
5
|
+
const base = {
|
|
6
|
+
nodeId: nextNodeId++,
|
|
7
|
+
backendNodeId: nextNodeId++,
|
|
8
|
+
nodeType: 1,
|
|
9
|
+
nodeName: "DIV",
|
|
10
|
+
localName: "div",
|
|
11
|
+
nodeValue: "",
|
|
12
|
+
childNodeCount: overrides.childNodeCount ?? (overrides.children ? overrides.children.length : 0)
|
|
13
|
+
};
|
|
14
|
+
return { ...base, ...overrides };
|
|
15
|
+
};
|
|
16
|
+
(0, import_vitest.describe)("shouldExpandNode", () => {
|
|
17
|
+
(0, import_vitest.it)("returns true when declared children exceed realized children", () => {
|
|
18
|
+
const node = makeNode({
|
|
19
|
+
childNodeCount: 2,
|
|
20
|
+
children: [makeNode()]
|
|
21
|
+
});
|
|
22
|
+
(0, import_vitest.expect)((0, import_domTree.shouldExpandNode)(node)).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
(0, import_vitest.it)("returns false when all declared children are realized", () => {
|
|
25
|
+
const child = makeNode();
|
|
26
|
+
const node = makeNode({
|
|
27
|
+
childNodeCount: 1,
|
|
28
|
+
children: [child]
|
|
29
|
+
});
|
|
30
|
+
(0, import_vitest.expect)((0, import_domTree.shouldExpandNode)(node)).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
(0, import_vitest.describe)("mergeDomNodes", () => {
|
|
34
|
+
(0, import_vitest.it)("overrides structural fields with expanded node data", () => {
|
|
35
|
+
const originalChildren = [makeNode({ nodeName: "SPAN" })];
|
|
36
|
+
const target = makeNode({
|
|
37
|
+
childNodeCount: 1,
|
|
38
|
+
children: originalChildren,
|
|
39
|
+
shadowRoots: [makeNode({ nodeName: "shadow-old" })],
|
|
40
|
+
contentDocument: makeNode({ nodeName: "doc-old" })
|
|
41
|
+
});
|
|
42
|
+
const source = makeNode({
|
|
43
|
+
childNodeCount: 3,
|
|
44
|
+
children: [makeNode({ nodeName: "DIV" })],
|
|
45
|
+
shadowRoots: [],
|
|
46
|
+
contentDocument: makeNode({ nodeName: "doc-new" })
|
|
47
|
+
});
|
|
48
|
+
(0, import_domTree.mergeDomNodes)(target, source);
|
|
49
|
+
(0, import_vitest.expect)(target.childNodeCount).toBe(3);
|
|
50
|
+
(0, import_vitest.expect)(target.children).toEqual(source.children);
|
|
51
|
+
(0, import_vitest.expect)(target.shadowRoots).toEqual([]);
|
|
52
|
+
(0, import_vitest.expect)(target.contentDocument?.nodeName).toBe("doc-new");
|
|
53
|
+
});
|
|
54
|
+
(0, import_vitest.it)("preserves original structures when source omits them", () => {
|
|
55
|
+
const child = makeNode();
|
|
56
|
+
const target = makeNode({
|
|
57
|
+
childNodeCount: 1,
|
|
58
|
+
children: [child]
|
|
59
|
+
});
|
|
60
|
+
const source = makeNode({
|
|
61
|
+
childNodeCount: 5
|
|
62
|
+
});
|
|
63
|
+
(0, import_domTree.mergeDomNodes)(target, source);
|
|
64
|
+
(0, import_vitest.expect)(target.childNodeCount).toBe(5);
|
|
65
|
+
(0, import_vitest.expect)(target.children).toEqual([child]);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
(0, import_vitest.describe)("collectDomTraversalTargets", () => {
|
|
69
|
+
(0, import_vitest.it)("returns children, shadow roots, and content document in order", () => {
|
|
70
|
+
const childA = makeNode({ nodeName: "CHILD-A" });
|
|
71
|
+
const childB = makeNode({ nodeName: "CHILD-B" });
|
|
72
|
+
const shadow = makeNode({ nodeName: "SHADOW" });
|
|
73
|
+
const content = makeNode({ nodeName: "CONTENT" });
|
|
74
|
+
const node = makeNode({
|
|
75
|
+
children: [childA, childB],
|
|
76
|
+
shadowRoots: [shadow],
|
|
77
|
+
contentDocument: content
|
|
78
|
+
});
|
|
79
|
+
const targets = (0, import_domTree.collectDomTraversalTargets)(node);
|
|
80
|
+
(0, import_vitest.expect)(targets).toEqual([childA, childB, shadow, content]);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
(0, import_vitest.describe)("findNodeByBackendId", () => {
|
|
84
|
+
(0, import_vitest.it)("finds nodes nested within children and shadow roots", () => {
|
|
85
|
+
const target = makeNode({ backendNodeId: 999, nodeName: "TARGET" });
|
|
86
|
+
const root = makeNode({
|
|
87
|
+
children: [
|
|
88
|
+
makeNode({
|
|
89
|
+
children: [makeNode(), target]
|
|
90
|
+
})
|
|
91
|
+
],
|
|
92
|
+
shadowRoots: [makeNode()]
|
|
93
|
+
});
|
|
94
|
+
(0, import_vitest.expect)((0, import_domTree.findNodeByBackendId)(root, 999)).toBe(target);
|
|
95
|
+
});
|
|
96
|
+
(0, import_vitest.it)("returns undefined when no node matches the backend id", () => {
|
|
97
|
+
const root = makeNode({
|
|
98
|
+
children: [makeNode()],
|
|
99
|
+
shadowRoots: [makeNode()]
|
|
100
|
+
});
|
|
101
|
+
(0, import_vitest.expect)((0, import_domTree.findNodeByBackendId)(root, 123456)).toBeUndefined();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=snapshot-dom-tree-utils.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../tests/snapshot-dom-tree-utils.test.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Protocol } from \"devtools-protocol\";\nimport { describe, expect, it } from \"vitest\";\nimport {\n collectDomTraversalTargets,\n findNodeByBackendId,\n mergeDomNodes,\n shouldExpandNode,\n} from \"../lib/v3/understudy/a11y/snapshot/domTree.js\";\n\nlet nextNodeId = 1;\nconst makeNode = (\n overrides: Partial<Protocol.DOM.Node> = {},\n): Protocol.DOM.Node => {\n const base: Protocol.DOM.Node = {\n nodeId: nextNodeId++,\n backendNodeId: nextNodeId++,\n nodeType: 1,\n nodeName: \"DIV\",\n localName: \"div\",\n nodeValue: \"\",\n childNodeCount:\n overrides.childNodeCount ??\n (overrides.children ? overrides.children.length : 0),\n };\n return { ...base, ...overrides };\n};\n\ndescribe(\"shouldExpandNode\", () => {\n it(\"returns true when declared children exceed realized children\", () => {\n const node = makeNode({\n childNodeCount: 2,\n children: [makeNode()],\n });\n expect(shouldExpandNode(node)).toBe(true);\n });\n\n it(\"returns false when all declared children are realized\", () => {\n const child = makeNode();\n const node = makeNode({\n childNodeCount: 1,\n children: [child],\n });\n expect(shouldExpandNode(node)).toBe(false);\n });\n});\n\ndescribe(\"mergeDomNodes\", () => {\n it(\"overrides structural fields with expanded node data\", () => {\n const originalChildren = [makeNode({ nodeName: \"SPAN\" })];\n const target = makeNode({\n childNodeCount: 1,\n children: originalChildren,\n shadowRoots: [makeNode({ nodeName: \"shadow-old\" })],\n contentDocument: makeNode({ nodeName: \"doc-old\" }),\n });\n const source = makeNode({\n childNodeCount: 3,\n children: [makeNode({ nodeName: \"DIV\" })],\n shadowRoots: [],\n contentDocument: makeNode({ nodeName: \"doc-new\" }),\n });\n\n mergeDomNodes(target, source);\n\n expect(target.childNodeCount).toBe(3);\n expect(target.children).toEqual(source.children);\n expect(target.shadowRoots).toEqual([]);\n expect(target.contentDocument?.nodeName).toBe(\"doc-new\");\n });\n\n it(\"preserves original structures when source omits them\", () => {\n const child = makeNode();\n const target = makeNode({\n childNodeCount: 1,\n children: [child],\n });\n const source = makeNode({\n childNodeCount: 5,\n });\n\n mergeDomNodes(target, source);\n\n expect(target.childNodeCount).toBe(5);\n expect(target.children).toEqual([child]);\n });\n});\n\ndescribe(\"collectDomTraversalTargets\", () => {\n it(\"returns children, shadow roots, and content document in order\", () => {\n const childA = makeNode({ nodeName: \"CHILD-A\" });\n const childB = makeNode({ nodeName: \"CHILD-B\" });\n const shadow = makeNode({ nodeName: \"SHADOW\" });\n const content = makeNode({ nodeName: \"CONTENT\" });\n\n const node = makeNode({\n children: [childA, childB],\n shadowRoots: [shadow],\n contentDocument: content,\n });\n\n const targets = collectDomTraversalTargets(node);\n expect(targets).toEqual([childA, childB, shadow, content]);\n });\n});\n\ndescribe(\"findNodeByBackendId\", () => {\n it(\"finds nodes nested within children and shadow roots\", () => {\n const target = makeNode({ backendNodeId: 999, nodeName: \"TARGET\" });\n const root = makeNode({\n children: [\n makeNode({\n children: [makeNode(), target],\n }),\n ],\n shadowRoots: [makeNode()],\n });\n\n expect(findNodeByBackendId(root, 999)).toBe(target);\n });\n\n it(\"returns undefined when no node matches the backend id\", () => {\n const root = makeNode({\n children: [makeNode()],\n shadowRoots: [makeNode()],\n });\n expect(findNodeByBackendId(root, 123456)).toBeUndefined();\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var import_vitest = require("vitest");
|
|
2
|
+
var import_focusSelectors = require("../lib/v3/understudy/a11y/snapshot/focusSelectors.js");
|
|
3
|
+
(0, import_vitest.describe)("parseXPathToSteps", () => {
|
|
4
|
+
(0, import_vitest.it)("records axis direction and normalized names", () => {
|
|
5
|
+
const steps = (0, import_focusSelectors.parseXPathToSteps)(" //iframe[1]/div[2]//SPAN ");
|
|
6
|
+
(0, import_vitest.expect)(steps).toEqual([
|
|
7
|
+
{ axis: "desc", raw: "iframe[1]", name: "iframe" },
|
|
8
|
+
{ axis: "child", raw: "div[2]", name: "div" },
|
|
9
|
+
{ axis: "desc", raw: "SPAN", name: "span" }
|
|
10
|
+
]);
|
|
11
|
+
});
|
|
12
|
+
(0, import_vitest.it)("drops empty segments and returns [] for blank input", () => {
|
|
13
|
+
(0, import_vitest.expect)((0, import_focusSelectors.parseXPathToSteps)(" ")).toEqual([]);
|
|
14
|
+
(0, import_vitest.expect)((0, import_focusSelectors.parseXPathToSteps)("/ ")).toEqual([]);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
(0, import_vitest.describe)("buildXPathFromSteps", () => {
|
|
18
|
+
(0, import_vitest.it)("reconstructs descendant and child hops as a string", () => {
|
|
19
|
+
const steps = [
|
|
20
|
+
{ axis: "child", raw: "iframe[1]", name: "iframe" },
|
|
21
|
+
{ axis: "desc", raw: "div[@id='main']", name: "div" },
|
|
22
|
+
{ axis: "child", raw: "span", name: "span" }
|
|
23
|
+
];
|
|
24
|
+
(0, import_vitest.expect)((0, import_focusSelectors.buildXPathFromSteps)(steps)).toBe("/iframe[1]//div[@id='main']/span");
|
|
25
|
+
});
|
|
26
|
+
(0, import_vitest.it)("returns '/' for empty sequences", () => {
|
|
27
|
+
(0, import_vitest.expect)((0, import_focusSelectors.buildXPathFromSteps)([])).toBe("/");
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
(0, import_vitest.describe)("listChildrenOf", () => {
|
|
31
|
+
(0, import_vitest.it)("returns direct children whose parent matches the provided id", () => {
|
|
32
|
+
const parentByFrame = /* @__PURE__ */ new Map([
|
|
33
|
+
["frame-1", null],
|
|
34
|
+
["frame-2", "frame-1"],
|
|
35
|
+
["frame-3", "frame-1"],
|
|
36
|
+
["frame-4", "frame-2"]
|
|
37
|
+
]);
|
|
38
|
+
(0, import_vitest.expect)((0, import_focusSelectors.listChildrenOf)(parentByFrame, "frame-1")).toEqual([
|
|
39
|
+
"frame-2",
|
|
40
|
+
"frame-3"
|
|
41
|
+
]);
|
|
42
|
+
(0, import_vitest.expect)((0, import_focusSelectors.listChildrenOf)(parentByFrame, "frame-4")).toEqual([]);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=snapshot-focus-selectors-utils.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../tests/snapshot-focus-selectors-utils.test.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Step } from \"../lib/v3/types/private/snapshot.js\";\nimport { describe, expect, it } from \"vitest\";\nimport {\n buildXPathFromSteps,\n listChildrenOf,\n parseXPathToSteps,\n} from \"../lib/v3/understudy/a11y/snapshot/focusSelectors.js\";\n\ndescribe(\"parseXPathToSteps\", () => {\n it(\"records axis direction and normalized names\", () => {\n const steps = parseXPathToSteps(\" //iframe[1]/div[2]//SPAN \");\n expect(steps).toEqual([\n { axis: \"desc\", raw: \"iframe[1]\", name: \"iframe\" },\n { axis: \"child\", raw: \"div[2]\", name: \"div\" },\n { axis: \"desc\", raw: \"SPAN\", name: \"span\" },\n ]);\n });\n\n it(\"drops empty segments and returns [] for blank input\", () => {\n expect(parseXPathToSteps(\" \")).toEqual([]);\n expect(parseXPathToSteps(\"/ \")).toEqual([]);\n });\n});\n\ndescribe(\"buildXPathFromSteps\", () => {\n it(\"reconstructs descendant and child hops as a string\", () => {\n const steps: ReadonlyArray<Step> = [\n { axis: \"child\", raw: \"iframe[1]\", name: \"iframe\" },\n { axis: \"desc\", raw: \"div[@id='main']\", name: \"div\" },\n { axis: \"child\", raw: \"span\", name: \"span\" },\n ];\n expect(buildXPathFromSteps(steps)).toBe(\"/iframe[1]//div[@id='main']/span\");\n });\n\n it(\"returns '/' for empty sequences\", () => {\n expect(buildXPathFromSteps([])).toBe(\"/\");\n });\n});\n\ndescribe(\"listChildrenOf\", () => {\n it(\"returns direct children whose parent matches the provided id\", () => {\n const parentByFrame = new Map<string, string | null>([\n [\"frame-1\", null],\n [\"frame-2\", \"frame-1\"],\n [\"frame-3\", \"frame-1\"],\n [\"frame-4\", \"frame-2\"],\n ]);\n expect(listChildrenOf(parentByFrame, \"frame-1\")).toEqual([\n \"frame-2\",\n \"frame-3\",\n ]);\n expect(listChildrenOf(parentByFrame, \"frame-4\")).toEqual([]);\n });\n});\n"],
|
|
5
|
+
"mappings": "AACA,oBAAqC;AACrC,4BAIO;AAAA,IAEP,wBAAS,qBAAqB,MAAM;AAClC,wBAAG,+CAA+C,MAAM;AACtD,UAAM,YAAQ,yCAAkB,4BAA4B;AAC5D,8BAAO,KAAK,EAAE,QAAQ;AAAA,MACpB,EAAE,MAAM,QAAQ,KAAK,aAAa,MAAM,SAAS;AAAA,MACjD,EAAE,MAAM,SAAS,KAAK,UAAU,MAAM,MAAM;AAAA,MAC5C,EAAE,MAAM,QAAQ,KAAK,QAAQ,MAAM,OAAO;AAAA,IAC5C,CAAC;AAAA,EACH,CAAC;AAED,wBAAG,uDAAuD,MAAM;AAC9D,kCAAO,yCAAkB,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3C,kCAAO,yCAAkB,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC5C,CAAC;AACH,CAAC;AAAA,IAED,wBAAS,uBAAuB,MAAM;AACpC,wBAAG,sDAAsD,MAAM;AAC7D,UAAM,QAA6B;AAAA,MACjC,EAAE,MAAM,SAAS,KAAK,aAAa,MAAM,SAAS;AAAA,MAClD,EAAE,MAAM,QAAQ,KAAK,mBAAmB,MAAM,MAAM;AAAA,MACpD,EAAE,MAAM,SAAS,KAAK,QAAQ,MAAM,OAAO;AAAA,IAC7C;AACA,kCAAO,2CAAoB,KAAK,CAAC,EAAE,KAAK,kCAAkC;AAAA,EAC5E,CAAC;AAED,wBAAG,mCAAmC,MAAM;AAC1C,kCAAO,2CAAoB,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG;AAAA,EAC1C,CAAC;AACH,CAAC;AAAA,IAED,wBAAS,kBAAkB,MAAM;AAC/B,wBAAG,gEAAgE,MAAM;AACvE,UAAM,gBAAgB,oBAAI,IAA2B;AAAA,MACnD,CAAC,WAAW,IAAI;AAAA,MAChB,CAAC,WAAW,SAAS;AAAA,MACrB,CAAC,WAAW,SAAS;AAAA,MACrB,CAAC,WAAW,SAAS;AAAA,IACvB,CAAC;AACD,kCAAO,sCAAe,eAAe,SAAS,CAAC,EAAE,QAAQ;AAAA,MACvD;AAAA,MACA;AAAA,IACF,CAAC;AACD,kCAAO,sCAAe,eAAe,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC7D,CAAC;AACH,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|