browser-debugger-cli 0.6.5 → 0.6.7
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 +48 -269
- package/dist/commands/__tests__/helpJson.contract.test.d.ts +12 -0
- package/dist/commands/__tests__/helpJson.contract.test.d.ts.map +1 -0
- package/dist/commands/__tests__/helpJson.contract.test.js +121 -0
- package/dist/commands/__tests__/helpJson.contract.test.js.map +1 -0
- package/dist/commands/__tests__/machineReadableHelp.contract.test.js +26 -7
- package/dist/commands/__tests__/machineReadableHelp.contract.test.js.map +1 -1
- package/dist/commands/cdp.d.ts.map +1 -1
- package/dist/commands/cdp.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +17 -91
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/console.d.ts.map +1 -1
- package/dist/commands/console.js.map +1 -1
- package/dist/commands/details.d.ts.map +1 -1
- package/dist/commands/details.js +3 -1
- package/dist/commands/details.js.map +1 -1
- package/dist/commands/dom/DomElementResolver.d.ts +138 -0
- package/dist/commands/dom/DomElementResolver.d.ts.map +1 -0
- package/dist/commands/dom/DomElementResolver.js +173 -0
- package/dist/commands/dom/DomElementResolver.js.map +1 -0
- package/dist/commands/dom/a11y.d.ts.map +1 -1
- package/dist/commands/dom/a11y.js +37 -33
- package/dist/commands/dom/a11y.js.map +1 -1
- package/dist/commands/dom/evalHelpers.d.ts.map +1 -1
- package/dist/commands/dom/evalHelpers.js +1 -1
- package/dist/commands/dom/evalHelpers.js.map +1 -1
- package/dist/commands/dom/formFillHelpers.d.ts +68 -2
- package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
- package/dist/commands/dom/formFillHelpers.js +216 -70
- 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 +128 -15
- package/dist/commands/dom/formInteraction.js.map +1 -1
- package/dist/commands/dom/helpers.d.ts +11 -2
- package/dist/commands/dom/helpers.d.ts.map +1 -1
- package/dist/commands/dom/helpers.js +50 -1
- 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 +105 -52
- package/dist/commands/dom/index.js.map +1 -1
- package/dist/commands/dom/keyMapping.d.ts +56 -0
- package/dist/commands/dom/keyMapping.d.ts.map +1 -0
- package/dist/commands/dom/keyMapping.js +110 -0
- package/dist/commands/dom/keyMapping.js.map +1 -0
- package/dist/commands/dom/reactEventHelpers.d.ts +19 -20
- package/dist/commands/dom/reactEventHelpers.d.ts.map +1 -1
- package/dist/commands/dom/reactEventHelpers.js +73 -80
- package/dist/commands/dom/reactEventHelpers.js.map +1 -1
- package/dist/commands/helpJson.d.ts +165 -0
- package/dist/commands/helpJson.d.ts.map +1 -0
- package/dist/commands/helpJson.js +252 -0
- package/dist/commands/helpJson.js.map +1 -0
- package/dist/commands/machineReadableHelp.d.ts +21 -2
- package/dist/commands/machineReadableHelp.d.ts.map +1 -1
- package/dist/commands/machineReadableHelp.js +95 -60
- package/dist/commands/machineReadableHelp.js.map +1 -1
- package/dist/commands/network.d.ts.map +1 -1
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/peek.d.ts.map +1 -1
- package/dist/commands/peek.js +20 -13
- package/dist/commands/peek.js.map +1 -1
- package/dist/commands/shared/CommandRunner.d.ts +4 -10
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +2 -2
- package/dist/commands/shared/CommandRunner.js.map +1 -1
- package/dist/commands/shared/commonOptions.d.ts +0 -15
- package/dist/commands/shared/commonOptions.d.ts.map +1 -1
- package/dist/commands/shared/commonOptions.js +0 -32
- package/dist/commands/shared/commonOptions.js.map +1 -1
- package/dist/commands/shared/optionTypes.d.ts +237 -0
- package/dist/commands/shared/optionTypes.d.ts.map +1 -0
- package/dist/commands/shared/optionTypes.js +20 -0
- package/dist/commands/shared/optionTypes.js.map +1 -0
- package/dist/commands/shared/startHelpers.d.ts.map +1 -1
- package/dist/commands/shared/startHelpers.js +3 -3
- package/dist/commands/shared/startHelpers.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +8 -6
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +17 -43
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tail.d.ts.map +1 -1
- package/dist/commands/tail.js +49 -59
- package/dist/commands/tail.js.map +1 -1
- package/dist/connection/types.d.ts +2 -1
- package/dist/connection/types.d.ts.map +1 -1
- package/dist/constants.d.ts +19 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +45 -2
- package/dist/constants.js.map +1 -1
- package/dist/daemon/handlers/responseHandler.d.ts.map +1 -1
- package/dist/daemon/handlers/responseHandler.js +1 -0
- package/dist/daemon/handlers/responseHandler.js.map +1 -1
- package/dist/daemon/ipcServer.js +8 -8
- package/dist/daemon/ipcServer.js.map +1 -1
- package/dist/daemon/lifecycle/signalHandlers.d.ts.map +1 -1
- package/dist/daemon/lifecycle/signalHandlers.js +19 -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 +5 -2
- package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
- package/dist/daemon/patternDefinitions.d.ts +0 -13
- package/dist/daemon/patternDefinitions.d.ts.map +1 -1
- package/dist/daemon/patternDefinitions.js +0 -17
- package/dist/daemon/patternDefinitions.js.map +1 -1
- package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
- package/dist/daemon/worker/commandRegistry.js +1 -0
- package/dist/daemon/worker/commandRegistry.js.map +1 -1
- package/dist/index.js +34 -2
- package/dist/index.js.map +1 -1
- package/dist/ipc/__tests__/jsonl.unit.test.js +5 -5
- package/dist/ipc/__tests__/jsonl.unit.test.js.map +1 -1
- package/dist/ipc/protocol/commands.d.ts +2 -0
- package/dist/ipc/protocol/commands.d.ts.map +1 -1
- package/dist/ipc/protocol/commands.js.map +1 -1
- package/dist/ipc/session/queries.d.ts +2 -0
- package/dist/ipc/session/queries.d.ts.map +1 -1
- package/dist/ipc/utils/responseValidator.d.ts +7 -1
- package/dist/ipc/utils/responseValidator.d.ts.map +1 -1
- package/dist/ipc/utils/responseValidator.js +6 -1
- package/dist/ipc/utils/responseValidator.js.map +1 -1
- package/dist/session/QueryCacheManager.d.ts +140 -0
- package/dist/session/QueryCacheManager.d.ts.map +1 -0
- package/dist/session/QueryCacheManager.js +233 -0
- package/dist/session/QueryCacheManager.js.map +1 -0
- package/dist/session/cleanup.d.ts +63 -1
- package/dist/session/cleanup.d.ts.map +1 -1
- package/dist/session/cleanup.js +191 -65
- package/dist/session/cleanup.js.map +1 -1
- package/dist/session/queryCache.d.ts +25 -14
- package/dist/session/queryCache.d.ts.map +1 -1
- package/dist/session/queryCache.js +31 -60
- package/dist/session/queryCache.js.map +1 -1
- package/dist/telemetry/__tests__/roleInference.unit.test.d.ts +9 -0
- package/dist/telemetry/__tests__/roleInference.unit.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/roleInference.unit.test.js +138 -0
- package/dist/telemetry/__tests__/roleInference.unit.test.js.map +1 -0
- package/dist/telemetry/dom.d.ts +1 -0
- package/dist/telemetry/dom.d.ts.map +1 -1
- package/dist/telemetry/dom.js +9 -4
- package/dist/telemetry/dom.js.map +1 -1
- package/dist/telemetry/filters.d.ts +3 -0
- package/dist/telemetry/filters.d.ts.map +1 -1
- package/dist/telemetry/filters.js +25 -3
- package/dist/telemetry/filters.js.map +1 -1
- package/dist/telemetry/network.d.ts.map +1 -1
- package/dist/telemetry/network.js +35 -6
- package/dist/telemetry/network.js.map +1 -1
- package/dist/telemetry/roleInference.d.ts +50 -0
- package/dist/telemetry/roleInference.d.ts.map +1 -0
- package/dist/telemetry/roleInference.js +163 -0
- package/dist/telemetry/roleInference.js.map +1 -0
- package/dist/telemetry/utils.d.ts +0 -57
- package/dist/telemetry/utils.d.ts.map +1 -1
- package/dist/telemetry/utils.js +0 -71
- package/dist/telemetry/utils.js.map +1 -1
- package/dist/types/dom.d.ts +11 -0
- package/dist/types/dom.d.ts.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/formatters/a11y.d.ts +13 -3
- package/dist/ui/formatters/a11y.d.ts.map +1 -1
- package/dist/ui/formatters/a11y.js +18 -3
- package/dist/ui/formatters/a11y.js.map +1 -1
- package/dist/ui/formatters/preview.d.ts +4 -0
- package/dist/ui/formatters/preview.d.ts.map +1 -1
- package/dist/ui/formatters/preview.js +26 -43
- package/dist/ui/formatters/preview.js.map +1 -1
- package/dist/ui/formatters/sessionFormatters.d.ts.map +1 -1
- package/dist/ui/formatters/sessionFormatters.js +2 -0
- package/dist/ui/formatters/sessionFormatters.js.map +1 -1
- package/dist/ui/logging/index.d.ts +1 -1
- package/dist/ui/logging/index.d.ts.map +1 -1
- package/dist/ui/logging/index.js +1 -1
- package/dist/ui/logging/index.js.map +1 -1
- package/dist/ui/logging/logger.d.ts +21 -0
- package/dist/ui/logging/logger.d.ts.map +1 -1
- package/dist/ui/logging/logger.js +24 -6
- package/dist/ui/logging/logger.js.map +1 -1
- package/dist/ui/messages/commands.d.ts +0 -14
- package/dist/ui/messages/commands.d.ts.map +1 -1
- package/dist/ui/messages/commands.js +0 -18
- package/dist/ui/messages/commands.js.map +1 -1
- package/dist/ui/messages/errors.d.ts +0 -16
- package/dist/ui/messages/errors.d.ts.map +1 -1
- package/dist/ui/messages/errors.js +0 -18
- package/dist/ui/messages/errors.js.map +1 -1
- package/dist/ui/messages/hints.d.ts +0 -10
- package/dist/ui/messages/hints.d.ts.map +1 -1
- package/dist/ui/messages/hints.js +0 -12
- package/dist/ui/messages/hints.js.map +1 -1
- package/dist/utils/decisionTrees.d.ts +0 -17
- package/dist/utils/decisionTrees.d.ts.map +1 -1
- package/dist/utils/decisionTrees.js +5 -21
- package/dist/utils/decisionTrees.js.map +1 -1
- package/dist/utils/errorMapping.d.ts +60 -0
- package/dist/utils/errorMapping.d.ts.map +1 -0
- package/dist/utils/errorMapping.js +97 -0
- package/dist/utils/errorMapping.js.map +1 -0
- package/dist/utils/file.d.ts +27 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +37 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/levenshtein.d.ts +0 -17
- package/dist/utils/levenshtein.d.ts.map +1 -1
- package/dist/utils/levenshtein.js +0 -31
- package/dist/utils/levenshtein.js.map +1 -1
- package/dist/utils/taskMappings.d.ts +0 -17
- package/dist/utils/taskMappings.d.ts.map +1 -1
- package/dist/utils/taskMappings.js +5 -21
- package/dist/utils/taskMappings.js.map +1 -1
- package/dist/utils/typeGuards.d.ts +62 -0
- package/dist/utils/typeGuards.d.ts.map +1 -0
- package/dist/utils/typeGuards.js +94 -0
- package/dist/utils/typeGuards.js.map +1 -0
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +15 -2
- package/dist/utils/url.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorMapping.js","sourceRoot":"","sources":["../../src/utils/errorMapping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAwB;IAC7D,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,YAAY,CAAC,UAAU;YAC1B,OAAO,UAAU,CAAC,kBAAkB,CAAC;QAEvC,KAAK,YAAY,CAAC,uBAAuB;YACvC,OAAO,UAAU,CAAC,uBAAuB,CAAC;QAE5C,KAAK,YAAY,CAAC,oBAAoB;YACpC,OAAO,UAAU,CAAC,qBAAqB,CAAC;QAE1C,KAAK,YAAY,CAAC,WAAW;YAC3B,OAAO,UAAU,CAAC,WAAW,CAAC;QAEhC,KAAK,YAAY,CAAC,mBAAmB,CAAC;QACtC,KAAK,YAAY,CAAC,mBAAmB,CAAC;QACtC,KAAK,YAAY,CAAC,YAAY,CAAC;QAC/B,KAAK,SAAS;YACZ,OAAO,UAAU,CAAC,mBAAmB,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,YAAoB;IACnD,OAAO,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAClF,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,6BAA6B,CAAC,YAAoB;IAChE,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAEhD,IAAI,uBAAuB,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1C,OAAO,UAAU,CAAC,kBAAkB,CAAC;IACvC,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC/C,OAAO,UAAU,CAAC,kBAAkB,CAAC;IACvC,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,OAAO,UAAU,CAAC,WAAW,CAAC;IAChC,CAAC;IAED,OAAO,UAAU,CAAC,kBAAkB,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CAAC,YAAoB;IAC1D,OAAO,uBAAuB,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File system utilities for safe file operations.
|
|
3
|
+
*
|
|
4
|
+
* Provides wrapper functions that handle errors gracefully and log failures
|
|
5
|
+
* at debug level instead of throwing exceptions.
|
|
6
|
+
*/
|
|
7
|
+
import type { Logger } from '../ui/logging/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Safely remove a file, logging any errors at debug level.
|
|
10
|
+
*
|
|
11
|
+
* Uses `fs.rmSync` with `force: true` to avoid errors if the file doesn't exist.
|
|
12
|
+
* Any errors during removal are logged at debug level instead of thrown.
|
|
13
|
+
*
|
|
14
|
+
* @param path - Absolute path to the file to remove
|
|
15
|
+
* @param context - Human-readable description for debug logging (e.g., "metadata file")
|
|
16
|
+
* @param log - Logger instance to use for debug output
|
|
17
|
+
* @returns True if file was removed or didn't exist, false if removal failed
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const log = createLogger('cleanup');
|
|
22
|
+
* safeRemoveFile('/path/to/session.pid', 'session PID file', log);
|
|
23
|
+
* // On error logs: [cleanup] Failed to remove session PID file: EACCES: permission denied
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function safeRemoveFile(path: string, context: string, log: Logger): boolean;
|
|
27
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAQlF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File system utilities for safe file operations.
|
|
3
|
+
*
|
|
4
|
+
* Provides wrapper functions that handle errors gracefully and log failures
|
|
5
|
+
* at debug level instead of throwing exceptions.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import { logDebugError } from '../ui/logging/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Safely remove a file, logging any errors at debug level.
|
|
11
|
+
*
|
|
12
|
+
* Uses `fs.rmSync` with `force: true` to avoid errors if the file doesn't exist.
|
|
13
|
+
* Any errors during removal are logged at debug level instead of thrown.
|
|
14
|
+
*
|
|
15
|
+
* @param path - Absolute path to the file to remove
|
|
16
|
+
* @param context - Human-readable description for debug logging (e.g., "metadata file")
|
|
17
|
+
* @param log - Logger instance to use for debug output
|
|
18
|
+
* @returns True if file was removed or didn't exist, false if removal failed
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const log = createLogger('cleanup');
|
|
23
|
+
* safeRemoveFile('/path/to/session.pid', 'session PID file', log);
|
|
24
|
+
* // On error logs: [cleanup] Failed to remove session PID file: EACCES: permission denied
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function safeRemoveFile(path, context, log) {
|
|
28
|
+
try {
|
|
29
|
+
fs.rmSync(path, { force: true });
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
logDebugError(log, `remove ${context}`, error);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAGzB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe,EAAE,GAAW;IACvE,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa,CAAC,GAAG,EAAE,UAAU,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -25,21 +25,4 @@
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
export declare function levenshteinDistance(str1: string, str2: string): number;
|
|
28
|
-
/**
|
|
29
|
-
* Find closest matches from a list of candidates based on edit distance.
|
|
30
|
-
*
|
|
31
|
-
* @param target - The string to match against
|
|
32
|
-
* @param candidates - Array of candidate strings
|
|
33
|
-
* @param maxResults - Maximum number of results to return (default: 3)
|
|
34
|
-
* @param maxDistance - Maximum edit distance to consider (default: half target length or 3)
|
|
35
|
-
* @returns Array of closest matching candidates, sorted by distance
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* ```typescript
|
|
39
|
-
* const candidates = ['apple', 'application', 'apply', 'banana'];
|
|
40
|
-
* findClosestMatches('aple', candidates); // ['apple', 'apply']
|
|
41
|
-
* findClosestMatches('app', candidates, 2); // ['apple', 'apply']
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
export declare function findClosestMatches(target: string, candidates: string[], maxResults?: number, maxDistance?: number): string[];
|
|
45
28
|
//# sourceMappingURL=levenshtein.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"levenshtein.d.ts","sourceRoot":"","sources":["../../src/utils/levenshtein.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA6BtE
|
|
1
|
+
{"version":3,"file":"levenshtein.d.ts","sourceRoot":"","sources":["../../src/utils/levenshtein.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA6BtE"}
|
|
@@ -51,35 +51,4 @@ export function levenshteinDistance(str1, str2) {
|
|
|
51
51
|
}
|
|
52
52
|
return matrix[len1]?.[len2] ?? 0;
|
|
53
53
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Find closest matches from a list of candidates based on edit distance.
|
|
56
|
-
*
|
|
57
|
-
* @param target - The string to match against
|
|
58
|
-
* @param candidates - Array of candidate strings
|
|
59
|
-
* @param maxResults - Maximum number of results to return (default: 3)
|
|
60
|
-
* @param maxDistance - Maximum edit distance to consider (default: half target length or 3)
|
|
61
|
-
* @returns Array of closest matching candidates, sorted by distance
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```typescript
|
|
65
|
-
* const candidates = ['apple', 'application', 'apply', 'banana'];
|
|
66
|
-
* findClosestMatches('aple', candidates); // ['apple', 'apply']
|
|
67
|
-
* findClosestMatches('app', candidates, 2); // ['apple', 'apply']
|
|
68
|
-
* ```
|
|
69
|
-
*/
|
|
70
|
-
export function findClosestMatches(target, candidates, maxResults = 3, maxDistance) {
|
|
71
|
-
const targetLower = target.toLowerCase();
|
|
72
|
-
const threshold = maxDistance ?? Math.max(targetLower.length / 2, 3);
|
|
73
|
-
const matches = [];
|
|
74
|
-
for (const candidate of candidates) {
|
|
75
|
-
const distance = levenshteinDistance(targetLower, candidate.toLowerCase());
|
|
76
|
-
if (distance <= threshold) {
|
|
77
|
-
matches.push({ candidate, distance });
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return matches
|
|
81
|
-
.sort((a, b) => a.distance - b.distance)
|
|
82
|
-
.slice(0, maxResults)
|
|
83
|
-
.map((m) => m.candidate);
|
|
84
|
-
}
|
|
85
54
|
//# sourceMappingURL=levenshtein.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"levenshtein.js","sourceRoot":"","sources":["../../src/utils/levenshtein.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,IAAY;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YAC1D,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC
|
|
1
|
+
{"version":3,"file":"levenshtein.js","sourceRoot":"","sources":["../../src/utils/levenshtein.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,IAAY;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YAC1D,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -21,27 +21,10 @@ export interface TaskMapping {
|
|
|
21
21
|
* Maps common automation intents to optimal command patterns.
|
|
22
22
|
*/
|
|
23
23
|
export declare const TASK_MAPPINGS: Record<string, TaskMapping>;
|
|
24
|
-
/**
|
|
25
|
-
* Get task mapping by key.
|
|
26
|
-
*
|
|
27
|
-
* @param taskKey - Task identifier
|
|
28
|
-
* @returns Task mapping if found, undefined otherwise
|
|
29
|
-
*/
|
|
30
|
-
export declare function getTaskMapping(taskKey: string): TaskMapping | undefined;
|
|
31
24
|
/**
|
|
32
25
|
* Get all task mappings.
|
|
33
26
|
*
|
|
34
27
|
* @returns Complete task mapping registry
|
|
35
28
|
*/
|
|
36
29
|
export declare function getAllTaskMappings(): Record<string, TaskMapping>;
|
|
37
|
-
/**
|
|
38
|
-
* Search task mappings by description keyword.
|
|
39
|
-
*
|
|
40
|
-
* @param keyword - Search term (case-insensitive)
|
|
41
|
-
* @returns Matching task mappings with keys
|
|
42
|
-
*/
|
|
43
|
-
export declare function searchTaskMappings(keyword: string): Array<{
|
|
44
|
-
key: string;
|
|
45
|
-
mapping: TaskMapping;
|
|
46
|
-
}>;
|
|
47
30
|
//# sourceMappingURL=taskMappings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taskMappings.d.ts","sourceRoot":"","sources":["../../src/utils/taskMappings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"taskMappings.d.ts","sourceRoot":"","sources":["../../src/utils/taskMappings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAgGrD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAEhE"}
|
|
@@ -35,6 +35,11 @@ export const TASK_MAPPINGS = {
|
|
|
35
35
|
description: 'Click element by selector',
|
|
36
36
|
cdpAlternative: 'Runtime.evaluate with click()',
|
|
37
37
|
},
|
|
38
|
+
press_key: {
|
|
39
|
+
commands: ['dom pressKey'],
|
|
40
|
+
description: 'Press keyboard key on element (Enter, Tab, Escape, etc.)',
|
|
41
|
+
cdpAlternative: 'Input.dispatchKeyEvent',
|
|
42
|
+
},
|
|
38
43
|
get_element_details: {
|
|
39
44
|
commands: ['dom get'],
|
|
40
45
|
description: 'Get detailed element information',
|
|
@@ -86,15 +91,6 @@ export const TASK_MAPPINGS = {
|
|
|
86
91
|
cdpAlternative: 'IPC ping + process checks',
|
|
87
92
|
},
|
|
88
93
|
};
|
|
89
|
-
/**
|
|
90
|
-
* Get task mapping by key.
|
|
91
|
-
*
|
|
92
|
-
* @param taskKey - Task identifier
|
|
93
|
-
* @returns Task mapping if found, undefined otherwise
|
|
94
|
-
*/
|
|
95
|
-
export function getTaskMapping(taskKey) {
|
|
96
|
-
return TASK_MAPPINGS[taskKey];
|
|
97
|
-
}
|
|
98
94
|
/**
|
|
99
95
|
* Get all task mappings.
|
|
100
96
|
*
|
|
@@ -103,16 +99,4 @@ export function getTaskMapping(taskKey) {
|
|
|
103
99
|
export function getAllTaskMappings() {
|
|
104
100
|
return TASK_MAPPINGS;
|
|
105
101
|
}
|
|
106
|
-
/**
|
|
107
|
-
* Search task mappings by description keyword.
|
|
108
|
-
*
|
|
109
|
-
* @param keyword - Search term (case-insensitive)
|
|
110
|
-
* @returns Matching task mappings with keys
|
|
111
|
-
*/
|
|
112
|
-
export function searchTaskMappings(keyword) {
|
|
113
|
-
const lowerKeyword = keyword.toLowerCase();
|
|
114
|
-
return Object.entries(TASK_MAPPINGS)
|
|
115
|
-
.filter(([, mapping]) => mapping.description.toLowerCase().includes(lowerKeyword))
|
|
116
|
-
.map(([key, mapping]) => ({ key, mapping }));
|
|
117
|
-
}
|
|
118
102
|
//# sourceMappingURL=taskMappings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taskMappings.js","sourceRoot":"","sources":["../../src/utils/taskMappings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,gBAAgB,CAAC;QAC5B,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,wBAAwB;KACzC;IAED,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,WAAW,EAAE,oCAAoC;QACjD,cAAc,EAAE,qCAAqC;KACtD;IAED,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,WAAW,EAAE,8CAA8C;QAC3D,cAAc,EAAE,kBAAkB;KACnC;IAED,eAAe,EAAE;QACf,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,WAAW,EAAE,mCAAmC;QAChD,cAAc,EAAE,wCAAwC;KACzD;IAED,aAAa,EAAE;QACb,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,WAAW,EAAE,2BAA2B;QACxC,cAAc,EAAE,+BAA+B;KAChD;IAED,mBAAmB,EAAE;QACnB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,WAAW,EAAE,kCAAkC;QAC/C,cAAc,EAAE,2CAA2C;KAC5D;IAED,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,WAAW,EAAE,4CAA4C;QACzD,cAAc,EAAE,6BAA6B;KAC9C;IAED,UAAU,EAAE;QACV,QAAQ,EAAE,CAAC,aAAa,CAAC;QACzB,WAAW,EAAE,oCAAoC;QACjD,cAAc,EAAE,kCAAkC;KACnD;IAED,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,oBAAoB,CAAC;QAChC,WAAW,EAAE,kCAAkC;QAC/C,cAAc,EAAE,uBAAuB;KACxC;IAED,mBAAmB,EAAE;QACnB,QAAQ,EAAE,CAAC,iBAAiB,CAAC;QAC7B,WAAW,EAAE,uCAAuC;QACpD,cAAc,EAAE,sCAAsC;KACvD;IAED,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,eAAe,CAAC;QAC3B,WAAW,EAAE,uCAAuC;QACpD,cAAc,EAAE,iCAAiC;KAClD;IAED,YAAY,EAAE;QACZ,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,4CAA4C;QACzD,cAAc,EAAE,sCAAsC;KACvD;IAED,eAAe,EAAE;QACf,QAAQ,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC;QACnC,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,6CAA6C;KAC9D;IAED,gBAAgB,EAAE;QAChB,QAAQ,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;QAChD,WAAW,EAAE,0DAA0D;QACvE,cAAc,EAAE,0CAA0C;KAC3D;IAED,oBAAoB,EAAE;QACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,WAAW,EAAE,yCAAyC;QACtD,cAAc,EAAE,2BAA2B;KAC5C;CACF,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"taskMappings.js","sourceRoot":"","sources":["../../src/utils/taskMappings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,gBAAgB,CAAC;QAC5B,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,wBAAwB;KACzC;IAED,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,WAAW,EAAE,oCAAoC;QACjD,cAAc,EAAE,qCAAqC;KACtD;IAED,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,WAAW,EAAE,8CAA8C;QAC3D,cAAc,EAAE,kBAAkB;KACnC;IAED,eAAe,EAAE;QACf,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,WAAW,EAAE,mCAAmC;QAChD,cAAc,EAAE,wCAAwC;KACzD;IAED,aAAa,EAAE;QACb,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,WAAW,EAAE,2BAA2B;QACxC,cAAc,EAAE,+BAA+B;KAChD;IAED,SAAS,EAAE;QACT,QAAQ,EAAE,CAAC,cAAc,CAAC;QAC1B,WAAW,EAAE,0DAA0D;QACvE,cAAc,EAAE,wBAAwB;KACzC;IAED,mBAAmB,EAAE;QACnB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,WAAW,EAAE,kCAAkC;QAC/C,cAAc,EAAE,2CAA2C;KAC5D;IAED,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,WAAW,EAAE,4CAA4C;QACzD,cAAc,EAAE,6BAA6B;KAC9C;IAED,UAAU,EAAE;QACV,QAAQ,EAAE,CAAC,aAAa,CAAC;QACzB,WAAW,EAAE,oCAAoC;QACjD,cAAc,EAAE,kCAAkC;KACnD;IAED,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,oBAAoB,CAAC;QAChC,WAAW,EAAE,kCAAkC;QAC/C,cAAc,EAAE,uBAAuB;KACxC;IAED,mBAAmB,EAAE;QACnB,QAAQ,EAAE,CAAC,iBAAiB,CAAC;QAC7B,WAAW,EAAE,uCAAuC;QACpD,cAAc,EAAE,sCAAsC;KACvD;IAED,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,eAAe,CAAC;QAC3B,WAAW,EAAE,uCAAuC;QACpD,cAAc,EAAE,iCAAiC;KAClD;IAED,YAAY,EAAE;QACZ,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,4CAA4C;QACzD,cAAc,EAAE,sCAAsC;KACvD;IAED,eAAe,EAAE;QACf,QAAQ,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC;QACnC,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,6CAA6C;KAC9D;IAED,gBAAgB,EAAE;QAChB,QAAQ,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;QAChD,WAAW,EAAE,0DAA0D;QACvE,cAAc,EAAE,0CAA0C;KAC3D;IAED,oBAAoB,EAAE;QACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,WAAW,EAAE,yCAAyC;QACtD,cAAc,EAAE,2BAA2B;KAC5C;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type guards for runtime type validation.
|
|
3
|
+
*
|
|
4
|
+
* Provides type-safe validation of IPC response data, replacing unsafe
|
|
5
|
+
* `as unknown as` type assertions with proper runtime checks.
|
|
6
|
+
*
|
|
7
|
+
* WHY: Type assertions bypass TypeScript's type system and can lead to
|
|
8
|
+
* runtime errors. Type guards provide actual runtime validation while
|
|
9
|
+
* maintaining type safety.
|
|
10
|
+
*/
|
|
11
|
+
import type { NetworkRequest, ConsoleMessage } from '../types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Type guard to check if a value is a valid NetworkRequest.
|
|
14
|
+
*
|
|
15
|
+
* Validates the presence of required NetworkRequest properties.
|
|
16
|
+
*
|
|
17
|
+
* @param value - Unknown value to validate
|
|
18
|
+
* @returns True if value is a valid NetworkRequest
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* if (isNetworkRequest(item)) {
|
|
23
|
+
* console.log(item.url); // TypeScript knows item is NetworkRequest
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function isNetworkRequest(value: unknown): value is NetworkRequest;
|
|
28
|
+
/**
|
|
29
|
+
* Type guard to check if a value is a valid ConsoleMessage.
|
|
30
|
+
*
|
|
31
|
+
* Validates the presence of required ConsoleMessage properties.
|
|
32
|
+
*
|
|
33
|
+
* @param value - Unknown value to validate
|
|
34
|
+
* @returns True if value is a valid ConsoleMessage
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* if (isConsoleMessage(item)) {
|
|
39
|
+
* console.log(item.text); // TypeScript knows item is ConsoleMessage
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function isConsoleMessage(value: unknown): value is ConsoleMessage;
|
|
44
|
+
/**
|
|
45
|
+
* Validate and return a details item with proper type safety.
|
|
46
|
+
*
|
|
47
|
+
* Replaces unsafe `as unknown as` assertions with runtime validation.
|
|
48
|
+
* Throws CommandError if validation fails.
|
|
49
|
+
*
|
|
50
|
+
* @param item - Unknown item from IPC response
|
|
51
|
+
* @param type - Expected type ('network' or 'console')
|
|
52
|
+
* @returns Validated NetworkRequest or ConsoleMessage
|
|
53
|
+
* @throws CommandError if item fails validation
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const validatedItem = validateDetailsItem(response.data.item, 'network');
|
|
58
|
+
* // validatedItem is now typed as NetworkRequest | ConsoleMessage
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function validateDetailsItem(item: unknown, type: 'network' | 'console'): NetworkRequest | ConsoleMessage;
|
|
62
|
+
//# sourceMappingURL=typeGuards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeGuards.d.ts","sourceRoot":"","sources":["../../src/utils/typeGuards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAaxE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAYxE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,SAAS,GAAG,SAAS,GAC1B,cAAc,GAAG,cAAc,CA4BjC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type guards for runtime type validation.
|
|
3
|
+
*
|
|
4
|
+
* Provides type-safe validation of IPC response data, replacing unsafe
|
|
5
|
+
* `as unknown as` type assertions with proper runtime checks.
|
|
6
|
+
*
|
|
7
|
+
* WHY: Type assertions bypass TypeScript's type system and can lead to
|
|
8
|
+
* runtime errors. Type guards provide actual runtime validation while
|
|
9
|
+
* maintaining type safety.
|
|
10
|
+
*/
|
|
11
|
+
import { CommandError } from '../ui/errors/index.js';
|
|
12
|
+
import { EXIT_CODES } from '../utils/exitCodes.js';
|
|
13
|
+
/**
|
|
14
|
+
* Type guard to check if a value is a valid NetworkRequest.
|
|
15
|
+
*
|
|
16
|
+
* Validates the presence of required NetworkRequest properties.
|
|
17
|
+
*
|
|
18
|
+
* @param value - Unknown value to validate
|
|
19
|
+
* @returns True if value is a valid NetworkRequest
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* if (isNetworkRequest(item)) {
|
|
24
|
+
* console.log(item.url); // TypeScript knows item is NetworkRequest
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function isNetworkRequest(value) {
|
|
29
|
+
if (!value || typeof value !== 'object') {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
const record = value;
|
|
33
|
+
return (typeof record['requestId'] === 'string' &&
|
|
34
|
+
typeof record['url'] === 'string' &&
|
|
35
|
+
typeof record['method'] === 'string' &&
|
|
36
|
+
typeof record['timestamp'] === 'number');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Type guard to check if a value is a valid ConsoleMessage.
|
|
40
|
+
*
|
|
41
|
+
* Validates the presence of required ConsoleMessage properties.
|
|
42
|
+
*
|
|
43
|
+
* @param value - Unknown value to validate
|
|
44
|
+
* @returns True if value is a valid ConsoleMessage
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* if (isConsoleMessage(item)) {
|
|
49
|
+
* console.log(item.text); // TypeScript knows item is ConsoleMessage
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function isConsoleMessage(value) {
|
|
54
|
+
if (!value || typeof value !== 'object') {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const record = value;
|
|
58
|
+
return (typeof record['type'] === 'string' &&
|
|
59
|
+
typeof record['text'] === 'string' &&
|
|
60
|
+
typeof record['timestamp'] === 'number');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Validate and return a details item with proper type safety.
|
|
64
|
+
*
|
|
65
|
+
* Replaces unsafe `as unknown as` assertions with runtime validation.
|
|
66
|
+
* Throws CommandError if validation fails.
|
|
67
|
+
*
|
|
68
|
+
* @param item - Unknown item from IPC response
|
|
69
|
+
* @param type - Expected type ('network' or 'console')
|
|
70
|
+
* @returns Validated NetworkRequest or ConsoleMessage
|
|
71
|
+
* @throws CommandError if item fails validation
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const validatedItem = validateDetailsItem(response.data.item, 'network');
|
|
76
|
+
* // validatedItem is now typed as NetworkRequest | ConsoleMessage
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export function validateDetailsItem(item, type) {
|
|
80
|
+
if (!item || typeof item !== 'object') {
|
|
81
|
+
throw new CommandError('Invalid item data: expected an object', { suggestion: 'This may indicate corrupted data from the daemon' }, EXIT_CODES.SESSION_FILE_ERROR);
|
|
82
|
+
}
|
|
83
|
+
if (type === 'network') {
|
|
84
|
+
if (!isNetworkRequest(item)) {
|
|
85
|
+
throw new CommandError('Invalid network request data: missing required fields (requestId, url, method, timestamp)', { suggestion: 'The request data may be incomplete or corrupted' }, EXIT_CODES.SESSION_FILE_ERROR);
|
|
86
|
+
}
|
|
87
|
+
return item;
|
|
88
|
+
}
|
|
89
|
+
if (!isConsoleMessage(item)) {
|
|
90
|
+
throw new CommandError('Invalid console message data: missing required fields (type, text, timestamp)', { suggestion: 'The console message data may be incomplete or corrupted' }, EXIT_CODES.SESSION_FILE_ERROR);
|
|
91
|
+
}
|
|
92
|
+
return item;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=typeGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../src/utils/typeGuards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,KAAgC,CAAC;IAEhD,OAAO,CACL,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ;QACvC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ;QACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ;QACpC,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,CACxC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,KAAgC,CAAC;IAEhD,OAAO,CACL,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ;QAClC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ;QAClC,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,CACxC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAa,EACb,IAA2B;IAE3B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,YAAY,CACpB,uCAAuC,EACvC,EAAE,UAAU,EAAE,kDAAkD,EAAE,EAClE,UAAU,CAAC,kBAAkB,CAC9B,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,YAAY,CACpB,2FAA2F,EAC3F,EAAE,UAAU,EAAE,iDAAiD,EAAE,EACjE,UAAU,CAAC,kBAAkB,CAC9B,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,YAAY,CACpB,+EAA+E,EAC/E,EAAE,UAAU,EAAE,yDAAyD,EAAE,EACzE,UAAU,CAAC,kBAAkB,CAC9B,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
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":"AAAA;;GAEG;AAoCH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBhD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;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,
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoCH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBhD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;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,CA0FA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAUtD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7D"}
|
package/dist/utils/url.js
CHANGED
|
@@ -106,7 +106,20 @@ export function validateUrl(url) {
|
|
|
106
106
|
return {
|
|
107
107
|
valid: false,
|
|
108
108
|
error: `Invalid URL format: '${url}' (contains spaces)`,
|
|
109
|
-
suggestion: 'URLs cannot contain spaces',
|
|
109
|
+
suggestion: 'URLs cannot contain spaces. If your URL has query parameters, wrap it in quotes: bdg "https://example.com/search?q=test"',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Check for signs of shell glob expansion issues
|
|
113
|
+
// If URL looks like it might have been mangled by shell expansion
|
|
114
|
+
if (!url.includes('?') && !url.includes('&') && /^[a-z]+:\/\/[^/]+\/[^/]+$/.test(url)) {
|
|
115
|
+
// URL has path but no query params - might be fine, continue validation
|
|
116
|
+
}
|
|
117
|
+
// Detect if URL looks truncated (common when shell expands ? as glob)
|
|
118
|
+
if (url.endsWith('?') || url.endsWith('&')) {
|
|
119
|
+
return {
|
|
120
|
+
valid: false,
|
|
121
|
+
error: `URL appears truncated: '${url}'`,
|
|
122
|
+
suggestion: 'URLs with query parameters (? or &) must be quoted: bdg "https://example.com/search?q=test"',
|
|
110
123
|
};
|
|
111
124
|
}
|
|
112
125
|
const normalized = normalizeUrl(url);
|
|
@@ -153,7 +166,7 @@ export function validateUrl(url) {
|
|
|
153
166
|
return {
|
|
154
167
|
valid: false,
|
|
155
168
|
error: `Invalid URL format: '${url}'`,
|
|
156
|
-
suggestion: 'URLs must include a valid protocol (http:// or https://)',
|
|
169
|
+
suggestion: 'URLs must include a valid protocol (http:// or https://). If URL has query parameters, quote it: bdg "https://example.com?q=test"',
|
|
157
170
|
};
|
|
158
171
|
}
|
|
159
172
|
}
|
package/dist/utils/url.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;GAQG;AACH,MAAM,eAAe,GAAG;IACtB,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,aAAa;IACb,OAAO;CACC,CAAC;AAEX;;GAEG;AACH,MAAM,2BAA2B,GAAG;IAClC,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,SAAS;IACT,OAAO;IACP,aAAa;IACb,OAAO;CACC,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAEnC,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CACrE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAC5B,CAAC;IAEF,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,QAAQ,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,UAAU,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IAKrC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,qBAAqB;YAC5B,UAAU,EAAE,kDAAkD;SAC/D,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,wBAAwB,GAAG,qBAAqB;YACvD,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"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"}
|