browser-debugger-cli 0.1.0-alpha.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -68
- package/dist/__testfixtures__/cdpMessages.d.ts +1 -1
- package/dist/__testfixtures__/connectionTargets.d.ts +1 -1
- package/dist/__testutils__/assertions.d.ts +1 -1
- package/dist/__testutils__/testFixtures.d.ts +1 -1
- package/dist/cli/commands/cdp.js +1 -1
- package/dist/cli/commands/cleanup.d.ts.map +1 -1
- package/dist/cli/commands/cleanup.js +12 -13
- package/dist/cli/commands/cleanup.js.map +1 -1
- package/dist/cli/commands/console.js +2 -2
- package/dist/cli/commands/details.js +3 -3
- package/dist/cli/commands/details.js.map +1 -1
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +1 -1
- package/dist/cli/commands/dom/helpers/errorHandler.js +4 -3
- package/dist/cli/commands/dom/helpers/errorHandler.js.map +1 -1
- package/dist/cli/commands/dom/index.js +1 -1
- package/dist/cli/commands/dom.d.ts.map +1 -0
- package/dist/cli/commands/dom.js +257 -0
- package/dist/cli/commands/dom.js.map +1 -0
- package/dist/cli/commands/domErrorHandler.d.ts +45 -0
- package/dist/cli/commands/domErrorHandler.d.ts.map +1 -0
- package/dist/cli/commands/domErrorHandler.js +71 -0
- package/dist/cli/commands/domErrorHandler.js.map +1 -0
- package/dist/cli/commands/domEvalHelpers.d.ts +52 -0
- package/dist/cli/commands/domEvalHelpers.d.ts.map +1 -0
- package/dist/cli/commands/domEvalHelpers.js +76 -0
- package/dist/cli/commands/domEvalHelpers.js.map +1 -0
- package/dist/cli/commands/domOptionsBuilder.d.ts +35 -0
- package/dist/cli/commands/domOptionsBuilder.d.ts.map +1 -0
- package/dist/cli/commands/domOptionsBuilder.js +51 -0
- package/dist/cli/commands/domOptionsBuilder.js.map +1 -0
- package/dist/cli/{collectors/helpers/selectorParser.d.ts → commands/domSelectorParser.d.ts} +1 -1
- package/dist/cli/commands/domSelectorParser.d.ts.map +1 -0
- package/dist/cli/{collectors/helpers/selectorParser.js → commands/domSelectorParser.js} +1 -1
- package/dist/cli/commands/domSelectorParser.js.map +1 -0
- package/dist/cli/commands/network.d.ts.map +1 -1
- package/dist/cli/commands/network.js +8 -5
- package/dist/cli/commands/network.js.map +1 -1
- package/dist/cli/commands/peek.d.ts.map +1 -1
- package/dist/cli/commands/peek.js +7 -7
- package/dist/cli/commands/peek.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +19 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +13 -10
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.d.ts.map +1 -1
- package/dist/cli/commands/stop.js +7 -6
- package/dist/cli/commands/stop.js.map +1 -1
- package/dist/cli/formatters/detailsFormatter.d.ts +1 -1
- package/dist/cli/formatters/previewFormatter.d.ts +1 -1
- package/dist/cli/formatters/previewFormatter.js +1 -1
- package/dist/cli/formatters/previewFormatter.js.map +1 -1
- package/dist/cli/formatters/statusFormatter.d.ts +6 -1
- package/dist/cli/formatters/statusFormatter.d.ts.map +1 -1
- package/dist/cli/formatters/statusFormatter.js +49 -4
- package/dist/cli/formatters/statusFormatter.js.map +1 -1
- package/dist/cli/handlers/CommandRunner.d.ts.map +1 -1
- package/dist/cli/handlers/CommandRunner.js +5 -5
- package/dist/cli/handlers/CommandRunner.js.map +1 -1
- package/dist/cli/handlers/OutputBuilder.d.ts +1 -1
- package/dist/cli/handlers/daemonSessionController.d.ts +1 -1
- package/dist/cli/handlers/daemonSessionController.d.ts.map +1 -1
- package/dist/cli/handlers/daemonSessionController.js +16 -45
- package/dist/cli/handlers/daemonSessionController.js.map +1 -1
- package/dist/cli/handlers/landingPage.d.ts +8 -0
- package/dist/cli/handlers/landingPage.d.ts.map +1 -0
- package/dist/cli/handlers/landingPage.js +8 -0
- package/dist/cli/handlers/landingPage.js.map +1 -0
- package/dist/cli/registry.js +10 -10
- package/dist/cli/registry.js.map +1 -1
- package/dist/collectors/__tests__/network.contract.test.js +25 -10
- package/dist/collectors/__tests__/network.contract.test.js.map +1 -1
- package/dist/collectors/console.d.ts +1 -1
- package/dist/collectors/console.js.map +1 -1
- package/dist/collectors/dom.d.ts +1 -1
- package/dist/collectors/network.d.ts +1 -1
- package/dist/collectors/network.js.map +1 -1
- package/dist/commandRegistry.d.ts +11 -0
- package/dist/commandRegistry.d.ts.map +1 -0
- package/dist/commandRegistry.js +45 -0
- package/dist/commandRegistry.js.map +1 -0
- package/dist/commands/__tests__/cdp.contract.test.d.ts +24 -0
- package/dist/commands/__tests__/cdp.contract.test.d.ts.map +1 -0
- package/dist/commands/__tests__/cdp.contract.test.js +467 -0
- package/dist/commands/__tests__/cdp.contract.test.js.map +1 -0
- package/dist/commands/cdp.d.ts +8 -0
- package/dist/commands/cdp.d.ts.map +1 -0
- package/dist/commands/cdp.js +45 -0
- package/dist/commands/cdp.js.map +1 -0
- package/dist/commands/cleanup.d.ts +8 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +129 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/console.d.ts +8 -0
- package/dist/commands/console.d.ts.map +1 -0
- package/dist/commands/console.js +92 -0
- package/dist/commands/console.js.map +1 -0
- package/dist/commands/details.d.ts +8 -0
- package/dist/commands/details.d.ts.map +1 -0
- package/dist/commands/details.js +68 -0
- package/dist/commands/details.js.map +1 -0
- package/dist/commands/dom.d.ts +8 -0
- package/dist/commands/dom.d.ts.map +1 -0
- package/dist/commands/dom.js +257 -0
- package/dist/commands/dom.js.map +1 -0
- package/dist/commands/domErrorHandler.d.ts +45 -0
- package/dist/commands/domErrorHandler.d.ts.map +1 -0
- package/dist/commands/domErrorHandler.js +71 -0
- package/dist/commands/domErrorHandler.js.map +1 -0
- package/dist/commands/domEvalHelpers.d.ts +52 -0
- package/dist/commands/domEvalHelpers.d.ts.map +1 -0
- package/dist/commands/domEvalHelpers.js +76 -0
- package/dist/commands/domEvalHelpers.js.map +1 -0
- package/dist/commands/domOptionsBuilder.d.ts +35 -0
- package/dist/commands/domOptionsBuilder.d.ts.map +1 -0
- package/dist/commands/domOptionsBuilder.js +51 -0
- package/dist/commands/domOptionsBuilder.js.map +1 -0
- package/dist/commands/domSelectorParser.d.ts +20 -0
- package/dist/commands/domSelectorParser.d.ts.map +1 -0
- package/dist/commands/domSelectorParser.js +20 -0
- package/dist/commands/domSelectorParser.js.map +1 -0
- package/dist/commands/network.d.ts +8 -0
- package/dist/commands/network.d.ts.map +1 -0
- package/dist/commands/network.js +43 -0
- package/dist/commands/network.js.map +1 -0
- package/dist/commands/peek.d.ts +8 -0
- package/dist/commands/peek.d.ts.map +1 -0
- package/dist/commands/peek.js +114 -0
- package/dist/commands/peek.js.map +1 -0
- package/dist/commands/shared/CommandRunner.d.ts +60 -0
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -0
- package/dist/commands/shared/CommandRunner.js +81 -0
- package/dist/commands/shared/CommandRunner.js.map +1 -0
- package/dist/commands/shared/OutputBuilder.d.ts +60 -0
- package/dist/commands/shared/OutputBuilder.d.ts.map +1 -0
- package/dist/commands/shared/OutputBuilder.js +138 -0
- package/dist/commands/shared/OutputBuilder.js.map +1 -0
- package/dist/commands/shared/commonOptions.d.ts +54 -0
- package/dist/commands/shared/commonOptions.d.ts.map +1 -0
- package/dist/commands/shared/commonOptions.js +64 -0
- package/dist/commands/shared/commonOptions.js.map +1 -0
- package/dist/commands/shared/daemonSessionController.d.ts +23 -0
- package/dist/commands/shared/daemonSessionController.d.ts.map +1 -0
- package/dist/commands/shared/daemonSessionController.js +79 -0
- package/dist/commands/shared/daemonSessionController.js.map +1 -0
- package/dist/commands/shared/landingPage.d.ts +8 -0
- package/dist/commands/shared/landingPage.d.ts.map +1 -0
- package/dist/commands/shared/landingPage.js +8 -0
- package/dist/commands/shared/landingPage.js.map +1 -0
- package/dist/commands/shared/sessionController.d.ts +21 -0
- package/dist/commands/shared/sessionController.d.ts.map +1 -0
- package/dist/commands/shared/sessionController.js +55 -0
- package/dist/commands/shared/sessionController.js.map +1 -0
- package/dist/commands/start.d.ts +9 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +85 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/{cli/commands/query.d.ts → commands/status.d.ts} +3 -3
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +87 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +8 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +150 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands.d.ts +11 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +45 -0
- package/dist/commands.js.map +1 -0
- package/dist/connection/__tests__/cdp.contract.test.js +1 -1
- package/dist/connection/__tests__/finder.contract.test.js +1 -1
- package/dist/connection/__tests__/finder.contract.test.js.map +1 -1
- package/dist/connection/cdp.d.ts +1 -1
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/domOperations.d.ts +48 -0
- package/dist/connection/domOperations.d.ts.map +1 -0
- package/dist/connection/domOperations.js +104 -0
- package/dist/connection/domOperations.js.map +1 -0
- package/dist/connection/finder.js.map +1 -1
- package/dist/connection/launcher.d.ts +7 -3
- package/dist/connection/launcher.d.ts.map +1 -1
- package/dist/connection/launcher.js +72 -21
- package/dist/connection/launcher.js.map +1 -1
- package/dist/constants.d.ts +17 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +28 -0
- package/dist/constants.js.map +1 -1
- package/dist/daemon/__tests__/ipcServer.contract.test.js +25 -11
- package/dist/daemon/__tests__/ipcServer.contract.test.js.map +1 -1
- package/dist/daemon/ipcServer.d.ts.map +1 -1
- package/dist/daemon/ipcServer.js +86 -6
- package/dist/daemon/ipcServer.js.map +1 -1
- package/dist/daemon/launcher.d.ts.map +1 -1
- package/dist/daemon/launcher.js +8 -6
- package/dist/daemon/launcher.js.map +1 -1
- package/dist/daemon/startSession.d.ts +2 -2
- package/dist/daemon/startSession.d.ts.map +1 -1
- package/dist/daemon/startSession.js +12 -11
- package/dist/daemon/startSession.js.map +1 -1
- package/dist/daemon/worker.d.ts +1 -1
- package/dist/daemon/worker.js +97 -41
- package/dist/daemon/worker.js.map +1 -1
- package/dist/{cli/collectors/helpers/domCache.d.ts → dom/cache.d.ts} +1 -5
- package/dist/dom/cache.d.ts.map +1 -0
- package/dist/{cli/collectors/helpers/domCache.js → dom/cache.js} +5 -19
- package/dist/dom/cache.js.map +1 -0
- package/dist/dom/index.d.ts +9 -0
- package/dist/dom/index.d.ts.map +1 -0
- package/dist/dom/index.js +9 -0
- package/dist/dom/index.js.map +1 -0
- package/dist/{cli/collectors/helpers/domQuery.d.ts → dom/query.d.ts} +5 -2
- package/dist/dom/query.d.ts.map +1 -0
- package/dist/{cli/collectors/helpers/domQuery.js → dom/query.js} +11 -7
- package/dist/dom/query.js.map +1 -0
- package/dist/index.js +117 -35
- package/dist/index.js.map +1 -1
- package/dist/ipc/__tests__/client.contract.test.js +11 -1
- package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
- package/dist/ipc/client.d.ts +4 -4
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +10 -6
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/commands.d.ts +33 -1
- package/dist/ipc/commands.d.ts.map +1 -1
- package/dist/ipc/commands.js +4 -0
- package/dist/ipc/commands.js.map +1 -1
- package/dist/ipc/types.d.ts +34 -3
- package/dist/ipc/types.d.ts.map +1 -1
- package/dist/ipc/types.js.map +1 -1
- package/dist/session/metadata.d.ts +2 -2
- package/dist/session/metadata.d.ts.map +1 -1
- package/dist/session/output.d.ts +1 -1
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +4 -3
- package/dist/session/process.js.map +1 -1
- package/dist/session/queryCache.d.ts +36 -0
- package/dist/session/queryCache.d.ts.map +1 -0
- package/dist/session/queryCache.js +66 -0
- package/dist/session/queryCache.js.map +1 -0
- package/dist/telemetry/__tests__/network.contract.test.d.ts +28 -0
- package/dist/telemetry/__tests__/network.contract.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/network.contract.test.js +540 -0
- package/dist/telemetry/__tests__/network.contract.test.js.map +1 -0
- package/dist/telemetry/console.d.ts +19 -0
- package/dist/telemetry/console.d.ts.map +1 -0
- package/dist/telemetry/console.js +87 -0
- package/dist/telemetry/console.js.map +1 -0
- package/dist/telemetry/dom.d.ts +21 -0
- package/dist/telemetry/dom.d.ts.map +1 -0
- package/dist/telemetry/dom.js +99 -0
- package/dist/telemetry/dom.js.map +1 -0
- package/dist/telemetry/network.d.ts +33 -0
- package/dist/telemetry/network.d.ts.map +1 -0
- package/dist/telemetry/network.js +191 -0
- package/dist/telemetry/network.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/ui/formatters/cookies.d.ts +32 -0
- package/dist/ui/formatters/cookies.d.ts.map +1 -0
- package/dist/ui/formatters/cookies.js +48 -0
- package/dist/ui/formatters/cookies.js.map +1 -0
- package/dist/ui/formatters/details.d.ts +10 -0
- package/dist/ui/formatters/details.d.ts.map +1 -0
- package/dist/ui/formatters/details.js +63 -0
- package/dist/ui/formatters/details.js.map +1 -0
- package/dist/ui/formatters/index.d.ts +10 -0
- package/dist/ui/formatters/index.d.ts.map +1 -0
- package/dist/ui/formatters/index.js +10 -0
- package/dist/ui/formatters/index.js.map +1 -0
- package/dist/ui/formatters/preview.d.ts +25 -0
- package/dist/ui/formatters/preview.d.ts.map +1 -0
- package/dist/ui/formatters/preview.js +177 -0
- package/dist/ui/formatters/preview.js.map +1 -0
- package/dist/ui/formatters/status.d.ts +39 -0
- package/dist/ui/formatters/status.d.ts.map +1 -0
- package/dist/ui/formatters/status.js +153 -0
- package/dist/ui/formatters/status.js.map +1 -0
- package/dist/ui/formatting.d.ts +197 -0
- package/dist/ui/formatting.d.ts.map +1 -0
- package/dist/ui/formatting.js +318 -0
- package/dist/ui/formatting.js.map +1 -0
- package/dist/ui/messages/chrome.d.ts +102 -0
- package/dist/ui/messages/chrome.d.ts.map +1 -0
- package/dist/ui/messages/chrome.js +162 -0
- package/dist/ui/messages/chrome.js.map +1 -0
- package/dist/ui/messages/commands.d.ts +88 -0
- package/dist/ui/messages/commands.d.ts.map +1 -0
- package/dist/ui/messages/commands.js +150 -0
- package/dist/ui/messages/commands.js.map +1 -0
- package/dist/ui/messages/consoleMessages.d.ts +39 -0
- package/dist/ui/messages/consoleMessages.d.ts.map +1 -0
- package/dist/ui/messages/consoleMessages.js +48 -0
- package/dist/ui/messages/consoleMessages.js.map +1 -0
- package/dist/ui/messages/debug.d.ts +180 -0
- package/dist/ui/messages/debug.d.ts.map +1 -0
- package/dist/ui/messages/debug.js +241 -0
- package/dist/ui/messages/debug.js.map +1 -0
- package/dist/ui/messages/errors.d.ts +80 -0
- package/dist/ui/messages/errors.d.ts.map +1 -0
- package/dist/ui/messages/errors.js +122 -0
- package/dist/ui/messages/errors.js.map +1 -0
- package/dist/ui/messages/index.d.ts +12 -0
- package/dist/ui/messages/index.d.ts.map +1 -0
- package/dist/ui/messages/index.js +12 -0
- package/dist/ui/messages/index.js.map +1 -0
- package/dist/ui/messages/internal.d.ts +30 -0
- package/dist/ui/messages/internal.d.ts.map +1 -0
- package/dist/ui/messages/internal.js +42 -0
- package/dist/ui/messages/internal.js.map +1 -0
- package/dist/ui/messages/preview.d.ts +27 -0
- package/dist/ui/messages/preview.d.ts.map +1 -0
- package/dist/ui/messages/preview.js +45 -0
- package/dist/ui/messages/preview.js.map +1 -0
- package/dist/ui/messages/session.d.ts +54 -0
- package/dist/ui/messages/session.d.ts.map +1 -0
- package/dist/ui/messages/session.js +77 -0
- package/dist/ui/messages/session.js.map +1 -0
- package/dist/ui/messages/validation.d.ts +20 -0
- package/dist/ui/messages/validation.d.ts.map +1 -0
- package/dist/ui/messages/validation.js +22 -0
- package/dist/ui/messages/validation.js.map +1 -0
- package/dist/utils/__tests__/filters.unit.test.js +1 -1
- package/dist/utils/cdpHandlers.d.ts +1 -1
- package/dist/utils/cdpHandlers.js +1 -1
- package/dist/utils/chromeDiagnostics.d.ts +0 -12
- package/dist/utils/chromeDiagnostics.d.ts.map +1 -1
- package/dist/utils/chromeDiagnostics.js +0 -51
- package/dist/utils/chromeDiagnostics.js.map +1 -1
- package/dist/utils/http.d.ts +1 -1
- package/dist/utils/http.js.map +1 -1
- package/dist/utils/logger.d.ts +68 -12
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +62 -12
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/pageReadiness.d.ts +51 -0
- package/dist/utils/pageReadiness.d.ts.map +1 -0
- package/dist/utils/pageReadiness.js +271 -0
- package/dist/utils/pageReadiness.js.map +1 -0
- package/dist/utils/ui.d.ts +36 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +47 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/url.d.ts +6 -24
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +6 -67
- package/dist/utils/url.js.map +1 -1
- package/package.json +2 -2
- package/dist/cli/collectors/dom.d.ts.map +0 -1
- package/dist/cli/collectors/dom.js +0 -361
- package/dist/cli/collectors/dom.js.map +0 -1
- package/dist/cli/collectors/helpers/domCache.d.ts.map +0 -1
- package/dist/cli/collectors/helpers/domCache.js.map +0 -1
- package/dist/cli/collectors/helpers/domQuery.d.ts.map +0 -1
- package/dist/cli/collectors/helpers/domQuery.js.map +0 -1
- package/dist/cli/collectors/helpers/selectorParser.d.ts.map +0 -1
- package/dist/cli/collectors/helpers/selectorParser.js.map +0 -1
- package/dist/cli/commands/__tests__/ipcTest.test.d.ts +0 -2
- package/dist/cli/commands/__tests__/ipcTest.test.d.ts.map +0 -1
- package/dist/cli/commands/__tests__/ipcTest.test.js +0 -37
- package/dist/cli/commands/__tests__/ipcTest.test.js.map +0 -1
- package/dist/cli/commands/ipcTest.d.ts +0 -23
- package/dist/cli/commands/ipcTest.d.ts.map +0 -1
- package/dist/cli/commands/ipcTest.js +0 -181
- package/dist/cli/commands/ipcTest.js.map +0 -1
- package/dist/cli/commands/query.d.ts.map +0 -1
- package/dist/cli/commands/query.js +0 -127
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/handlers/ChromeBootstrap.d.ts +0 -24
- package/dist/cli/handlers/ChromeBootstrap.d.ts.map +0 -1
- package/dist/cli/handlers/ChromeBootstrap.js +0 -50
- package/dist/cli/handlers/ChromeBootstrap.js.map +0 -1
- package/dist/cli/handlers/OutputWriter.d.ts +0 -15
- package/dist/cli/handlers/OutputWriter.d.ts.map +0 -1
- package/dist/cli/handlers/OutputWriter.js +0 -34
- package/dist/cli/handlers/OutputWriter.js.map +0 -1
- package/dist/cli/handlers/PreviewWriter.d.ts +0 -52
- package/dist/cli/handlers/PreviewWriter.d.ts.map +0 -1
- package/dist/cli/handlers/PreviewWriter.js +0 -119
- package/dist/cli/handlers/PreviewWriter.js.map +0 -1
- package/dist/cli/handlers/SessionLock.d.ts +0 -16
- package/dist/cli/handlers/SessionLock.d.ts.map +0 -1
- package/dist/cli/handlers/SessionLock.js +0 -38
- package/dist/cli/handlers/SessionLock.js.map +0 -1
- package/dist/cli/handlers/SessionLoop.d.ts +0 -19
- package/dist/cli/handlers/SessionLoop.d.ts.map +0 -1
- package/dist/cli/handlers/SessionLoop.js +0 -47
- package/dist/cli/handlers/SessionLoop.js.map +0 -1
- package/dist/cli/handlers/ShutdownController.d.ts +0 -38
- package/dist/cli/handlers/ShutdownController.d.ts.map +0 -1
- package/dist/cli/handlers/ShutdownController.js +0 -83
- package/dist/cli/handlers/ShutdownController.js.map +0 -1
- package/dist/cli/handlers/SignalHandler.d.ts +0 -35
- package/dist/cli/handlers/SignalHandler.d.ts.map +0 -1
- package/dist/cli/handlers/SignalHandler.js +0 -81
- package/dist/cli/handlers/SignalHandler.js.map +0 -1
- package/dist/cli/handlers/TargetSetup.d.ts +0 -42
- package/dist/cli/handlers/TargetSetup.d.ts.map +0 -1
- package/dist/cli/handlers/TargetSetup.js +0 -87
- package/dist/cli/handlers/TargetSetup.js.map +0 -1
- package/dist/connection/__tests__/tabs.contract.test.d.ts +0 -2
- package/dist/connection/__tests__/tabs.contract.test.d.ts.map +0 -1
- package/dist/connection/__tests__/tabs.contract.test.js +0 -137
- package/dist/connection/__tests__/tabs.contract.test.js.map +0 -1
- package/dist/connection/tabs.d.ts +0 -82
- package/dist/connection/tabs.d.ts.map +0 -1
- package/dist/connection/tabs.js +0 -577
- package/dist/connection/tabs.js.map +0 -1
- package/dist/session/BdgSession.d.ts +0 -129
- package/dist/session/BdgSession.d.ts.map +0 -1
- package/dist/session/BdgSession.js +0 -270
- package/dist/session/BdgSession.js.map +0 -1
- package/dist/session/index.d.ts +0 -15
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js +0 -23
- package/dist/session/index.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -12
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -20
- package/dist/utils/validation.js.map +0 -1
- /package/dist/cli/{collectors → commands}/dom.d.ts +0 -0
package/README.md
CHANGED
|
@@ -29,36 +29,68 @@ bdg status
|
|
|
29
29
|
# Chrome PID: 67890
|
|
30
30
|
# Target: http://example.com
|
|
31
31
|
|
|
32
|
-
# Preview collected data
|
|
33
|
-
bdg peek --last 5
|
|
34
|
-
# NETWORK [0] GET http://example.com/ (200)
|
|
35
|
-
# NETWORK [1] GET http://example.com/style.css (200)
|
|
36
|
-
# ...
|
|
37
|
-
|
|
38
32
|
# Execute raw CDP commands
|
|
39
33
|
bdg cdp Runtime.evaluate --params '{"expression":"document.title","returnByValue":true}'
|
|
40
34
|
# { "result": { "type": "string", "value": "Example Domain" } }
|
|
41
35
|
|
|
36
|
+
bdg cdp Network.getCookies
|
|
37
|
+
# { "cookies": [...] }
|
|
38
|
+
|
|
42
39
|
# Stop session
|
|
43
40
|
bdg stop
|
|
44
41
|
```
|
|
45
42
|
|
|
46
|
-
##
|
|
43
|
+
## How It Works
|
|
47
44
|
|
|
48
|
-
|
|
45
|
+
`bdg` is built on a **layered architecture** — raw CDP access with human-friendly wrappers on top.
|
|
49
46
|
|
|
50
|
-
|
|
47
|
+
### Layer 1: Raw CDP Access ✅
|
|
51
48
|
|
|
52
|
-
**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
49
|
+
Direct access to **60+ domains, 300+ methods** from [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/):
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Execute any CDP method
|
|
53
|
+
bdg cdp Network.getCookies
|
|
54
|
+
bdg cdp Runtime.evaluate --params '{"expression":"document.title","returnByValue":true}'
|
|
55
|
+
bdg cdp Performance.getMetrics
|
|
56
|
+
|
|
57
|
+
# Pipe to jq for filtering
|
|
58
|
+
bdg cdp Network.getCookies | jq '.cookies[] | select(.name == "session")'
|
|
59
|
+
```
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
**Why raw CDP first?**
|
|
62
|
+
- ✅ Zero abstraction overhead — direct WebSocket to Chrome
|
|
63
|
+
- ✅ Full protocol power — all CDP methods work immediately
|
|
64
|
+
- ✅ Future-proof — new CDP features work without code changes
|
|
65
|
+
- ✅ Agent-friendly — structured input/output, composable with Unix tools
|
|
66
|
+
|
|
67
|
+
### Layer 2: Human-Friendly Wrappers 🚧
|
|
68
|
+
|
|
69
|
+
Building ergonomic commands on top of raw CDP for common workflows:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Session management
|
|
73
|
+
bdg status # Check active session
|
|
74
|
+
bdg stop # Stop session gracefully
|
|
75
|
+
bdg cleanup # Clean up stale sessions
|
|
76
|
+
|
|
77
|
+
# Data inspection
|
|
78
|
+
bdg peek # Quick preview of collected data
|
|
79
|
+
bdg peek --follow # Live updates every second
|
|
80
|
+
bdg details # Full details for specific items
|
|
81
|
+
bdg dom query # Query DOM elements
|
|
82
|
+
bdg dom eval # Execute JavaScript in browser context
|
|
83
|
+
bdg dom highlight # Highlight elements visually
|
|
84
|
+
bdg dom get # Get full HTML for elements
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Progressive disclosure**: Start with raw CDP power, add convenience wrappers for common patterns.
|
|
88
|
+
|
|
89
|
+
**Why CLI over protocol servers?**
|
|
90
|
+
- **Token efficiency**: CDP is in the model's training data (~3k tokens for patterns vs. 5-10k for MCP server definitions)
|
|
91
|
+
- **Composability**: Unix pipes with `jq`, `grep`, `awk` — tools models already know
|
|
92
|
+
- **Transparent errors**: See exactly what failed, no protocol layers hiding issues
|
|
93
|
+
- **Real-time evolution**: Update patterns anytime, no server redeployment
|
|
62
94
|
|
|
63
95
|
## Available Commands
|
|
64
96
|
|
|
@@ -109,61 +141,19 @@ bdg cdp Network.getCookies | jq '.cookies[] | select(.name == "session_id") | .v
|
|
|
109
141
|
### Session Management
|
|
110
142
|
|
|
111
143
|
```bash
|
|
144
|
+
# Start session
|
|
145
|
+
bdg example.com # Opens Chrome with daemon in background
|
|
146
|
+
|
|
112
147
|
# Check if session is active
|
|
113
|
-
bdg status
|
|
114
|
-
#
|
|
115
|
-
# Worker PID: 12345
|
|
116
|
-
# Chrome PID: 67890
|
|
117
|
-
# Target: http://example.com
|
|
148
|
+
bdg status # Show session info
|
|
149
|
+
bdg status --verbose # Include Chrome diagnostics
|
|
118
150
|
|
|
119
151
|
# Stop session
|
|
120
|
-
bdg stop
|
|
152
|
+
bdg stop # Gracefully stop daemon and close Chrome
|
|
121
153
|
|
|
122
154
|
# Clean up stale sessions
|
|
123
|
-
bdg cleanup
|
|
124
|
-
bdg cleanup --force
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### Live Data Inspection
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
# Preview collected data without stopping
|
|
131
|
-
bdg peek
|
|
132
|
-
bdg peek --last 10 # Show last 10 items
|
|
133
|
-
bdg peek --network # Only network requests
|
|
134
|
-
bdg peek --console # Only console logs
|
|
135
|
-
bdg peek --follow # Live updates every second
|
|
136
|
-
bdg peek --json # JSON output
|
|
137
|
-
|
|
138
|
-
# Get detailed information
|
|
139
|
-
bdg details network <requestId> # Full request/response with bodies
|
|
140
|
-
bdg details console <index> # Full console message with args
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### DOM Inspection
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
# Query DOM elements
|
|
147
|
-
bdg dom query "document.title"
|
|
148
|
-
bdg dom query ".error-message"
|
|
149
|
-
|
|
150
|
-
# Get element by selector or index
|
|
151
|
-
bdg dom get ".main-content"
|
|
152
|
-
bdg dom get 0 # Get first element from cache
|
|
153
|
-
|
|
154
|
-
# Evaluate JavaScript
|
|
155
|
-
bdg dom eval "window.location.href"
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Network & Console Commands
|
|
159
|
-
|
|
160
|
-
```bash
|
|
161
|
-
# Inspect network state
|
|
162
|
-
bdg network
|
|
163
|
-
|
|
164
|
-
# Query console logs
|
|
165
|
-
bdg console
|
|
166
|
-
bdg console --json
|
|
155
|
+
bdg cleanup # Remove stale session files
|
|
156
|
+
bdg cleanup --force # Force cleanup even if session appears active
|
|
167
157
|
```
|
|
168
158
|
|
|
169
159
|
## Technical Overview
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Provides ergonomic assertions for common test patterns.
|
|
5
5
|
*/
|
|
6
|
-
import type { CDPMessage } from '
|
|
6
|
+
import type { CDPMessage } from '../types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Poll a condition until it becomes true or timeout
|
|
9
9
|
* Useful for eventually-consistent assertions
|
package/dist/cli/commands/cdp.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { runCommand } from '
|
|
1
|
+
import { runCommand } from '../../cli/handlers/CommandRunner.js';
|
|
2
2
|
import { callCDP } from '../../ipc/client.js';
|
|
3
3
|
import { validateIPCResponse } from '../../ipc/responseValidator.js';
|
|
4
4
|
import { getErrorMessage } from '../../utils/errors.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cleanup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cleanup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0EzC;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsG7D"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
|
-
import { runCommand } from '
|
|
3
|
-
import { jsonOption } from '
|
|
2
|
+
import { runCommand } from '../../cli/handlers/CommandRunner.js';
|
|
3
|
+
import { jsonOption } from '../../cli/handlers/commonOptions.js';
|
|
4
4
|
import { cleanupSession } from '../../session/cleanup.js';
|
|
5
5
|
import { getSessionFilePath } from '../../session/paths.js';
|
|
6
6
|
import { readPid } from '../../session/pid.js';
|
|
7
7
|
import { isProcessAlive } from '../../session/process.js';
|
|
8
|
+
import { sessionFilesCleanedMessage, sessionOutputRemovedMessage, sessionDirectoryCleanMessage, noSessionFilesMessage, staleSessionFoundMessage, forceCleanupWarningMessage, sessionStillActiveError, warningMessage, } from '../../ui/messages/commands.js';
|
|
8
9
|
import { getErrorMessage } from '../../utils/errors.js';
|
|
9
10
|
import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
10
11
|
/**
|
|
@@ -15,14 +16,14 @@ import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
|
15
16
|
function formatCleanup(data) {
|
|
16
17
|
const { cleaned } = data;
|
|
17
18
|
if (cleaned.session) {
|
|
18
|
-
console.error(
|
|
19
|
+
console.error(sessionFilesCleanedMessage());
|
|
19
20
|
}
|
|
20
21
|
if (cleaned.output) {
|
|
21
|
-
console.error(
|
|
22
|
+
console.error(sessionOutputRemovedMessage());
|
|
22
23
|
}
|
|
23
24
|
if (data.warnings && data.warnings.length > 0) {
|
|
24
25
|
data.warnings.forEach((warning) => {
|
|
25
|
-
console.error(
|
|
26
|
+
console.error(warningMessage(warning));
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
29
|
console.error('');
|
|
@@ -44,7 +45,7 @@ export function registerCleanupCommand(program) {
|
|
|
44
45
|
.action(async (options) => {
|
|
45
46
|
await runCommand(async (opts) => {
|
|
46
47
|
// Import cleanupStaleChrome dynamically
|
|
47
|
-
const { cleanupStaleChrome } = await import('
|
|
48
|
+
const { cleanupStaleChrome } = await import('../../cli/handlers/sessionController.js');
|
|
48
49
|
const pid = readPid();
|
|
49
50
|
let didCleanup = false;
|
|
50
51
|
let cleanedSession = false;
|
|
@@ -70,7 +71,7 @@ export function registerCleanupCommand(program) {
|
|
|
70
71
|
if (isAlive && !opts.force) {
|
|
71
72
|
return {
|
|
72
73
|
success: false,
|
|
73
|
-
error:
|
|
74
|
+
error: sessionStillActiveError(pid),
|
|
74
75
|
exitCode: EXIT_CODES.RESOURCE_BUSY,
|
|
75
76
|
errorContext: {
|
|
76
77
|
suggestions: ['Stop gracefully: bdg stop', 'Force cleanup: bdg cleanup --force'],
|
|
@@ -80,12 +81,10 @@ export function registerCleanupCommand(program) {
|
|
|
80
81
|
}
|
|
81
82
|
if (isAlive && opts.force) {
|
|
82
83
|
warnings.push(`Process ${pid} is still running but forcing cleanup anyway`);
|
|
83
|
-
console.error(
|
|
84
|
-
console.error('Forcing cleanup anyway...');
|
|
85
|
-
console.error('(The process will continue running but lose session tracking)');
|
|
84
|
+
console.error(forceCleanupWarningMessage(pid));
|
|
86
85
|
}
|
|
87
86
|
else {
|
|
88
|
-
console.error(
|
|
87
|
+
console.error(staleSessionFoundMessage(pid));
|
|
89
88
|
}
|
|
90
89
|
cleanupSession();
|
|
91
90
|
cleanedSession = true;
|
|
@@ -112,7 +111,7 @@ export function registerCleanupCommand(program) {
|
|
|
112
111
|
success: true,
|
|
113
112
|
data: {
|
|
114
113
|
cleaned: { session: false, output: false, chrome: false },
|
|
115
|
-
message:
|
|
114
|
+
message: noSessionFilesMessage(),
|
|
116
115
|
},
|
|
117
116
|
};
|
|
118
117
|
}
|
|
@@ -120,7 +119,7 @@ export function registerCleanupCommand(program) {
|
|
|
120
119
|
success: true,
|
|
121
120
|
data: {
|
|
122
121
|
cleaned: { session: cleanedSession, output: cleanedOutput, chrome: cleanedChrome },
|
|
123
|
-
message:
|
|
122
|
+
message: sessionDirectoryCleanMessage(),
|
|
124
123
|
...(warnings.length > 0 && { warnings }),
|
|
125
124
|
},
|
|
126
125
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/cli/commands/cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAKzB,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AA8BlD;;;;GAIG;AACH,SAAS,aAAa,CAAC,IAAmB;IACxC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEzB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/cli/commands/cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { runCommand } from '
|
|
2
|
-
import { filterOption, jsonOption, lastOption } from '
|
|
1
|
+
import { runCommand } from '../../cli/handlers/CommandRunner.js';
|
|
2
|
+
import { filterOption, jsonOption, lastOption } from '../../cli/handlers/commonOptions.js';
|
|
3
3
|
import { getPeek } from '../../ipc/client.js';
|
|
4
4
|
import { validateIPCResponse } from '../../ipc/responseValidator.js';
|
|
5
5
|
import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { jsonOption } from '../handlers/commonOptions.js';
|
|
1
|
+
import { runCommand } from '../../cli/handlers/CommandRunner.js';
|
|
2
|
+
import { jsonOption } from '../../cli/handlers/commonOptions.js';
|
|
4
3
|
import { getDetails } from '../../ipc/client.js';
|
|
5
4
|
import { validateIPCResponse } from '../../ipc/responseValidator.js';
|
|
5
|
+
import { formatNetworkDetails, formatConsoleDetails } from '../../ui/formatters/details.js';
|
|
6
6
|
import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
7
7
|
/**
|
|
8
8
|
* Format details for human-readable output.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"details.js","sourceRoot":"","sources":["../../../src/cli/commands/details.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"details.js","sourceRoot":"","sources":["../../../src/cli/commands/details.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAsBlD;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAmB;IACxC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAsB,CAAC,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAsB,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,oEAAoE,CAAC;SACjF,QAAQ,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SAC1D,QAAQ,CAAC,MAAM,EAAE,iDAAiD,CAAC;SACnE,SAAS,CAAC,UAAU,CAAC;SACrB,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAU,EAAE,OAAuB,EAAE,EAAE;QAClE,uFAAuF;QACvF,OAAO,CAAC,IAAI,GAAG,IAA6B,CAAC;QAC7C,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAEhB,MAAM,UAAU,CACd,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,yBAAyB;YACzB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC;oBAC1E,QAAQ,EAAE,UAAU,CAAC,iBAAiB;iBACvC,CAAC;YACJ,CAAC;YAED,2CAA2C;YAC3C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAEtD,0CAA0C;YAC1C,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAE9B,6BAA6B;YAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACzB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,qBAAqB;oBAC5B,QAAQ,EAAE,UAAU,CAAC,kBAAkB;iBACxC,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAkD;oBACtE,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB;aACF,CAAC;QACJ,CAAC,EACD,OAAO,EACP,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/dom/helpers/errorHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/dom/helpers/errorHandler.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,OAAO,EACb,QAAQ,GAAE,MAAuC,GAChD,KAAK,CAQP;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,QAAQ,GAAE,MAAuC,GAChD,KAAK,CAYP"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { OutputBuilder } from '
|
|
1
|
+
import { OutputBuilder } from '../../../../cli/handlers/OutputBuilder.js';
|
|
2
|
+
import { genericError } from '../../../../ui/messages/errors.js';
|
|
2
3
|
import { getErrorMessage } from '../../../../utils/errors.js';
|
|
3
4
|
import { EXIT_CODES } from '../../../../utils/exitCodes.js';
|
|
4
5
|
/**
|
|
@@ -27,7 +28,7 @@ export function handleCommandError(error, json, exitCode = EXIT_CODES.UNHANDLED_
|
|
|
27
28
|
console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg), null, 2));
|
|
28
29
|
}
|
|
29
30
|
else {
|
|
30
|
-
console.error(
|
|
31
|
+
console.error(genericError(errorMsg));
|
|
31
32
|
}
|
|
32
33
|
process.exit(exitCode);
|
|
33
34
|
}
|
|
@@ -59,7 +60,7 @@ export function handleCommandErrorWithContext(error, json, metadata, exitCode =
|
|
|
59
60
|
console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg, metadata), null, 2));
|
|
60
61
|
}
|
|
61
62
|
else {
|
|
62
|
-
console.error(
|
|
63
|
+
console.error(genericError(errorMsg));
|
|
63
64
|
// Output metadata as additional help text
|
|
64
65
|
for (const value of Object.values(metadata)) {
|
|
65
66
|
console.error(`${value}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../../../src/cli/commands/dom/helpers/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAc,EACd,IAAa,EACb,WAAmB,UAAU,CAAC,mBAAmB;IAEjD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../../../src/cli/commands/dom/helpers/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAc,EACd,IAAa,EACb,WAAmB,UAAU,CAAC,mBAAmB;IAEjD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,6BAA6B,CAC3C,KAAc,EACd,IAAa,EACb,QAAgC,EAChC,WAAmB,UAAU,CAAC,mBAAmB;IAEjD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtC,0CAA0C;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { OutputBuilder } from '
|
|
1
|
+
import { OutputBuilder } from '../../../cli/handlers/OutputBuilder.js';
|
|
2
2
|
import { queryDOM, highlightDOM, getDOM } from '../../../ipc/client.js';
|
|
3
3
|
import { EXIT_CODES } from '../../../utils/exitCodes.js';
|
|
4
4
|
import { handleCommandError } from './helpers/errorHandler.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqSzC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmD1D"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { OutputBuilder } from '../../cli/handlers/OutputBuilder.js';
|
|
2
|
+
import { queryDOM, highlightDOM, getDOM } from '../../ipc/client.js';
|
|
3
|
+
import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
4
|
+
import { handleCommandError } from './domErrorHandler.js';
|
|
5
|
+
import { buildSelectorOptions } from './domOptionsBuilder.js';
|
|
6
|
+
/**
|
|
7
|
+
* Handle bdg dom query <selector> command
|
|
8
|
+
*
|
|
9
|
+
* Queries the DOM using a CSS selector and displays matching elements.
|
|
10
|
+
* Results are cached for 5 minutes to enable index-based references in other commands.
|
|
11
|
+
*
|
|
12
|
+
* @param selector - CSS selector to query (e.g., ".error", "#app", "button")
|
|
13
|
+
* @param options - Command options
|
|
14
|
+
* @throws Error When IPC request fails or returns error response
|
|
15
|
+
* @throws Error When response data is missing
|
|
16
|
+
*/
|
|
17
|
+
async function handleDomQuery(selector, options) {
|
|
18
|
+
try {
|
|
19
|
+
// Send query request via IPC to daemon/worker
|
|
20
|
+
const response = await queryDOM(selector);
|
|
21
|
+
if (response.status === 'error') {
|
|
22
|
+
throw new Error(response.error ?? 'Unknown error');
|
|
23
|
+
}
|
|
24
|
+
if (!response.data) {
|
|
25
|
+
throw new Error('No data in response');
|
|
26
|
+
}
|
|
27
|
+
const { count, nodes } = response.data;
|
|
28
|
+
if (count === 0) {
|
|
29
|
+
if (options.json) {
|
|
30
|
+
console.log(JSON.stringify({
|
|
31
|
+
selector,
|
|
32
|
+
count: 0,
|
|
33
|
+
nodes: [],
|
|
34
|
+
}, null, 2));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.log(`No elements found matching "${selector}"`);
|
|
38
|
+
}
|
|
39
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
40
|
+
}
|
|
41
|
+
// Output results
|
|
42
|
+
if (options.json) {
|
|
43
|
+
console.log(JSON.stringify(response.data, null, 2));
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log(`Found ${count} element${count === 1 ? '' : 's'} matching "${selector}":`);
|
|
47
|
+
for (const node of nodes) {
|
|
48
|
+
const classInfo = node.classes && node.classes.length > 0 ? ` class="${node.classes.join(' ')}"` : '';
|
|
49
|
+
console.log(` [${node.index}] <${node.tag}${classInfo}> ${node.preview}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
handleCommandError(error, options.json ?? false);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Handle bdg dom highlight command
|
|
60
|
+
*
|
|
61
|
+
* Highlights elements in the browser with visual overlay. Accepts CSS selector,
|
|
62
|
+
* cached index from previous query, or direct nodeId.
|
|
63
|
+
*
|
|
64
|
+
* @param selectorOrIndex - CSS selector (e.g., ".error") or index from cached query (e.g., "2")
|
|
65
|
+
* @param options - Command options including color, opacity, targeting flags, and nodeId
|
|
66
|
+
* @throws Error When cached index not found (user must run 'bdg dom query' first)
|
|
67
|
+
* @throws Error When IPC request fails or returns error response
|
|
68
|
+
* @throws Error When response data is missing
|
|
69
|
+
*/
|
|
70
|
+
async function handleDomHighlight(selectorOrIndex, options) {
|
|
71
|
+
try {
|
|
72
|
+
// Build base IPC request options (color, opacity, targeting)
|
|
73
|
+
const ipcOptions = {
|
|
74
|
+
...(options.color !== undefined && { color: options.color }),
|
|
75
|
+
...(options.opacity !== undefined && { opacity: options.opacity }),
|
|
76
|
+
...(options.first !== undefined && { first: options.first }),
|
|
77
|
+
...(options.nth !== undefined && { nth: options.nth }),
|
|
78
|
+
};
|
|
79
|
+
// Add selector/index/nodeId using shared helper
|
|
80
|
+
const selectorOptions = buildSelectorOptions(selectorOrIndex, options.nodeId);
|
|
81
|
+
Object.assign(ipcOptions, selectorOptions);
|
|
82
|
+
// Send highlight request via IPC to daemon/worker
|
|
83
|
+
const response = await highlightDOM(ipcOptions);
|
|
84
|
+
if (response.status === 'error') {
|
|
85
|
+
throw new Error(response.error ?? 'Unknown error');
|
|
86
|
+
}
|
|
87
|
+
if (!response.data) {
|
|
88
|
+
throw new Error('No data in response');
|
|
89
|
+
}
|
|
90
|
+
// Output result
|
|
91
|
+
if (options.json) {
|
|
92
|
+
console.log(JSON.stringify(response.data, null, 2));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(`✓ Highlighted ${response.data.highlighted} element${response.data.highlighted === 1 ? '' : 's'}`);
|
|
96
|
+
}
|
|
97
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
handleCommandError(error, options.json ?? false);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Handle bdg dom get command
|
|
105
|
+
*
|
|
106
|
+
* Retrieves full HTML and attributes for DOM elements. Accepts CSS selector,
|
|
107
|
+
* cached index from previous query, or direct nodeId.
|
|
108
|
+
*
|
|
109
|
+
* @param selectorOrIndex - CSS selector (e.g., ".error") or index from cached query (e.g., "2")
|
|
110
|
+
* @param options - Command options including --all, --nth, and nodeId
|
|
111
|
+
* @throws Error When cached index not found (user must run 'bdg dom query' first)
|
|
112
|
+
* @throws Error When IPC request fails or returns error response
|
|
113
|
+
* @throws Error When response data is missing
|
|
114
|
+
*/
|
|
115
|
+
async function handleDomGet(selectorOrIndex, options) {
|
|
116
|
+
try {
|
|
117
|
+
// Build base IPC request options (targeting flags)
|
|
118
|
+
const ipcOptions = {
|
|
119
|
+
...(options.all !== undefined && { all: options.all }),
|
|
120
|
+
...(options.nth !== undefined && { nth: options.nth }),
|
|
121
|
+
};
|
|
122
|
+
// Add selector/index/nodeId using shared helper
|
|
123
|
+
const selectorOptions = buildSelectorOptions(selectorOrIndex, options.nodeId);
|
|
124
|
+
Object.assign(ipcOptions, selectorOptions);
|
|
125
|
+
// Send get request via IPC to daemon/worker
|
|
126
|
+
const response = await getDOM(ipcOptions);
|
|
127
|
+
if (response.status === 'error') {
|
|
128
|
+
throw new Error(response.error ?? 'Unknown error');
|
|
129
|
+
}
|
|
130
|
+
if (!response.data) {
|
|
131
|
+
throw new Error('No data in response');
|
|
132
|
+
}
|
|
133
|
+
const { nodes } = response.data;
|
|
134
|
+
// Output results
|
|
135
|
+
if (options.json) {
|
|
136
|
+
console.log(JSON.stringify(nodes.length === 1 ? nodes[0] : nodes, null, 2));
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
if (nodes.length === 1) {
|
|
140
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
141
|
+
console.log(nodes[0].outerHTML);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
for (const [i, node] of nodes.entries()) {
|
|
145
|
+
console.log(`[${i + 1}] ${node.outerHTML}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
handleCommandError(error, options.json ?? false);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Handle bdg dom eval <script> command
|
|
157
|
+
*
|
|
158
|
+
* Evaluates arbitrary JavaScript in the browser context and returns the result.
|
|
159
|
+
* Requires an active session. Uses CDP Runtime.evaluate with async support.
|
|
160
|
+
*
|
|
161
|
+
* @param script - JavaScript expression to evaluate (e.g., "document.title", "window.location.href")
|
|
162
|
+
* @param options - Command options including port and json formatting
|
|
163
|
+
* @throws Error When no active session is running
|
|
164
|
+
* @throws Error When session metadata is invalid
|
|
165
|
+
* @throws Error When target no longer exists (tab closed)
|
|
166
|
+
* @throws Error When CDP connection fails
|
|
167
|
+
* @throws Error When script execution throws exception
|
|
168
|
+
*/
|
|
169
|
+
async function handleDomEval(script, options) {
|
|
170
|
+
try {
|
|
171
|
+
// Lazy load CDP connection (only needed for eval command)
|
|
172
|
+
const { CDPConnection } = await import('../../connection/cdp.js');
|
|
173
|
+
const { validateActiveSession, getValidatedSessionMetadata, verifyTargetExists, executeScript, } = await import('./domEvalHelpers.js');
|
|
174
|
+
// Validate session is running
|
|
175
|
+
const jsonOutput = options.json ?? false;
|
|
176
|
+
validateActiveSession(jsonOutput);
|
|
177
|
+
// Get and validate session metadata
|
|
178
|
+
const metadata = getValidatedSessionMetadata(jsonOutput);
|
|
179
|
+
// Verify target still exists
|
|
180
|
+
const port = parseInt(options.port ?? '9222', 10);
|
|
181
|
+
await verifyTargetExists(metadata, port, jsonOutput);
|
|
182
|
+
// Create temporary CDP connection and execute script
|
|
183
|
+
const cdp = new CDPConnection();
|
|
184
|
+
// getValidatedSessionMetadata ensures webSocketDebuggerUrl is defined
|
|
185
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
186
|
+
await cdp.connect(metadata.webSocketDebuggerUrl);
|
|
187
|
+
const result = await executeScript(cdp, script);
|
|
188
|
+
cdp.close();
|
|
189
|
+
// Output result (wrapped if --json, raw otherwise)
|
|
190
|
+
if (options.json) {
|
|
191
|
+
console.log(JSON.stringify(OutputBuilder.buildJsonSuccess({
|
|
192
|
+
result: result.result?.value,
|
|
193
|
+
}), null, 2));
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
console.log(JSON.stringify(result.result?.value, null, 2));
|
|
197
|
+
}
|
|
198
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
handleCommandError(error, options.json ?? false);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Register DOM collector commands
|
|
206
|
+
*
|
|
207
|
+
* @param program - Commander.js Command instance
|
|
208
|
+
*/
|
|
209
|
+
export function registerDomCommands(program) {
|
|
210
|
+
const dom = program.command('dom').description('DOM inspection and manipulation');
|
|
211
|
+
// bdg dom query <selector>
|
|
212
|
+
dom
|
|
213
|
+
.command('query')
|
|
214
|
+
.description('Find elements by CSS selector')
|
|
215
|
+
.argument('<selector>', 'CSS selector (e.g., ".error", "#app", "button")')
|
|
216
|
+
.option('-j, --json', 'Output as JSON')
|
|
217
|
+
.action(async (selector, options) => {
|
|
218
|
+
await handleDomQuery(selector, options);
|
|
219
|
+
});
|
|
220
|
+
// bdg dom eval <script>
|
|
221
|
+
dom
|
|
222
|
+
.command('eval')
|
|
223
|
+
.description('Evaluate JavaScript expression in the page context')
|
|
224
|
+
.argument('<script>', 'JavaScript to execute (e.g., "document.title", "window.location.href")')
|
|
225
|
+
.option('-p, --port <number>', 'Chrome debugging port (default: 9222)')
|
|
226
|
+
.option('-j, --json', 'Wrap result in version/success format')
|
|
227
|
+
.action(async (script, options) => {
|
|
228
|
+
await handleDomEval(script, options);
|
|
229
|
+
});
|
|
230
|
+
// bdg dom highlight <selector|index>
|
|
231
|
+
dom
|
|
232
|
+
.command('highlight')
|
|
233
|
+
.description('Highlight elements in browser')
|
|
234
|
+
.argument('<selector|index>', 'CSS selector or index from last query')
|
|
235
|
+
.option('--first', 'Target first match only')
|
|
236
|
+
.option('--nth <n>', 'Target nth match', parseInt)
|
|
237
|
+
.option('--node-id <id>', 'Use nodeId directly (advanced)', parseInt)
|
|
238
|
+
.option('--color <color>', 'Highlight color (red, blue, green, yellow, orange, purple)')
|
|
239
|
+
.option('--opacity <value>', 'Highlight opacity (0.0 - 1.0)', parseFloat)
|
|
240
|
+
.option('-j, --json', 'Output as JSON')
|
|
241
|
+
.action(async (selectorOrIndex, options) => {
|
|
242
|
+
await handleDomHighlight(selectorOrIndex, options);
|
|
243
|
+
});
|
|
244
|
+
// bdg dom get <selector|index>
|
|
245
|
+
dom
|
|
246
|
+
.command('get')
|
|
247
|
+
.description('Get full HTML and attributes for elements')
|
|
248
|
+
.argument('<selector|index>', 'CSS selector or index from last query')
|
|
249
|
+
.option('--all', 'Target all matches')
|
|
250
|
+
.option('--nth <n>', 'Target nth match', parseInt)
|
|
251
|
+
.option('--node-id <id>', 'Use nodeId directly (advanced)', parseInt)
|
|
252
|
+
.option('-j, --json', 'Output as JSON')
|
|
253
|
+
.action(async (selectorOrIndex, options) => {
|
|
254
|
+
await handleDomGet(selectorOrIndex, options);
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=dom.js.map
|