browser-debugger-cli 0.3.0 → 0.5.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/README.md +137 -126
- package/dist/__tests__/smoke/error-handling.smoke.test.d.ts +8 -0
- package/dist/__tests__/smoke/error-handling.smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke/error-handling.smoke.test.js +106 -0
- package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -0
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts +8 -0
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.js +109 -0
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.js.map +1 -0
- package/dist/__testutils__/commandRunner.d.ts +45 -0
- package/dist/__testutils__/commandRunner.d.ts.map +1 -0
- package/dist/__testutils__/commandRunner.js +108 -0
- package/dist/__testutils__/commandRunner.js.map +1 -0
- package/dist/__testutils__/daemonHelpers.d.ts +81 -0
- package/dist/__testutils__/daemonHelpers.d.ts.map +1 -0
- package/dist/__testutils__/daemonHelpers.js +206 -0
- package/dist/__testutils__/daemonHelpers.js.map +1 -0
- package/dist/__testutils__/index.d.ts +1 -0
- package/dist/__testutils__/index.d.ts.map +1 -1
- package/dist/__testutils__/index.js +1 -0
- package/dist/__testutils__/index.js.map +1 -1
- package/dist/__testutils__/testCleanup.d.ts +45 -0
- package/dist/__testutils__/testCleanup.d.ts.map +1 -0
- package/dist/__testutils__/testCleanup.js +87 -0
- package/dist/__testutils__/testCleanup.js.map +1 -0
- package/dist/__testutils__/testHome.d.ts +26 -0
- package/dist/__testutils__/testHome.d.ts.map +1 -0
- package/dist/__testutils__/testHome.js +57 -0
- package/dist/__testutils__/testHome.js.map +1 -0
- package/dist/__testutils__/testProcess.d.ts.map +1 -1
- package/dist/__testutils__/testProcess.js +11 -3
- package/dist/__testutils__/testProcess.js.map +1 -1
- package/dist/cli/commands/__tests__/start.unit.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/start.unit.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/start.unit.test.js +131 -0
- package/dist/cli/commands/__tests__/start.unit.test.js.map +1 -0
- package/dist/cli/commands/cleanup.d.ts +1 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -1
- package/dist/cli/commands/cleanup.js +80 -61
- package/dist/cli/commands/cleanup.js.map +1 -1
- package/dist/cli/commands/details.d.ts +2 -1
- package/dist/cli/commands/details.d.ts.map +1 -1
- package/dist/cli/commands/details.js +104 -52
- package/dist/cli/commands/details.js.map +1 -1
- package/dist/cli/commands/peek.d.ts +2 -1
- package/dist/cli/commands/peek.d.ts.map +1 -1
- package/dist/cli/commands/peek.js +22 -67
- package/dist/cli/commands/peek.js.map +1 -1
- package/dist/cli/commands/query.d.ts +9 -0
- package/dist/cli/commands/query.d.ts.map +1 -0
- package/dist/cli/commands/query.js +125 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/start.d.ts +74 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +147 -38
- 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 +37 -49
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.d.ts +1 -0
- package/dist/cli/commands/stop.d.ts.map +1 -1
- package/dist/cli/commands/stop.js +106 -120
- 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 +7 -7
- package/dist/cli/formatters/previewFormatter.d.ts.map +1 -1
- package/dist/cli/formatters/previewFormatter.js +5 -10
- package/dist/cli/formatters/previewFormatter.js.map +1 -1
- package/dist/cli/formatters/statusFormatter.d.ts +13 -10
- package/dist/cli/formatters/statusFormatter.d.ts.map +1 -1
- package/dist/cli/formatters/statusFormatter.js +26 -53
- package/dist/cli/formatters/statusFormatter.js.map +1 -1
- package/dist/cli/handlers/ChromeBootstrap.d.ts +24 -0
- package/dist/cli/handlers/ChromeBootstrap.d.ts.map +1 -0
- package/dist/cli/handlers/ChromeBootstrap.js +50 -0
- package/dist/cli/handlers/ChromeBootstrap.js.map +1 -0
- package/dist/cli/handlers/OutputBuilder.d.ts +2 -3
- package/dist/cli/handlers/OutputBuilder.d.ts.map +1 -1
- package/dist/cli/handlers/OutputBuilder.js +2 -4
- package/dist/cli/handlers/OutputBuilder.js.map +1 -1
- package/dist/cli/handlers/OutputWriter.d.ts +15 -0
- package/dist/cli/handlers/OutputWriter.d.ts.map +1 -0
- package/dist/cli/handlers/OutputWriter.js +34 -0
- package/dist/cli/handlers/OutputWriter.js.map +1 -0
- package/dist/cli/handlers/PreviewWriter.d.ts +52 -0
- package/dist/cli/handlers/PreviewWriter.d.ts.map +1 -0
- package/dist/cli/handlers/PreviewWriter.js +118 -0
- package/dist/cli/handlers/PreviewWriter.js.map +1 -0
- package/dist/cli/handlers/SessionLock.d.ts +16 -0
- package/dist/cli/handlers/SessionLock.d.ts.map +1 -0
- package/dist/cli/handlers/SessionLock.js +35 -0
- package/dist/cli/handlers/SessionLock.js.map +1 -0
- package/dist/cli/handlers/SessionLoop.d.ts +19 -0
- package/dist/cli/handlers/SessionLoop.d.ts.map +1 -0
- package/dist/cli/handlers/SessionLoop.js +47 -0
- package/dist/cli/handlers/SessionLoop.js.map +1 -0
- package/dist/cli/handlers/ShutdownController.d.ts +41 -0
- package/dist/cli/handlers/ShutdownController.d.ts.map +1 -0
- package/dist/cli/handlers/ShutdownController.js +94 -0
- package/dist/cli/handlers/ShutdownController.js.map +1 -0
- package/dist/cli/handlers/SignalHandler.d.ts +35 -0
- package/dist/cli/handlers/SignalHandler.d.ts.map +1 -0
- package/dist/cli/handlers/SignalHandler.js +81 -0
- package/dist/cli/handlers/SignalHandler.js.map +1 -0
- package/dist/cli/handlers/TargetSetup.d.ts +42 -0
- package/dist/cli/handlers/TargetSetup.d.ts.map +1 -0
- package/dist/cli/handlers/TargetSetup.js +87 -0
- package/dist/cli/handlers/TargetSetup.js.map +1 -0
- package/dist/cli/handlers/sessionController.d.ts +41 -0
- package/dist/cli/handlers/sessionController.d.ts.map +1 -1
- package/dist/cli/handlers/sessionController.js +266 -5
- package/dist/cli/handlers/sessionController.js.map +1 -1
- package/dist/cli/registry.d.ts +2 -2
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/registry.js +12 -37
- package/dist/cli/registry.js.map +1 -1
- package/dist/collectors/console.d.ts +1 -1
- package/dist/collectors/console.js +2 -2
- package/dist/collectors/console.js.map +1 -1
- package/dist/collectors/dom.d.ts +1 -1
- package/dist/collectors/network.d.ts +1 -2
- package/dist/collectors/network.d.ts.map +1 -1
- package/dist/collectors/network.js +3 -3
- package/dist/collectors/network.js.map +1 -1
- package/dist/commands/cdp.js +1 -1
- package/dist/commands/cdp.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +12 -15
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/dom.d.ts.map +1 -1
- package/dist/commands/dom.js +13 -19
- package/dist/commands/dom.js.map +1 -1
- package/dist/commands/domEvalHelpers.d.ts +1 -1
- package/dist/commands/domEvalHelpers.d.ts.map +1 -1
- package/dist/commands/domEvalHelpers.js +56 -7
- package/dist/commands/domEvalHelpers.js.map +1 -1
- package/dist/commands/domOptionsBuilder.d.ts +32 -0
- package/dist/commands/domOptionsBuilder.d.ts.map +1 -1
- package/dist/commands/domOptionsBuilder.js +35 -0
- package/dist/commands/domOptionsBuilder.js.map +1 -1
- package/dist/commands/machineReadableHelp.d.ts +98 -0
- package/dist/commands/machineReadableHelp.d.ts.map +1 -0
- package/dist/commands/machineReadableHelp.js +137 -0
- package/dist/commands/machineReadableHelp.js.map +1 -0
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +2 -3
- package/dist/commands/shared/CommandRunner.js.map +1 -1
- package/dist/commands/shared/OutputBuilder.js +1 -1
- package/dist/commands/shared/OutputBuilder.js.map +1 -1
- package/dist/commands/shared/commonOptions.d.ts.map +1 -1
- package/dist/commands/shared/commonOptions.js +9 -3
- package/dist/commands/shared/commonOptions.js.map +1 -1
- package/dist/commands/shared/daemonSessionController.d.ts +2 -0
- package/dist/commands/shared/daemonSessionController.d.ts.map +1 -1
- package/dist/commands/shared/daemonSessionController.js +13 -16
- package/dist/commands/shared/daemonSessionController.js.map +1 -1
- package/dist/commands/shared/sessionController.js +1 -1
- package/dist/commands/shared/sessionController.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +16 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +72 -55
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +11 -25
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tail.d.ts +11 -0
- package/dist/commands/tail.d.ts.map +1 -0
- package/dist/commands/tail.js +114 -0
- package/dist/commands/tail.js.map +1 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +2 -0
- package/dist/commands.js.map +1 -1
- package/dist/connection/cdp.d.ts +46 -2
- package/dist/connection/cdp.d.ts.map +1 -1
- package/dist/connection/cdp.js +71 -5
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/diagnostics.d.ts +16 -0
- package/dist/connection/diagnostics.d.ts.map +1 -0
- package/dist/connection/diagnostics.js +37 -0
- package/dist/connection/diagnostics.js.map +1 -0
- package/dist/connection/errors.d.ts +74 -0
- package/dist/connection/errors.d.ts.map +1 -0
- package/dist/connection/errors.js +83 -0
- package/dist/connection/errors.js.map +1 -0
- package/dist/connection/handlers.d.ts +31 -0
- package/dist/connection/handlers.d.ts.map +1 -0
- package/dist/connection/handlers.js +38 -0
- package/dist/connection/handlers.js.map +1 -0
- package/dist/connection/launcher.d.ts +3 -20
- package/dist/connection/launcher.d.ts.map +1 -1
- package/dist/connection/launcher.js +130 -32
- package/dist/connection/launcher.js.map +1 -1
- package/dist/connection/pageReadiness.d.ts +46 -0
- package/dist/connection/pageReadiness.d.ts.map +1 -0
- package/dist/connection/pageReadiness.js +270 -0
- package/dist/connection/pageReadiness.js.map +1 -0
- package/dist/connection/tabs.d.ts +52 -0
- package/dist/connection/tabs.d.ts.map +1 -0
- package/dist/connection/tabs.js +227 -0
- package/dist/connection/tabs.js.map +1 -0
- package/dist/constants.d.ts +20 -40
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +26 -40
- package/dist/constants.js.map +1 -1
- package/dist/daemon/ipcServer.d.ts +5 -7
- package/dist/daemon/ipcServer.d.ts.map +1 -1
- package/dist/daemon/ipcServer.js +178 -143
- package/dist/daemon/ipcServer.js.map +1 -1
- package/dist/daemon/launcher.js +1 -1
- package/dist/daemon/launcher.js.map +1 -1
- package/dist/daemon/server/SocketServer.d.ts +22 -0
- package/dist/daemon/server/SocketServer.d.ts.map +1 -0
- package/dist/daemon/server/SocketServer.js +67 -0
- package/dist/daemon/server/SocketServer.js.map +1 -0
- package/dist/daemon/server/WorkerManager.d.ts +36 -0
- package/dist/daemon/server/WorkerManager.d.ts.map +1 -0
- package/dist/daemon/server/WorkerManager.js +98 -0
- package/dist/daemon/server/WorkerManager.js.map +1 -0
- package/dist/daemon/startSession.d.ts +2 -0
- package/dist/daemon/startSession.d.ts.map +1 -1
- package/dist/daemon/startSession.js +4 -2
- package/dist/daemon/startSession.js.map +1 -1
- package/dist/daemon/worker/TelemetryStore.d.ts +18 -0
- package/dist/daemon/worker/TelemetryStore.d.ts.map +1 -0
- package/dist/daemon/worker/TelemetryStore.js +49 -0
- package/dist/daemon/worker/TelemetryStore.js.map +1 -0
- package/dist/daemon/worker/collectors.d.ts +8 -0
- package/dist/daemon/worker/collectors.d.ts.map +1 -0
- package/dist/daemon/worker/collectors.js +19 -0
- package/dist/daemon/worker/collectors.js.map +1 -0
- package/dist/daemon/worker/commandRegistry.d.ts +10 -0
- package/dist/daemon/worker/commandRegistry.d.ts.map +1 -0
- package/dist/daemon/worker/commandRegistry.js +289 -0
- package/dist/daemon/worker/commandRegistry.js.map +1 -0
- package/dist/daemon/worker/plugins.d.ts +21 -0
- package/dist/daemon/worker/plugins.d.ts.map +1 -0
- package/dist/daemon/worker/plugins.js +71 -0
- package/dist/daemon/worker/plugins.js.map +1 -0
- package/dist/daemon/worker/types.d.ts +13 -0
- package/dist/daemon/worker/types.d.ts.map +1 -0
- package/dist/daemon/worker/types.js +2 -0
- package/dist/daemon/worker/types.js.map +1 -0
- package/dist/daemon/worker.js +206 -529
- package/dist/daemon/worker.js.map +1 -1
- package/dist/help/machineReadableHelp.d.ts +100 -0
- package/dist/help/machineReadableHelp.d.ts.map +1 -0
- package/dist/help/machineReadableHelp.js +139 -0
- package/dist/help/machineReadableHelp.js.map +1 -0
- package/dist/index.js +18 -9
- package/dist/index.js.map +1 -1
- package/dist/ipc/__tests__/client.contract.test.js +2 -2
- package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
- package/dist/ipc/client.d.ts +3 -1
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +27 -14
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/commands.d.ts +1 -0
- package/dist/ipc/commands.d.ts.map +1 -1
- package/dist/ipc/commands.js.map +1 -1
- package/dist/ipc/types.d.ts +2 -0
- package/dist/ipc/types.d.ts.map +1 -1
- package/dist/session/BdgSession.d.ts +91 -0
- package/dist/session/BdgSession.d.ts.map +1 -0
- package/dist/session/BdgSession.js +230 -0
- package/dist/session/BdgSession.js.map +1 -0
- package/dist/session/cleanup.d.ts.map +1 -1
- package/dist/session/cleanup.js +67 -65
- package/dist/session/cleanup.js.map +1 -1
- package/dist/session/fileOps.d.ts +25 -0
- package/dist/session/fileOps.d.ts.map +1 -0
- package/dist/session/fileOps.js +39 -0
- package/dist/session/fileOps.js.map +1 -0
- package/dist/session/metadata.js +2 -2
- package/dist/session/metadata.js.map +1 -1
- package/dist/session/paths.d.ts +2 -7
- package/dist/session/paths.d.ts.map +1 -1
- package/dist/session/paths.js +8 -8
- package/dist/session/paths.js.map +1 -1
- package/dist/session/queryCache.js +1 -1
- package/dist/session/queryCache.js.map +1 -1
- package/dist/telemetry/__tests__/filters.unit.test.d.ts +2 -0
- package/dist/telemetry/__tests__/filters.unit.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/filters.unit.test.js +239 -0
- package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -0
- package/dist/telemetry/console.d.ts +1 -1
- package/dist/telemetry/console.d.ts.map +1 -1
- package/dist/telemetry/console.js +5 -3
- package/dist/telemetry/console.js.map +1 -1
- package/dist/telemetry/dialogs.d.ts +27 -0
- package/dist/telemetry/dialogs.d.ts.map +1 -0
- package/dist/telemetry/dialogs.js +51 -0
- package/dist/telemetry/dialogs.js.map +1 -0
- package/dist/telemetry/filters.d.ts +148 -0
- package/dist/telemetry/filters.d.ts.map +1 -0
- package/dist/telemetry/filters.js +358 -0
- package/dist/telemetry/filters.js.map +1 -0
- package/dist/telemetry/navigation.d.ts +49 -0
- package/dist/telemetry/navigation.d.ts.map +1 -0
- package/dist/telemetry/navigation.js +69 -0
- package/dist/telemetry/navigation.js.map +1 -0
- package/dist/telemetry/network.d.ts +1 -0
- package/dist/telemetry/network.d.ts.map +1 -1
- package/dist/telemetry/network.js +23 -34
- package/dist/telemetry/network.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/errors/CommandError.d.ts +39 -0
- package/dist/ui/errors/CommandError.d.ts.map +1 -0
- package/dist/ui/errors/CommandError.js +48 -0
- package/dist/ui/errors/CommandError.js.map +1 -0
- package/dist/ui/errors/SystemErrors.d.ts +22 -0
- package/dist/ui/errors/SystemErrors.d.ts.map +1 -0
- package/dist/ui/errors/SystemErrors.js +23 -0
- package/dist/ui/errors/SystemErrors.js.map +1 -0
- package/dist/ui/errors/index.d.ts +9 -0
- package/dist/ui/errors/index.d.ts.map +1 -0
- package/dist/ui/errors/index.js +12 -0
- package/dist/ui/errors/index.js.map +1 -0
- package/dist/ui/errors/utils.d.ts +24 -0
- package/dist/ui/errors/utils.d.ts.map +1 -0
- package/dist/ui/errors/utils.js +28 -0
- package/dist/ui/errors/utils.js.map +1 -0
- package/dist/ui/formatters/status.d.ts.map +1 -1
- package/dist/ui/formatters/status.js +1 -1
- package/dist/ui/formatters/status.js.map +1 -1
- package/dist/ui/logging/index.d.ts +7 -0
- package/dist/ui/logging/index.d.ts.map +1 -0
- package/dist/ui/logging/index.js +7 -0
- package/dist/ui/logging/index.js.map +1 -0
- package/dist/ui/logging/logger.d.ts +98 -0
- package/dist/ui/logging/logger.d.ts.map +1 -0
- package/dist/ui/logging/logger.js +93 -0
- package/dist/ui/logging/logger.js.map +1 -0
- package/dist/ui/messages/chrome.d.ts +50 -1
- package/dist/ui/messages/chrome.d.ts.map +1 -1
- package/dist/ui/messages/chrome.js +77 -0
- package/dist/ui/messages/chrome.js.map +1 -1
- package/dist/ui/messages/deprecation.d.ts +30 -0
- package/dist/ui/messages/deprecation.d.ts.map +1 -0
- package/dist/ui/messages/deprecation.js +49 -0
- package/dist/ui/messages/deprecation.js.map +1 -0
- package/dist/ui/messages/preview.js +1 -1
- package/dist/ui/messages/preview.js.map +1 -1
- package/dist/ui/messages/session.d.ts.map +1 -1
- package/dist/ui/messages/session.js +21 -7
- package/dist/ui/messages/session.js.map +1 -1
- package/dist/utils/__tests__/session.contract.test.js +15 -1
- package/dist/utils/__tests__/session.contract.test.js.map +1 -1
- package/dist/utils/filters.d.ts +40 -0
- package/dist/utils/filters.d.ts.map +1 -1
- package/dist/utils/filters.js +54 -0
- package/dist/utils/filters.js.map +1 -1
- package/dist/utils/pageReadiness.js +24 -25
- package/dist/utils/pageReadiness.js.map +1 -1
- package/dist/utils/session.d.ts +200 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js +498 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +10 -0
- package/dist/utils/url.js.map +1 -1
- package/dist/utils/validation.d.ts +12 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +20 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +2 -1
- package/dist/cli/commands/__tests__/cdp.contract.test.d.ts +0 -24
- package/dist/cli/commands/__tests__/cdp.contract.test.d.ts.map +0 -1
- package/dist/cli/commands/__tests__/cdp.contract.test.js +0 -467
- package/dist/cli/commands/__tests__/cdp.contract.test.js.map +0 -1
- package/dist/cli/commands/cdp.d.ts +0 -8
- package/dist/cli/commands/cdp.d.ts.map +0 -1
- package/dist/cli/commands/cdp.js +0 -45
- package/dist/cli/commands/cdp.js.map +0 -1
- package/dist/cli/commands/console.d.ts +0 -8
- package/dist/cli/commands/console.d.ts.map +0 -1
- package/dist/cli/commands/console.js +0 -97
- package/dist/cli/commands/console.js.map +0 -1
- package/dist/cli/commands/dom/helpers/domCache.d.ts +0 -36
- package/dist/cli/commands/dom/helpers/domCache.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/domCache.js +0 -65
- package/dist/cli/commands/dom/helpers/domCache.js.map +0 -1
- package/dist/cli/commands/dom/helpers/domQuery.d.ts +0 -48
- package/dist/cli/commands/dom/helpers/domQuery.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/domQuery.js +0 -104
- package/dist/cli/commands/dom/helpers/domQuery.js.map +0 -1
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts +0 -45
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/errorHandler.js +0 -71
- package/dist/cli/commands/dom/helpers/errorHandler.js.map +0 -1
- package/dist/cli/commands/dom/helpers/evalHelpers.d.ts +0 -52
- package/dist/cli/commands/dom/helpers/evalHelpers.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/evalHelpers.js +0 -75
- package/dist/cli/commands/dom/helpers/evalHelpers.js.map +0 -1
- package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts +0 -35
- package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/optionsBuilder.js +0 -51
- package/dist/cli/commands/dom/helpers/optionsBuilder.js.map +0 -1
- package/dist/cli/commands/dom/helpers/selectorParser.d.ts +0 -20
- package/dist/cli/commands/dom/helpers/selectorParser.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/selectorParser.js +0 -20
- package/dist/cli/commands/dom/helpers/selectorParser.js.map +0 -1
- package/dist/cli/commands/dom/index.d.ts +0 -8
- package/dist/cli/commands/dom/index.d.ts.map +0 -1
- package/dist/cli/commands/dom/index.js +0 -257
- package/dist/cli/commands/dom/index.js.map +0 -1
- package/dist/cli/commands/dom.d.ts +0 -8
- package/dist/cli/commands/dom.d.ts.map +0 -1
- package/dist/cli/commands/dom.js +0 -257
- package/dist/cli/commands/dom.js.map +0 -1
- package/dist/cli/commands/domErrorHandler.d.ts +0 -45
- package/dist/cli/commands/domErrorHandler.d.ts.map +0 -1
- package/dist/cli/commands/domErrorHandler.js +0 -71
- package/dist/cli/commands/domErrorHandler.js.map +0 -1
- package/dist/cli/commands/domEvalHelpers.d.ts +0 -52
- package/dist/cli/commands/domEvalHelpers.d.ts.map +0 -1
- package/dist/cli/commands/domEvalHelpers.js +0 -76
- package/dist/cli/commands/domEvalHelpers.js.map +0 -1
- package/dist/cli/commands/domOptionsBuilder.d.ts +0 -35
- package/dist/cli/commands/domOptionsBuilder.d.ts.map +0 -1
- package/dist/cli/commands/domOptionsBuilder.js +0 -51
- package/dist/cli/commands/domOptionsBuilder.js.map +0 -1
- package/dist/cli/commands/domSelectorParser.d.ts +0 -20
- package/dist/cli/commands/domSelectorParser.d.ts.map +0 -1
- package/dist/cli/commands/domSelectorParser.js +0 -20
- package/dist/cli/commands/domSelectorParser.js.map +0 -1
- package/dist/cli/commands/network.d.ts +0 -8
- package/dist/cli/commands/network.d.ts.map +0 -1
- package/dist/cli/commands/network.js +0 -43
- package/dist/cli/commands/network.js.map +0 -1
- package/dist/cli/handlers/CommandRunner.d.ts +0 -60
- package/dist/cli/handlers/CommandRunner.d.ts.map +0 -1
- package/dist/cli/handlers/CommandRunner.js +0 -81
- package/dist/cli/handlers/CommandRunner.js.map +0 -1
- package/dist/cli/handlers/commonOptions.d.ts +0 -54
- package/dist/cli/handlers/commonOptions.d.ts.map +0 -1
- package/dist/cli/handlers/commonOptions.js +0 -64
- package/dist/cli/handlers/commonOptions.js.map +0 -1
- package/dist/cli/handlers/daemonSessionController.d.ts +0 -23
- package/dist/cli/handlers/daemonSessionController.d.ts.map +0 -1
- package/dist/cli/handlers/daemonSessionController.js +0 -79
- package/dist/cli/handlers/daemonSessionController.js.map +0 -1
- package/dist/cli/handlers/landingPage.d.ts +0 -8
- package/dist/cli/handlers/landingPage.d.ts.map +0 -1
- package/dist/cli/handlers/landingPage.js +0 -8
- package/dist/cli/handlers/landingPage.js.map +0 -1
- package/dist/collectors/__tests__/network.contract.test.d.ts +0 -28
- package/dist/collectors/__tests__/network.contract.test.d.ts.map +0 -1
- package/dist/collectors/__tests__/network.contract.test.js +0 -540
- package/dist/collectors/__tests__/network.contract.test.js.map +0 -1
- package/dist/commandRegistry.d.ts +0 -11
- package/dist/commandRegistry.d.ts.map +0 -1
- package/dist/commandRegistry.js +0 -45
- package/dist/commandRegistry.js.map +0 -1
- package/dist/commands/domErrorHandler.d.ts +0 -45
- package/dist/commands/domErrorHandler.d.ts.map +0 -1
- package/dist/commands/domErrorHandler.js +0 -71
- package/dist/commands/domErrorHandler.js.map +0 -1
- package/dist/dom/cache.d.ts +0 -36
- package/dist/dom/cache.d.ts.map +0 -1
- package/dist/dom/cache.js +0 -65
- package/dist/dom/cache.js.map +0 -1
- package/dist/dom/index.d.ts +0 -9
- package/dist/dom/index.d.ts.map +0 -1
- package/dist/dom/index.js +0 -9
- package/dist/dom/index.js.map +0 -1
- package/dist/dom/query.d.ts +0 -48
- package/dist/dom/query.d.ts.map +0 -1
- package/dist/dom/query.js +0 -104
- package/dist/dom/query.js.map +0 -1
- package/dist/utils/formatters/network.d.ts +0 -23
- package/dist/utils/formatters/network.d.ts.map +0 -1
- package/dist/utils/formatters/network.js +0 -35
- package/dist/utils/formatters/network.js.map +0 -1
- package/dist/utils/ui.d.ts +0 -36
- package/dist/utils/ui.d.ts.map +0 -1
- package/dist/utils/ui.js +0 -47
- package/dist/utils/ui.js.map +0 -1
- package/dist/utils/url/safeParseUrl.d.ts +0 -63
- package/dist/utils/url/safeParseUrl.d.ts.map +0 -1
- package/dist/utils/url/safeParseUrl.js +0 -84
- package/dist/utils/url/safeParseUrl.js.map +0 -1
package/README.md
CHANGED
|
@@ -5,7 +5,23 @@
|
|
|
5
5
|
[](https://github.com/szymdzum/browser-debugger-cli/actions/workflows/security.yml)
|
|
6
6
|
[](https://www.npmjs.com/package/browser-debugger-cli)
|
|
7
7
|
|
|
8
|
-
DevTools
|
|
8
|
+
Chrome DevTools Protocol in your terminal. Run any CDP command, pipe the output, build browser automation with tools you already know. Design to be agent friendly
|
|
9
|
+
|
|
10
|
+
## Why This Exists
|
|
11
|
+
Puppeteer is great but heavy. CDP is powerful but raw. This tool sits in between: direct protocol access with session management and a few helpful wrappers. No abstractions hiding what's actually happening.
|
|
12
|
+
Built for debugging web apps and scripting browser automation without spinning up a full testing framework.
|
|
13
|
+
|
|
14
|
+
## Current State
|
|
15
|
+
|
|
16
|
+
**Raw [CDP](https://chromedevtools.github.io/devtools-protocol/) access is complete.** All 300+ protocol methods work now. This makes it immediately useful for AI agents and developers comfortable with CDP.
|
|
17
|
+
|
|
18
|
+
**Human-friendly wrappers are in progress.** Commands like `bdg dom query` and `bdg peek` are being added for common operations. For now, most automation work happens through `bdg cdp` and Unix pipes.
|
|
19
|
+
|
|
20
|
+
## Demo
|
|
21
|
+
|
|
22
|
+
[](https://asciinema.org/a/RE6Iup9sB1iSWBK0wgUUn3bBl)
|
|
23
|
+
|
|
24
|
+
*Watch bdg scrape GitHub trending pages and extract repository data in real-time using DOM queries and CDP.*
|
|
9
25
|
|
|
10
26
|
## Installation
|
|
11
27
|
|
|
@@ -13,178 +29,173 @@ DevTools telemetry in your terminal. For humans and agents. Direct WebSocket to
|
|
|
13
29
|
npm install -g browser-debugger-cli@alpha
|
|
14
30
|
```
|
|
15
31
|
|
|
32
|
+
**Platform Support:**
|
|
33
|
+
- ✅ macOS and Linux (native support)
|
|
34
|
+
- ✅ Windows via WSL (Windows Subsystem for Linux)
|
|
35
|
+
- ❌ PowerShell and Git Bash on Windows (not yet supported)
|
|
36
|
+
|
|
37
|
+
The CLI uses Unix domain sockets for inter-process communication. Windows users should run bdg inside WSL for full compatibility.
|
|
38
|
+
|
|
16
39
|
## Quick Start
|
|
17
40
|
|
|
18
41
|
```bash
|
|
19
|
-
# Start session
|
|
42
|
+
# Start a session
|
|
20
43
|
bdg example.com
|
|
21
44
|
|
|
22
|
-
#
|
|
23
|
-
# Session is active - you can now run commands
|
|
24
|
-
|
|
25
|
-
# Check session status
|
|
26
|
-
bdg status
|
|
27
|
-
# Status: Active
|
|
28
|
-
# Worker PID: 12345
|
|
29
|
-
# Chrome PID: 67890
|
|
30
|
-
# Target: http://example.com
|
|
31
|
-
|
|
32
|
-
# Execute raw CDP commands
|
|
45
|
+
# Run any CDP command
|
|
33
46
|
bdg cdp Runtime.evaluate --params '{"expression":"document.title","returnByValue":true}'
|
|
34
|
-
# { "result": { "type": "string", "value": "Example Domain" } }
|
|
35
|
-
|
|
36
47
|
bdg cdp Network.getCookies
|
|
37
|
-
# { "cookies": [...] }
|
|
38
48
|
|
|
39
|
-
#
|
|
49
|
+
# Check what's running
|
|
50
|
+
bdg status
|
|
51
|
+
|
|
52
|
+
# Done
|
|
40
53
|
bdg stop
|
|
41
54
|
```
|
|
42
55
|
|
|
43
|
-
##
|
|
56
|
+
## What You Can Do
|
|
57
|
+
|
|
58
|
+
### Run Any CDP Command
|
|
59
|
+
|
|
60
|
+
All 300+ methods from [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) work out of the box:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Get cookies and filter with jq
|
|
64
|
+
bdg cdp Network.getCookies | jq '.cookies[] | select(.httpOnly)'
|
|
65
|
+
|
|
66
|
+
# Execute JavaScript in the page
|
|
67
|
+
bdg cdp Runtime.evaluate --params '{"expression":"document.querySelectorAll(\"a\").length","returnByValue":true}'
|
|
68
|
+
|
|
69
|
+
# Monitor memory usage
|
|
70
|
+
bdg cdp Performance.getMetrics | jq '.metrics[] | select(.name == "JSHeapUsedSize")'
|
|
71
|
+
|
|
72
|
+
# Capture a screenshot
|
|
73
|
+
bdg cdp Page.captureScreenshot | jq -r '.data' | base64 -d > screenshot.png
|
|
74
|
+
```
|
|
44
75
|
|
|
45
|
-
|
|
76
|
+
The daemon keeps a WebSocket open to Chrome, so commands run immediately against the live session.
|
|
46
77
|
|
|
47
|
-
###
|
|
78
|
+
### Pipe Everything
|
|
48
79
|
|
|
49
|
-
|
|
80
|
+
Output is JSON by default. Use it with `jq`, `grep`, `awk` - whatever works:
|
|
50
81
|
|
|
51
82
|
```bash
|
|
52
|
-
#
|
|
53
|
-
bdg
|
|
54
|
-
bdg cdp Runtime.evaluate --params '{"expression":"document.title","returnByValue":true}'
|
|
55
|
-
bdg cdp Performance.getMetrics
|
|
83
|
+
# Find all failed network requests
|
|
84
|
+
bdg peek --network --json | jq '.data.network[] | select(.status >= 400)'
|
|
56
85
|
|
|
57
|
-
#
|
|
58
|
-
bdg cdp
|
|
86
|
+
# Extract every link on the page
|
|
87
|
+
bdg cdp Runtime.evaluate --params '{
|
|
88
|
+
"expression": "Array.from(document.querySelectorAll(\"a\")).map(a => ({text: a.textContent.trim(), href: a.href}))",
|
|
89
|
+
"returnByValue": true
|
|
90
|
+
}' | jq '.result.value'
|
|
91
|
+
|
|
92
|
+
# Count console errors
|
|
93
|
+
bdg peek --console --json | jq '[.data.console[] | select(.level == "error")] | length'
|
|
59
94
|
```
|
|
60
95
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
- ✅ Future-proof — new CDP features work without code changes
|
|
65
|
-
- ✅ Agent-friendly — structured input/output, composable with Unix tools
|
|
96
|
+
### For AI Agents
|
|
97
|
+
|
|
98
|
+
Claude skill included at `.claude/skills/bdg/` with working automation patterns:
|
|
66
99
|
|
|
67
|
-
|
|
100
|
+
- Common CDP workflows (scraping, polling, navigation)
|
|
101
|
+
- Exit codes and error handling
|
|
102
|
+
- Troubleshooting reference
|
|
68
103
|
|
|
69
|
-
|
|
104
|
+
The `--help --json` flag outputs the complete CLI schema for programmatic discovery:
|
|
70
105
|
|
|
71
106
|
```bash
|
|
72
|
-
|
|
73
|
-
bdg
|
|
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
|
|
107
|
+
bdg --help --json | jq '.command.subcommands[].name'
|
|
108
|
+
bdg --help --json | jq '.exitCodes'
|
|
85
109
|
```
|
|
86
110
|
|
|
87
|
-
|
|
111
|
+
Agents can figure out what commands exist and how to use them without hardcoded knowledge.
|
|
88
112
|
|
|
89
|
-
|
|
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
|
|
113
|
+
### Debug Live Apps
|
|
94
114
|
|
|
95
|
-
|
|
115
|
+
Point at localhost, monitor what's happening:
|
|
96
116
|
|
|
97
|
-
|
|
117
|
+
```bash
|
|
118
|
+
bdg localhost:3000 --headless
|
|
119
|
+
bdg tail --console # Stream console output
|
|
120
|
+
bdg tail --network # Watch requests in real-time
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Helpful for catching issues during development without opening DevTools.
|
|
124
|
+
|
|
125
|
+
### Automate Browser Tasks
|
|
98
126
|
|
|
99
|
-
|
|
127
|
+
Poll for elements, click buttons, extract data:
|
|
100
128
|
|
|
101
129
|
```bash
|
|
102
|
-
#
|
|
103
|
-
bdg cdp
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
#
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
#
|
|
111
|
-
|
|
112
|
-
# "sameSite": "Strict"
|
|
113
|
-
# }
|
|
114
|
-
# ]
|
|
115
|
-
# }
|
|
116
|
-
|
|
117
|
-
# Evaluate JavaScript
|
|
118
|
-
bdg cdp Runtime.evaluate --params '{"expression":"document.title","returnByValue":true}'
|
|
119
|
-
# {
|
|
120
|
-
# "result": {
|
|
121
|
-
# "type": "string",
|
|
122
|
-
# "value": "Example Domain"
|
|
123
|
-
# }
|
|
124
|
-
# }
|
|
125
|
-
|
|
126
|
-
# Get browser version
|
|
127
|
-
bdg cdp Browser.getVersion
|
|
128
|
-
# {
|
|
129
|
-
# "protocolVersion": "1.3",
|
|
130
|
-
# "product": "Chrome/142.0.7444.60",
|
|
131
|
-
# "jsVersion": "14.2.231.14"
|
|
132
|
-
# }
|
|
133
|
-
|
|
134
|
-
# Pipe to jq for filtering
|
|
135
|
-
bdg cdp Network.getCookies | jq '.cookies[] | select(.name == "session_id") | .value'
|
|
136
|
-
# "1234567890abcdef"
|
|
130
|
+
# Wait for an element to appear
|
|
131
|
+
while ! bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\"#target\") !== null","returnByValue":true}' | jq -e '.result.value'; do
|
|
132
|
+
sleep 0.5
|
|
133
|
+
done
|
|
134
|
+
|
|
135
|
+
# Click it
|
|
136
|
+
bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\"#target\").click()"}'
|
|
137
|
+
|
|
138
|
+
# Get the result
|
|
139
|
+
bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\".result\").textContent","returnByValue":true}'
|
|
137
140
|
```
|
|
138
141
|
|
|
139
|
-
|
|
142
|
+
Check `.claude/skills/bdg/WORKFLOWS.md` for more complete examples (GitHub scraper, form automation, etc).
|
|
143
|
+
|
|
144
|
+
## Session Management
|
|
140
145
|
|
|
141
|
-
|
|
146
|
+
Sessions persist until you stop them. Chrome stays open, data keeps collecting:
|
|
142
147
|
|
|
143
148
|
```bash
|
|
144
|
-
#
|
|
145
|
-
bdg
|
|
149
|
+
bdg example.com # Opens Chrome, starts daemon
|
|
150
|
+
bdg status # Check what's running
|
|
151
|
+
bdg status --verbose # Show Chrome process details
|
|
152
|
+
bdg stop # Kill everything
|
|
153
|
+
bdg cleanup # Remove stale files
|
|
154
|
+
```
|
|
146
155
|
|
|
147
|
-
|
|
148
|
-
bdg status # Show session info
|
|
149
|
-
bdg status --verbose # Include Chrome diagnostics
|
|
156
|
+
## Helper Commands
|
|
150
157
|
|
|
151
|
-
|
|
152
|
-
bdg stop # Gracefully stop daemon and close Chrome
|
|
158
|
+
A few convenience wrappers for common operations. Most work still happens through `bdg cdp`:
|
|
153
159
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
bdg
|
|
160
|
+
```bash
|
|
161
|
+
# Query DOM
|
|
162
|
+
bdg dom query "button.primary" # Find elements
|
|
163
|
+
bdg dom get "button.primary" # Get HTML
|
|
164
|
+
bdg dom eval "document.title" # Run JavaScript
|
|
165
|
+
bdg dom highlight ".navbar" # Visual debugging
|
|
166
|
+
|
|
167
|
+
# Inspect collected data
|
|
168
|
+
bdg peek # Quick snapshot
|
|
169
|
+
bdg peek --network # Just network data
|
|
170
|
+
bdg tail # Stream like tail -f
|
|
157
171
|
```
|
|
158
172
|
|
|
159
|
-
##
|
|
173
|
+
## Page Readiness
|
|
160
174
|
|
|
161
|
-
`bdg`
|
|
162
|
-
When you run commands like `bdg network` or `bdg console`, they communicate with the
|
|
163
|
-
daemon via IPC, which forwards [Chrome DevTools
|
|
164
|
-
Protocol](https://chromedevtools.github.io/devtools-protocol/) commands and streams
|
|
165
|
-
responses back.
|
|
175
|
+
By default, `bdg` waits for pages to fully load using three signals:
|
|
166
176
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
- **WebSocket** – Direct connection to Chrome's `--remote-debugging-port`
|
|
171
|
-
- **CDP** – Native Chrome DevTools Protocol for all browser inspection
|
|
177
|
+
1. Browser's `window.onload` fires
|
|
178
|
+
2. Network goes quiet (200ms without new requests)
|
|
179
|
+
3. DOM stops changing (300ms without mutations)
|
|
172
180
|
|
|
173
|
-
|
|
174
|
-
- Sessions persist across commands (Chrome stays open)
|
|
175
|
-
- Live queries without stopping collection
|
|
176
|
-
- No intermediate files data flows from Chrome to stdout
|
|
177
|
-
- Real CDP with full protocol access
|
|
181
|
+
Catches server-rendered HTML, client hydration, and lazy-loaded content. Works with Next.js, React, Vue, whatever. Times out after 5 seconds if something hangs.
|
|
178
182
|
|
|
179
|
-
|
|
183
|
+
Skip it with `--no-wait` if you want immediate connection.
|
|
180
184
|
|
|
181
|
-
|
|
185
|
+
## Architecture
|
|
186
|
+
|
|
187
|
+
Three processes:
|
|
188
|
+
|
|
189
|
+
- **CLI** talks to daemon via Unix socket
|
|
190
|
+
- **Daemon** manages Chrome and routes commands
|
|
191
|
+
- **Worker** holds the WebSocket to CDP
|
|
192
|
+
|
|
193
|
+
Chrome stays running between commands. No startup cost for each operation.
|
|
194
|
+
|
|
195
|
+
## Contributing
|
|
182
196
|
|
|
183
|
-
|
|
184
|
-
([discussions](https://github.com/szymdzum/browser-debugger-cli/discussions)), let me
|
|
185
|
-
know what's broken
|
|
186
|
-
([issues](https://github.com/szymdzum/browser-debugger-cli/issues/new)).
|
|
197
|
+
If you use this and something breaks, [open an issue](https://github.com/szymdzum/browser-debugger-cli/issues/new). If you have ideas, start a [discussion](https://github.com/szymdzum/browser-debugger-cli/discussions). PRs welcome.
|
|
187
198
|
|
|
188
199
|
## License
|
|
189
200
|
|
|
190
|
-
MIT
|
|
201
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handling.smoke.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/smoke/error-handling.smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error handling smoke tests.
|
|
3
|
+
*
|
|
4
|
+
* Tests error paths and user-facing error messages.
|
|
5
|
+
* WHY: Errors are high-risk areas - tests ensure helpful messages and proper exit codes.
|
|
6
|
+
*/
|
|
7
|
+
import * as assert from 'node:assert/strict';
|
|
8
|
+
import { describe, it, afterEach } from 'node:test';
|
|
9
|
+
import { runCommand } from '../../__testutils__/commandRunner.js';
|
|
10
|
+
import { cleanupAllSessions, isDaemonRunning, killDaemon, waitForDaemon, } from '../../__testutils__/daemonHelpers.js';
|
|
11
|
+
import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
12
|
+
void describe('Error Handling Smoke Tests', () => {
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
// Cleanup after each test (no beforeEach needed if this works properly)
|
|
15
|
+
await cleanupAllSessions();
|
|
16
|
+
});
|
|
17
|
+
void it('should fail with helpful message when daemon not running', async () => {
|
|
18
|
+
// Try to peek without daemon running
|
|
19
|
+
// Note: peek auto-starts daemon, so it returns 83 after starting daemon
|
|
20
|
+
const result = await runCommand('peek', [], { timeout: 5000 });
|
|
21
|
+
// Should fail with resource not found (no session)
|
|
22
|
+
assert.equal(result.exitCode, EXIT_CODES.RESOURCE_NOT_FOUND);
|
|
23
|
+
// Should provide helpful error message about no session
|
|
24
|
+
assert.ok(/no.*session|session.*not.*found/i.test(result.stderr));
|
|
25
|
+
});
|
|
26
|
+
void it('should fail with helpful message when trying to stop without session', async () => {
|
|
27
|
+
// Try to stop without session
|
|
28
|
+
const result = await runCommand('stop', [], { timeout: 5000 });
|
|
29
|
+
// Should fail
|
|
30
|
+
assert.notEqual(result.exitCode, 0);
|
|
31
|
+
// Should provide helpful error message
|
|
32
|
+
assert.ok(result.stderr.includes('daemon'));
|
|
33
|
+
});
|
|
34
|
+
void it('should handle invalid URL gracefully', async () => {
|
|
35
|
+
// Note: URL validation is permissive - "not-a-valid-url" becomes "http://not-a-valid-url/"
|
|
36
|
+
// This test verifies error handling, not URL validation
|
|
37
|
+
const result = await runCommand('http://example.com', ['--port', '9229', '--headless'], {
|
|
38
|
+
timeout: 10000,
|
|
39
|
+
});
|
|
40
|
+
// Should succeed (URL is valid, session starts)
|
|
41
|
+
assert.equal(result.exitCode, 0);
|
|
42
|
+
// Should provide session started message
|
|
43
|
+
assert.ok(/session started|target:/i.test(result.stderr));
|
|
44
|
+
});
|
|
45
|
+
void it('should handle daemon crash during session', async () => {
|
|
46
|
+
// Start session with unique port
|
|
47
|
+
await runCommand('http://example.com', ['--port', '9230', '--headless'], { timeout: 10000 });
|
|
48
|
+
await waitForDaemon(5000);
|
|
49
|
+
// Kill daemon forcefully (simulate crash)
|
|
50
|
+
await killDaemon('SIGKILL');
|
|
51
|
+
// Wait for process to fully die
|
|
52
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
53
|
+
// Try to peek (should fail)
|
|
54
|
+
const peekResult = await runCommand('peek', [], { timeout: 5000 });
|
|
55
|
+
// Should fail
|
|
56
|
+
assert.notEqual(peekResult.exitCode, 0);
|
|
57
|
+
// Should provide helpful error message
|
|
58
|
+
assert.ok(peekResult.stderr.includes('daemon'));
|
|
59
|
+
// Daemon should not be running
|
|
60
|
+
assert.equal(isDaemonRunning(), false);
|
|
61
|
+
});
|
|
62
|
+
void it('should provide helpful error when Chrome fails to launch', async () => {
|
|
63
|
+
// Try to start with invalid Chrome path and unique port
|
|
64
|
+
const result = await runCommand('http://example.com', ['--port', '9231', '--headless'], {
|
|
65
|
+
timeout: 10000,
|
|
66
|
+
env: {
|
|
67
|
+
CHROME_PATH: '/nonexistent/chrome',
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
// Should fail (exit code 104 is acceptable for worker errors)
|
|
71
|
+
assert.notEqual(result.exitCode, 0);
|
|
72
|
+
// Should provide helpful error message mentioning Chrome
|
|
73
|
+
assert.ok(/chrome|browser|launch|binary/i.test(result.stderr));
|
|
74
|
+
});
|
|
75
|
+
void it('should cleanup stale sessions automatically', async () => {
|
|
76
|
+
// Start session with unique port
|
|
77
|
+
await runCommand('http://example.com', ['--port', '9232', '--headless'], { timeout: 10000 });
|
|
78
|
+
await waitForDaemon(5000);
|
|
79
|
+
// Kill daemon without cleanup (simulate crash)
|
|
80
|
+
await killDaemon('SIGKILL');
|
|
81
|
+
// Kill Chrome on port 9232 (simulating what happens when daemon crashes)
|
|
82
|
+
try {
|
|
83
|
+
const { execSync } = await import('child_process');
|
|
84
|
+
execSync(`lsof -ti:9232 | xargs kill -9 2>/dev/null || true`, { stdio: 'ignore' });
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Ignore errors if no process on port
|
|
88
|
+
}
|
|
89
|
+
// Wait for processes to fully die and port to be released
|
|
90
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
91
|
+
// Try to start new session (should cleanup stale and succeed)
|
|
92
|
+
const result = await runCommand('http://example.com', ['--port', '9232', '--headless'], {
|
|
93
|
+
timeout: 10000,
|
|
94
|
+
});
|
|
95
|
+
// Should succeed after cleanup
|
|
96
|
+
if (result.exitCode !== 0) {
|
|
97
|
+
console.error('Exit code:', result.exitCode);
|
|
98
|
+
console.error('Stderr:', result.stderr);
|
|
99
|
+
console.error('Stdout:', result.stdout);
|
|
100
|
+
}
|
|
101
|
+
assert.equal(result.exitCode, 0);
|
|
102
|
+
// New daemon should be running
|
|
103
|
+
assert.equal(isDaemonRunning(), true);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=error-handling.smoke.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handling.smoke.test.js","sourceRoot":"","sources":["../../../src/__tests__/smoke/error-handling.smoke.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session lifecycle smoke tests.
|
|
3
|
+
*
|
|
4
|
+
* Tests the complete user flow: start → collect data → stop → verify output.
|
|
5
|
+
* WHY: Highest-risk path with 0% coverage despite being critical user flow.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=session-lifecycle.smoke.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-lifecycle.smoke.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/smoke/session-lifecycle.smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session lifecycle smoke tests.
|
|
3
|
+
*
|
|
4
|
+
* Tests the complete user flow: start → collect data → stop → verify output.
|
|
5
|
+
* WHY: Highest-risk path with 0% coverage despite being critical user flow.
|
|
6
|
+
*/
|
|
7
|
+
import * as assert from 'node:assert/strict';
|
|
8
|
+
import { describe, it, afterEach } from 'node:test';
|
|
9
|
+
import { runCommand, runCommandJSON } from '../../__testutils__/commandRunner.js';
|
|
10
|
+
import { cleanupAllSessions, isDaemonRunning, isSessionActive, readSessionOutput, waitForDaemon, } from '../../__testutils__/daemonHelpers.js';
|
|
11
|
+
void describe('Session Lifecycle Smoke Tests', () => {
|
|
12
|
+
afterEach(async () => {
|
|
13
|
+
// Cleanup after each test (no beforeEach needed if this works properly)
|
|
14
|
+
await cleanupAllSessions();
|
|
15
|
+
});
|
|
16
|
+
void it('should start session and create daemon', async () => {
|
|
17
|
+
// Start session with a simple URL using a unique port to avoid conflicts
|
|
18
|
+
const result = await runCommand('http://example.com', ['--port', '9223', '--headless'], {
|
|
19
|
+
timeout: 10000,
|
|
20
|
+
});
|
|
21
|
+
// Should succeed
|
|
22
|
+
assert.equal(result.exitCode, 0);
|
|
23
|
+
// Daemon should be running
|
|
24
|
+
assert.equal(isDaemonRunning(), true);
|
|
25
|
+
// Session should be active
|
|
26
|
+
assert.equal(isSessionActive(), true);
|
|
27
|
+
});
|
|
28
|
+
void it('should collect data during session', async () => {
|
|
29
|
+
// Start session with unique port
|
|
30
|
+
const startResult = await runCommand('http://example.com', ['--port', '9224', '--headless'], {
|
|
31
|
+
timeout: 10000,
|
|
32
|
+
});
|
|
33
|
+
assert.equal(startResult.exitCode, 0, `Session start failed: ${startResult.stderr}`);
|
|
34
|
+
// Wait for daemon to be ready
|
|
35
|
+
await waitForDaemon(5000);
|
|
36
|
+
// Give Chrome time to navigate and collect some data
|
|
37
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
38
|
+
// Peek at collected data
|
|
39
|
+
const peekResult = await runCommandJSON('peek', [
|
|
40
|
+
'--json',
|
|
41
|
+
]);
|
|
42
|
+
// Should have collected some data
|
|
43
|
+
assert.ok(peekResult);
|
|
44
|
+
assert.ok(typeof peekResult === 'object');
|
|
45
|
+
assert.ok('preview' in peekResult);
|
|
46
|
+
assert.ok('data' in peekResult.preview);
|
|
47
|
+
// Stop session to clean up
|
|
48
|
+
const stopResult = await runCommand('stop', [], { timeout: 10000 });
|
|
49
|
+
assert.equal(stopResult.exitCode, 0, `Stop failed: ${stopResult.stderr}`);
|
|
50
|
+
});
|
|
51
|
+
void it('should write output on stop', async () => {
|
|
52
|
+
// Start session with unique port
|
|
53
|
+
const startResult = await runCommand('http://example.com', ['--port', '9225', '--headless'], {
|
|
54
|
+
timeout: 10000,
|
|
55
|
+
});
|
|
56
|
+
assert.equal(startResult.exitCode, 0, `Session start failed: ${startResult.stderr}`);
|
|
57
|
+
await waitForDaemon(5000);
|
|
58
|
+
// Give Chrome time to collect data
|
|
59
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
60
|
+
// Stop session
|
|
61
|
+
const stopResult = await runCommand('stop', [], { timeout: 10000 });
|
|
62
|
+
// Should succeed
|
|
63
|
+
assert.equal(stopResult.exitCode, 0, `Stop failed: ${stopResult.stderr}`);
|
|
64
|
+
// Give filesystem time to write the file (increased for test stability)
|
|
65
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
66
|
+
// Output file should exist
|
|
67
|
+
const output = readSessionOutput();
|
|
68
|
+
assert.ok(output, 'Session output file should exist after stop');
|
|
69
|
+
assert.ok(typeof output === 'object');
|
|
70
|
+
// Output should have expected structure
|
|
71
|
+
assert.ok('version' in output);
|
|
72
|
+
assert.ok('success' in output);
|
|
73
|
+
assert.equal(output.success, true);
|
|
74
|
+
assert.ok('timestamp' in output);
|
|
75
|
+
assert.ok('data' in output);
|
|
76
|
+
assert.ok('target' in output);
|
|
77
|
+
});
|
|
78
|
+
void it('should cleanup daemon on stop', async () => {
|
|
79
|
+
// Start session with unique port
|
|
80
|
+
await runCommand('http://example.com', ['--port', '9226', '--headless'], { timeout: 10000 });
|
|
81
|
+
await waitForDaemon(5000);
|
|
82
|
+
// Stop session
|
|
83
|
+
await runCommand('stop', [], { timeout: 10000 });
|
|
84
|
+
// Wait for cleanup
|
|
85
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
86
|
+
// Daemon should no longer be running
|
|
87
|
+
assert.equal(isDaemonRunning(), false);
|
|
88
|
+
// Session should no longer be active
|
|
89
|
+
assert.equal(isSessionActive(), false);
|
|
90
|
+
});
|
|
91
|
+
void it('should handle concurrent session attempts gracefully', async () => {
|
|
92
|
+
// Start first session with unique port
|
|
93
|
+
const firstResult = await runCommand('http://example.com', ['--port', '9227', '--headless'], {
|
|
94
|
+
timeout: 10000,
|
|
95
|
+
});
|
|
96
|
+
assert.equal(firstResult.exitCode, 0, `First session start failed: ${firstResult.stderr}`);
|
|
97
|
+
await waitForDaemon(5000);
|
|
98
|
+
// Try to start second session (should fail)
|
|
99
|
+
const secondResult = await runCommand('http://another.com', ['--port', '9228', '--headless'], {
|
|
100
|
+
timeout: 10000,
|
|
101
|
+
});
|
|
102
|
+
// Should fail with daemon already running error
|
|
103
|
+
assert.notEqual(secondResult.exitCode, 0);
|
|
104
|
+
assert.ok(secondResult.stderr.includes('daemon') || secondResult.stderr.includes('already'), `Expected error about daemon, got: ${secondResult.stderr}`);
|
|
105
|
+
// First session should still be running
|
|
106
|
+
assert.equal(isDaemonRunning(), true);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=session-lifecycle.smoke.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-lifecycle.smoke.test.js","sourceRoot":"","sources":["../../../src/__tests__/smoke/session-lifecycle.smoke.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command runner for smoke tests.
|
|
3
|
+
*
|
|
4
|
+
* Executes bdg CLI commands in a subprocess and captures output.
|
|
5
|
+
* WHY: Enables end-to-end testing of CLI commands without mocking.
|
|
6
|
+
*/
|
|
7
|
+
export interface CommandResult {
|
|
8
|
+
exitCode: number;
|
|
9
|
+
stdout: string;
|
|
10
|
+
stderr: string;
|
|
11
|
+
error?: Error;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Run a bdg CLI command in a subprocess.
|
|
15
|
+
*
|
|
16
|
+
* @param command - Command name (e.g., 'start', 'stop', 'peek')
|
|
17
|
+
* @param args - Command arguments
|
|
18
|
+
* @param options - Execution options
|
|
19
|
+
* @returns Promise resolving to command result
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const result = await runCommand('start', ['http://localhost:3000']);
|
|
24
|
+
* assert.equal(result.exitCode, 0);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function runCommand(command: string, args?: string[], options?: {
|
|
28
|
+
timeout?: number;
|
|
29
|
+
env?: Record<string, string>;
|
|
30
|
+
}): Promise<CommandResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Run command and parse JSON output from stdout.
|
|
33
|
+
*
|
|
34
|
+
* @param command - Command name
|
|
35
|
+
* @param args - Command arguments
|
|
36
|
+
* @returns Parsed JSON output
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const data = await runCommandJSON('peek');
|
|
41
|
+
* assert.ok(data.data.network.length > 0);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function runCommandJSON<T = unknown>(command: string, args?: string[]): Promise<T>;
|
|
45
|
+
//# sourceMappingURL=commandRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandRunner.d.ts","sourceRoot":"","sources":["../../src/__testutils__/commandRunner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB,GACL,OAAO,CAAC,aAAa,CAAC,CAiExB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,GAClB,OAAO,CAAC,CAAC,CAAC,CAYZ"}
|