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,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe URL parsing utilities with automatic protocol detection.
|
|
3
|
+
*
|
|
4
|
+
* Provides centralized URL parsing that gracefully handles:
|
|
5
|
+
* - Missing protocols (adds http://)
|
|
6
|
+
* - Malformed URLs (returns null)
|
|
7
|
+
* - Localhost and bare hostnames
|
|
8
|
+
*
|
|
9
|
+
* WHY: Eliminates duplicated try/catch blocks across 4+ files
|
|
10
|
+
* (filters.ts, url.ts, collectors, connection layer).
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Safely parse a URL string with automatic protocol detection.
|
|
14
|
+
*
|
|
15
|
+
* Attempts to parse the URL in two passes:
|
|
16
|
+
* 1. As-is (supports full URLs with protocols)
|
|
17
|
+
* 2. With 'http://' prefix (supports localhost:3000, example.com, etc.)
|
|
18
|
+
*
|
|
19
|
+
* @param input - URL string to parse (may lack protocol)
|
|
20
|
+
* @returns Parsed URL object, or null if parsing fails both attempts
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* safeParseUrl('https://example.com') // → URL { ... }
|
|
25
|
+
* safeParseUrl('localhost:3000') // → URL { protocol: 'http:', ... }
|
|
26
|
+
* safeParseUrl('example.com/path') // → URL { protocol: 'http:', ... }
|
|
27
|
+
* safeParseUrl('not a url') // → null
|
|
28
|
+
* safeParseUrl('file:///path/to/file.html') // → URL { protocol: 'file:', ... }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function safeParseUrl(input: string): URL | null;
|
|
32
|
+
/**
|
|
33
|
+
* Extract hostname from a URL string safely.
|
|
34
|
+
*
|
|
35
|
+
* @param input - URL string to extract hostname from
|
|
36
|
+
* @returns Hostname (e.g., 'example.com'), or original input if parsing fails
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* extractHostname('https://example.com/path') // → 'example.com'
|
|
41
|
+
* extractHostname('localhost:3000') // → 'localhost'
|
|
42
|
+
* extractHostname('invalid') // → 'invalid'
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function extractHostname(input: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* Extract hostname with pathname from a URL string safely.
|
|
48
|
+
*
|
|
49
|
+
* Useful for pattern matching that needs both hostname and path segments.
|
|
50
|
+
*
|
|
51
|
+
* @param input - URL string to extract hostname+pathname from
|
|
52
|
+
* @returns Hostname with pathname (e.g., 'example.com/api/users'), or original input if parsing fails
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* extractHostnameWithPath('https://api.example.com/v1/users?id=123')
|
|
57
|
+
* // → 'api.example.com/v1/users'
|
|
58
|
+
* extractHostnameWithPath('localhost:3000/dashboard')
|
|
59
|
+
* // → 'localhost/dashboard'
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function extractHostnameWithPath(input: string): string;
|
|
63
|
+
//# sourceMappingURL=safeParseUrl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safeParseUrl.d.ts","sourceRoot":"","sources":["../../../src/utils/url/safeParseUrl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAatD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe URL parsing utilities with automatic protocol detection.
|
|
3
|
+
*
|
|
4
|
+
* Provides centralized URL parsing that gracefully handles:
|
|
5
|
+
* - Missing protocols (adds http://)
|
|
6
|
+
* - Malformed URLs (returns null)
|
|
7
|
+
* - Localhost and bare hostnames
|
|
8
|
+
*
|
|
9
|
+
* WHY: Eliminates duplicated try/catch blocks across 4+ files
|
|
10
|
+
* (filters.ts, url.ts, collectors, connection layer).
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Safely parse a URL string with automatic protocol detection.
|
|
14
|
+
*
|
|
15
|
+
* Attempts to parse the URL in two passes:
|
|
16
|
+
* 1. As-is (supports full URLs with protocols)
|
|
17
|
+
* 2. With 'http://' prefix (supports localhost:3000, example.com, etc.)
|
|
18
|
+
*
|
|
19
|
+
* @param input - URL string to parse (may lack protocol)
|
|
20
|
+
* @returns Parsed URL object, or null if parsing fails both attempts
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* safeParseUrl('https://example.com') // → URL { ... }
|
|
25
|
+
* safeParseUrl('localhost:3000') // → URL { protocol: 'http:', ... }
|
|
26
|
+
* safeParseUrl('example.com/path') // → URL { protocol: 'http:', ... }
|
|
27
|
+
* safeParseUrl('not a url') // → null
|
|
28
|
+
* safeParseUrl('file:///path/to/file.html') // → URL { protocol: 'file:', ... }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export function safeParseUrl(input) {
|
|
32
|
+
// First attempt: parse as-is (handles full URLs with protocols)
|
|
33
|
+
try {
|
|
34
|
+
return new URL(input);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Second attempt: add http:// prefix for protocol-less URLs
|
|
38
|
+
try {
|
|
39
|
+
return new URL(`http://${input}`);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Both attempts failed - invalid URL
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Extract hostname from a URL string safely.
|
|
49
|
+
*
|
|
50
|
+
* @param input - URL string to extract hostname from
|
|
51
|
+
* @returns Hostname (e.g., 'example.com'), or original input if parsing fails
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* extractHostname('https://example.com/path') // → 'example.com'
|
|
56
|
+
* extractHostname('localhost:3000') // → 'localhost'
|
|
57
|
+
* extractHostname('invalid') // → 'invalid'
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export function extractHostname(input) {
|
|
61
|
+
const parsed = safeParseUrl(input);
|
|
62
|
+
return parsed?.hostname ?? input;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Extract hostname with pathname from a URL string safely.
|
|
66
|
+
*
|
|
67
|
+
* Useful for pattern matching that needs both hostname and path segments.
|
|
68
|
+
*
|
|
69
|
+
* @param input - URL string to extract hostname+pathname from
|
|
70
|
+
* @returns Hostname with pathname (e.g., 'example.com/api/users'), or original input if parsing fails
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* extractHostnameWithPath('https://api.example.com/v1/users?id=123')
|
|
75
|
+
* // → 'api.example.com/v1/users'
|
|
76
|
+
* extractHostnameWithPath('localhost:3000/dashboard')
|
|
77
|
+
* // → 'localhost/dashboard'
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export function extractHostnameWithPath(input) {
|
|
81
|
+
const parsed = safeParseUrl(input);
|
|
82
|
+
return parsed ? parsed.hostname + parsed.pathname : input;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=safeParseUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safeParseUrl.js","sourceRoot":"","sources":["../../../src/utils/url/safeParseUrl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,gEAAgE;IAChE,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;QAC5D,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,MAAM,EAAE,QAAQ,IAAI,KAAK,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5D,CAAC"}
|
package/dist/utils/url.d.ts
CHANGED
|
@@ -1,6 +1,68 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Normalize a URL by adding http:// protocol if missing
|
|
2
|
+
* Normalize a URL by adding http:// protocol if missing.
|
|
3
|
+
*
|
|
3
4
|
* Supports: localhost:3000, example.com, http://localhost, file:// URLs
|
|
5
|
+
* Preserves special browser protocols: about:, chrome:, data:, javascript:, blob:
|
|
6
|
+
*
|
|
7
|
+
* @param url - URL string to normalize
|
|
8
|
+
* @returns Normalized URL with protocol
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* normalizeUrl('localhost:3000') // → 'http://localhost:3000'
|
|
13
|
+
* normalizeUrl('https://example.com') // → 'https://example.com'
|
|
14
|
+
* normalizeUrl('example.com/path') // → 'http://example.com/path'
|
|
15
|
+
* normalizeUrl('about:blank') // → 'about:blank' (unchanged)
|
|
16
|
+
* normalizeUrl('chrome://settings') // → 'chrome://settings' (unchanged)
|
|
17
|
+
* ```
|
|
4
18
|
*/
|
|
5
19
|
export declare function normalizeUrl(url: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Truncate a URL for compact display.
|
|
22
|
+
*
|
|
23
|
+
* Removes www. prefix, shortens long paths with ellipsis, and truncates to maxLength.
|
|
24
|
+
*
|
|
25
|
+
* @param url - URL string to truncate
|
|
26
|
+
* @param maxLength - Maximum length of output (default: 60)
|
|
27
|
+
* @returns Truncated URL for display
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* truncateUrl('https://i.clarity.ms/collect')
|
|
32
|
+
* // → 'clarity.ms/collect'
|
|
33
|
+
* truncateUrl('https://aswpapius.com/api/web-channels/47d7def8-d602-49ec-bfdb-c959b1346774')
|
|
34
|
+
* // → 'aswpapius.com/.../47d7def8'
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function truncateUrl(url: string, maxLength?: number): string;
|
|
38
|
+
/**
|
|
39
|
+
* Truncate console message text (especially stack traces)
|
|
40
|
+
* @param text - The console message text
|
|
41
|
+
* @param maxLines - Maximum number of lines to show (default: 3)
|
|
42
|
+
*/
|
|
43
|
+
export declare function truncateText(text: string, maxLines?: number): string;
|
|
44
|
+
/**
|
|
45
|
+
* Validate that a URL is valid and usable for Chrome navigation.
|
|
46
|
+
*
|
|
47
|
+
* WHY: Provides clear error messages before attempting to launch Chrome.
|
|
48
|
+
*
|
|
49
|
+
* @param url - URL string to validate
|
|
50
|
+
* @returns Object with valid flag and error message if invalid
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const result = validateUrl('not-a-url');
|
|
55
|
+
* if (!result.valid) {
|
|
56
|
+
* console.error(result.error);
|
|
57
|
+
* // → "Invalid URL format: 'not-a-url'"
|
|
58
|
+
* console.error(result.suggestion);
|
|
59
|
+
* // → "URLs must include a valid protocol (http:// or https://)"
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare function validateUrl(url: string): {
|
|
64
|
+
valid: boolean;
|
|
65
|
+
error?: string;
|
|
66
|
+
suggestion?: string;
|
|
67
|
+
};
|
|
6
68
|
//# sourceMappingURL=url.d.ts.map
|
package/dist/utils/url.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBhD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAuCvE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAWvE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CA4CA"}
|
package/dist/utils/url.js
CHANGED
|
@@ -1,11 +1,161 @@
|
|
|
1
|
+
import { safeParseUrl } from './url/safeParseUrl.js';
|
|
1
2
|
/**
|
|
2
|
-
* Normalize a URL by adding http:// protocol if missing
|
|
3
|
+
* Normalize a URL by adding http:// protocol if missing.
|
|
4
|
+
*
|
|
3
5
|
* Supports: localhost:3000, example.com, http://localhost, file:// URLs
|
|
6
|
+
* Preserves special browser protocols: about:, chrome:, data:, javascript:, blob:
|
|
7
|
+
*
|
|
8
|
+
* @param url - URL string to normalize
|
|
9
|
+
* @returns Normalized URL with protocol
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* normalizeUrl('localhost:3000') // → 'http://localhost:3000'
|
|
14
|
+
* normalizeUrl('https://example.com') // → 'https://example.com'
|
|
15
|
+
* normalizeUrl('example.com/path') // → 'http://example.com/path'
|
|
16
|
+
* normalizeUrl('about:blank') // → 'about:blank' (unchanged)
|
|
17
|
+
* normalizeUrl('chrome://settings') // → 'chrome://settings' (unchanged)
|
|
18
|
+
* ```
|
|
4
19
|
*/
|
|
5
20
|
export function normalizeUrl(url) {
|
|
6
|
-
|
|
21
|
+
// Check for protocols that should not be modified
|
|
22
|
+
if (url.startsWith('http://') ||
|
|
23
|
+
url.startsWith('https://') ||
|
|
24
|
+
url.startsWith('file://') ||
|
|
25
|
+
url.startsWith('about:') ||
|
|
26
|
+
url.startsWith('chrome:') ||
|
|
27
|
+
url.startsWith('data:') ||
|
|
28
|
+
url.startsWith('javascript:') ||
|
|
29
|
+
url.startsWith('vbscript:') ||
|
|
30
|
+
url.startsWith('blob:')) {
|
|
7
31
|
return url;
|
|
8
32
|
}
|
|
9
33
|
return `http://${url}`;
|
|
10
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Truncate a URL for compact display.
|
|
37
|
+
*
|
|
38
|
+
* Removes www. prefix, shortens long paths with ellipsis, and truncates to maxLength.
|
|
39
|
+
*
|
|
40
|
+
* @param url - URL string to truncate
|
|
41
|
+
* @param maxLength - Maximum length of output (default: 60)
|
|
42
|
+
* @returns Truncated URL for display
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* truncateUrl('https://i.clarity.ms/collect')
|
|
47
|
+
* // → 'clarity.ms/collect'
|
|
48
|
+
* truncateUrl('https://aswpapius.com/api/web-channels/47d7def8-d602-49ec-bfdb-c959b1346774')
|
|
49
|
+
* // → 'aswpapius.com/.../47d7def8'
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export function truncateUrl(url, maxLength = 60) {
|
|
53
|
+
const parsed = safeParseUrl(url);
|
|
54
|
+
if (!parsed) {
|
|
55
|
+
// Fallback: simple string truncation if URL parsing fails
|
|
56
|
+
return url.length > maxLength ? url.substring(0, maxLength - 3) + '...' : url;
|
|
57
|
+
}
|
|
58
|
+
// Remove www. prefix
|
|
59
|
+
const domain = parsed.hostname.replace(/^www\./, '');
|
|
60
|
+
// Get path without leading slash
|
|
61
|
+
const path = parsed.pathname.substring(1);
|
|
62
|
+
// Start with domain + path
|
|
63
|
+
let result = domain + (path ? `/${path}` : '');
|
|
64
|
+
// If still too long, truncate the path
|
|
65
|
+
if (result.length > maxLength) {
|
|
66
|
+
const pathParts = path.split('/');
|
|
67
|
+
if (pathParts.length > 2) {
|
|
68
|
+
// Show first part, ellipsis, and last part
|
|
69
|
+
const first = pathParts[0];
|
|
70
|
+
const last = pathParts[pathParts.length - 1];
|
|
71
|
+
if (first && last) {
|
|
72
|
+
result = `${domain}/${first}/.../${last}`;
|
|
73
|
+
// If still too long, truncate the last part
|
|
74
|
+
if (result.length > maxLength) {
|
|
75
|
+
const truncatedLast = last.substring(0, 8);
|
|
76
|
+
result = `${domain}/${first}/.../${truncatedLast}`;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Simple truncation
|
|
82
|
+
result = result.substring(0, maxLength - 3) + '...';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Truncate console message text (especially stack traces)
|
|
89
|
+
* @param text - The console message text
|
|
90
|
+
* @param maxLines - Maximum number of lines to show (default: 3)
|
|
91
|
+
*/
|
|
92
|
+
export function truncateText(text, maxLines = 3) {
|
|
93
|
+
const lines = text.split('\n');
|
|
94
|
+
if (lines.length <= maxLines) {
|
|
95
|
+
return text;
|
|
96
|
+
}
|
|
97
|
+
const truncated = lines.slice(0, maxLines).join('\n');
|
|
98
|
+
const hiddenCount = lines.length - maxLines;
|
|
99
|
+
return `${truncated}\n ... (${hiddenCount} more lines)`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Validate that a URL is valid and usable for Chrome navigation.
|
|
103
|
+
*
|
|
104
|
+
* WHY: Provides clear error messages before attempting to launch Chrome.
|
|
105
|
+
*
|
|
106
|
+
* @param url - URL string to validate
|
|
107
|
+
* @returns Object with valid flag and error message if invalid
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const result = validateUrl('not-a-url');
|
|
112
|
+
* if (!result.valid) {
|
|
113
|
+
* console.error(result.error);
|
|
114
|
+
* // → "Invalid URL format: 'not-a-url'"
|
|
115
|
+
* console.error(result.suggestion);
|
|
116
|
+
* // → "URLs must include a valid protocol (http:// or https://)"
|
|
117
|
+
* }
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
export function validateUrl(url) {
|
|
121
|
+
// Empty URL
|
|
122
|
+
if (!url || url.trim().length === 0) {
|
|
123
|
+
return {
|
|
124
|
+
valid: false,
|
|
125
|
+
error: 'URL cannot be empty',
|
|
126
|
+
suggestion: 'Provide a valid URL, e.g.: http://localhost:3000',
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// Normalize first (adds http:// if missing)
|
|
130
|
+
const normalized = normalizeUrl(url);
|
|
131
|
+
// Try to parse as URL
|
|
132
|
+
try {
|
|
133
|
+
const parsed = new URL(normalized);
|
|
134
|
+
// Check for valid protocol
|
|
135
|
+
const validProtocols = ['http:', 'https:', 'file:', 'about:', 'chrome:', 'data:'];
|
|
136
|
+
if (!validProtocols.includes(parsed.protocol)) {
|
|
137
|
+
return {
|
|
138
|
+
valid: false,
|
|
139
|
+
error: `Invalid protocol: '${parsed.protocol}'`,
|
|
140
|
+
suggestion: 'URLs must use http://, https://, or other valid protocols',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// Check for valid hostname (for http/https)
|
|
144
|
+
if ((parsed.protocol === 'http:' || parsed.protocol === 'https:') && !parsed.hostname) {
|
|
145
|
+
return {
|
|
146
|
+
valid: false,
|
|
147
|
+
error: `Invalid URL format: '${url}' (missing hostname)`,
|
|
148
|
+
suggestion: 'URLs must include a valid hostname, e.g.: http://example.com',
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return { valid: true };
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return {
|
|
155
|
+
valid: false,
|
|
156
|
+
error: `Invalid URL format: '${url}'`,
|
|
157
|
+
suggestion: 'URLs must include a valid protocol (http:// or https://)',
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
11
161
|
//# sourceMappingURL=url.js.map
|
package/dist/utils/url.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,aAAa,CAMjF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,EAAE,CAIxF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAUA,wBAAgB,UAAU,IAAI,MAAM,CAiBnC;AAED,eAAO,MAAM,OAAO,EAAE,MAAqB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { dirname, join } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
/**
|
|
5
|
+
* Get the package version.
|
|
6
|
+
* Reads package.json once and caches the result.
|
|
7
|
+
*/
|
|
8
|
+
let cachedVersion = '';
|
|
9
|
+
export function getVersion() {
|
|
10
|
+
if (cachedVersion) {
|
|
11
|
+
return cachedVersion;
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = dirname(__filename);
|
|
16
|
+
const pkgPath = join(__dirname, '../../package.json');
|
|
17
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
18
|
+
cachedVersion = pkg.version ?? '0.0.0';
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// Fallback if package.json cannot be read
|
|
22
|
+
cachedVersion = '0.0.0';
|
|
23
|
+
}
|
|
24
|
+
return cachedVersion;
|
|
25
|
+
}
|
|
26
|
+
export const VERSION = getVersion();
|
|
27
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC;;;GAGG;AACH,IAAI,aAAa,GAAW,EAAE,CAAC;AAE/B,MAAM,UAAU,UAAU;IACxB,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAyB,CAAC;QAC/E,aAAa,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;QAC1C,aAAa,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAW,UAAU,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browser-debugger-cli",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
4
|
"description": "Browser telemetry via Chrome DevTools Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"bdg": "dist/index.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"build": "tsc",
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
10
|
+
"build": "tsc && tsc-alias",
|
|
11
|
+
"postbuild": "node -e \"require('fs').chmodSync('dist/index.js', 0o755)\"",
|
|
12
|
+
"dev": "tsc && tsc-alias && node dist/index.js",
|
|
13
|
+
"watch": "concurrently \"npm:watch:tsc\" \"npm:watch:alias\"",
|
|
14
|
+
"watch:tsc": "tsc --watch",
|
|
15
|
+
"watch:alias": "tsc-alias --watch",
|
|
16
|
+
"type-check": "tsc --noEmit",
|
|
17
|
+
"lint": "eslint src --ext .ts",
|
|
18
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
19
|
+
"format": "prettier --write \"src/**/*.ts\" \"*.{js,json}\"",
|
|
20
|
+
"format:check": "prettier --check \"src/**/*.ts\" \"*.{js,json}\"",
|
|
21
|
+
"knip": "knip",
|
|
22
|
+
"knip:production": "knip --production",
|
|
23
|
+
"clean": "rm -rf dist",
|
|
24
|
+
"rebuild": "npm run clean && npm run build",
|
|
25
|
+
"lint:imports": "echo '✓ Import paths checked by main lint'",
|
|
26
|
+
"validate:module-type": "node -e \"const pkg = require('./package.json'); if (pkg.type !== 'module') { console.error('Package must have type: module'); process.exit(1); } else { console.log('✅ Package type is module'); }\"",
|
|
27
|
+
"validate:ts-version": "node -e \"const ts = require('typescript'); const v = ts.version.split('.'); if (parseInt(v[0]) < 5 || (parseInt(v[0]) === 5 && parseInt(v[1]) < 6)) { console.error('Requires TypeScript 5.6+, found:', ts.version); process.exit(1); } else { console.log('✅ TypeScript version:', ts.version); }\"",
|
|
28
|
+
"check": "npm run format:check && npm run type-check && npm run lint",
|
|
29
|
+
"check:enhanced": "npm run format:check && npm run type-check && npm run lint && npm run validate:module-type && npm run validate:ts-version",
|
|
30
|
+
"test": "tsx --test src/**/__tests__/*.test.ts src/**/__tests__/*.contract.test.ts src/__tests__/integration/*.test.ts",
|
|
31
|
+
"test:watch": "tsx --test --watch src/**/__tests__/*.test.ts src/**/__tests__/*.contract.test.ts src/__tests__/integration/*.test.ts",
|
|
32
|
+
"prepublishOnly": "npm run build",
|
|
33
|
+
"prepare": "husky"
|
|
14
34
|
},
|
|
15
35
|
"keywords": [
|
|
16
36
|
"cdp",
|
|
@@ -23,16 +43,34 @@
|
|
|
23
43
|
"license": "MIT",
|
|
24
44
|
"dependencies": {
|
|
25
45
|
"chrome-launcher": "^1.2.1",
|
|
26
|
-
"commander": "^
|
|
46
|
+
"commander": "^14.0.2",
|
|
27
47
|
"ws": "^8.18.0"
|
|
28
48
|
},
|
|
29
49
|
"devDependencies": {
|
|
30
|
-
"@
|
|
50
|
+
"@eslint/js": "^9.39.0",
|
|
51
|
+
"@types/node": "^22.19.0",
|
|
31
52
|
"@types/ws": "^8.5.10",
|
|
53
|
+
"@typescript-eslint/eslint-plugin": "^8.46.2",
|
|
54
|
+
"@typescript-eslint/parser": "^8.46.2",
|
|
55
|
+
"concurrently": "^9.2.1",
|
|
56
|
+
"eslint": "^9.39.0",
|
|
57
|
+
"eslint-config-prettier": "^10.1.8",
|
|
58
|
+
"eslint-import-resolver-typescript": "^4.4.4",
|
|
59
|
+
"eslint-plugin-import": "^2.32.0",
|
|
60
|
+
"eslint-plugin-no-relative-import-paths": "^1.6.1",
|
|
61
|
+
"eslint-plugin-tsdoc": "^0.4.0",
|
|
62
|
+
"eslint-plugin-unused-imports": "^4.3.0",
|
|
63
|
+
"globals": "^16.5.0",
|
|
64
|
+
"husky": "^9.1.7",
|
|
65
|
+
"knip": "^5.67.1",
|
|
66
|
+
"lint-staged": "^16.2.6",
|
|
67
|
+
"prettier": "^3.6.2",
|
|
68
|
+
"tsc-alias": "^1.8.9",
|
|
69
|
+
"tsx": "^4.19.0",
|
|
32
70
|
"typescript": "^5.6.0"
|
|
33
71
|
},
|
|
34
72
|
"engines": {
|
|
35
|
-
"node": ">=
|
|
73
|
+
"node": ">=20.0.0"
|
|
36
74
|
},
|
|
37
75
|
"author": {
|
|
38
76
|
"name": "Kumak",
|
|
@@ -40,7 +78,7 @@
|
|
|
40
78
|
},
|
|
41
79
|
"repository": {
|
|
42
80
|
"type": "git",
|
|
43
|
-
"url": "https://github.com/szymdzum/browser-debugger-cli.git"
|
|
81
|
+
"url": "git+https://github.com/szymdzum/browser-debugger-cli.git"
|
|
44
82
|
},
|
|
45
83
|
"homepage": "https://github.com/szymdzum/browser-debugger-cli#readme",
|
|
46
84
|
"bugs": {
|
|
@@ -52,5 +90,14 @@
|
|
|
52
90
|
"files": [
|
|
53
91
|
"dist",
|
|
54
92
|
"README.md"
|
|
55
|
-
]
|
|
93
|
+
],
|
|
94
|
+
"lint-staged": {
|
|
95
|
+
"src/**/*.ts": [
|
|
96
|
+
"prettier --write",
|
|
97
|
+
"eslint --fix"
|
|
98
|
+
],
|
|
99
|
+
"*.{js,json}": [
|
|
100
|
+
"prettier --write"
|
|
101
|
+
]
|
|
102
|
+
}
|
|
56
103
|
}
|
package/dist/utils/pageLoad.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { CDPConnection } from '../connection/cdp.js';
|
|
2
|
-
export interface PageLoadOptions {
|
|
3
|
-
/**
|
|
4
|
-
* Maximum time to wait for page load (ms)
|
|
5
|
-
* @default 30000
|
|
6
|
-
*/
|
|
7
|
-
timeout?: number;
|
|
8
|
-
/**
|
|
9
|
-
* Time to wait with no network activity before considering page idle (ms)
|
|
10
|
-
* @default 2000
|
|
11
|
-
*/
|
|
12
|
-
networkIdleTime?: number;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Waits for the page to fully load including:
|
|
16
|
-
* - DOM content loaded
|
|
17
|
-
* - Load event fired
|
|
18
|
-
* - Network idle (no new requests for specified time)
|
|
19
|
-
*/
|
|
20
|
-
export declare function waitForPageLoad(cdp: CDPConnection, options?: PageLoadOptions): Promise<void>;
|
|
21
|
-
//# sourceMappingURL=pageLoad.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pageLoad.d.ts","sourceRoot":"","sources":["../../src/utils/pageLoad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA0Ff"}
|