browser-debugger-cli 0.0.1-alpha.0 → 0.1.0-alpha.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/LICENSE +21 -0
- package/README.md +167 -52
- package/dist/__testfixtures__/cdpMessages.d.ts +43 -0
- package/dist/__testfixtures__/cdpMessages.d.ts.map +1 -0
- package/dist/__testfixtures__/cdpMessages.js +118 -0
- package/dist/__testfixtures__/cdpMessages.js.map +1 -0
- package/dist/__testfixtures__/connectionTargets.d.ts +21 -0
- package/dist/__testfixtures__/connectionTargets.d.ts.map +1 -0
- package/dist/__testfixtures__/connectionTargets.js +59 -0
- package/dist/__testfixtures__/connectionTargets.js.map +1 -0
- package/dist/__tests__/integration/session-files.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/session-files.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/session-files.integration.test.js +66 -0
- package/dist/__tests__/integration/session-files.integration.test.js.map +1 -0
- package/dist/__testutils__/FakeClock.d.ts +67 -0
- package/dist/__testutils__/FakeClock.d.ts.map +1 -0
- package/dist/__testutils__/FakeClock.js +132 -0
- package/dist/__testutils__/FakeClock.js.map +1 -0
- package/dist/__testutils__/FakeWebSocket.d.ts +106 -0
- package/dist/__testutils__/FakeWebSocket.d.ts.map +1 -0
- package/dist/__testutils__/FakeWebSocket.js +213 -0
- package/dist/__testutils__/FakeWebSocket.js.map +1 -0
- package/dist/__testutils__/assertions.d.ts +33 -0
- package/dist/__testutils__/assertions.d.ts.map +1 -0
- package/dist/__testutils__/assertions.js +57 -0
- package/dist/__testutils__/assertions.js.map +1 -0
- package/dist/__testutils__/index.d.ts +15 -0
- package/dist/__testutils__/index.d.ts.map +1 -0
- package/dist/__testutils__/index.js +15 -0
- package/dist/__testutils__/index.js.map +1 -0
- package/dist/__testutils__/testClock.d.ts +28 -0
- package/dist/__testutils__/testClock.d.ts.map +1 -0
- package/dist/__testutils__/testClock.js +81 -0
- package/dist/__testutils__/testClock.js.map +1 -0
- package/dist/__testutils__/testFixtures.d.ts +15 -0
- package/dist/__testutils__/testFixtures.d.ts.map +1 -0
- package/dist/__testutils__/testFixtures.js +23 -0
- package/dist/__testutils__/testFixtures.js.map +1 -0
- package/dist/__testutils__/testProcess.d.ts +46 -0
- package/dist/__testutils__/testProcess.d.ts.map +1 -0
- package/dist/__testutils__/testProcess.js +77 -0
- package/dist/__testutils__/testProcess.js.map +1 -0
- package/dist/cli/collectors/dom.d.ts +8 -0
- package/dist/cli/collectors/dom.d.ts.map +1 -0
- package/dist/cli/collectors/dom.js +361 -0
- package/dist/cli/collectors/dom.js.map +1 -0
- package/dist/cli/collectors/helpers/domCache.d.ts +40 -0
- package/dist/cli/collectors/helpers/domCache.d.ts.map +1 -0
- package/dist/cli/collectors/helpers/domCache.js +79 -0
- package/dist/cli/collectors/helpers/domCache.js.map +1 -0
- package/dist/cli/collectors/helpers/domQuery.d.ts +45 -0
- package/dist/cli/collectors/helpers/domQuery.d.ts.map +1 -0
- package/dist/cli/collectors/helpers/domQuery.js +100 -0
- package/dist/cli/collectors/helpers/domQuery.js.map +1 -0
- package/dist/cli/collectors/helpers/selectorParser.d.ts +20 -0
- package/dist/cli/collectors/helpers/selectorParser.d.ts.map +1 -0
- package/dist/cli/collectors/helpers/selectorParser.js +20 -0
- package/dist/cli/collectors/helpers/selectorParser.js.map +1 -0
- package/dist/cli/commands/__tests__/cdp.contract.test.d.ts +24 -0
- package/dist/cli/commands/__tests__/cdp.contract.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/cdp.contract.test.js +467 -0
- package/dist/cli/commands/__tests__/cdp.contract.test.js.map +1 -0
- package/dist/cli/commands/__tests__/ipcTest.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/ipcTest.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/ipcTest.test.js +37 -0
- package/dist/cli/commands/__tests__/ipcTest.test.js.map +1 -0
- package/dist/cli/commands/cdp.d.ts +8 -0
- package/dist/cli/commands/cdp.d.ts.map +1 -0
- package/dist/cli/commands/cdp.js +45 -0
- package/dist/cli/commands/cdp.js.map +1 -0
- package/dist/cli/commands/cleanup.d.ts +8 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/cleanup.js +130 -0
- package/dist/cli/commands/cleanup.js.map +1 -0
- package/dist/cli/commands/console.d.ts +8 -0
- package/dist/cli/commands/console.d.ts.map +1 -0
- package/dist/cli/commands/console.js +97 -0
- package/dist/cli/commands/console.js.map +1 -0
- package/dist/cli/commands/details.d.ts +8 -0
- package/dist/cli/commands/details.d.ts.map +1 -0
- package/dist/cli/commands/details.js +68 -0
- package/dist/cli/commands/details.js.map +1 -0
- package/dist/cli/commands/dom/helpers/domCache.d.ts +36 -0
- package/dist/cli/commands/dom/helpers/domCache.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/domCache.js +65 -0
- package/dist/cli/commands/dom/helpers/domCache.js.map +1 -0
- package/dist/cli/commands/dom/helpers/domQuery.d.ts +48 -0
- package/dist/cli/commands/dom/helpers/domQuery.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/domQuery.js +104 -0
- package/dist/cli/commands/dom/helpers/domQuery.js.map +1 -0
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts +45 -0
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/errorHandler.js +70 -0
- package/dist/cli/commands/dom/helpers/errorHandler.js.map +1 -0
- package/dist/cli/commands/dom/helpers/evalHelpers.d.ts +52 -0
- package/dist/cli/commands/dom/helpers/evalHelpers.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/evalHelpers.js +75 -0
- package/dist/cli/commands/dom/helpers/evalHelpers.js.map +1 -0
- package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts +35 -0
- package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/optionsBuilder.js +51 -0
- package/dist/cli/commands/dom/helpers/optionsBuilder.js.map +1 -0
- package/dist/cli/commands/dom/helpers/selectorParser.d.ts +20 -0
- package/dist/cli/commands/dom/helpers/selectorParser.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/selectorParser.js +20 -0
- package/dist/cli/commands/dom/helpers/selectorParser.js.map +1 -0
- package/dist/cli/commands/dom/index.d.ts +8 -0
- package/dist/cli/commands/dom/index.d.ts.map +1 -0
- package/dist/cli/commands/dom/index.js +257 -0
- package/dist/cli/commands/dom/index.js.map +1 -0
- package/dist/cli/commands/ipcTest.d.ts +23 -0
- package/dist/cli/commands/ipcTest.d.ts.map +1 -0
- package/dist/cli/commands/ipcTest.js +181 -0
- package/dist/cli/commands/ipcTest.js.map +1 -0
- package/dist/cli/commands/network.d.ts +8 -0
- package/dist/cli/commands/network.d.ts.map +1 -0
- package/dist/cli/commands/network.js +40 -0
- package/dist/cli/commands/network.js.map +1 -0
- package/dist/cli/commands/peek.d.ts +8 -0
- package/dist/cli/commands/peek.d.ts.map +1 -0
- package/dist/cli/commands/peek.js +109 -0
- package/dist/cli/commands/peek.js.map +1 -0
- 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 +127 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/start.d.ts +9 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +78 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +9 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +84 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +8 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +146 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/formatters/detailsFormatter.d.ts +10 -0
- package/dist/cli/formatters/detailsFormatter.d.ts.map +1 -0
- package/dist/cli/formatters/detailsFormatter.js +63 -0
- package/dist/cli/formatters/detailsFormatter.js.map +1 -0
- package/dist/cli/formatters/previewFormatter.d.ts +27 -0
- package/dist/cli/formatters/previewFormatter.d.ts.map +1 -0
- package/dist/cli/formatters/previewFormatter.js +160 -0
- package/dist/cli/formatters/previewFormatter.js.map +1 -0
- package/dist/cli/formatters/statusFormatter.d.ts +34 -0
- package/dist/cli/formatters/statusFormatter.d.ts.map +1 -0
- package/dist/cli/formatters/statusFormatter.js +108 -0
- package/dist/cli/formatters/statusFormatter.js.map +1 -0
- 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/CommandRunner.d.ts +60 -0
- package/dist/cli/handlers/CommandRunner.d.ts.map +1 -0
- package/dist/cli/handlers/CommandRunner.js +81 -0
- package/dist/cli/handlers/CommandRunner.js.map +1 -0
- package/dist/cli/handlers/OutputBuilder.d.ts +60 -0
- package/dist/cli/handlers/OutputBuilder.d.ts.map +1 -0
- package/dist/cli/handlers/OutputBuilder.js +138 -0
- package/dist/cli/handlers/OutputBuilder.js.map +1 -0
- 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 +119 -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 +38 -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 +38 -0
- package/dist/cli/handlers/ShutdownController.d.ts.map +1 -0
- package/dist/cli/handlers/ShutdownController.js +83 -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/commonOptions.d.ts +54 -0
- package/dist/cli/handlers/commonOptions.d.ts.map +1 -0
- package/dist/cli/handlers/commonOptions.js +64 -0
- package/dist/cli/handlers/commonOptions.js.map +1 -0
- package/dist/cli/handlers/daemonSessionController.d.ts +23 -0
- package/dist/cli/handlers/daemonSessionController.d.ts.map +1 -0
- package/dist/cli/handlers/daemonSessionController.js +108 -0
- package/dist/cli/handlers/daemonSessionController.js.map +1 -0
- package/dist/cli/handlers/sessionController.d.ts +21 -0
- package/dist/cli/handlers/sessionController.d.ts.map +1 -0
- package/dist/cli/handlers/sessionController.js +55 -0
- package/dist/cli/handlers/sessionController.js.map +1 -0
- package/dist/cli/registry.d.ts +11 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +46 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/collectors/__tests__/network.contract.test.d.ts +28 -0
- package/dist/collectors/__tests__/network.contract.test.d.ts.map +1 -0
- package/dist/collectors/__tests__/network.contract.test.js +525 -0
- package/dist/collectors/__tests__/network.contract.test.js.map +1 -0
- package/dist/collectors/console.d.ts +5 -3
- package/dist/collectors/console.d.ts.map +1 -1
- package/dist/collectors/console.js +48 -26
- package/dist/collectors/console.js.map +1 -1
- package/dist/collectors/dom.d.ts +2 -2
- package/dist/collectors/dom.d.ts.map +1 -1
- package/dist/collectors/dom.js +23 -12
- package/dist/collectors/dom.js.map +1 -1
- package/dist/collectors/network.d.ts +18 -4
- package/dist/collectors/network.d.ts.map +1 -1
- package/dist/collectors/network.js +111 -34
- package/dist/collectors/network.js.map +1 -1
- package/dist/connection/__tests__/cdp.contract.test.d.ts +16 -0
- package/dist/connection/__tests__/cdp.contract.test.d.ts.map +1 -0
- package/dist/connection/__tests__/cdp.contract.test.js +378 -0
- package/dist/connection/__tests__/cdp.contract.test.js.map +1 -0
- package/dist/connection/__tests__/finder.contract.test.d.ts +2 -0
- package/dist/connection/__tests__/finder.contract.test.d.ts.map +1 -0
- package/dist/connection/__tests__/finder.contract.test.js +239 -0
- package/dist/connection/__tests__/finder.contract.test.js.map +1 -0
- package/dist/connection/__tests__/tabs.contract.test.d.ts +2 -0
- package/dist/connection/__tests__/tabs.contract.test.d.ts.map +1 -0
- package/dist/connection/__tests__/tabs.contract.test.js +137 -0
- package/dist/connection/__tests__/tabs.contract.test.js.map +1 -0
- package/dist/connection/cdp.d.ts +165 -16
- package/dist/connection/cdp.d.ts.map +1 -1
- package/dist/connection/cdp.js +342 -122
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/finder.d.ts +5 -4
- package/dist/connection/finder.d.ts.map +1 -1
- package/dist/connection/finder.js +10 -16
- package/dist/connection/finder.js.map +1 -1
- package/dist/connection/launcher.d.ts +18 -11
- package/dist/connection/launcher.d.ts.map +1 -1
- package/dist/connection/launcher.js +148 -82
- package/dist/connection/launcher.js.map +1 -1
- package/dist/connection/tabs.d.ts +47 -14
- package/dist/connection/tabs.d.ts.map +1 -1
- package/dist/connection/tabs.js +493 -132
- package/dist/connection/tabs.js.map +1 -1
- package/dist/constants.d.ts +209 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +232 -0
- package/dist/constants.js.map +1 -0
- package/dist/daemon/__tests__/ipcServer.contract.test.d.ts +23 -0
- package/dist/daemon/__tests__/ipcServer.contract.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/ipcServer.contract.test.js +401 -0
- package/dist/daemon/__tests__/ipcServer.contract.test.js.map +1 -0
- package/dist/daemon/__tests__/launcher.unit.test.d.ts +8 -0
- package/dist/daemon/__tests__/launcher.unit.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/launcher.unit.test.js +20 -0
- package/dist/daemon/__tests__/launcher.unit.test.js.map +1 -0
- package/dist/daemon/ipcServer.d.ts +83 -0
- package/dist/daemon/ipcServer.d.ts.map +1 -0
- package/dist/daemon/ipcServer.js +670 -0
- package/dist/daemon/ipcServer.js.map +1 -0
- package/dist/daemon/launcher.d.ts +31 -0
- package/dist/daemon/launcher.d.ts.map +1 -0
- package/dist/daemon/launcher.js +137 -0
- package/dist/daemon/launcher.js.map +1 -0
- package/dist/daemon/startSession.d.ts +51 -0
- package/dist/daemon/startSession.d.ts.map +1 -0
- package/dist/daemon/startSession.js +149 -0
- package/dist/daemon/startSession.js.map +1 -0
- package/dist/daemon/worker.d.ts +18 -0
- package/dist/daemon/worker.d.ts.map +1 -0
- package/dist/daemon/worker.js +623 -0
- package/dist/daemon/worker.js.map +1 -0
- package/dist/daemon/workerIpc.d.ts +33 -0
- package/dist/daemon/workerIpc.d.ts.map +1 -0
- package/dist/daemon/workerIpc.js +8 -0
- package/dist/daemon/workerIpc.js.map +1 -0
- package/dist/daemon.d.ts +10 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +32 -0
- package/dist/daemon.js.map +1 -0
- package/dist/index.js +41 -420
- package/dist/index.js.map +1 -1
- package/dist/ipc/__tests__/client.contract.test.d.ts +23 -0
- package/dist/ipc/__tests__/client.contract.test.d.ts.map +1 -0
- package/dist/ipc/__tests__/client.contract.test.js +466 -0
- package/dist/ipc/__tests__/client.contract.test.js.map +1 -0
- package/dist/ipc/client.d.ts +109 -0
- package/dist/ipc/client.d.ts.map +1 -0
- package/dist/ipc/client.js +220 -0
- package/dist/ipc/client.js.map +1 -0
- package/dist/ipc/commands.d.ts +208 -0
- package/dist/ipc/commands.d.ts.map +1 -0
- package/dist/ipc/commands.js +69 -0
- package/dist/ipc/commands.js.map +1 -0
- package/dist/ipc/responseValidator.d.ts +40 -0
- package/dist/ipc/responseValidator.d.ts.map +1 -0
- package/dist/ipc/responseValidator.js +28 -0
- package/dist/ipc/responseValidator.js.map +1 -0
- package/dist/ipc/types.d.ts +193 -0
- package/dist/ipc/types.d.ts.map +1 -0
- package/dist/ipc/types.js +21 -0
- package/dist/ipc/types.js.map +1 -0
- package/dist/session/BdgSession.d.ts +71 -4
- package/dist/session/BdgSession.d.ts.map +1 -1
- package/dist/session/BdgSession.js +173 -75
- package/dist/session/BdgSession.js.map +1 -1
- package/dist/session/chrome.d.ts +46 -0
- package/dist/session/chrome.d.ts.map +1 -0
- package/dist/session/chrome.js +92 -0
- package/dist/session/chrome.js.map +1 -0
- package/dist/session/cleanup.d.ts +45 -0
- package/dist/session/cleanup.d.ts.map +1 -0
- package/dist/session/cleanup.js +230 -0
- package/dist/session/cleanup.js.map +1 -0
- package/dist/session/index.d.ts +15 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +23 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/lock.d.ts +57 -0
- package/dist/session/lock.d.ts.map +1 -0
- package/dist/session/lock.js +154 -0
- package/dist/session/lock.js.map +1 -0
- package/dist/session/metadata.d.ts +59 -0
- package/dist/session/metadata.d.ts.map +1 -0
- package/dist/session/metadata.js +71 -0
- package/dist/session/metadata.js.map +1 -0
- package/dist/session/output.d.ts +18 -0
- package/dist/session/output.d.ts.map +1 -0
- package/dist/session/output.js +24 -0
- package/dist/session/output.js.map +1 -0
- package/dist/session/paths.d.ts +73 -0
- package/dist/session/paths.d.ts.map +1 -0
- package/dist/session/paths.js +84 -0
- package/dist/session/paths.js.map +1 -0
- package/dist/session/pid.d.ts +40 -0
- package/dist/session/pid.d.ts.map +1 -0
- package/dist/session/pid.js +73 -0
- package/dist/session/pid.js.map +1 -0
- package/dist/session/process.d.ts +45 -0
- package/dist/session/process.d.ts.map +1 -0
- package/dist/session/process.js +88 -0
- package/dist/session/process.js.map +1 -0
- package/dist/types.d.ts +114 -38
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/__tests__/filters.unit.test.d.ts +2 -0
- package/dist/utils/__tests__/filters.unit.test.d.ts.map +1 -0
- package/dist/utils/__tests__/filters.unit.test.js +239 -0
- package/dist/utils/__tests__/filters.unit.test.js.map +1 -0
- package/dist/utils/__tests__/session.contract.test.d.ts +2 -0
- package/dist/utils/__tests__/session.contract.test.d.ts.map +1 -0
- package/dist/utils/__tests__/session.contract.test.js +234 -0
- package/dist/utils/__tests__/session.contract.test.js.map +1 -0
- package/dist/utils/atomicFile.d.ts +38 -0
- package/dist/utils/atomicFile.d.ts.map +1 -0
- package/dist/utils/atomicFile.js +71 -0
- package/dist/utils/atomicFile.js.map +1 -0
- package/dist/utils/cdpHandlers.d.ts +31 -0
- package/dist/utils/cdpHandlers.d.ts.map +1 -0
- package/dist/utils/cdpHandlers.js +38 -0
- package/dist/utils/cdpHandlers.js.map +1 -0
- package/dist/utils/chromeDiagnostics.d.ts +28 -0
- package/dist/utils/chromeDiagnostics.d.ts.map +1 -0
- package/dist/utils/chromeDiagnostics.js +88 -0
- package/dist/utils/chromeDiagnostics.js.map +1 -0
- package/dist/utils/errors.d.ts +82 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +88 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/exitCodes.d.ts +32 -0
- package/dist/utils/exitCodes.d.ts.map +1 -0
- package/dist/utils/exitCodes.js +36 -0
- package/dist/utils/exitCodes.js.map +1 -0
- package/dist/utils/filters.d.ts +108 -0
- package/dist/utils/filters.d.ts.map +1 -0
- package/dist/utils/filters.js +304 -0
- package/dist/utils/filters.js.map +1 -0
- package/dist/utils/formatters/network.d.ts +23 -0
- package/dist/utils/formatters/network.d.ts.map +1 -0
- package/dist/utils/formatters/network.js +35 -0
- package/dist/utils/formatters/network.js.map +1 -0
- package/dist/utils/http.d.ts +34 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +48 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/logger.d.ts +42 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +43 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/objects.d.ts +23 -0
- package/dist/utils/objects.d.ts.map +1 -0
- package/dist/utils/objects.js +25 -0
- package/dist/utils/objects.js.map +1 -0
- package/dist/utils/url/safeParseUrl.d.ts +63 -0
- package/dist/utils/url/safeParseUrl.d.ts.map +1 -0
- package/dist/utils/url/safeParseUrl.js +84 -0
- package/dist/utils/url/safeParseUrl.js.map +1 -0
- package/dist/utils/url.d.ts +63 -1
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +152 -2
- package/dist/utils/url.js.map +1 -1
- package/dist/utils/validation.d.ts +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/version.d.ts +3 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +27 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +57 -10
- package/dist/utils/pageLoad.d.ts +0 -21
- package/dist/utils/pageLoad.d.ts.map +0 -1
- package/dist/utils/pageLoad.js +0 -85
- package/dist/utils/pageLoad.js.map +0 -1
- package/dist/utils/session.d.ts +0 -104
- package/dist/utils/session.d.ts.map +0 -1
- package/dist/utils/session.js +0 -244
- package/dist/utils/session.js.map +0 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FakeClock - Deterministic timer control for tests
|
|
3
|
+
*
|
|
4
|
+
* Simulates setTimeout/setInterval and queueMicrotask to enable
|
|
5
|
+
* deterministic testing of async code with timeouts.
|
|
6
|
+
*
|
|
7
|
+
* Key features:
|
|
8
|
+
* - Separate macrotask (timers) and microtask (promise callbacks) queues
|
|
9
|
+
* - Loop-based flush() drains microtasks until completely empty
|
|
10
|
+
* - tick() advances timers without draining microtasks
|
|
11
|
+
* - tickAsync() advances timers AND drains microtasks (for timeout tests)
|
|
12
|
+
*/
|
|
13
|
+
export declare class FakeClock {
|
|
14
|
+
private currentTime;
|
|
15
|
+
private nextTimerId;
|
|
16
|
+
private timerTasks;
|
|
17
|
+
private microtaskQueue;
|
|
18
|
+
/**
|
|
19
|
+
* Get current fake time in milliseconds
|
|
20
|
+
*/
|
|
21
|
+
now(): number;
|
|
22
|
+
/**
|
|
23
|
+
* Schedule a one-time timer (setTimeout)
|
|
24
|
+
*/
|
|
25
|
+
setTimeout(callback: () => void, delay: number): NodeJS.Timeout;
|
|
26
|
+
/**
|
|
27
|
+
* Schedule a repeating timer (setInterval)
|
|
28
|
+
*/
|
|
29
|
+
setInterval(callback: () => void, interval: number): NodeJS.Timeout;
|
|
30
|
+
/**
|
|
31
|
+
* Cancel a timer (clearTimeout/clearInterval)
|
|
32
|
+
*/
|
|
33
|
+
clearTimer(id: NodeJS.Timeout): void;
|
|
34
|
+
/**
|
|
35
|
+
* Queue a microtask (queueMicrotask, promise callbacks)
|
|
36
|
+
*/
|
|
37
|
+
queueMicrotask(callback: () => void): void;
|
|
38
|
+
/**
|
|
39
|
+
* Advance time and execute all timers that should fire
|
|
40
|
+
* Does NOT drain microtasks - use flush() or tickAsync() for that
|
|
41
|
+
*/
|
|
42
|
+
tick(ms: number): void;
|
|
43
|
+
/**
|
|
44
|
+
* Drain the microtask queue completely
|
|
45
|
+
* CRITICAL: Loops until queue is empty to handle cascading microtasks
|
|
46
|
+
* (e.g., rejection handler that schedules another microtask)
|
|
47
|
+
*/
|
|
48
|
+
flush(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Advance time AND drain all microtasks
|
|
51
|
+
* Use this for timeout tests where rejections propagate via microtasks
|
|
52
|
+
*/
|
|
53
|
+
tickAsync(ms: number): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Get number of pending timers
|
|
56
|
+
*/
|
|
57
|
+
getPendingTimers(): number;
|
|
58
|
+
/**
|
|
59
|
+
* Get number of queued microtasks
|
|
60
|
+
*/
|
|
61
|
+
getPendingMicrotasks(): number;
|
|
62
|
+
/**
|
|
63
|
+
* Reset clock to initial state
|
|
64
|
+
*/
|
|
65
|
+
reset(): void;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=FakeClock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FakeClock.d.ts","sourceRoot":"","sources":["../../src/__testutils__/FakeClock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,cAAc,CAAyB;IAE/C;;OAEG;IACH,GAAG,IAAI,MAAM;IAIb;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO;IAW/D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO;IAYnE;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAIpC;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI1C;;;OAGG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAuBtB;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAUb;;;OAGG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1C;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FakeClock - Deterministic timer control for tests
|
|
3
|
+
*
|
|
4
|
+
* Simulates setTimeout/setInterval and queueMicrotask to enable
|
|
5
|
+
* deterministic testing of async code with timeouts.
|
|
6
|
+
*
|
|
7
|
+
* Key features:
|
|
8
|
+
* - Separate macrotask (timers) and microtask (promise callbacks) queues
|
|
9
|
+
* - Loop-based flush() drains microtasks until completely empty
|
|
10
|
+
* - tick() advances timers without draining microtasks
|
|
11
|
+
* - tickAsync() advances timers AND drains microtasks (for timeout tests)
|
|
12
|
+
*/
|
|
13
|
+
export class FakeClock {
|
|
14
|
+
currentTime = 0;
|
|
15
|
+
nextTimerId = 1;
|
|
16
|
+
timerTasks = new Map();
|
|
17
|
+
microtaskQueue = [];
|
|
18
|
+
/**
|
|
19
|
+
* Get current fake time in milliseconds
|
|
20
|
+
*/
|
|
21
|
+
now() {
|
|
22
|
+
return this.currentTime;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Schedule a one-time timer (setTimeout)
|
|
26
|
+
*/
|
|
27
|
+
setTimeout(callback, delay) {
|
|
28
|
+
const id = this.nextTimerId++;
|
|
29
|
+
this.timerTasks.set(id, {
|
|
30
|
+
id,
|
|
31
|
+
callback,
|
|
32
|
+
triggerAt: this.currentTime + delay,
|
|
33
|
+
type: 'timeout',
|
|
34
|
+
});
|
|
35
|
+
return id;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Schedule a repeating timer (setInterval)
|
|
39
|
+
*/
|
|
40
|
+
setInterval(callback, interval) {
|
|
41
|
+
const id = this.nextTimerId++;
|
|
42
|
+
this.timerTasks.set(id, {
|
|
43
|
+
id,
|
|
44
|
+
callback,
|
|
45
|
+
triggerAt: this.currentTime + interval,
|
|
46
|
+
interval,
|
|
47
|
+
type: 'interval',
|
|
48
|
+
});
|
|
49
|
+
return id;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Cancel a timer (clearTimeout/clearInterval)
|
|
53
|
+
*/
|
|
54
|
+
clearTimer(id) {
|
|
55
|
+
this.timerTasks.delete(id);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Queue a microtask (queueMicrotask, promise callbacks)
|
|
59
|
+
*/
|
|
60
|
+
queueMicrotask(callback) {
|
|
61
|
+
this.microtaskQueue.push(callback);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Advance time and execute all timers that should fire
|
|
65
|
+
* Does NOT drain microtasks - use flush() or tickAsync() for that
|
|
66
|
+
*/
|
|
67
|
+
tick(ms) {
|
|
68
|
+
this.currentTime += ms;
|
|
69
|
+
// Find and execute all timers that should fire
|
|
70
|
+
const tasksToFire = Array.from(this.timerTasks.values())
|
|
71
|
+
.filter((task) => task.triggerAt <= this.currentTime)
|
|
72
|
+
.sort((a, b) => a.triggerAt - b.triggerAt);
|
|
73
|
+
for (const task of tasksToFire) {
|
|
74
|
+
// Remove one-time timers
|
|
75
|
+
if (task.type === 'timeout') {
|
|
76
|
+
this.timerTasks.delete(task.id);
|
|
77
|
+
}
|
|
78
|
+
// Reschedule intervals
|
|
79
|
+
else if (task.interval !== undefined) {
|
|
80
|
+
task.triggerAt = this.currentTime + task.interval;
|
|
81
|
+
}
|
|
82
|
+
// Execute callback
|
|
83
|
+
task.callback();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Drain the microtask queue completely
|
|
88
|
+
* CRITICAL: Loops until queue is empty to handle cascading microtasks
|
|
89
|
+
* (e.g., rejection handler that schedules another microtask)
|
|
90
|
+
*/
|
|
91
|
+
flush() {
|
|
92
|
+
// Loop-based drainage handles cascading microtasks
|
|
93
|
+
while (this.microtaskQueue.length > 0) {
|
|
94
|
+
const task = this.microtaskQueue.shift();
|
|
95
|
+
if (task) {
|
|
96
|
+
task(); // May enqueue more microtasks - loop continues
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Advance time AND drain all microtasks
|
|
102
|
+
* Use this for timeout tests where rejections propagate via microtasks
|
|
103
|
+
*/
|
|
104
|
+
async tickAsync(ms) {
|
|
105
|
+
this.tick(ms);
|
|
106
|
+
this.flush();
|
|
107
|
+
// Allow Node's event loop to process any actual promises
|
|
108
|
+
await Promise.resolve();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get number of pending timers
|
|
112
|
+
*/
|
|
113
|
+
getPendingTimers() {
|
|
114
|
+
return this.timerTasks.size;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get number of queued microtasks
|
|
118
|
+
*/
|
|
119
|
+
getPendingMicrotasks() {
|
|
120
|
+
return this.microtaskQueue.length;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Reset clock to initial state
|
|
124
|
+
*/
|
|
125
|
+
reset() {
|
|
126
|
+
this.currentTime = 0;
|
|
127
|
+
this.nextTimerId = 1;
|
|
128
|
+
this.timerTasks.clear();
|
|
129
|
+
this.microtaskQueue = [];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=FakeClock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FakeClock.js","sourceRoot":"","sources":["../../src/__testutils__/FakeClock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FakeWebSocket - Complete WebSocket boundary fake for testing
|
|
3
|
+
*
|
|
4
|
+
* Mimics the `ws` library API to enable contract testing of CDPConnection
|
|
5
|
+
* without network I/O.
|
|
6
|
+
*
|
|
7
|
+
* Key features:
|
|
8
|
+
* - Full ws API compatibility (readyState, ping, pong, send, close, terminate)
|
|
9
|
+
* - Event emitters (open, message, close, error, ping, pong)
|
|
10
|
+
* - Test control methods (simulate*) for driving state from tests
|
|
11
|
+
* - Defensive copies in verification methods (getSentMessages) prevent mutation
|
|
12
|
+
*/
|
|
13
|
+
import { EventEmitter } from 'node:events';
|
|
14
|
+
export declare const CONNECTING = 0;
|
|
15
|
+
export declare const OPEN = 1;
|
|
16
|
+
export declare const CLOSING = 2;
|
|
17
|
+
export declare const CLOSED = 3;
|
|
18
|
+
type ReadyState = typeof CONNECTING | typeof OPEN | typeof CLOSING | typeof CLOSED;
|
|
19
|
+
export declare class FakeWebSocket extends EventEmitter {
|
|
20
|
+
readyState: ReadyState;
|
|
21
|
+
private sentMessages;
|
|
22
|
+
private pingSentCount;
|
|
23
|
+
private pongSentCount;
|
|
24
|
+
private closeCode;
|
|
25
|
+
private closeReason;
|
|
26
|
+
static readonly CONNECTING = 0;
|
|
27
|
+
static readonly OPEN = 1;
|
|
28
|
+
static readonly CLOSING = 2;
|
|
29
|
+
static readonly CLOSED = 3;
|
|
30
|
+
constructor();
|
|
31
|
+
/**
|
|
32
|
+
* ws API - Send a message
|
|
33
|
+
* Throws if connection is not OPEN
|
|
34
|
+
*/
|
|
35
|
+
send(data: string, callback?: (err?: Error) => void): void;
|
|
36
|
+
/**
|
|
37
|
+
* ws API - Send a ping frame
|
|
38
|
+
*/
|
|
39
|
+
ping(callback?: (err?: Error) => void): void;
|
|
40
|
+
/**
|
|
41
|
+
* ws API - Send a pong frame (usually in response to ping)
|
|
42
|
+
*/
|
|
43
|
+
pong(callback?: (err?: Error) => void): void;
|
|
44
|
+
/**
|
|
45
|
+
* ws API - Close connection gracefully
|
|
46
|
+
* Transitions: OPEN \> CLOSING \> CLOSED
|
|
47
|
+
*/
|
|
48
|
+
close(code?: number, reason?: string): void;
|
|
49
|
+
/**
|
|
50
|
+
* ws API - Forceful close without handshake
|
|
51
|
+
* Immediately transitions to CLOSED
|
|
52
|
+
*/
|
|
53
|
+
terminate(): void;
|
|
54
|
+
/**
|
|
55
|
+
* TEST CONTROL - Simulate connection open
|
|
56
|
+
* Transitions: CONNECTING \> OPEN, emits 'open'
|
|
57
|
+
*/
|
|
58
|
+
simulateOpen(): void;
|
|
59
|
+
/**
|
|
60
|
+
* TEST CONTROL - Simulate receiving a message
|
|
61
|
+
* Only valid in OPEN state
|
|
62
|
+
*/
|
|
63
|
+
simulateMessage(data: string | Buffer): void;
|
|
64
|
+
/**
|
|
65
|
+
* TEST CONTROL - Simulate connection close
|
|
66
|
+
* Transitions to CLOSED and emits 'close'
|
|
67
|
+
*/
|
|
68
|
+
simulateClose(code: number, reason: string): void;
|
|
69
|
+
/**
|
|
70
|
+
* TEST CONTROL - Simulate connection error
|
|
71
|
+
* Emits 'error' event
|
|
72
|
+
*/
|
|
73
|
+
simulateError(error: Error): void;
|
|
74
|
+
/**
|
|
75
|
+
* TEST CONTROL - Simulate receiving a pong frame
|
|
76
|
+
* Emits 'pong' event (for keepalive tests)
|
|
77
|
+
*/
|
|
78
|
+
simulatePong(data?: Buffer): void;
|
|
79
|
+
/**
|
|
80
|
+
* VERIFICATION - Get sent messages (defensive copy)
|
|
81
|
+
* Returns shallow copy to prevent accidental mutation between assertions
|
|
82
|
+
*/
|
|
83
|
+
getSentMessages(): string[];
|
|
84
|
+
/**
|
|
85
|
+
* VERIFICATION - Get number of pings sent
|
|
86
|
+
*/
|
|
87
|
+
getPingSent(): number;
|
|
88
|
+
/**
|
|
89
|
+
* VERIFICATION - Get number of pongs sent
|
|
90
|
+
*/
|
|
91
|
+
getPongSent(): number;
|
|
92
|
+
/**
|
|
93
|
+
* VERIFICATION - Get close code (if closed)
|
|
94
|
+
*/
|
|
95
|
+
getCloseCode(): number | null;
|
|
96
|
+
/**
|
|
97
|
+
* VERIFICATION - Get close reason (if closed)
|
|
98
|
+
*/
|
|
99
|
+
getCloseReason(): string | null;
|
|
100
|
+
/**
|
|
101
|
+
* TEST CONTROL - Reset to initial state
|
|
102
|
+
*/
|
|
103
|
+
reset(): void;
|
|
104
|
+
}
|
|
105
|
+
export {};
|
|
106
|
+
//# sourceMappingURL=FakeWebSocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FakeWebSocket.d.ts","sourceRoot":"","sources":["../../src/__testutils__/FakeWebSocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,IAAI,IAAI,CAAC;AACtB,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,MAAM,IAAI,CAAC;AAExB,KAAK,UAAU,GAAG,OAAO,UAAU,GAAG,OAAO,IAAI,GAAG,OAAO,OAAO,GAAG,OAAO,MAAM,CAAC;AAEnF,qBAAa,aAAc,SAAQ,YAAY;IAEtC,UAAU,EAAE,UAAU,CAAc;IAG3C,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAuB;IAG1C,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAc;IACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAQ;IAC5B,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAW;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAU;;IAMhC;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAiB1D;;OAEG;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAgB5C;;OAEG;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAe5C;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAe3C;;;OAGG;IACH,SAAS,IAAI,IAAI;IAWjB;;;OAGG;IACH,YAAY,IAAI,IAAI;IASpB;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5C;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAWjD;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIjC;;;OAGG;IACH,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAQjC;;;OAGG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,KAAK,IAAI,IAAI;CASd"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FakeWebSocket - Complete WebSocket boundary fake for testing
|
|
3
|
+
*
|
|
4
|
+
* Mimics the `ws` library API to enable contract testing of CDPConnection
|
|
5
|
+
* without network I/O.
|
|
6
|
+
*
|
|
7
|
+
* Key features:
|
|
8
|
+
* - Full ws API compatibility (readyState, ping, pong, send, close, terminate)
|
|
9
|
+
* - Event emitters (open, message, close, error, ping, pong)
|
|
10
|
+
* - Test control methods (simulate*) for driving state from tests
|
|
11
|
+
* - Defensive copies in verification methods (getSentMessages) prevent mutation
|
|
12
|
+
*/
|
|
13
|
+
import { EventEmitter } from 'node:events';
|
|
14
|
+
// ws library readyState constants
|
|
15
|
+
export const CONNECTING = 0;
|
|
16
|
+
export const OPEN = 1;
|
|
17
|
+
export const CLOSING = 2;
|
|
18
|
+
export const CLOSED = 3;
|
|
19
|
+
export class FakeWebSocket extends EventEmitter {
|
|
20
|
+
// ws API - readyState property
|
|
21
|
+
readyState = CONNECTING;
|
|
22
|
+
// Internal state
|
|
23
|
+
sentMessages = [];
|
|
24
|
+
pingSentCount = 0;
|
|
25
|
+
pongSentCount = 0;
|
|
26
|
+
closeCode = null;
|
|
27
|
+
closeReason = null;
|
|
28
|
+
// ws API constants
|
|
29
|
+
static CONNECTING = CONNECTING;
|
|
30
|
+
static OPEN = OPEN;
|
|
31
|
+
static CLOSING = CLOSING;
|
|
32
|
+
static CLOSED = CLOSED;
|
|
33
|
+
constructor() {
|
|
34
|
+
super();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* ws API - Send a message
|
|
38
|
+
* Throws if connection is not OPEN
|
|
39
|
+
*/
|
|
40
|
+
send(data, callback) {
|
|
41
|
+
if (this.readyState !== OPEN) {
|
|
42
|
+
const err = new Error('WebSocket is not open: readyState ' + this.readyState);
|
|
43
|
+
if (callback) {
|
|
44
|
+
callback(err);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.sentMessages.push(data);
|
|
52
|
+
if (callback) {
|
|
53
|
+
callback();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* ws API - Send a ping frame
|
|
58
|
+
*/
|
|
59
|
+
ping(callback) {
|
|
60
|
+
if (this.readyState !== OPEN) {
|
|
61
|
+
const err = new Error('WebSocket is not open');
|
|
62
|
+
if (callback) {
|
|
63
|
+
callback(err);
|
|
64
|
+
}
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.pingSentCount++;
|
|
68
|
+
this.emit('ping');
|
|
69
|
+
if (callback) {
|
|
70
|
+
callback();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* ws API - Send a pong frame (usually in response to ping)
|
|
75
|
+
*/
|
|
76
|
+
pong(callback) {
|
|
77
|
+
if (this.readyState !== OPEN) {
|
|
78
|
+
const err = new Error('WebSocket is not open');
|
|
79
|
+
if (callback) {
|
|
80
|
+
callback(err);
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
this.pongSentCount++;
|
|
85
|
+
if (callback) {
|
|
86
|
+
callback();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* ws API - Close connection gracefully
|
|
91
|
+
* Transitions: OPEN \> CLOSING \> CLOSED
|
|
92
|
+
*/
|
|
93
|
+
close(code, reason) {
|
|
94
|
+
if (this.readyState === CLOSED || this.readyState === CLOSING) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
this.readyState = CLOSING;
|
|
98
|
+
this.closeCode = code ?? null;
|
|
99
|
+
this.closeReason = reason ?? null;
|
|
100
|
+
// Immediately transition to CLOSED and emit close event
|
|
101
|
+
// In real ws, there's a handshake, but for tests we can be immediate
|
|
102
|
+
this.readyState = CLOSED;
|
|
103
|
+
this.emit('close', code ?? 1000, reason ?? '');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* ws API - Forceful close without handshake
|
|
107
|
+
* Immediately transitions to CLOSED
|
|
108
|
+
*/
|
|
109
|
+
terminate() {
|
|
110
|
+
if (this.readyState === CLOSED) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
this.readyState = CLOSED;
|
|
114
|
+
this.closeCode = 1006;
|
|
115
|
+
this.closeReason = 'Connection terminated';
|
|
116
|
+
this.emit('close', 1006, 'Connection terminated');
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* TEST CONTROL - Simulate connection open
|
|
120
|
+
* Transitions: CONNECTING \> OPEN, emits 'open'
|
|
121
|
+
*/
|
|
122
|
+
simulateOpen() {
|
|
123
|
+
if (this.readyState !== CONNECTING) {
|
|
124
|
+
throw new Error('Can only open from CONNECTING state');
|
|
125
|
+
}
|
|
126
|
+
this.readyState = OPEN;
|
|
127
|
+
this.emit('open');
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* TEST CONTROL - Simulate receiving a message
|
|
131
|
+
* Only valid in OPEN state
|
|
132
|
+
*/
|
|
133
|
+
simulateMessage(data) {
|
|
134
|
+
if (this.readyState !== OPEN) {
|
|
135
|
+
throw new Error('Cannot receive message when not OPEN');
|
|
136
|
+
}
|
|
137
|
+
this.emit('message', data);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* TEST CONTROL - Simulate connection close
|
|
141
|
+
* Transitions to CLOSED and emits 'close'
|
|
142
|
+
*/
|
|
143
|
+
simulateClose(code, reason) {
|
|
144
|
+
if (this.readyState === CLOSED) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
this.readyState = CLOSED;
|
|
148
|
+
this.closeCode = code;
|
|
149
|
+
this.closeReason = reason;
|
|
150
|
+
this.emit('close', code, reason);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* TEST CONTROL - Simulate connection error
|
|
154
|
+
* Emits 'error' event
|
|
155
|
+
*/
|
|
156
|
+
simulateError(error) {
|
|
157
|
+
this.emit('error', error);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* TEST CONTROL - Simulate receiving a pong frame
|
|
161
|
+
* Emits 'pong' event (for keepalive tests)
|
|
162
|
+
*/
|
|
163
|
+
simulatePong(data) {
|
|
164
|
+
if (this.readyState !== OPEN) {
|
|
165
|
+
throw new Error('Cannot receive pong when not OPEN');
|
|
166
|
+
}
|
|
167
|
+
this.emit('pong', data);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* VERIFICATION - Get sent messages (defensive copy)
|
|
171
|
+
* Returns shallow copy to prevent accidental mutation between assertions
|
|
172
|
+
*/
|
|
173
|
+
getSentMessages() {
|
|
174
|
+
return [...this.sentMessages];
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* VERIFICATION - Get number of pings sent
|
|
178
|
+
*/
|
|
179
|
+
getPingSent() {
|
|
180
|
+
return this.pingSentCount;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* VERIFICATION - Get number of pongs sent
|
|
184
|
+
*/
|
|
185
|
+
getPongSent() {
|
|
186
|
+
return this.pongSentCount;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* VERIFICATION - Get close code (if closed)
|
|
190
|
+
*/
|
|
191
|
+
getCloseCode() {
|
|
192
|
+
return this.closeCode;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* VERIFICATION - Get close reason (if closed)
|
|
196
|
+
*/
|
|
197
|
+
getCloseReason() {
|
|
198
|
+
return this.closeReason;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* TEST CONTROL - Reset to initial state
|
|
202
|
+
*/
|
|
203
|
+
reset() {
|
|
204
|
+
this.readyState = CONNECTING;
|
|
205
|
+
this.sentMessages = [];
|
|
206
|
+
this.pingSentCount = 0;
|
|
207
|
+
this.pongSentCount = 0;
|
|
208
|
+
this.closeCode = null;
|
|
209
|
+
this.closeReason = null;
|
|
210
|
+
this.removeAllListeners();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=FakeWebSocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FakeWebSocket.js","sourceRoot":"","sources":["../../src/__testutils__/FakeWebSocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* assertions - Custom assertion helpers for contract tests
|
|
3
|
+
*
|
|
4
|
+
* Provides ergonomic assertions for common test patterns.
|
|
5
|
+
*/
|
|
6
|
+
import type { CDPMessage } from '@/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Poll a condition until it becomes true or timeout
|
|
9
|
+
* Useful for eventually-consistent assertions
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* await assertEventually(() => ws.getSentMessages().length > 0, 1000);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare function assertEventually(fn: () => boolean, timeoutMs: number, message?: string): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Assert deep equality for CDP messages
|
|
19
|
+
* Handles partial matching for convenience
|
|
20
|
+
*/
|
|
21
|
+
export declare function assertCDPMessage(actual: CDPMessage, expected: Partial<CDPMessage>): void;
|
|
22
|
+
/**
|
|
23
|
+
* Assert that async function throws with specific pattern
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* await assertThrowsAsync(
|
|
27
|
+
* () => cdp.send('Invalid.method'),
|
|
28
|
+
* /timeout/
|
|
29
|
+
* );
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function assertThrowsAsync(fn: () => Promise<unknown>, pattern: RegExp | string, message?: string): Promise<void>;
|
|
33
|
+
//# sourceMappingURL=assertions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../src/__testutils__/assertions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,MAAM,OAAO,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAKxF;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC1B,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* assertions - Custom assertion helpers for contract tests
|
|
3
|
+
*
|
|
4
|
+
* Provides ergonomic assertions for common test patterns.
|
|
5
|
+
*/
|
|
6
|
+
import assert from 'node:assert/strict';
|
|
7
|
+
/**
|
|
8
|
+
* Poll a condition until it becomes true or timeout
|
|
9
|
+
* Useful for eventually-consistent assertions
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* await assertEventually(() => ws.getSentMessages().length > 0, 1000);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export async function assertEventually(fn, timeoutMs, message) {
|
|
17
|
+
const start = Date.now();
|
|
18
|
+
while (Date.now() - start < timeoutMs) {
|
|
19
|
+
if (fn()) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
23
|
+
}
|
|
24
|
+
throw new Error(message ?? `Condition not met within ${timeoutMs}ms`);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Assert deep equality for CDP messages
|
|
28
|
+
* Handles partial matching for convenience
|
|
29
|
+
*/
|
|
30
|
+
export function assertCDPMessage(actual, expected) {
|
|
31
|
+
const actualRecord = actual;
|
|
32
|
+
for (const [key, value] of Object.entries(expected)) {
|
|
33
|
+
assert.deepEqual(actualRecord[key], value, `CDP message field '${key}' mismatch`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Assert that async function throws with specific pattern
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* await assertThrowsAsync(
|
|
41
|
+
* () => cdp.send('Invalid.method'),
|
|
42
|
+
* /timeout/
|
|
43
|
+
* );
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export async function assertThrowsAsync(fn, pattern, message) {
|
|
47
|
+
try {
|
|
48
|
+
await fn();
|
|
49
|
+
throw new Error(message ?? `Expected function to throw matching ${pattern}`);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
53
|
+
const regex = typeof pattern === 'string' ? new RegExp(pattern) : pattern;
|
|
54
|
+
assert.match(errorMessage, regex, message);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=assertions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/__testutils__/assertions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAIxC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAiB,EACjB,SAAiB,EACjB,OAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;QACtC,IAAI,EAAE,EAAE,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,4BAA4B,SAAS,IAAI,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAkB,EAAE,QAA6B;IAChF,MAAM,YAAY,GAAG,MAA4C,CAAC;IAClE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,sBAAsB,GAAG,YAAY,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAA0B,EAC1B,OAAwB,EACxB,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,uCAAuC,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1E,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test utilities - Re-export all test helpers
|
|
3
|
+
*
|
|
4
|
+
* Single import point for all test utilities:
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { FakeClock, FakeWebSocket, useFakeClock, ... } from '../__testutils__/index.js';
|
|
7
|
+
* ```
|
|
8
|
+
*/
|
|
9
|
+
export { FakeClock } from './FakeClock.js';
|
|
10
|
+
export { FakeWebSocket, CONNECTING, OPEN, CLOSING, CLOSED } from './FakeWebSocket.js';
|
|
11
|
+
export { useFakeClock, type ClockHelper } from './testClock.js';
|
|
12
|
+
export { mockProcessAlive, restoreProcessAlive, isProcessMocked } from './testProcess.js';
|
|
13
|
+
export { assertEventually, assertCDPMessage, assertThrowsAsync } from './assertions.js';
|
|
14
|
+
export { createMockCDPMessage, createMockWebSocketUrl } from './testFixtures.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test utilities - Re-export all test helpers
|
|
3
|
+
*
|
|
4
|
+
* Single import point for all test utilities:
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { FakeClock, FakeWebSocket, useFakeClock, ... } from '../__testutils__/index.js';
|
|
7
|
+
* ```
|
|
8
|
+
*/
|
|
9
|
+
export { FakeClock } from './FakeClock.js';
|
|
10
|
+
export { FakeWebSocket, CONNECTING, OPEN, CLOSING, CLOSED } from './FakeWebSocket.js';
|
|
11
|
+
export { useFakeClock } from './testClock.js';
|
|
12
|
+
export { mockProcessAlive, restoreProcessAlive, isProcessMocked } from './testProcess.js';
|
|
13
|
+
export { assertEventually, assertCDPMessage, assertThrowsAsync } from './assertions.js';
|
|
14
|
+
export { createMockCDPMessage, createMockWebSocketUrl } from './testFixtures.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|