browser-debugger-cli 0.6.1 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -3
- package/dist/__tests__/smoke/error-handling.smoke.test.js +9 -4
- package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -1
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.js +27 -24
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.js.map +1 -1
- package/dist/__testutils__/daemonHelpers.d.ts +13 -1
- package/dist/__testutils__/daemonHelpers.d.ts.map +1 -1
- package/dist/__testutils__/daemonHelpers.js +54 -5
- package/dist/__testutils__/daemonHelpers.js.map +1 -1
- package/dist/cdp/protocol.d.ts.map +1 -1
- package/dist/cdp/protocol.js +6 -10
- package/dist/cdp/protocol.js.map +1 -1
- package/dist/cdp/schema.d.ts.map +1 -1
- package/dist/cdp/schema.js +0 -2
- package/dist/cdp/schema.js.map +1 -1
- package/dist/commands/cdp.d.ts.map +1 -1
- package/dist/commands/cdp.js +1 -20
- package/dist/commands/cdp.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +17 -15
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/console.d.ts.map +1 -1
- package/dist/commands/console.js +0 -5
- package/dist/commands/console.js.map +1 -1
- package/dist/commands/details.d.ts.map +1 -1
- package/dist/commands/details.js +0 -5
- package/dist/commands/details.js.map +1 -1
- package/dist/commands/dom/a11y.d.ts +18 -0
- package/dist/commands/dom/a11y.d.ts.map +1 -0
- package/dist/commands/dom/a11y.js +134 -0
- package/dist/commands/dom/a11y.js.map +1 -0
- package/dist/commands/dom/evalHelpers.d.ts.map +1 -1
- package/dist/commands/dom/evalHelpers.js +1 -6
- package/dist/commands/dom/evalHelpers.js.map +1 -1
- package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
- package/dist/commands/dom/formFillHelpers.js +0 -9
- package/dist/commands/dom/formFillHelpers.js.map +1 -1
- package/dist/commands/dom/formInteraction.d.ts.map +1 -1
- package/dist/commands/dom/formInteraction.js +0 -5
- package/dist/commands/dom/formInteraction.js.map +1 -1
- package/dist/commands/dom/formSubmitHelpers.d.ts.map +1 -1
- package/dist/commands/dom/formSubmitHelpers.js +0 -13
- package/dist/commands/dom/formSubmitHelpers.js.map +1 -1
- package/dist/commands/dom/helpers.d.ts.map +1 -1
- package/dist/commands/dom/helpers.js +0 -22
- package/dist/commands/dom/helpers.js.map +1 -1
- package/dist/commands/dom/index.d.ts.map +1 -1
- package/dist/commands/dom/index.js +41 -26
- package/dist/commands/dom/index.js.map +1 -1
- package/dist/commands/dom/reactEventHelpers.d.ts +3 -3
- package/dist/commands/dom/reactEventHelpers.d.ts.map +1 -1
- package/dist/commands/dom/reactEventHelpers.js +0 -28
- package/dist/commands/dom/reactEventHelpers.js.map +1 -1
- package/dist/commands/network.d.ts.map +1 -1
- package/dist/commands/network.js +159 -10
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/peek.d.ts.map +1 -1
- package/dist/commands/peek.js +17 -12
- package/dist/commands/peek.js.map +1 -1
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +0 -8
- package/dist/commands/shared/CommandRunner.js.map +1 -1
- package/dist/commands/shared/__tests__/validation.unit.test.d.ts +7 -0
- package/dist/commands/shared/__tests__/validation.unit.test.d.ts.map +1 -0
- package/dist/commands/shared/__tests__/validation.unit.test.js +141 -0
- package/dist/commands/shared/__tests__/validation.unit.test.js.map +1 -0
- package/dist/commands/shared/startHelpers.d.ts.map +1 -1
- package/dist/commands/shared/startHelpers.js +0 -10
- package/dist/commands/shared/startHelpers.js.map +1 -1
- package/dist/commands/shared/validation.d.ts +17 -0
- package/dist/commands/shared/validation.d.ts.map +1 -1
- package/dist/commands/shared/validation.js +105 -5
- package/dist/commands/shared/validation.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +0 -6
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +0 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +11 -13
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tail.d.ts.map +1 -1
- package/dist/commands/tail.js +0 -7
- package/dist/commands/tail.js.map +1 -1
- package/dist/commands/types.d.ts +3 -0
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +0 -5
- package/dist/commands.js.map +1 -1
- package/dist/connection/cdp.d.ts.map +1 -1
- package/dist/connection/cdp.js +0 -3
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/diagnostics.d.ts.map +1 -1
- package/dist/connection/diagnostics.js +7 -4
- package/dist/connection/diagnostics.js.map +1 -1
- package/dist/connection/pageReadiness.d.ts.map +1 -1
- package/dist/connection/pageReadiness.js +0 -1
- package/dist/connection/pageReadiness.js.map +1 -1
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -1
- package/dist/daemon/__tests__/commandRegistry.contract.test.js +259 -0
- package/dist/daemon/__tests__/commandRegistry.contract.test.js.map +1 -1
- package/dist/daemon/__tests__/ipcServer.cleanup.unit.test.d.ts +19 -0
- package/dist/daemon/__tests__/ipcServer.cleanup.unit.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/ipcServer.cleanup.unit.test.js +212 -0
- package/dist/daemon/__tests__/ipcServer.cleanup.unit.test.js.map +1 -0
- package/dist/daemon/handlers/BaseHandler.d.ts +75 -0
- package/dist/daemon/handlers/BaseHandler.d.ts.map +1 -0
- package/dist/daemon/handlers/BaseHandler.js +103 -0
- package/dist/daemon/handlers/BaseHandler.js.map +1 -0
- package/dist/daemon/handlers/CommandHandlers.d.ts +3 -4
- package/dist/daemon/handlers/CommandHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/CommandHandlers.js +14 -52
- package/dist/daemon/handlers/CommandHandlers.js.map +1 -1
- package/dist/daemon/handlers/QueryHandlers.d.ts +8 -6
- package/dist/daemon/handlers/QueryHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/QueryHandlers.js +42 -94
- package/dist/daemon/handlers/QueryHandlers.js.map +1 -1
- package/dist/daemon/handlers/SessionHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/SessionHandlers.js +0 -15
- package/dist/daemon/handlers/SessionHandlers.js.map +1 -1
- package/dist/daemon/handlers/requestHandlers.d.ts +5 -1
- package/dist/daemon/handlers/requestHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/requestHandlers.js +7 -2
- package/dist/daemon/handlers/requestHandlers.js.map +1 -1
- package/dist/daemon/handlers/responseHandler.d.ts.map +1 -1
- package/dist/daemon/handlers/responseHandler.js +19 -8
- package/dist/daemon/handlers/responseHandler.js.map +1 -1
- package/dist/daemon/ipcServer.d.ts.map +1 -1
- package/dist/daemon/ipcServer.js +4 -11
- package/dist/daemon/ipcServer.js.map +1 -1
- package/dist/daemon/launcher.d.ts.map +1 -1
- package/dist/daemon/launcher.js +2 -19
- package/dist/daemon/launcher.js.map +1 -1
- package/dist/daemon/lifecycle/cdpSetup.d.ts.map +1 -1
- package/dist/daemon/lifecycle/cdpSetup.js +0 -4
- package/dist/daemon/lifecycle/cdpSetup.js.map +1 -1
- package/dist/daemon/lifecycle/chromeConnection.js +0 -1
- package/dist/daemon/lifecycle/chromeConnection.js.map +1 -1
- package/dist/daemon/lifecycle/signalHandlers.d.ts.map +1 -1
- package/dist/daemon/lifecycle/signalHandlers.js +0 -3
- package/dist/daemon/lifecycle/signalHandlers.js.map +1 -1
- package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -1
- package/dist/daemon/lifecycle/workerCleanup.js +1 -8
- package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
- package/dist/daemon/lifecycle/workerIpc.d.ts.map +1 -1
- package/dist/daemon/lifecycle/workerIpc.js +0 -1
- package/dist/daemon/lifecycle/workerIpc.js.map +1 -1
- package/dist/daemon/server/JsonlParser.d.ts.map +1 -1
- package/dist/daemon/server/JsonlParser.js +0 -2
- package/dist/daemon/server/JsonlParser.js.map +1 -1
- package/dist/daemon/services/SessionService.js +1 -1
- package/dist/daemon/services/SessionService.js.map +1 -1
- package/dist/daemon/startSession.d.ts.map +1 -1
- package/dist/daemon/startSession.js +0 -15
- package/dist/daemon/startSession.js.map +1 -1
- package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
- package/dist/daemon/worker/commandRegistry.js +34 -1
- package/dist/daemon/worker/commandRegistry.js.map +1 -1
- package/dist/daemon/worker/plugins.d.ts.map +1 -1
- package/dist/daemon/worker/plugins.js +0 -3
- package/dist/daemon/worker/plugins.js.map +1 -1
- package/dist/daemon/worker.js +0 -9
- package/dist/daemon/worker.js.map +1 -1
- package/dist/daemon.js +0 -2
- package/dist/daemon.js.map +1 -1
- package/dist/index.js +0 -14
- package/dist/index.js.map +1 -1
- package/dist/ipc/__tests__/client.contract.test.js +251 -19
- package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
- package/dist/ipc/__tests__/jsonl.unit.test.js +19 -1
- package/dist/ipc/__tests__/jsonl.unit.test.js.map +1 -1
- package/dist/ipc/client.d.ts +47 -1
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +51 -0
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/index.d.ts.map +1 -1
- package/dist/ipc/index.js +0 -6
- package/dist/ipc/index.js.map +1 -1
- package/dist/ipc/protocol/commands.d.ts +44 -0
- package/dist/ipc/protocol/commands.d.ts.map +1 -1
- package/dist/ipc/protocol/commands.js +8 -0
- package/dist/ipc/protocol/commands.js.map +1 -1
- package/dist/ipc/session/queries.d.ts +26 -2
- package/dist/ipc/session/queries.d.ts.map +1 -1
- package/dist/ipc/transport/index.d.ts.map +1 -1
- package/dist/ipc/transport/index.js +0 -1
- package/dist/ipc/transport/index.js.map +1 -1
- package/dist/ipc/transport/jsonl.d.ts +16 -0
- package/dist/ipc/transport/jsonl.d.ts.map +1 -1
- package/dist/ipc/transport/jsonl.js +24 -0
- package/dist/ipc/transport/jsonl.js.map +1 -1
- package/dist/session/chrome.js +2 -2
- package/dist/session/chrome.js.map +1 -1
- package/dist/session/cleanup.d.ts +21 -0
- package/dist/session/cleanup.d.ts.map +1 -1
- package/dist/session/cleanup.js +92 -12
- package/dist/session/cleanup.js.map +1 -1
- package/dist/session/lock.js +1 -1
- package/dist/session/lock.js.map +1 -1
- package/dist/telemetry/__tests__/a11y.unit.test.d.ts +10 -0
- package/dist/telemetry/__tests__/a11y.unit.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/a11y.unit.test.js +265 -0
- package/dist/telemetry/__tests__/a11y.unit.test.js.map +1 -0
- package/dist/telemetry/__tests__/filters.unit.test.js +119 -1
- package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -1
- package/dist/telemetry/__tests__/network.contract.test.js +114 -0
- package/dist/telemetry/__tests__/network.contract.test.js.map +1 -1
- package/dist/telemetry/a11y.d.ts +78 -0
- package/dist/telemetry/a11y.d.ts.map +1 -0
- package/dist/telemetry/a11y.js +280 -0
- package/dist/telemetry/a11y.js.map +1 -0
- package/dist/telemetry/dom.d.ts +1 -1
- package/dist/telemetry/dom.d.ts.map +1 -1
- package/dist/telemetry/dom.js +36 -5
- package/dist/telemetry/dom.js.map +1 -1
- package/dist/telemetry/filters.d.ts +17 -0
- package/dist/telemetry/filters.d.ts.map +1 -1
- package/dist/telemetry/filters.js +25 -0
- package/dist/telemetry/filters.js.map +1 -1
- package/dist/telemetry/har/__tests__/builder.unit.test.d.ts +8 -0
- package/dist/telemetry/har/__tests__/builder.unit.test.d.ts.map +1 -0
- package/dist/telemetry/har/__tests__/builder.unit.test.js +694 -0
- package/dist/telemetry/har/__tests__/builder.unit.test.js.map +1 -0
- package/dist/telemetry/har/builder.d.ts +43 -0
- package/dist/telemetry/har/builder.d.ts.map +1 -0
- package/dist/telemetry/har/builder.js +440 -0
- package/dist/telemetry/har/builder.js.map +1 -0
- package/dist/telemetry/har/types.d.ts +290 -0
- package/dist/telemetry/har/types.d.ts.map +1 -0
- package/dist/telemetry/har/types.js +7 -0
- package/dist/telemetry/har/types.js.map +1 -0
- package/dist/telemetry/network.d.ts.map +1 -1
- package/dist/telemetry/network.js +37 -4
- package/dist/telemetry/network.js.map +1 -1
- package/dist/types.d.ts +108 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/OutputBuilder.d.ts.map +1 -1
- package/dist/ui/OutputBuilder.js +0 -8
- package/dist/ui/OutputBuilder.js.map +1 -1
- package/dist/ui/errors/CommandError.d.ts.map +1 -1
- package/dist/ui/errors/CommandError.js +0 -1
- package/dist/ui/errors/CommandError.js.map +1 -1
- package/dist/ui/errors/index.d.ts.map +1 -1
- package/dist/ui/errors/index.js +0 -2
- package/dist/ui/errors/index.js.map +1 -1
- package/dist/ui/formatters/__tests__/semantic.unit.test.d.ts +2 -0
- package/dist/ui/formatters/__tests__/semantic.unit.test.d.ts.map +1 -0
- package/dist/ui/formatters/__tests__/semantic.unit.test.js +111 -0
- package/dist/ui/formatters/__tests__/semantic.unit.test.js.map +1 -0
- package/dist/ui/formatters/a11y.d.ts +30 -0
- package/dist/ui/formatters/a11y.d.ts.map +1 -0
- package/dist/ui/formatters/a11y.js +178 -0
- package/dist/ui/formatters/a11y.js.map +1 -0
- package/dist/ui/formatters/details.d.ts.map +1 -1
- package/dist/ui/formatters/details.js +1 -0
- package/dist/ui/formatters/details.js.map +1 -1
- package/dist/ui/formatters/dom.d.ts.map +1 -1
- package/dist/ui/formatters/dom.js +0 -3
- package/dist/ui/formatters/dom.js.map +1 -1
- package/dist/ui/formatters/index.d.ts +1 -0
- package/dist/ui/formatters/index.d.ts.map +1 -1
- package/dist/ui/formatters/index.js +1 -0
- package/dist/ui/formatters/index.js.map +1 -1
- package/dist/ui/formatters/networkHeaders.d.ts +14 -0
- package/dist/ui/formatters/networkHeaders.d.ts.map +1 -0
- package/dist/ui/formatters/networkHeaders.js +47 -0
- package/dist/ui/formatters/networkHeaders.js.map +1 -0
- package/dist/ui/formatters/preview.d.ts +2 -0
- package/dist/ui/formatters/preview.d.ts.map +1 -1
- package/dist/ui/formatters/preview.js +67 -23
- package/dist/ui/formatters/preview.js.map +1 -1
- package/dist/ui/formatters/semantic.d.ts +36 -0
- package/dist/ui/formatters/semantic.d.ts.map +1 -0
- package/dist/ui/formatters/semantic.js +98 -0
- package/dist/ui/formatters/semantic.js.map +1 -0
- package/dist/ui/formatters/status.d.ts.map +1 -1
- package/dist/ui/formatters/status.js +1 -12
- package/dist/ui/formatters/status.js.map +1 -1
- package/dist/ui/formatting.d.ts.map +1 -1
- package/dist/ui/formatting.js +0 -6
- package/dist/ui/formatting.js.map +1 -1
- package/dist/ui/logging/logger.d.ts +1 -1
- package/dist/ui/logging/logger.d.ts.map +1 -1
- package/dist/ui/logging/logger.js.map +1 -1
- package/dist/ui/messages/chrome.d.ts.map +1 -1
- package/dist/ui/messages/chrome.js +0 -6
- package/dist/ui/messages/chrome.js.map +1 -1
- package/dist/ui/messages/commands.d.ts +7 -0
- package/dist/ui/messages/commands.d.ts.map +1 -1
- package/dist/ui/messages/commands.js +9 -12
- package/dist/ui/messages/commands.js.map +1 -1
- package/dist/ui/messages/debug.d.ts.map +1 -1
- package/dist/ui/messages/debug.js +0 -6
- package/dist/ui/messages/debug.js.map +1 -1
- package/dist/ui/messages/internal.d.ts.map +1 -1
- package/dist/ui/messages/internal.js +0 -3
- package/dist/ui/messages/internal.js.map +1 -1
- package/dist/ui/messages/preview.d.ts.map +1 -1
- package/dist/ui/messages/preview.js +0 -12
- package/dist/ui/messages/preview.js.map +1 -1
- package/dist/ui/messages/session.d.ts.map +1 -1
- package/dist/ui/messages/session.js +0 -3
- package/dist/ui/messages/session.js.map +1 -1
- package/dist/utils/__tests__/errors.unit.test.d.ts +12 -0
- package/dist/utils/__tests__/errors.unit.test.d.ts.map +1 -0
- package/dist/utils/__tests__/errors.unit.test.js +255 -0
- package/dist/utils/__tests__/errors.unit.test.js.map +1 -0
- package/dist/utils/__tests__/http.unit.test.d.ts +12 -0
- package/dist/utils/__tests__/http.unit.test.d.ts.map +1 -0
- package/dist/utils/__tests__/http.unit.test.js +218 -0
- package/dist/utils/__tests__/http.unit.test.js.map +1 -0
- package/dist/utils/__tests__/process.unit.test.d.ts +14 -0
- package/dist/utils/__tests__/process.unit.test.d.ts.map +1 -0
- package/dist/utils/__tests__/process.unit.test.js +124 -0
- package/dist/utils/__tests__/process.unit.test.js.map +1 -0
- package/dist/utils/__tests__/session.contract.test.js +1 -1
- package/dist/utils/__tests__/session.contract.test.js.map +1 -1
- package/dist/utils/atomicFile.d.ts.map +1 -1
- package/dist/utils/atomicFile.js +9 -6
- package/dist/utils/atomicFile.js.map +1 -1
- package/dist/utils/exitCodes.d.ts.map +1 -1
- package/dist/utils/exitCodes.js +0 -2
- package/dist/utils/exitCodes.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +0 -3
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +0 -1
- package/dist/utils/version.js.map +1 -1
- package/package.json +22 -1
|
@@ -28,7 +28,6 @@ export const REACT_FILL_SCRIPT = `
|
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
// Check if element is fillable
|
|
32
31
|
const tagName = el.tagName.toLowerCase();
|
|
33
32
|
const inputType = el.type?.toLowerCase();
|
|
34
33
|
|
|
@@ -48,16 +47,12 @@ export const REACT_FILL_SCRIPT = `
|
|
|
48
47
|
};
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
// Focus element first
|
|
52
50
|
el.focus();
|
|
53
51
|
|
|
54
|
-
// Handle different input types
|
|
55
52
|
if (tagName === 'select') {
|
|
56
|
-
// For select elements
|
|
57
53
|
el.value = value;
|
|
58
54
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
59
55
|
} else if (inputType === 'checkbox' || inputType === 'radio') {
|
|
60
|
-
// For checkbox/radio, value should be "true" or "false"
|
|
61
56
|
const shouldCheck = value === 'true' || value === true;
|
|
62
57
|
el.checked = shouldCheck;
|
|
63
58
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
@@ -68,11 +63,9 @@ export const REACT_FILL_SCRIPT = `
|
|
|
68
63
|
suggestion: 'Use: bdg cdp DOM.setFileInputFiles --params {\\"files\\":[\\"path\\"]}'
|
|
69
64
|
};
|
|
70
65
|
} else if (el.isContentEditable) {
|
|
71
|
-
// For contenteditable elements
|
|
72
66
|
el.textContent = value;
|
|
73
67
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
74
68
|
} else {
|
|
75
|
-
// For text inputs, use native setter (React compatibility)
|
|
76
69
|
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
|
|
77
70
|
window.HTMLInputElement.prototype,
|
|
78
71
|
'value'
|
|
@@ -93,15 +86,12 @@ export const REACT_FILL_SCRIPT = `
|
|
|
93
86
|
el.value = value;
|
|
94
87
|
}
|
|
95
88
|
|
|
96
|
-
// Dispatch events that React/Vue/Angular listen for
|
|
97
89
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
98
90
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
99
91
|
}
|
|
100
92
|
|
|
101
|
-
// Blur if requested (triggers validation in many forms)
|
|
102
93
|
if (options.blur !== false) {
|
|
103
94
|
el.blur();
|
|
104
|
-
// Dispatch focusout event for React/framework validation handlers
|
|
105
95
|
el.dispatchEvent(new FocusEvent('focusout', { bubbles: true }));
|
|
106
96
|
}
|
|
107
97
|
|
|
@@ -126,7 +116,6 @@ export const CLICK_ELEMENT_SCRIPT = `
|
|
|
126
116
|
(function(selector) {
|
|
127
117
|
let el = document.querySelector(selector);
|
|
128
118
|
|
|
129
|
-
// If not found, return error
|
|
130
119
|
if (!el) {
|
|
131
120
|
return {
|
|
132
121
|
success: false,
|
|
@@ -135,25 +124,17 @@ export const CLICK_ELEMENT_SCRIPT = `
|
|
|
135
124
|
};
|
|
136
125
|
}
|
|
137
126
|
|
|
138
|
-
// Check if there are multiple matches and pick the visible one
|
|
139
127
|
const allMatches = document.querySelectorAll(selector);
|
|
140
128
|
if (allMatches.length > 1) {
|
|
141
|
-
// Find first visible element using bounding rect and computed styles
|
|
142
129
|
for (const candidate of allMatches) {
|
|
143
130
|
const style = window.getComputedStyle(candidate);
|
|
144
131
|
const rect = candidate.getBoundingClientRect();
|
|
145
132
|
|
|
146
|
-
// Check if element is actually visible:
|
|
147
|
-
// - Must have dimensions (non-zero width/height)
|
|
148
|
-
// - Must not be display:none or visibility:hidden
|
|
149
|
-
// - Opacity check (but allow semi-transparent elements)
|
|
150
|
-
// - offsetParent check (but position:fixed elements have null offsetParent, so also check position)
|
|
151
133
|
const hasSize = rect.width > 0 && rect.height > 0;
|
|
152
134
|
const isDisplayed = style.display !== 'none' && style.visibility !== 'hidden';
|
|
153
135
|
const isOpaque = parseFloat(style.opacity) > 0;
|
|
154
136
|
const isPositioned = candidate.offsetParent !== null || style.position === 'fixed';
|
|
155
137
|
|
|
156
|
-
// Don't filter out elements without text - icon buttons, inputs, etc. are valid
|
|
157
138
|
const isVisible = hasSize && isDisplayed && isOpaque && isPositioned;
|
|
158
139
|
|
|
159
140
|
if (isVisible) {
|
|
@@ -163,7 +144,6 @@ export const CLICK_ELEMENT_SCRIPT = `
|
|
|
163
144
|
}
|
|
164
145
|
}
|
|
165
146
|
|
|
166
|
-
// Check if element is clickable (has click handler or is a button/link)
|
|
167
147
|
const tagName = el.tagName.toLowerCase();
|
|
168
148
|
const isClickable = (
|
|
169
149
|
tagName === 'button' ||
|
|
@@ -178,10 +158,8 @@ export const CLICK_ELEMENT_SCRIPT = `
|
|
|
178
158
|
console.warn('Warning: Element may not be clickable:', el);
|
|
179
159
|
}
|
|
180
160
|
|
|
181
|
-
// Scroll element into view first
|
|
182
161
|
el.scrollIntoView({ behavior: 'auto', block: 'center' });
|
|
183
162
|
|
|
184
|
-
// Click the element
|
|
185
163
|
el.click();
|
|
186
164
|
|
|
187
165
|
return {
|
|
@@ -222,24 +200,19 @@ export const GET_ELEMENT_BY_INDEX_SCRIPT = `
|
|
|
222
200
|
};
|
|
223
201
|
}
|
|
224
202
|
|
|
225
|
-
// Return element info (we'll use this to build a more specific selector)
|
|
226
203
|
const el = elements[index - 1]; // Convert to 0-based
|
|
227
204
|
|
|
228
|
-
// Build a truly unique selector by constructing a scoped DOM path
|
|
229
205
|
function buildUniquePath(element: Element): string {
|
|
230
|
-
// If element has an ID, that's unique enough
|
|
231
206
|
if (element.id) {
|
|
232
207
|
return \`#\${CSS.escape(element.id)}\`;
|
|
233
208
|
}
|
|
234
209
|
|
|
235
|
-
// Build path from root using nth-of-type for each ancestor
|
|
236
210
|
const path: string[] = [];
|
|
237
211
|
let current: Element | null = element;
|
|
238
212
|
|
|
239
213
|
while (current && current !== document.documentElement) {
|
|
240
214
|
let selector = current.tagName.toLowerCase();
|
|
241
215
|
|
|
242
|
-
// Use nth-of-type to ensure uniqueness within parent
|
|
243
216
|
if (current.parentElement) {
|
|
244
217
|
const siblings = Array.from(current.parentElement.children);
|
|
245
218
|
const sameTagSiblings = siblings.filter(
|
|
@@ -256,7 +229,6 @@ export const GET_ELEMENT_BY_INDEX_SCRIPT = `
|
|
|
256
229
|
current = current.parentElement;
|
|
257
230
|
}
|
|
258
231
|
|
|
259
|
-
// Prefix with html to anchor to document root
|
|
260
232
|
return 'html > ' + path.join(' > ');
|
|
261
233
|
}
|
|
262
234
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactEventHelpers.js","sourceRoot":"","sources":["../../../src/commands/dom/reactEventHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG
|
|
1
|
+
{"version":3,"file":"reactEventHelpers.js","sourceRoot":"","sources":["../../../src/commands/dom/reactEventHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwFhC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDnC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkE1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwJzC;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmG9D"}
|
package/dist/commands/network.js
CHANGED
|
@@ -1,8 +1,114 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
1
3
|
import { runCommand } from '../commands/shared/CommandRunner.js';
|
|
2
4
|
import { jsonOption } from '../commands/shared/commonOptions.js';
|
|
3
|
-
import { callCDP } from '../ipc/client.js';
|
|
5
|
+
import { getHARData, callCDP, getNetworkHeaders } from '../ipc/client.js';
|
|
4
6
|
import { validateIPCResponse } from '../ipc/index.js';
|
|
5
|
-
import {
|
|
7
|
+
import { getSessionFilePath } from '../session/paths.js';
|
|
8
|
+
import { buildHAR } from '../telemetry/har/builder.js';
|
|
9
|
+
import { isDaemonConnectionError } from '../ui/errors/utils.js';
|
|
10
|
+
import { formatCookies, formatNetworkHeaders } from '../ui/formatters/index.js';
|
|
11
|
+
import { AtomicFileWriter } from '../utils/atomicFile.js';
|
|
12
|
+
import { EXIT_CODES } from '../utils/exitCodes.js';
|
|
13
|
+
import { VERSION } from '../utils/version.js';
|
|
14
|
+
/**
|
|
15
|
+
* Generate timestamped filename for HAR export in ~/.bdg/ directory.
|
|
16
|
+
*
|
|
17
|
+
* @returns Full path to HAR file in ~/.bdg/capture-YYYY-MM-DD-HHMMSS.har
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* generateHARFilename(); // "~/.bdg/capture-2025-11-19-143045.har"
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
function generateHARFilename() {
|
|
25
|
+
const now = new Date();
|
|
26
|
+
const year = now.getFullYear();
|
|
27
|
+
const month = String(now.getMonth() + 1).padStart(2, '0');
|
|
28
|
+
const day = String(now.getDate()).padStart(2, '0');
|
|
29
|
+
const hours = String(now.getHours()).padStart(2, '0');
|
|
30
|
+
const minutes = String(now.getMinutes()).padStart(2, '0');
|
|
31
|
+
const seconds = String(now.getSeconds()).padStart(2, '0');
|
|
32
|
+
const filename = `capture-${year}-${month}-${day}-${hours}${minutes}${seconds}.har`;
|
|
33
|
+
const sessionDir = path.dirname(getSessionFilePath('OUTPUT'));
|
|
34
|
+
return path.join(sessionDir, filename);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Fetch network requests from live daemon session.
|
|
38
|
+
*
|
|
39
|
+
* @returns Network requests array
|
|
40
|
+
* @throws Error if daemon connection fails or no network data available
|
|
41
|
+
*/
|
|
42
|
+
async function fetchFromLiveSession() {
|
|
43
|
+
const response = await getHARData();
|
|
44
|
+
validateIPCResponse(response);
|
|
45
|
+
if (!response.data?.requests) {
|
|
46
|
+
throw new Error('No network data in response');
|
|
47
|
+
}
|
|
48
|
+
return response.data.requests;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Fetch network requests from offline session.json file.
|
|
52
|
+
*
|
|
53
|
+
* @returns Network requests array
|
|
54
|
+
* @throws Error if session file not found or no network data available
|
|
55
|
+
*/
|
|
56
|
+
function fetchFromOfflineSession() {
|
|
57
|
+
const sessionPath = getSessionFilePath('OUTPUT');
|
|
58
|
+
if (!fs.existsSync(sessionPath)) {
|
|
59
|
+
throw new Error('No active session or session.json found. Start a session with: bdg <url>', {
|
|
60
|
+
cause: { code: EXIT_CODES.RESOURCE_NOT_FOUND },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const sessionData = JSON.parse(fs.readFileSync(sessionPath, 'utf-8'));
|
|
64
|
+
if (!sessionData.data?.network) {
|
|
65
|
+
throw new Error('No network data in session file', {
|
|
66
|
+
cause: { code: EXIT_CODES.RESOURCE_NOT_FOUND },
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return sessionData.data.network;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check if error indicates daemon is unavailable.
|
|
73
|
+
*
|
|
74
|
+
* @param error - Error to check
|
|
75
|
+
* @returns True if error indicates no active session or daemon connection failure
|
|
76
|
+
*/
|
|
77
|
+
function isDaemonUnavailable(error) {
|
|
78
|
+
if (isDaemonConnectionError(error)) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
82
|
+
return errorMessage.includes('No active session');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get network requests from live session or session.json.
|
|
86
|
+
*
|
|
87
|
+
* Tries live daemon first, falls back to offline session file.
|
|
88
|
+
*
|
|
89
|
+
* @returns Network requests array
|
|
90
|
+
* @throws Error if no session available (live or offline)
|
|
91
|
+
*/
|
|
92
|
+
async function getNetworkRequests() {
|
|
93
|
+
try {
|
|
94
|
+
return await fetchFromLiveSession();
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (isDaemonUnavailable(error)) {
|
|
98
|
+
return fetchFromOfflineSession();
|
|
99
|
+
}
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Format HAR export success message for human output.
|
|
105
|
+
*
|
|
106
|
+
* @param data - HAR export result data
|
|
107
|
+
* @returns Formatted success message
|
|
108
|
+
*/
|
|
109
|
+
function formatHARExport(data) {
|
|
110
|
+
return `✓ Exported ${data.entries} requests to ${data.file}`;
|
|
111
|
+
}
|
|
6
112
|
/**
|
|
7
113
|
* Register network commands.
|
|
8
114
|
*
|
|
@@ -10,7 +116,31 @@ import { formatCookies } from '../ui/formatters/index.js';
|
|
|
10
116
|
*/
|
|
11
117
|
export function registerNetworkCommands(program) {
|
|
12
118
|
const networkCmd = program.command('network').description('Inspect network state and resources');
|
|
13
|
-
|
|
119
|
+
networkCmd
|
|
120
|
+
.command('har [output-file]')
|
|
121
|
+
.description('Export network data as HAR 1.2 format')
|
|
122
|
+
.addOption(jsonOption)
|
|
123
|
+
.action(async (outputFile, options) => {
|
|
124
|
+
await runCommand(async () => {
|
|
125
|
+
const requests = await getNetworkRequests();
|
|
126
|
+
const outputPath = outputFile ?? generateHARFilename();
|
|
127
|
+
const dir = path.dirname(outputPath);
|
|
128
|
+
if (dir !== '.' && !fs.existsSync(dir)) {
|
|
129
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
130
|
+
}
|
|
131
|
+
const har = buildHAR(requests, {
|
|
132
|
+
version: VERSION,
|
|
133
|
+
});
|
|
134
|
+
await AtomicFileWriter.writeAsync(outputPath, JSON.stringify(har, null, 2));
|
|
135
|
+
return {
|
|
136
|
+
success: true,
|
|
137
|
+
data: {
|
|
138
|
+
file: outputPath,
|
|
139
|
+
entries: har.log.entries.length,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}, options, formatHARExport);
|
|
143
|
+
});
|
|
14
144
|
networkCmd
|
|
15
145
|
.command('getCookies')
|
|
16
146
|
.description('List cookies from the current page')
|
|
@@ -18,24 +148,43 @@ export function registerNetworkCommands(program) {
|
|
|
18
148
|
.addOption(jsonOption)
|
|
19
149
|
.action(async (options) => {
|
|
20
150
|
await runCommand(async (opts) => {
|
|
21
|
-
// Build CDP method parameters
|
|
22
151
|
const params = {};
|
|
23
152
|
if (opts.url) {
|
|
24
153
|
params['urls'] = [opts.url];
|
|
25
154
|
}
|
|
26
|
-
// Call CDP Network.getCookies
|
|
27
155
|
const response = await callCDP('Network.getCookies', params);
|
|
28
|
-
// Validate IPC response (throws on error)
|
|
29
156
|
validateIPCResponse(response);
|
|
30
|
-
// Extract cookies from CDP response
|
|
31
157
|
const cookies = response.data?.result?.cookies ?? [];
|
|
32
158
|
return {
|
|
33
159
|
success: true,
|
|
34
160
|
data: cookies,
|
|
35
161
|
};
|
|
36
|
-
}, options,
|
|
37
|
-
|
|
38
|
-
|
|
162
|
+
}, options, formatCookies);
|
|
163
|
+
});
|
|
164
|
+
networkCmd
|
|
165
|
+
.command('headers [id]')
|
|
166
|
+
.description('Show HTTP headers (defaults to main page navigation)')
|
|
167
|
+
.option('--header <name>', 'Filter to specific header name')
|
|
168
|
+
.addOption(jsonOption)
|
|
169
|
+
.action(async (id, options) => {
|
|
170
|
+
await runCommand(async (opts) => {
|
|
171
|
+
const response = await getNetworkHeaders({
|
|
172
|
+
...(id && { id }),
|
|
173
|
+
...(opts.header && { headerName: opts.header }),
|
|
174
|
+
});
|
|
175
|
+
validateIPCResponse(response);
|
|
176
|
+
if (!response.data) {
|
|
177
|
+
return {
|
|
178
|
+
success: false,
|
|
179
|
+
error: 'No data returned from worker',
|
|
180
|
+
exitCode: EXIT_CODES.RESOURCE_NOT_FOUND,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
success: true,
|
|
185
|
+
data: response.data,
|
|
186
|
+
};
|
|
187
|
+
}, options, formatNetworkHeaders);
|
|
39
188
|
});
|
|
40
189
|
}
|
|
41
190
|
//# sourceMappingURL=network.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peek.d.ts","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"peek.d.ts","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBzC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoH1D"}
|
package/dist/commands/peek.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { jsonOption } from '../commands/shared/commonOptions.js';
|
|
2
2
|
import { handleDaemonConnectionError } from '../commands/shared/daemonErrorHandler.js';
|
|
3
|
-
import { positiveIntRule } from '../commands/shared/validation.js';
|
|
3
|
+
import { positiveIntRule, resourceTypeRule } from '../commands/shared/validation.js';
|
|
4
4
|
import { getPeek } from '../ipc/client.js';
|
|
5
5
|
import { validateIPCResponse } from '../ipc/index.js';
|
|
6
|
+
import { filterByResourceType } from '../telemetry/filters.js';
|
|
6
7
|
import { formatPreview } from '../ui/formatters/preview.js';
|
|
7
8
|
import { followingPreviewMessage, stoppedFollowingPreviewMessage } from '../ui/messages/preview.js';
|
|
8
9
|
import { EXIT_CODES } from '../utils/exitCodes.js';
|
|
@@ -19,31 +20,32 @@ export function registerPeekCommand(program) {
|
|
|
19
20
|
.option('-v, --verbose', 'Use verbose output with full URLs and formatting', false)
|
|
20
21
|
.option('-n, --network', 'Show only network requests', false)
|
|
21
22
|
.option('-c, --console', 'Show only console messages', false)
|
|
23
|
+
.option('-d, --dom', 'Show DOM/A11y tree data', false)
|
|
22
24
|
.option('-f, --follow', 'Watch for updates (like tail -f)', false)
|
|
23
25
|
.option('--last <count>', 'Show last N items (network requests + console messages)', '10')
|
|
26
|
+
.option('--type <types>', 'Filter network requests by resource type (comma-separated: Document,XHR,Fetch,etc.)')
|
|
24
27
|
.action(async (options) => {
|
|
25
|
-
// Validate --last option using validation layer
|
|
26
28
|
const lastRule = positiveIntRule({ min: 1, max: 1000, default: 10 });
|
|
27
29
|
const lastN = lastRule.validate(options.last);
|
|
30
|
+
const typeRule = resourceTypeRule();
|
|
31
|
+
const resourceTypes = typeRule.validate(options.type);
|
|
28
32
|
const previewBase = {
|
|
29
33
|
json: options.json,
|
|
30
34
|
network: options.network,
|
|
31
35
|
console: options.console,
|
|
36
|
+
dom: options.dom,
|
|
32
37
|
last: lastN,
|
|
33
38
|
verbose: options.verbose,
|
|
34
39
|
follow: options.follow,
|
|
35
40
|
};
|
|
36
41
|
const showPreview = async () => {
|
|
37
42
|
try {
|
|
38
|
-
// Fetch preview data via IPC from daemon
|
|
39
43
|
const response = await getPeek();
|
|
40
|
-
// Validate IPC response (will throw on error)
|
|
41
44
|
try {
|
|
42
45
|
validateIPCResponse(response);
|
|
43
46
|
}
|
|
44
47
|
catch {
|
|
45
48
|
const errorMsg = response.error ?? 'Unknown error';
|
|
46
|
-
// No active session - use RESOURCE_NOT_FOUND
|
|
47
49
|
const exitCode = errorMsg.includes('No active session')
|
|
48
50
|
? EXIT_CODES.RESOURCE_NOT_FOUND
|
|
49
51
|
: EXIT_CODES.SESSION_FILE_ERROR;
|
|
@@ -58,7 +60,6 @@ export function registerPeekCommand(program) {
|
|
|
58
60
|
}
|
|
59
61
|
return;
|
|
60
62
|
}
|
|
61
|
-
// Extract preview data from response
|
|
62
63
|
const output = response.data?.preview;
|
|
63
64
|
if (!output) {
|
|
64
65
|
const result = handleDaemonConnectionError('No preview data in response', {
|
|
@@ -72,15 +73,22 @@ export function registerPeekCommand(program) {
|
|
|
72
73
|
}
|
|
73
74
|
return;
|
|
74
75
|
}
|
|
75
|
-
// Clear screen before rendering to prevent stacked outputs in follow mode
|
|
76
76
|
if (options.follow) {
|
|
77
77
|
console.clear();
|
|
78
78
|
}
|
|
79
|
-
// Add current view timestamp for follow mode to show refresh time
|
|
80
79
|
const previewOptions = previewBase.follow
|
|
81
80
|
? { ...previewBase, viewedAt: new Date() }
|
|
82
81
|
: previewBase;
|
|
83
|
-
|
|
82
|
+
const filteredOutput = {
|
|
83
|
+
...output,
|
|
84
|
+
data: {
|
|
85
|
+
...output.data,
|
|
86
|
+
...(output.data.network && {
|
|
87
|
+
network: filterByResourceType(output.data.network, resourceTypes),
|
|
88
|
+
}),
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
console.log(formatPreview(filteredOutput, previewOptions));
|
|
84
92
|
}
|
|
85
93
|
catch {
|
|
86
94
|
const result = handleDaemonConnectionError('Daemon not running', {
|
|
@@ -94,13 +102,11 @@ export function registerPeekCommand(program) {
|
|
|
94
102
|
}
|
|
95
103
|
};
|
|
96
104
|
if (options.follow) {
|
|
97
|
-
// Follow mode: update every second
|
|
98
105
|
console.error(followingPreviewMessage());
|
|
99
106
|
await showPreview();
|
|
100
107
|
const followInterval = setInterval(() => {
|
|
101
108
|
void showPreview();
|
|
102
109
|
}, 1000);
|
|
103
|
-
// Handle Ctrl+C gracefully
|
|
104
110
|
process.on('SIGINT', () => {
|
|
105
111
|
clearInterval(followInterval);
|
|
106
112
|
console.error(stoppedFollowingPreviewMessage());
|
|
@@ -108,7 +114,6 @@ export function registerPeekCommand(program) {
|
|
|
108
114
|
});
|
|
109
115
|
}
|
|
110
116
|
else {
|
|
111
|
-
// One-time preview
|
|
112
117
|
await showPreview();
|
|
113
118
|
}
|
|
114
119
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peek.js","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"peek.js","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandRunner.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/CommandRunner.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,IAAI,CACnF,OAAO,EAAE,QAAQ,KACd,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAErC;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,UAAU,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,EACrF,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC1C,OAAO,EAAE,QAAQ,EACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"CommandRunner.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/CommandRunner.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,IAAI,CACnF,OAAO,EAAE,QAAQ,KACd,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAErC;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,UAAU,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,EACrF,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC1C,OAAO,EAAE,QAAQ,EACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAiFf"}
|
|
@@ -33,7 +33,6 @@ export async function runCommand(handler, options, formatter) {
|
|
|
33
33
|
try {
|
|
34
34
|
const result = await handler(options);
|
|
35
35
|
if (!result.success) {
|
|
36
|
-
// Error result from handler
|
|
37
36
|
if (options.json) {
|
|
38
37
|
const errorData = {
|
|
39
38
|
...(result.exitCode !== undefined && { exitCode: result.exitCode }),
|
|
@@ -43,7 +42,6 @@ export async function runCommand(handler, options, formatter) {
|
|
|
43
42
|
}
|
|
44
43
|
else {
|
|
45
44
|
console.error(result.error ? genericError(result.error) : unknownError());
|
|
46
|
-
// Show errorContext suggestions in human-readable mode
|
|
47
45
|
if (result.errorContext && typeof result.errorContext === 'object') {
|
|
48
46
|
for (const value of Object.values(result.errorContext)) {
|
|
49
47
|
if (typeof value === 'string') {
|
|
@@ -54,7 +52,6 @@ export async function runCommand(handler, options, formatter) {
|
|
|
54
52
|
}
|
|
55
53
|
process.exit(result.exitCode ?? EXIT_CODES.UNHANDLED_EXCEPTION);
|
|
56
54
|
}
|
|
57
|
-
// Success - output data
|
|
58
55
|
if (options.json) {
|
|
59
56
|
console.log(JSON.stringify(result.data, null, 2));
|
|
60
57
|
}
|
|
@@ -63,20 +60,17 @@ export async function runCommand(handler, options, formatter) {
|
|
|
63
60
|
console.log(formattedOutput);
|
|
64
61
|
}
|
|
65
62
|
else {
|
|
66
|
-
// Fallback: JSON output if no formatter provided
|
|
67
63
|
console.log(JSON.stringify(result.data, null, 2));
|
|
68
64
|
}
|
|
69
65
|
process.exit(EXIT_CODES.SUCCESS);
|
|
70
66
|
}
|
|
71
67
|
catch (error) {
|
|
72
|
-
// Handle CommandError with metadata and custom exit code
|
|
73
68
|
if (error instanceof CommandError) {
|
|
74
69
|
if (options.json) {
|
|
75
70
|
console.log(JSON.stringify(OutputBuilder.buildJsonError(error.message, error.metadata), null, 2));
|
|
76
71
|
}
|
|
77
72
|
else {
|
|
78
73
|
console.error(genericError(error.message));
|
|
79
|
-
// Output metadata as additional help text
|
|
80
74
|
for (const value of Object.values(error.metadata)) {
|
|
81
75
|
console.error(value);
|
|
82
76
|
}
|
|
@@ -84,7 +78,6 @@ export async function runCommand(handler, options, formatter) {
|
|
|
84
78
|
process.exit(error.exitCode);
|
|
85
79
|
}
|
|
86
80
|
const errorMessage = getErrorMessage(error);
|
|
87
|
-
// Detect daemon connection errors
|
|
88
81
|
if (isDaemonConnectionError(error)) {
|
|
89
82
|
if (options.json) {
|
|
90
83
|
console.log(JSON.stringify(OutputBuilder.buildJsonError('Daemon not running', {
|
|
@@ -96,7 +89,6 @@ export async function runCommand(handler, options, formatter) {
|
|
|
96
89
|
}
|
|
97
90
|
process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
|
|
98
91
|
}
|
|
99
|
-
// Generic error
|
|
100
92
|
if (options.json) {
|
|
101
93
|
console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMessage), null, 2));
|
|
102
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandRunner.js","sourceRoot":"","sources":["../../../src/commands/shared/CommandRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AA4ClD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAA0C,EAC1C,OAAiB,EACjB,SAAqC;IAErC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAEtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,
|
|
1
|
+
{"version":3,"file":"CommandRunner.js","sourceRoot":"","sources":["../../../src/commands/shared/CommandRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.unit.test.d.ts","sourceRoot":"","sources":["../../../../src/commands/shared/__tests__/validation.unit.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|