browser-debugger-cli 0.2.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__/fixtures/schema-v0.2.1.golden.json +47 -0
- package/dist/__tests__/schema.contract.test.d.ts +19 -0
- package/dist/__tests__/schema.contract.test.d.ts.map +1 -0
- package/dist/__tests__/schema.contract.test.js +236 -0
- package/dist/__tests__/schema.contract.test.js.map +1 -0
- 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/__tests__/cdp.contract.test.d.ts.map +1 -1
- package/dist/commands/__tests__/cdp.contract.test.js +0 -1
- package/dist/commands/__tests__/cdp.contract.test.js.map +1 -1
- package/dist/commands/__tests__/domEval.contract.test.d.ts +17 -0
- package/dist/commands/__tests__/domEval.contract.test.d.ts.map +1 -0
- package/dist/commands/__tests__/domEval.contract.test.js +231 -0
- package/dist/commands/__tests__/domEval.contract.test.js.map +1 -0
- 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 +51 -13
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/console.d.ts.map +1 -1
- package/dist/commands/console.js +8 -8
- package/dist/commands/console.js.map +1 -1
- package/dist/commands/details.js +2 -2
- package/dist/commands/details.js.map +1 -1
- package/dist/commands/dom.d.ts.map +1 -1
- package/dist/commands/dom.js +114 -128
- package/dist/commands/dom.js.map +1 -1
- package/dist/commands/domEvalHelpers.d.ts +7 -11
- package/dist/commands/domEvalHelpers.d.ts.map +1 -1
- package/dist/commands/domEvalHelpers.js +67 -22
- 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/network.d.ts.map +1 -1
- package/dist/commands/network.js +2 -4
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/peek.d.ts.map +1 -1
- package/dist/commands/peek.js +3 -2
- package/dist/commands/peek.js.map +1 -1
- package/dist/commands/shared/CommandRunner.d.ts +4 -2
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +18 -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 +10 -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.d.ts.map +1 -1
- package/dist/commands/shared/sessionController.js +8 -9
- 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 -54
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +16 -28
- 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/__tests__/cdp.contract.test.d.ts.map +1 -1
- package/dist/connection/__tests__/cdp.contract.test.js +0 -1
- package/dist/connection/__tests__/cdp.contract.test.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 +140 -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 +9 -5
- 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 +232 -484
- 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 +16 -1
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +40 -11
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/commands.d.ts +20 -0
- 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 +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 +26 -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/errors.d.ts +39 -0
- package/dist/ui/errors.d.ts.map +1 -0
- package/dist/ui/errors.js +48 -0
- package/dist/ui/errors.js.map +1 -0
- package/dist/ui/formatters/cookies.d.ts.map +1 -1
- package/dist/ui/formatters/cookies.js +18 -21
- package/dist/ui/formatters/cookies.js.map +1 -1
- package/dist/ui/formatters/details.d.ts.map +1 -1
- package/dist/ui/formatters/details.js +34 -36
- package/dist/ui/formatters/details.js.map +1 -1
- package/dist/ui/formatters/dom.d.ts +135 -0
- package/dist/ui/formatters/dom.d.ts.map +1 -0
- package/dist/ui/formatters/dom.js +193 -0
- package/dist/ui/formatters/dom.js.map +1 -0
- package/dist/ui/formatters/index.d.ts +1 -0
- package/dist/ui/formatters/index.d.ts.map +1 -1
- package/dist/ui/formatters/index.js +1 -0
- package/dist/ui/formatters/index.js.map +1 -1
- package/dist/ui/formatters/preview.js +43 -38
- package/dist/ui/formatters/preview.js.map +1 -1
- package/dist/ui/formatters/status.d.ts.map +1 -1
- package/dist/ui/formatters/status.js +45 -45
- package/dist/ui/formatters/status.js.map +1 -1
- package/dist/ui/formatting.d.ts +104 -1
- package/dist/ui/formatting.d.ts.map +1 -1
- package/dist/ui/formatting.js +138 -2
- package/dist/ui/formatting.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 +120 -1
- package/dist/ui/messages/chrome.d.ts.map +1 -1
- package/dist/ui/messages/chrome.js +168 -0
- package/dist/ui/messages/chrome.js.map +1 -1
- package/dist/ui/messages/debug.d.ts +4 -2
- package/dist/ui/messages/debug.d.ts.map +1 -1
- package/dist/ui/messages/debug.js +31 -29
- package/dist/ui/messages/debug.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/errors.d.ts +11 -0
- package/dist/ui/messages/errors.d.ts.map +1 -1
- package/dist/ui/messages/errors.js +13 -0
- package/dist/ui/messages/errors.js.map +1 -1
- package/dist/ui/messages/preview.d.ts +24 -0
- package/dist/ui/messages/preview.d.ts.map +1 -1
- package/dist/ui/messages/preview.js +32 -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/ui/messages/validation.d.ts +14 -0
- package/dist/ui/messages/validation.d.ts.map +1 -1
- package/dist/ui/messages/validation.js +16 -0
- package/dist/ui/messages/validation.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 +55 -1
- package/dist/utils/filters.js.map +1 -1
- package/dist/utils/pageReadiness.d.ts +9 -14
- package/dist/utils/pageReadiness.d.ts.map +1 -1
- package/dist/utils/pageReadiness.js +40 -41
- 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 +58 -6
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +137 -20
- 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 +3 -5
- 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
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon helper utilities for smoke tests.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to check daemon status and manage session state.
|
|
5
|
+
* WHY: Enables testing daemon lifecycle without exposing internals.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import { getSessionFilePath } from '../session/paths.js';
|
|
9
|
+
import { readPid } from '../session/pid.js';
|
|
10
|
+
import { isProcessAlive } from '../session/process.js';
|
|
11
|
+
import { ensureTestSessionDir } from './testHome.js';
|
|
12
|
+
ensureTestSessionDir();
|
|
13
|
+
/**
|
|
14
|
+
* Check if daemon is currently running.
|
|
15
|
+
*
|
|
16
|
+
* @returns True if daemon process is alive
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* await runCommand('http://localhost:3000', []);
|
|
21
|
+
* assert.ok(await isDaemonRunning());
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function isDaemonRunning() {
|
|
25
|
+
try {
|
|
26
|
+
const daemonPidPath = getSessionFilePath('DAEMON_PID');
|
|
27
|
+
if (!fs.existsSync(daemonPidPath)) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
const pidStr = fs.readFileSync(daemonPidPath, 'utf-8').trim();
|
|
31
|
+
const pid = parseInt(pidStr, 10);
|
|
32
|
+
if (isNaN(pid)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return isProcessAlive(pid);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if session is currently active.
|
|
43
|
+
*
|
|
44
|
+
* @returns True if session process is alive
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* await runCommand('http://localhost:3000', []);
|
|
49
|
+
* assert.ok(await isSessionActive());
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export function isSessionActive() {
|
|
53
|
+
try {
|
|
54
|
+
const sessionPid = readPid();
|
|
55
|
+
if (sessionPid === null) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return isProcessAlive(sessionPid);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Kill daemon process forcefully.
|
|
66
|
+
*
|
|
67
|
+
* @param signal - Kill signal (default: SIGTERM)
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* await killDaemon('SIGKILL'); // Simulate crash
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export async function killDaemon(signal = 'SIGTERM') {
|
|
75
|
+
const daemonPidPath = getSessionFilePath('DAEMON_PID');
|
|
76
|
+
if (!fs.existsSync(daemonPidPath)) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const pidStr = fs.readFileSync(daemonPidPath, 'utf-8').trim();
|
|
80
|
+
const pid = parseInt(pidStr, 10);
|
|
81
|
+
if (!isNaN(pid) && isProcessAlive(pid)) {
|
|
82
|
+
process.kill(pid, signal);
|
|
83
|
+
// Wait for process to die
|
|
84
|
+
await new Promise((resolve) => {
|
|
85
|
+
const check = setInterval(() => {
|
|
86
|
+
if (!isProcessAlive(pid)) {
|
|
87
|
+
clearInterval(check);
|
|
88
|
+
resolve(undefined);
|
|
89
|
+
}
|
|
90
|
+
}, 100);
|
|
91
|
+
// Timeout after 5s
|
|
92
|
+
setTimeout(() => {
|
|
93
|
+
clearInterval(check);
|
|
94
|
+
resolve(undefined);
|
|
95
|
+
}, 5000);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Clean up all session files forcefully.
|
|
101
|
+
*
|
|
102
|
+
* WHY: Ensures clean state between tests.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* afterEach(async () => {
|
|
107
|
+
* await cleanupAllSessions();
|
|
108
|
+
* });
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export async function cleanupAllSessions() {
|
|
112
|
+
// Kill daemon if running via PID file
|
|
113
|
+
await killDaemon('SIGKILL');
|
|
114
|
+
// Kill ALL daemon/worker processes (handles orphaned processes from failed tests)
|
|
115
|
+
// This is aggressive but necessary for test isolation
|
|
116
|
+
try {
|
|
117
|
+
const { execSync } = await import('child_process');
|
|
118
|
+
execSync('pkill -9 -f "node.*dist/daemon" 2>/dev/null || true', { stdio: 'ignore' });
|
|
119
|
+
execSync('pkill -9 -f "node.*dist/daemon/worker" 2>/dev/null || true', { stdio: 'ignore' });
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Ignore errors
|
|
123
|
+
}
|
|
124
|
+
// Kill Chrome on all test ports (9222-9232)
|
|
125
|
+
try {
|
|
126
|
+
const { execSync } = await import('child_process');
|
|
127
|
+
for (let port = 9222; port <= 9232; port++) {
|
|
128
|
+
execSync(`lsof -ti:${port} | xargs kill -9 2>/dev/null || true`, { stdio: 'ignore' });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Ignore errors if no process on port
|
|
133
|
+
}
|
|
134
|
+
// Wait for processes to fully die and ports to be released
|
|
135
|
+
// Increased to 2000ms to ensure complete cleanup between tests
|
|
136
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
137
|
+
// Remove all session files
|
|
138
|
+
const files = [
|
|
139
|
+
'DAEMON_PID',
|
|
140
|
+
'DAEMON_SOCKET',
|
|
141
|
+
'DAEMON_LOCK',
|
|
142
|
+
'PID',
|
|
143
|
+
'LOCK',
|
|
144
|
+
'METADATA',
|
|
145
|
+
'OUTPUT',
|
|
146
|
+
];
|
|
147
|
+
for (const file of files) {
|
|
148
|
+
try {
|
|
149
|
+
const filePath = getSessionFilePath(file);
|
|
150
|
+
if (fs.existsSync(filePath)) {
|
|
151
|
+
fs.unlinkSync(filePath);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Ignore errors
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Read session output file.
|
|
161
|
+
*
|
|
162
|
+
* @returns Parsed session output or null if not exists
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```typescript
|
|
166
|
+
* await runCommand('stop', []);
|
|
167
|
+
* const output = readSessionOutput();
|
|
168
|
+
* assert.equal(output.success, true);
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
export function readSessionOutput() {
|
|
172
|
+
try {
|
|
173
|
+
const outputPath = getSessionFilePath('OUTPUT');
|
|
174
|
+
if (!fs.existsSync(outputPath)) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
const content = fs.readFileSync(outputPath, 'utf-8');
|
|
178
|
+
return JSON.parse(content);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Wait for daemon to start (with timeout).
|
|
186
|
+
*
|
|
187
|
+
* @param timeoutMs - Timeout in milliseconds (default: 5000)
|
|
188
|
+
* @returns True if daemon started, false if timeout
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```typescript
|
|
192
|
+
* runCommand('start', ['http://localhost:3000']); // Don't await
|
|
193
|
+
* assert.ok(await waitForDaemon(5000));
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
export async function waitForDaemon(timeoutMs = 5000) {
|
|
197
|
+
const startTime = Date.now();
|
|
198
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
199
|
+
if (isDaemonRunning()) {
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
203
|
+
}
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=daemonHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemonHelpers.js","sourceRoot":"","sources":["../../src/__testutils__/daemonHelpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,4 +12,5 @@ export { useFakeClock, type ClockHelper } from './testClock.js';
|
|
|
12
12
|
export { mockProcessAlive, restoreProcessAlive, isProcessMocked } from './testProcess.js';
|
|
13
13
|
export { assertEventually, assertCDPMessage, assertThrowsAsync } from './assertions.js';
|
|
14
14
|
export { createMockCDPMessage, createMockWebSocketUrl } from './testFixtures.js';
|
|
15
|
+
export { cleanupBdgTest, cleanupPort } from './testCleanup.js';
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/__testutils__/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/__testutils__/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -12,4 +12,5 @@ export { useFakeClock } from './testClock.js';
|
|
|
12
12
|
export { mockProcessAlive, restoreProcessAlive, isProcessMocked } from './testProcess.js';
|
|
13
13
|
export { assertEventually, assertCDPMessage, assertThrowsAsync } from './assertions.js';
|
|
14
14
|
export { createMockCDPMessage, createMockWebSocketUrl } from './testFixtures.js';
|
|
15
|
+
export { cleanupBdgTest, cleanupPort } from './testCleanup.js';
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/__testutils__/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/__testutils__/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test cleanup utilities for bdg integration tests
|
|
3
|
+
*
|
|
4
|
+
* Provides reusable cleanup functions to ensure Chrome processes and
|
|
5
|
+
* session files are properly cleaned up between tests.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Clean up bdg session and Chrome processes using production cleanup code.
|
|
9
|
+
*
|
|
10
|
+
* This function uses bdg's own cleanup mechanisms to ensure tests clean up
|
|
11
|
+
* the same way production code does. Falls back to aggressive Chrome cleanup
|
|
12
|
+
* if bdg cleanup fails.
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* Use this in afterEach() hooks to prevent test pollution and port conflicts.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { cleanupBdgTest } from '../__testutils__/testCleanup.js';
|
|
20
|
+
*
|
|
21
|
+
* afterEach(async () => {
|
|
22
|
+
* await cleanupBdgTest();
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function cleanupBdgTest(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Clean up specific port by killing any process using it.
|
|
29
|
+
*
|
|
30
|
+
* Platform-specific implementation using lsof (macOS/Linux) or
|
|
31
|
+
* netstat (Windows - not yet implemented).
|
|
32
|
+
*
|
|
33
|
+
* @param port - Port number to free
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* import { cleanupPort } from '../__testutils__/testCleanup.js';
|
|
38
|
+
*
|
|
39
|
+
* beforeEach(async () => {
|
|
40
|
+
* await cleanupPort(9222); // Ensure port is free before test
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function cleanupPort(port: number): void;
|
|
45
|
+
//# sourceMappingURL=testCleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testCleanup.d.ts","sourceRoot":"","sources":["../../src/__testutils__/testCleanup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBpD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAY9C"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test cleanup utilities for bdg integration tests
|
|
3
|
+
*
|
|
4
|
+
* Provides reusable cleanup functions to ensure Chrome processes and
|
|
5
|
+
* session files are properly cleaned up between tests.
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
/**
|
|
9
|
+
* Clean up bdg session and Chrome processes using production cleanup code.
|
|
10
|
+
*
|
|
11
|
+
* This function uses bdg's own cleanup mechanisms to ensure tests clean up
|
|
12
|
+
* the same way production code does. Falls back to aggressive Chrome cleanup
|
|
13
|
+
* if bdg cleanup fails.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* Use this in afterEach() hooks to prevent test pollution and port conflicts.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { cleanupBdgTest } from '../__testutils__/testCleanup.js';
|
|
21
|
+
*
|
|
22
|
+
* afterEach(async () => {
|
|
23
|
+
* await cleanupBdgTest();
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export async function cleanupBdgTest() {
|
|
28
|
+
try {
|
|
29
|
+
// First, try normal cleanup
|
|
30
|
+
execSync('node dist/index.js cleanup --force', {
|
|
31
|
+
stdio: 'ignore',
|
|
32
|
+
timeout: 10000,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// If normal cleanup fails, try aggressive cleanup
|
|
37
|
+
try {
|
|
38
|
+
execSync('node dist/index.js cleanup --aggressive', {
|
|
39
|
+
stdio: 'ignore',
|
|
40
|
+
timeout: 10000,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Last resort: import and use cleanup function directly
|
|
45
|
+
try {
|
|
46
|
+
const { cleanupStaleChrome } = await import('../commands/shared/sessionController.js');
|
|
47
|
+
await cleanupStaleChrome();
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Cleanup failed - log but don't throw to avoid breaking test runner
|
|
51
|
+
console.error('[testCleanup] All cleanup methods failed');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Clean up specific port by killing any process using it.
|
|
58
|
+
*
|
|
59
|
+
* Platform-specific implementation using lsof (macOS/Linux) or
|
|
60
|
+
* netstat (Windows - not yet implemented).
|
|
61
|
+
*
|
|
62
|
+
* @param port - Port number to free
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* import { cleanupPort } from '../__testutils__/testCleanup.js';
|
|
67
|
+
*
|
|
68
|
+
* beforeEach(async () => {
|
|
69
|
+
* await cleanupPort(9222); // Ensure port is free before test
|
|
70
|
+
* });
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export function cleanupPort(port) {
|
|
74
|
+
try {
|
|
75
|
+
// Platform-specific cleanup (macOS/Linux only for now)
|
|
76
|
+
if (process.platform !== 'win32') {
|
|
77
|
+
execSync(`lsof -ti:${port} | xargs kill -9 2>/dev/null || true`, {
|
|
78
|
+
stdio: 'ignore',
|
|
79
|
+
timeout: 5000,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Ignore errors - port may already be free
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=testCleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testCleanup.js","sourceRoot":"","sources":["../../src/__testutils__/testCleanup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,4BAA4B;QAC5B,QAAQ,CAAC,oCAAoC,EAAE;YAC7C,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;QAClD,IAAI,CAAC;YACH,QAAQ,CAAC,yCAAyC,EAAE;gBAClD,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;YACxD,IAAI,CAAC;gBACH,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC;gBACtF,MAAM,kBAAkB,EAAE,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;gBACrE,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,uDAAuD;QACvD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,QAAQ,CAAC,YAAY,IAAI,sCAAsC,EAAE;gBAC/D,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensure smoke/integration tests use a writable BDG session directory and HOME.
|
|
3
|
+
*
|
|
4
|
+
* Some CI/macOS environments block writing to ~/.bdg and ~/Library directly.
|
|
5
|
+
* We point bdg to a repo-local session directory via BDG_SESSION_DIR and also
|
|
6
|
+
* override HOME so Chrome's Crashpad can write to ~/Library/Application Support/...
|
|
7
|
+
* without hitting sandbox restrictions.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Set BDG_SESSION_DIR to a deterministic path under the repo and make sure it
|
|
11
|
+
* exists on disk. Subsequent calls are cheap and return the same path.
|
|
12
|
+
*
|
|
13
|
+
* @returns Absolute path used as BDG session directory for tests
|
|
14
|
+
*/
|
|
15
|
+
export declare function ensureTestSessionDir(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Get a writable HOME directory for tests that shields Chrome from sandbox restrictions.
|
|
18
|
+
*
|
|
19
|
+
* macOS workspace sandboxes block writes to ~/Library, causing Chrome's Crashpad to fail
|
|
20
|
+
* with EPERM errors. By overriding HOME to a repo-local directory, Chrome can safely
|
|
21
|
+
* write its crash handler settings without hitting the sandbox wall.
|
|
22
|
+
*
|
|
23
|
+
* @returns Absolute path to use as HOME for test processes
|
|
24
|
+
*/
|
|
25
|
+
export declare function getTestHomeDir(): string;
|
|
26
|
+
//# sourceMappingURL=testHome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testHome.d.ts","sourceRoot":"","sources":["../../src/__testutils__/testHome.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAgB7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAkBvC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensure smoke/integration tests use a writable BDG session directory and HOME.
|
|
3
|
+
*
|
|
4
|
+
* Some CI/macOS environments block writing to ~/.bdg and ~/Library directly.
|
|
5
|
+
* We point bdg to a repo-local session directory via BDG_SESSION_DIR and also
|
|
6
|
+
* override HOME so Chrome's Crashpad can write to ~/Library/Application Support/...
|
|
7
|
+
* without hitting sandbox restrictions.
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
let cachedSessionDir = null;
|
|
13
|
+
let cachedHomeDir = null;
|
|
14
|
+
/**
|
|
15
|
+
* Set BDG_SESSION_DIR to a deterministic path under the repo and make sure it
|
|
16
|
+
* exists on disk. Subsequent calls are cheap and return the same path.
|
|
17
|
+
*
|
|
18
|
+
* @returns Absolute path used as BDG session directory for tests
|
|
19
|
+
*/
|
|
20
|
+
export function ensureTestSessionDir() {
|
|
21
|
+
if (cachedSessionDir) {
|
|
22
|
+
return cachedSessionDir;
|
|
23
|
+
}
|
|
24
|
+
const currentDir = path.dirname(fileURLToPath(import.meta.url));
|
|
25
|
+
const repoRoot = path.resolve(currentDir, '..', '..');
|
|
26
|
+
const fallbackDir = path.join(repoRoot, '.tmp', 'bdg-smoke-session');
|
|
27
|
+
const desiredDir = process.env['BDG_TEST_SESSION_DIR'] ?? fallbackDir;
|
|
28
|
+
fs.mkdirSync(desiredDir, { recursive: true });
|
|
29
|
+
process.env['BDG_SESSION_DIR'] = desiredDir;
|
|
30
|
+
cachedSessionDir = desiredDir;
|
|
31
|
+
return cachedSessionDir;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get a writable HOME directory for tests that shields Chrome from sandbox restrictions.
|
|
35
|
+
*
|
|
36
|
+
* macOS workspace sandboxes block writes to ~/Library, causing Chrome's Crashpad to fail
|
|
37
|
+
* with EPERM errors. By overriding HOME to a repo-local directory, Chrome can safely
|
|
38
|
+
* write its crash handler settings without hitting the sandbox wall.
|
|
39
|
+
*
|
|
40
|
+
* @returns Absolute path to use as HOME for test processes
|
|
41
|
+
*/
|
|
42
|
+
export function getTestHomeDir() {
|
|
43
|
+
if (cachedHomeDir) {
|
|
44
|
+
return cachedHomeDir;
|
|
45
|
+
}
|
|
46
|
+
const currentDir = path.dirname(fileURLToPath(import.meta.url));
|
|
47
|
+
const repoRoot = path.resolve(currentDir, '..', '..');
|
|
48
|
+
const fallbackDir = path.join(repoRoot, '.tmp', 'bdg-smoke-home');
|
|
49
|
+
const desiredDir = process.env['BDG_TEST_HOME_DIR'] ?? fallbackDir;
|
|
50
|
+
fs.mkdirSync(desiredDir, { recursive: true });
|
|
51
|
+
// Create Library/Application Support structure for Chrome's Crashpad
|
|
52
|
+
const libraryDir = path.join(desiredDir, 'Library', 'Application Support', 'Google', 'Chrome');
|
|
53
|
+
fs.mkdirSync(libraryDir, { recursive: true });
|
|
54
|
+
cachedHomeDir = desiredDir;
|
|
55
|
+
return cachedHomeDir;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=testHome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testHome.js","sourceRoot":"","sources":["../../src/__testutils__/testHome.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAC3C,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAErE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,WAAW,CAAC;IACtE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC;IAE5C,gBAAgB,GAAG,UAAU,CAAC;IAC9B,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,WAAW,CAAC;IACnE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,qEAAqE;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/F,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,aAAa,GAAG,UAAU,CAAC;IAC3B,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testProcess.d.ts","sourceRoot":"","sources":["../../src/__testutils__/testProcess.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"testProcess.d.ts","sourceRoot":"","sources":["../../src/__testutils__/testProcess.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAkC1D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
|
|
@@ -37,9 +37,10 @@ export function mockProcessAlive(alivePids) {
|
|
|
37
37
|
originalKill ??= process.kill.bind(process);
|
|
38
38
|
const alivePidSet = new Set(alivePids);
|
|
39
39
|
process.kill = ((pid, signal) => {
|
|
40
|
+
const normalizedPid = Math.abs(pid);
|
|
40
41
|
// Signal 0 is used to check if process exists (doesn't actually send signal)
|
|
41
42
|
if (signal === 0 || signal === undefined) {
|
|
42
|
-
if (alivePidSet.has(
|
|
43
|
+
if (alivePidSet.has(normalizedPid)) {
|
|
43
44
|
// Process is alive - return true
|
|
44
45
|
return true;
|
|
45
46
|
}
|
|
@@ -52,8 +53,15 @@ export function mockProcessAlive(alivePids) {
|
|
|
52
53
|
throw err;
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
if (!alivePidSet.has(normalizedPid)) {
|
|
57
|
+
const err = new Error(`kill ESRCH`);
|
|
58
|
+
err.code = 'ESRCH';
|
|
59
|
+
err.errno = -3;
|
|
60
|
+
err.syscall = 'kill';
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
alivePidSet.delete(normalizedPid);
|
|
64
|
+
return true;
|
|
57
65
|
});
|
|
58
66
|
}
|
|
59
67
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testProcess.js","sourceRoot":"","sources":["../../src/__testutils__/testProcess.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,IAAI,YAAY,GAA+B,IAAI,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAmB;IAClD,oFAAoF;IACpF,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE5C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAEvC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,MAAgC,EAAE,EAAE;QAChE,6EAA6E;QAC7E,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,WAAW,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"testProcess.js","sourceRoot":"","sources":["../../src/__testutils__/testProcess.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,IAAI,YAAY,GAA+B,IAAI,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAmB;IAClD,oFAAoF;IACpF,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE5C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAEvC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,MAAgC,EAAE,EAAE;QAChE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,6EAA6E;QAC7E,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnC,iCAAiC;gBACjC,OAAO,IAAI,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,+DAA+D;gBAC/D,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,YAAY,CAA0B,CAAC;gBAC7D,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;gBACnB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACf,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;gBACrB,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,YAAY,CAA0B,CAAC;YAC7D,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;YACnB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACf,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;YACrB,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC,CAAwB,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;QAC5B,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,KAAK,IAAI,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.unit.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/__tests__/start.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
3
|
+
import { validateCollectorFlags, resolveCollectors } from '../../commands/start.js';
|
|
4
|
+
/**
|
|
5
|
+
* Unit tests for collector flag validation and resolution
|
|
6
|
+
*/
|
|
7
|
+
void describe('validateCollectorFlags', () => {
|
|
8
|
+
void it('should not throw when no collector flags are provided', () => {
|
|
9
|
+
assert.doesNotThrow(() => {
|
|
10
|
+
validateCollectorFlags({ port: '9222' });
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
void it('should not throw when only additive flags are provided', () => {
|
|
14
|
+
assert.doesNotThrow(() => {
|
|
15
|
+
validateCollectorFlags({ port: '9222', dom: true, network: true });
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
void it('should not throw when only subtractive flags are provided', () => {
|
|
19
|
+
assert.doesNotThrow(() => {
|
|
20
|
+
validateCollectorFlags({ port: '9222', skipDom: true });
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
void it('should throw when --dom and --skip-dom are both provided', () => {
|
|
24
|
+
assert.throws(() => {
|
|
25
|
+
validateCollectorFlags({ port: '9222', dom: true, skipDom: true });
|
|
26
|
+
}, {
|
|
27
|
+
name: 'Error',
|
|
28
|
+
message: /Conflicting collector flags detected: --dom and --skip-dom/,
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
void it('should throw when --network and --skip-network are both provided', () => {
|
|
32
|
+
assert.throws(() => {
|
|
33
|
+
validateCollectorFlags({ port: '9222', network: true, skipNetwork: true });
|
|
34
|
+
}, {
|
|
35
|
+
name: 'Error',
|
|
36
|
+
message: /Conflicting collector flags detected: --network and --skip-network/,
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
void it('should throw when --console and --skip-console are both provided', () => {
|
|
40
|
+
assert.throws(() => {
|
|
41
|
+
validateCollectorFlags({ port: '9222', console: true, skipConsole: true });
|
|
42
|
+
}, {
|
|
43
|
+
name: 'Error',
|
|
44
|
+
message: /Conflicting collector flags detected: --console and --skip-console/,
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
void it('should throw when multiple conflicts are present', () => {
|
|
48
|
+
assert.throws(() => {
|
|
49
|
+
validateCollectorFlags({
|
|
50
|
+
port: '9222',
|
|
51
|
+
dom: true,
|
|
52
|
+
skipDom: true,
|
|
53
|
+
network: true,
|
|
54
|
+
skipNetwork: true,
|
|
55
|
+
});
|
|
56
|
+
}, {
|
|
57
|
+
name: 'Error',
|
|
58
|
+
message: /Conflicting collector flags detected.*--dom and --skip-dom.*--network and --skip-network/s,
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
void describe('resolveCollectors', () => {
|
|
63
|
+
void it('should return all collectors when no flags are provided', () => {
|
|
64
|
+
const collectors = resolveCollectors({ port: '9222' });
|
|
65
|
+
assert.deepEqual(collectors, ['dom', 'network', 'console']);
|
|
66
|
+
});
|
|
67
|
+
void it('should return only dom when --dom is provided', () => {
|
|
68
|
+
const collectors = resolveCollectors({ port: '9222', dom: true });
|
|
69
|
+
assert.deepEqual(collectors, ['dom']);
|
|
70
|
+
});
|
|
71
|
+
void it('should return only network when --network is provided', () => {
|
|
72
|
+
const collectors = resolveCollectors({ port: '9222', network: true });
|
|
73
|
+
assert.deepEqual(collectors, ['network']);
|
|
74
|
+
});
|
|
75
|
+
void it('should return only console when --console is provided', () => {
|
|
76
|
+
const collectors = resolveCollectors({ port: '9222', console: true });
|
|
77
|
+
assert.deepEqual(collectors, ['console']);
|
|
78
|
+
});
|
|
79
|
+
void it('should return dom and network when both additive flags are provided', () => {
|
|
80
|
+
const collectors = resolveCollectors({ port: '9222', dom: true, network: true });
|
|
81
|
+
assert.deepEqual(collectors, ['dom', 'network']);
|
|
82
|
+
});
|
|
83
|
+
void it('should return all three when all additive flags are provided', () => {
|
|
84
|
+
const collectors = resolveCollectors({
|
|
85
|
+
port: '9222',
|
|
86
|
+
dom: true,
|
|
87
|
+
network: true,
|
|
88
|
+
console: true,
|
|
89
|
+
});
|
|
90
|
+
assert.deepEqual(collectors, ['dom', 'network', 'console']);
|
|
91
|
+
});
|
|
92
|
+
void it('should exclude dom when --skip-dom is provided', () => {
|
|
93
|
+
const collectors = resolveCollectors({ port: '9222', skipDom: true });
|
|
94
|
+
assert.deepEqual(collectors, ['network', 'console']);
|
|
95
|
+
});
|
|
96
|
+
void it('should exclude network when --skip-network is provided', () => {
|
|
97
|
+
const collectors = resolveCollectors({ port: '9222', skipNetwork: true });
|
|
98
|
+
assert.deepEqual(collectors, ['dom', 'console']);
|
|
99
|
+
});
|
|
100
|
+
void it('should exclude console when --skip-console is provided', () => {
|
|
101
|
+
const collectors = resolveCollectors({ port: '9222', skipConsole: true });
|
|
102
|
+
assert.deepEqual(collectors, ['dom', 'network']);
|
|
103
|
+
});
|
|
104
|
+
void it('should exclude multiple collectors when multiple --skip-* flags are provided', () => {
|
|
105
|
+
const collectors = resolveCollectors({
|
|
106
|
+
port: '9222',
|
|
107
|
+
skipDom: true,
|
|
108
|
+
skipNetwork: true,
|
|
109
|
+
});
|
|
110
|
+
assert.deepEqual(collectors, ['console']);
|
|
111
|
+
});
|
|
112
|
+
void it('should return empty array when all collectors are disabled', () => {
|
|
113
|
+
const collectors = resolveCollectors({
|
|
114
|
+
port: '9222',
|
|
115
|
+
skipDom: true,
|
|
116
|
+
skipNetwork: true,
|
|
117
|
+
skipConsole: true,
|
|
118
|
+
});
|
|
119
|
+
assert.deepEqual(collectors, []);
|
|
120
|
+
});
|
|
121
|
+
void it('should prioritize additive flags over subtractive flags', () => {
|
|
122
|
+
// When additive flags are present, subtractive flags should be ignored
|
|
123
|
+
const collectors = resolveCollectors({
|
|
124
|
+
port: '9222',
|
|
125
|
+
dom: true,
|
|
126
|
+
skipConsole: true, // Should be ignored because additive flag is present
|
|
127
|
+
});
|
|
128
|
+
assert.deepEqual(collectors, ['dom']);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=start.unit.test.js.map
|