browser-debugger-cli 0.6.6 → 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 +4 -28
- 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.map +1 -1
- package/dist/commands/dom/formFillHelpers.js +11 -11
- 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 +5 -5
- package/dist/commands/dom/formInteraction.js.map +1 -1
- package/dist/commands/dom/helpers.d.ts +0 -50
- package/dist/commands/dom/helpers.d.ts.map +1 -1
- package/dist/commands/dom/helpers.js +2 -56
- 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 +50 -44
- package/dist/commands/dom/index.js.map +1 -1
- package/dist/commands/dom/keyMapping.d.ts +0 -6
- package/dist/commands/dom/keyMapping.d.ts.map +1 -1
- package/dist/commands/dom/keyMapping.js +0 -8
- package/dist/commands/dom/keyMapping.js.map +1 -1
- package/dist/commands/dom/reactEventHelpers.d.ts +12 -18
- package/dist/commands/dom/reactEventHelpers.d.ts.map +1 -1
- package/dist/commands/dom/reactEventHelpers.js +21 -70
- 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 +5 -7
- 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 +14 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +39 -0
- 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/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 +2 -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 +0 -9
- package/dist/ui/formatters/a11y.d.ts.map +1 -1
- package/dist/ui/formatters/a11y.js +0 -45
- package/dist/ui/formatters/a11y.js.map +1 -1
- package/dist/ui/formatters/preview.d.ts.map +1 -1
- package/dist/ui/formatters/preview.js +2 -39
- package/dist/ui/formatters/preview.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 +0 -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 +0 -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/package.json +1 -1
|
@@ -18,12 +18,22 @@ function shouldFilterRequest(url, includeAll, networkInclude, networkExclude) {
|
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Fetch response body for a request.
|
|
21
|
+
* Fetch response body for a request with cancellation support.
|
|
22
|
+
*
|
|
23
|
+
* @param cdp - CDP connection instance
|
|
24
|
+
* @param requestId - Request ID to fetch body for
|
|
25
|
+
* @param request - Network request object to populate with body
|
|
26
|
+
* @param pendingFetches - Set to track pending fetch operations for cleanup
|
|
22
27
|
*/
|
|
23
|
-
function fetchResponseBody(cdp, requestId, request) {
|
|
28
|
+
function fetchResponseBody(cdp, requestId, request, pendingFetches) {
|
|
29
|
+
pendingFetches.add(requestId);
|
|
24
30
|
void cdp
|
|
25
31
|
.send('Network.getResponseBody', { requestId })
|
|
26
32
|
.then((response) => {
|
|
33
|
+
// Skip if cleanup has already removed this from pending
|
|
34
|
+
if (!pendingFetches.has(requestId)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
27
37
|
const typedResponse = response;
|
|
28
38
|
request.responseBody = typedResponse.body;
|
|
29
39
|
if (typedResponse.body) {
|
|
@@ -32,6 +42,9 @@ function fetchResponseBody(cdp, requestId, request) {
|
|
|
32
42
|
})
|
|
33
43
|
.catch((error) => {
|
|
34
44
|
log.debug(`Failed to fetch response body for request ${requestId}: ${getErrorMessage(error)}`);
|
|
45
|
+
})
|
|
46
|
+
.finally(() => {
|
|
47
|
+
pendingFetches.delete(requestId);
|
|
35
48
|
});
|
|
36
49
|
}
|
|
37
50
|
/**
|
|
@@ -52,18 +65,29 @@ function createNetworkRequest(params, getCurrentNavigationId) {
|
|
|
52
65
|
}
|
|
53
66
|
/**
|
|
54
67
|
* Clean up stale requests from the request map.
|
|
68
|
+
*
|
|
69
|
+
* Optimized to leverage Map insertion order - iterates from oldest entries
|
|
70
|
+
* and exits early once a non-stale request is found, avoiding O(n) full scan.
|
|
55
71
|
*/
|
|
56
72
|
function cleanupStaleRequests(requestMap) {
|
|
57
73
|
const now = Date.now();
|
|
58
74
|
const staleRequests = [];
|
|
59
|
-
|
|
75
|
+
// Maps maintain insertion order, so oldest entries come first.
|
|
76
|
+
// Exit early once we find a non-stale request since newer ones won't be stale either.
|
|
77
|
+
for (const [requestId, value] of requestMap) {
|
|
60
78
|
if (now - value.timestamp > STALE_REQUEST_TIMEOUT) {
|
|
61
79
|
staleRequests.push(requestId);
|
|
62
80
|
}
|
|
63
|
-
|
|
81
|
+
else {
|
|
82
|
+
// Found first non-stale request, stop iterating
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
64
86
|
if (staleRequests.length > 0) {
|
|
65
87
|
log.debug(`Cleaning up ${staleRequests.length} stale network requests`);
|
|
66
|
-
|
|
88
|
+
for (const requestId of staleRequests) {
|
|
89
|
+
requestMap.delete(requestId);
|
|
90
|
+
}
|
|
67
91
|
}
|
|
68
92
|
}
|
|
69
93
|
/**
|
|
@@ -89,6 +113,7 @@ function cleanupStaleRequests(requestMap) {
|
|
|
89
113
|
export async function startNetworkCollection(cdp, requests, options = {}) {
|
|
90
114
|
const { includeAll = false, fetchAllBodies = false, fetchBodiesInclude = [], fetchBodiesExclude = [], networkInclude = [], networkExclude = [], maxBodySize = MAX_RESPONSE_SIZE, getCurrentNavigationId, } = options;
|
|
91
115
|
const requestMap = new Map();
|
|
116
|
+
const pendingFetches = new Set();
|
|
92
117
|
const registry = new CDPHandlerRegistry();
|
|
93
118
|
const typed = new TypedCDPConnection(cdp);
|
|
94
119
|
let bodiesFetched = 0;
|
|
@@ -175,7 +200,7 @@ export async function startNetworkCollection(cdp, requests, options = {}) {
|
|
|
175
200
|
});
|
|
176
201
|
if (decision.should) {
|
|
177
202
|
bodiesFetched++;
|
|
178
|
-
fetchResponseBody(cdp, params.requestId, request);
|
|
203
|
+
fetchResponseBody(cdp, params.requestId, request, pendingFetches);
|
|
179
204
|
}
|
|
180
205
|
else {
|
|
181
206
|
bodiesSkipped++;
|
|
@@ -206,9 +231,13 @@ export async function startNetworkCollection(cdp, requests, options = {}) {
|
|
|
206
231
|
const percentageSkipped = ((bodiesSkipped / totalBodyDecisions) * 100).toFixed(1);
|
|
207
232
|
log.debug(`[PERF] Network bodies: ${bodiesFetched} fetched, ${bodiesSkipped} skipped (${percentageSkipped}% reduction)`);
|
|
208
233
|
}
|
|
234
|
+
if (pendingFetches.size > 0) {
|
|
235
|
+
log.debug(`[PERF] Cancelling ${pendingFetches.size} pending body fetches`);
|
|
236
|
+
}
|
|
209
237
|
clearInterval(cleanupInterval);
|
|
210
238
|
registry.cleanup();
|
|
211
239
|
requestMap.clear();
|
|
240
|
+
pendingFetches.clear();
|
|
212
241
|
};
|
|
213
242
|
}
|
|
214
243
|
//# sourceMappingURL=network.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/telemetry/network.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,iBAAiB,EACjB,2BAA2B,EAC3B,kCAAkC,EAClC,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEhG,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAEpC;;GAEG;AACH,SAAS,mBAAmB,CAC1B,GAAW,EACX,UAAmB,EACnB,cAAwB,EACxB,cAAwB;IAExB,IAAI,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,gBAAgB,CAAC,GAAG,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAChG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/telemetry/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Role inference utilities for synthesizing accessibility nodes from DOM context.
|
|
3
|
+
*
|
|
4
|
+
* When Chrome's accessibility tree returns no data for an element (all nodes ignored),
|
|
5
|
+
* these utilities infer semantic meaning from HTML tags using implicit ARIA roles.
|
|
6
|
+
*
|
|
7
|
+
* @see https://www.w3.org/TR/html-aria/#docconformance
|
|
8
|
+
*/
|
|
9
|
+
import type { DomContext } from '../types/dom.js';
|
|
10
|
+
import type { A11yNode } from '../types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Infers an ARIA role from an HTML tag name.
|
|
13
|
+
*
|
|
14
|
+
* Uses the WAI-ARIA specification's implicit role mappings.
|
|
15
|
+
* Returns 'generic' for unknown or non-semantic tags (div, span, etc.).
|
|
16
|
+
*
|
|
17
|
+
* @param tag - HTML tag name (case-insensitive)
|
|
18
|
+
* @returns Inferred ARIA role
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* inferRoleFromTag('button') // => 'button'
|
|
23
|
+
* inferRoleFromTag('H1') // => 'heading'
|
|
24
|
+
* inferRoleFromTag('div') // => 'generic'
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function inferRoleFromTag(tag: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Synthesizes an A11yNode from DOM context when accessibility data is unavailable.
|
|
30
|
+
*
|
|
31
|
+
* Creates a minimal accessibility node with:
|
|
32
|
+
* - Role inferred from HTML tag
|
|
33
|
+
* - Name from text preview (if available)
|
|
34
|
+
* - `inferred: true` flag to signal synthesized data
|
|
35
|
+
*
|
|
36
|
+
* @param domContext - DOM context with tag, classes, and text preview
|
|
37
|
+
* @param nodeId - CDP node ID to associate with the synthesized node
|
|
38
|
+
* @returns Synthesized A11yNode with `inferred: true`
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* synthesizeA11yNode(
|
|
43
|
+
* { tag: 'a', preview: 'Main page', classes: ['nav-link'] },
|
|
44
|
+
* 123
|
|
45
|
+
* );
|
|
46
|
+
* // => { nodeId: '123', role: 'link', name: 'Main page', inferred: true, backendDOMNodeId: 123 }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function synthesizeA11yNode(domContext: DomContext, nodeId: number): A11yNode;
|
|
50
|
+
//# sourceMappingURL=roleInference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roleInference.d.ts","sourceRoot":"","sources":["../../src/telemetry/roleInference.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAwF3C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGpD;AAiBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CA0BnF"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Role inference utilities for synthesizing accessibility nodes from DOM context.
|
|
3
|
+
*
|
|
4
|
+
* When Chrome's accessibility tree returns no data for an element (all nodes ignored),
|
|
5
|
+
* these utilities infer semantic meaning from HTML tags using implicit ARIA roles.
|
|
6
|
+
*
|
|
7
|
+
* @see https://www.w3.org/TR/html-aria/#docconformance
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Implicit ARIA roles mapped from HTML tags.
|
|
11
|
+
*
|
|
12
|
+
* Based on WAI-ARIA specification for HTML elements.
|
|
13
|
+
* These represent the default accessibility semantics browsers assign to elements.
|
|
14
|
+
*
|
|
15
|
+
* @see https://www.w3.org/TR/html-aria/#docconformance
|
|
16
|
+
*/
|
|
17
|
+
const IMPLICIT_ARIA_ROLES = {
|
|
18
|
+
// Interactive elements
|
|
19
|
+
a: 'link',
|
|
20
|
+
button: 'button',
|
|
21
|
+
input: 'textbox',
|
|
22
|
+
select: 'combobox',
|
|
23
|
+
textarea: 'textbox',
|
|
24
|
+
option: 'option',
|
|
25
|
+
// Headings
|
|
26
|
+
h1: 'heading',
|
|
27
|
+
h2: 'heading',
|
|
28
|
+
h3: 'heading',
|
|
29
|
+
h4: 'heading',
|
|
30
|
+
h5: 'heading',
|
|
31
|
+
h6: 'heading',
|
|
32
|
+
// Landmarks
|
|
33
|
+
nav: 'navigation',
|
|
34
|
+
main: 'main',
|
|
35
|
+
header: 'banner',
|
|
36
|
+
footer: 'contentinfo',
|
|
37
|
+
aside: 'complementary',
|
|
38
|
+
section: 'region',
|
|
39
|
+
article: 'article',
|
|
40
|
+
form: 'form',
|
|
41
|
+
search: 'search',
|
|
42
|
+
// Media
|
|
43
|
+
img: 'image',
|
|
44
|
+
figure: 'figure',
|
|
45
|
+
figcaption: 'caption',
|
|
46
|
+
video: 'video',
|
|
47
|
+
audio: 'audio',
|
|
48
|
+
// Lists
|
|
49
|
+
ul: 'list',
|
|
50
|
+
ol: 'list',
|
|
51
|
+
li: 'listitem',
|
|
52
|
+
dl: 'list',
|
|
53
|
+
dt: 'term',
|
|
54
|
+
dd: 'definition',
|
|
55
|
+
menu: 'menu',
|
|
56
|
+
menuitem: 'menuitem',
|
|
57
|
+
// Tables
|
|
58
|
+
table: 'table',
|
|
59
|
+
thead: 'rowgroup',
|
|
60
|
+
tbody: 'rowgroup',
|
|
61
|
+
tfoot: 'rowgroup',
|
|
62
|
+
tr: 'row',
|
|
63
|
+
th: 'columnheader',
|
|
64
|
+
td: 'cell',
|
|
65
|
+
// Other semantic elements
|
|
66
|
+
dialog: 'dialog',
|
|
67
|
+
details: 'group',
|
|
68
|
+
summary: 'button',
|
|
69
|
+
progress: 'progressbar',
|
|
70
|
+
meter: 'meter',
|
|
71
|
+
output: 'status',
|
|
72
|
+
address: 'group',
|
|
73
|
+
blockquote: 'blockquote',
|
|
74
|
+
code: 'code',
|
|
75
|
+
pre: 'group',
|
|
76
|
+
hr: 'separator',
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Default role when no implicit mapping exists.
|
|
80
|
+
*/
|
|
81
|
+
const DEFAULT_ROLE = 'generic';
|
|
82
|
+
/**
|
|
83
|
+
* Maximum length for synthesized accessible name from DOM text preview.
|
|
84
|
+
*/
|
|
85
|
+
const MAX_NAME_LENGTH = 100;
|
|
86
|
+
/**
|
|
87
|
+
* Infers an ARIA role from an HTML tag name.
|
|
88
|
+
*
|
|
89
|
+
* Uses the WAI-ARIA specification's implicit role mappings.
|
|
90
|
+
* Returns 'generic' for unknown or non-semantic tags (div, span, etc.).
|
|
91
|
+
*
|
|
92
|
+
* @param tag - HTML tag name (case-insensitive)
|
|
93
|
+
* @returns Inferred ARIA role
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* inferRoleFromTag('button') // => 'button'
|
|
98
|
+
* inferRoleFromTag('H1') // => 'heading'
|
|
99
|
+
* inferRoleFromTag('div') // => 'generic'
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export function inferRoleFromTag(tag) {
|
|
103
|
+
const normalizedTag = tag.toLowerCase();
|
|
104
|
+
return IMPLICIT_ARIA_ROLES[normalizedTag] ?? DEFAULT_ROLE;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Extracts heading level from tag name.
|
|
108
|
+
*
|
|
109
|
+
* @param tag - HTML tag name
|
|
110
|
+
* @returns Heading level (1-6) or null if not a heading
|
|
111
|
+
*/
|
|
112
|
+
function extractHeadingLevel(tag) {
|
|
113
|
+
const match = tag.toLowerCase().match(/^h([1-6])$/);
|
|
114
|
+
const level = match?.[1];
|
|
115
|
+
if (!level) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return parseInt(level, 10);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Synthesizes an A11yNode from DOM context when accessibility data is unavailable.
|
|
122
|
+
*
|
|
123
|
+
* Creates a minimal accessibility node with:
|
|
124
|
+
* - Role inferred from HTML tag
|
|
125
|
+
* - Name from text preview (if available)
|
|
126
|
+
* - `inferred: true` flag to signal synthesized data
|
|
127
|
+
*
|
|
128
|
+
* @param domContext - DOM context with tag, classes, and text preview
|
|
129
|
+
* @param nodeId - CDP node ID to associate with the synthesized node
|
|
130
|
+
* @returns Synthesized A11yNode with `inferred: true`
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* synthesizeA11yNode(
|
|
135
|
+
* { tag: 'a', preview: 'Main page', classes: ['nav-link'] },
|
|
136
|
+
* 123
|
|
137
|
+
* );
|
|
138
|
+
* // => { nodeId: '123', role: 'link', name: 'Main page', inferred: true, backendDOMNodeId: 123 }
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
export function synthesizeA11yNode(domContext, nodeId) {
|
|
142
|
+
const role = inferRoleFromTag(domContext.tag);
|
|
143
|
+
const node = {
|
|
144
|
+
nodeId: String(nodeId),
|
|
145
|
+
role,
|
|
146
|
+
inferred: true,
|
|
147
|
+
backendDOMNodeId: nodeId,
|
|
148
|
+
};
|
|
149
|
+
// Use text preview as accessible name (truncated if needed)
|
|
150
|
+
if (domContext.preview) {
|
|
151
|
+
const name = domContext.preview.length > MAX_NAME_LENGTH
|
|
152
|
+
? domContext.preview.slice(0, MAX_NAME_LENGTH - 3) + '...'
|
|
153
|
+
: domContext.preview;
|
|
154
|
+
node.name = name;
|
|
155
|
+
}
|
|
156
|
+
// Add heading level as property for h1-h6 elements
|
|
157
|
+
const headingLevel = extractHeadingLevel(domContext.tag);
|
|
158
|
+
if (headingLevel !== null) {
|
|
159
|
+
node.properties = { level: headingLevel };
|
|
160
|
+
}
|
|
161
|
+
return node;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=roleInference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roleInference.js","sourceRoot":"","sources":["../../src/telemetry/roleInference.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;;;;;;GAOG;AACH,MAAM,mBAAmB,GAA2B;IAClD,uBAAuB;IACvB,CAAC,EAAE,MAAM;IACT,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,UAAU;IAClB,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,QAAQ;IAEhB,WAAW;IACX,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,SAAS;IAEb,YAAY;IACZ,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,eAAe;IACtB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAEhB,QAAQ;IACR,GAAG,EAAE,OAAO;IACZ,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,SAAS;IACrB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IAEd,QAAQ;IACR,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IAEpB,SAAS;IACT,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,UAAU;IACjB,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,cAAc;IAClB,EAAE,EAAE,MAAM;IAEV,0BAA0B;IAC1B,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,aAAa;IACvB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,OAAO;IACZ,EAAE,EAAE,WAAW;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B;;GAEG;AACH,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,mBAAmB,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC;AAC5D,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAsB,EAAE,MAAc;IACvE,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAE9C,MAAM,IAAI,GAAa;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,IAAI;QACJ,QAAQ,EAAE,IAAI;QACd,gBAAgB,EAAE,MAAM;KACzB,CAAC;IAEF,4DAA4D;IAC5D,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,GACR,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe;YACzC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,GAAG,KAAK;YAC1D,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,mDAAmD;IACnD,MAAM,YAAY,GAAG,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -25,61 +25,4 @@ export declare function pushWithLimit<T>(buffer: T[], item: T, limit: number, on
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, label: string): Promise<T>;
|
|
28
|
-
/**
|
|
29
|
-
* Result of a batch CDP operation.
|
|
30
|
-
*/
|
|
31
|
-
export interface BatchCDPResult<T> {
|
|
32
|
-
/** Successfully resolved results */
|
|
33
|
-
results: T[];
|
|
34
|
-
/** Errors that occurred during execution */
|
|
35
|
-
errors: Array<{
|
|
36
|
-
index: number;
|
|
37
|
-
error: Error;
|
|
38
|
-
}>;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Execute multiple CDP operations in parallel with concurrency control.
|
|
42
|
-
*
|
|
43
|
-
* Processes an array of async operations with a maximum concurrency limit,
|
|
44
|
-
* preventing overwhelming of the CDP connection. Collects both successful
|
|
45
|
-
* results and errors, allowing partial success handling.
|
|
46
|
-
*
|
|
47
|
-
* @param operations - Array of async operations to execute
|
|
48
|
-
* @param concurrency - Maximum number of concurrent operations (default: 10)
|
|
49
|
-
* @returns Object containing successful results and errors with their indices
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```typescript
|
|
53
|
-
* const operations = nodeIds.map(id => () => cdp.send('DOM.describeNode', { nodeId: id }));
|
|
54
|
-
* const { results, errors } = await batchCDPOperations(operations, 5);
|
|
55
|
-
*
|
|
56
|
-
* if (errors.length > 0) {
|
|
57
|
-
* log.debug(`Failed to describe ${errors.length} nodes`);
|
|
58
|
-
* }
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
export declare function batchCDPOperations<T>(operations: Array<() => Promise<T>>, concurrency?: number): Promise<BatchCDPResult<T>>;
|
|
62
|
-
/**
|
|
63
|
-
* Process an array in parallel with concurrency control and transformation.
|
|
64
|
-
*
|
|
65
|
-
* Similar to `Promise.all(array.map(fn))` but with concurrency limiting and
|
|
66
|
-
* error collection. Useful for processing large arrays of data that require
|
|
67
|
-
* async operations without blocking the entire event loop.
|
|
68
|
-
*
|
|
69
|
-
* @param items - Array of items to process
|
|
70
|
-
* @param mapper - Async function to transform each item
|
|
71
|
-
* @param concurrency - Maximum number of concurrent operations (default: 10)
|
|
72
|
-
* @returns Object containing successful results and errors with their indices
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```typescript
|
|
76
|
-
* const requestIds = ['req1', 'req2', 'req3'];
|
|
77
|
-
* const { results, errors } = await parallelMap(
|
|
78
|
-
* requestIds,
|
|
79
|
-
* async (id) => cdp.send('Network.getResponseBody', { requestId: id }),
|
|
80
|
-
* 5
|
|
81
|
-
* );
|
|
82
|
-
* ```
|
|
83
|
-
*/
|
|
84
|
-
export declare function parallelMap<T, R>(items: T[], mapper: (item: T, index: number) => Promise<R>, concurrency?: number): Promise<BatchCDPResult<R>>;
|
|
85
28
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/telemetry/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/telemetry/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6BH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,MAAM,EAAE,CAAC,EAAE,EACX,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,IAAI,GACzB,IAAI,CAQN;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,CAAC,CAAC,CAOZ"}
|
package/dist/telemetry/utils.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared utilities for telemetry collectors
|
|
3
3
|
*/
|
|
4
|
-
import { ConcurrencyLimiter } from '../utils/concurrency.js';
|
|
5
4
|
/**
|
|
6
5
|
* Push an item to a bounded buffer with limit enforcement.
|
|
7
6
|
*
|
|
@@ -65,74 +64,4 @@ export async function withTimeout(promise, timeoutMs, label) {
|
|
|
65
64
|
new Promise((_, reject) => setTimeout(() => reject(new Error(`CDP ${label} timed out after ${timeoutMs}ms`)), timeoutMs)),
|
|
66
65
|
]);
|
|
67
66
|
}
|
|
68
|
-
/**
|
|
69
|
-
* Default concurrency limit for batch CDP operations.
|
|
70
|
-
* Prevents overwhelming the CDP connection with too many simultaneous requests.
|
|
71
|
-
*/
|
|
72
|
-
const DEFAULT_CDP_CONCURRENCY = 10;
|
|
73
|
-
/**
|
|
74
|
-
* Execute multiple CDP operations in parallel with concurrency control.
|
|
75
|
-
*
|
|
76
|
-
* Processes an array of async operations with a maximum concurrency limit,
|
|
77
|
-
* preventing overwhelming of the CDP connection. Collects both successful
|
|
78
|
-
* results and errors, allowing partial success handling.
|
|
79
|
-
*
|
|
80
|
-
* @param operations - Array of async operations to execute
|
|
81
|
-
* @param concurrency - Maximum number of concurrent operations (default: 10)
|
|
82
|
-
* @returns Object containing successful results and errors with their indices
|
|
83
|
-
*
|
|
84
|
-
* @example
|
|
85
|
-
* ```typescript
|
|
86
|
-
* const operations = nodeIds.map(id => () => cdp.send('DOM.describeNode', { nodeId: id }));
|
|
87
|
-
* const { results, errors } = await batchCDPOperations(operations, 5);
|
|
88
|
-
*
|
|
89
|
-
* if (errors.length > 0) {
|
|
90
|
-
* log.debug(`Failed to describe ${errors.length} nodes`);
|
|
91
|
-
* }
|
|
92
|
-
* ```
|
|
93
|
-
*/
|
|
94
|
-
export async function batchCDPOperations(operations, concurrency = DEFAULT_CDP_CONCURRENCY) {
|
|
95
|
-
const limiter = new ConcurrencyLimiter(concurrency);
|
|
96
|
-
const results = [];
|
|
97
|
-
const errors = [];
|
|
98
|
-
await Promise.all(operations.map((operation, index) => limiter.run(async () => {
|
|
99
|
-
try {
|
|
100
|
-
const result = await operation();
|
|
101
|
-
results.push(result);
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
errors.push({
|
|
105
|
-
index,
|
|
106
|
-
error: error instanceof Error ? error : new Error(String(error)),
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
})));
|
|
110
|
-
return { results, errors };
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Process an array in parallel with concurrency control and transformation.
|
|
114
|
-
*
|
|
115
|
-
* Similar to `Promise.all(array.map(fn))` but with concurrency limiting and
|
|
116
|
-
* error collection. Useful for processing large arrays of data that require
|
|
117
|
-
* async operations without blocking the entire event loop.
|
|
118
|
-
*
|
|
119
|
-
* @param items - Array of items to process
|
|
120
|
-
* @param mapper - Async function to transform each item
|
|
121
|
-
* @param concurrency - Maximum number of concurrent operations (default: 10)
|
|
122
|
-
* @returns Object containing successful results and errors with their indices
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
* ```typescript
|
|
126
|
-
* const requestIds = ['req1', 'req2', 'req3'];
|
|
127
|
-
* const { results, errors } = await parallelMap(
|
|
128
|
-
* requestIds,
|
|
129
|
-
* async (id) => cdp.send('Network.getResponseBody', { requestId: id }),
|
|
130
|
-
* 5
|
|
131
|
-
* );
|
|
132
|
-
* ```
|
|
133
|
-
*/
|
|
134
|
-
export async function parallelMap(items, mapper, concurrency = DEFAULT_CDP_CONCURRENCY) {
|
|
135
|
-
const operations = items.map((item, index) => () => mapper(item, index));
|
|
136
|
-
return batchCDPOperations(operations, concurrency);
|
|
137
|
-
}
|
|
138
67
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/telemetry/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/telemetry/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAAa,CAAC;AAErD,MAAM,UAAU,aAAa,CAC3B,MAAW,EACX,IAAO,EACP,KAAa,EACb,cAA0B;IAE1B,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAChE,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChC,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAmB,EACnB,SAAiB,EACjB,KAAa;IAEb,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,OAAO;QACP,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC3B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAoB,SAAS,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAC9F;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/types/dom.d.ts
CHANGED
package/dist/types/dom.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/types/dom.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/types/dom.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|
package/dist/types.d.ts
CHANGED
|
@@ -116,6 +116,8 @@ export interface A11yNode {
|
|
|
116
116
|
childIds?: string[];
|
|
117
117
|
/** Associated DOM node ID for querying */
|
|
118
118
|
backendDOMNodeId?: number;
|
|
119
|
+
/** True when node is synthesized from DOM context (a11y unavailable) */
|
|
120
|
+
inferred?: boolean;
|
|
119
121
|
}
|
|
120
122
|
/**
|
|
121
123
|
* Accessibility tree data structure.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,15 +26,6 @@ export declare function formatA11yTree(tree: A11yTree): string;
|
|
|
26
26
|
* @returns Formatted output string
|
|
27
27
|
*/
|
|
28
28
|
export declare function formatA11yQueryResult(result: A11yQueryResult): string;
|
|
29
|
-
/**
|
|
30
|
-
* Format single accessibility node for human-readable output.
|
|
31
|
-
*
|
|
32
|
-
* Shows detailed properties including role, name, description, value, and states.
|
|
33
|
-
*
|
|
34
|
-
* @param node - Accessibility node
|
|
35
|
-
* @returns Formatted output string
|
|
36
|
-
*/
|
|
37
|
-
export declare function formatA11yNode(node: A11yNode): string;
|
|
38
29
|
/**
|
|
39
30
|
* Format single accessibility node with DOM context fallback.
|
|
40
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../../../src/ui/formatters/a11y.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtE;;GAEG;AACH,UAAU,mBAAmB;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAaD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAmBrD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAyBrE;AAED
|
|
1
|
+
{"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../../../src/ui/formatters/a11y.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtE;;GAEG;AACH,UAAU,mBAAmB;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAaD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAmBrD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAyBrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CA6D3E"}
|
|
@@ -62,51 +62,6 @@ export function formatA11yQueryResult(result) {
|
|
|
62
62
|
}
|
|
63
63
|
return fmt.build();
|
|
64
64
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Format single accessibility node for human-readable output.
|
|
67
|
-
*
|
|
68
|
-
* Shows detailed properties including role, name, description, value, and states.
|
|
69
|
-
*
|
|
70
|
-
* @param node - Accessibility node
|
|
71
|
-
* @returns Formatted output string
|
|
72
|
-
*/
|
|
73
|
-
export function formatA11yNode(node) {
|
|
74
|
-
const fmt = new OutputFormatter();
|
|
75
|
-
fmt.text(`Accessibility Node: ${node.role}`).separator('─', SEPARATOR_WIDTH).blank();
|
|
76
|
-
const props = [];
|
|
77
|
-
if (node.name) {
|
|
78
|
-
props.push(['Name', node.name]);
|
|
79
|
-
}
|
|
80
|
-
if (node.description) {
|
|
81
|
-
props.push(['Description', node.description]);
|
|
82
|
-
}
|
|
83
|
-
if (node.value !== undefined) {
|
|
84
|
-
props.push(['Value', node.value]);
|
|
85
|
-
}
|
|
86
|
-
if (node.focusable) {
|
|
87
|
-
props.push(['Focusable', 'yes']);
|
|
88
|
-
}
|
|
89
|
-
if (node.focused) {
|
|
90
|
-
props.push(['Focused', 'yes']);
|
|
91
|
-
}
|
|
92
|
-
if (node.disabled) {
|
|
93
|
-
props.push(['Disabled', 'yes']);
|
|
94
|
-
}
|
|
95
|
-
if (node.required) {
|
|
96
|
-
props.push(['Required', 'yes']);
|
|
97
|
-
}
|
|
98
|
-
props.push(['Node ID', node.nodeId]);
|
|
99
|
-
if (node.backendDOMNodeId) {
|
|
100
|
-
props.push(['DOM Node ID', String(node.backendDOMNodeId)]);
|
|
101
|
-
}
|
|
102
|
-
fmt.keyValueList(props, 16);
|
|
103
|
-
if (node.properties && Object.keys(node.properties).length > 0) {
|
|
104
|
-
fmt.blank().text('Additional Properties:').blank();
|
|
105
|
-
const additionalProps = Object.entries(node.properties).map(([key, value]) => [key, String(value)]);
|
|
106
|
-
fmt.keyValueList(additionalProps, 20);
|
|
107
|
-
}
|
|
108
|
-
return fmt.build();
|
|
109
|
-
}
|
|
110
65
|
/**
|
|
111
66
|
* Format single accessibility node with DOM context fallback.
|
|
112
67
|
*
|