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,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":"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"}
|
|
@@ -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
|
@@ -4,6 +4,15 @@
|
|
|
4
4
|
* Shared type definitions for DOM query, get, and screenshot operations.
|
|
5
5
|
* Used by both commands and formatters to avoid circular dependencies.
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* DOM context information for enriching semantic output.
|
|
9
|
+
* Used when a11y name is missing to provide useful element context.
|
|
10
|
+
*/
|
|
11
|
+
export interface DomContext {
|
|
12
|
+
tag: string;
|
|
13
|
+
classes?: string[];
|
|
14
|
+
preview?: string;
|
|
15
|
+
}
|
|
7
16
|
/**
|
|
8
17
|
* Result of a DOM query operation
|
|
9
18
|
*/
|
|
@@ -17,6 +26,8 @@ export interface DomQueryResult {
|
|
|
17
26
|
classes?: string[];
|
|
18
27
|
preview?: string;
|
|
19
28
|
}>;
|
|
29
|
+
/** Navigation ID when query was performed (for staleness detection). */
|
|
30
|
+
navigationId?: number;
|
|
20
31
|
}
|
|
21
32
|
/**
|
|
22
33
|
* Result of a DOM get operation
|
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;;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":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D;;;;;GAKG;AACH,YAAY,EACV,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,MAAM,EACN,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,QAAQ,CAAC;QACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,IAAI,EAAE;QACJ,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;KAC5B,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,4BAA4B;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,kDAAkD;IAClD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7B,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,EAAE,gBAAgB,CAAC;CAC3B"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
+
import type { DomContext } from '../../types/dom.js';
|
|
1
2
|
import type { A11yTree, A11yQueryResult, A11yNode } from '../../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Data structure for a11y node with DOM context.
|
|
5
|
+
*/
|
|
6
|
+
interface A11yNodeWithContext {
|
|
7
|
+
node: A11yNode;
|
|
8
|
+
domContext: DomContext | null;
|
|
9
|
+
}
|
|
2
10
|
/**
|
|
3
11
|
* Format accessibility tree for human-readable output.
|
|
4
12
|
*
|
|
@@ -19,12 +27,14 @@ export declare function formatA11yTree(tree: A11yTree): string;
|
|
|
19
27
|
*/
|
|
20
28
|
export declare function formatA11yQueryResult(result: A11yQueryResult): string;
|
|
21
29
|
/**
|
|
22
|
-
* Format single accessibility node
|
|
30
|
+
* Format single accessibility node with DOM context fallback.
|
|
23
31
|
*
|
|
24
32
|
* Shows detailed properties including role, name, description, value, and states.
|
|
33
|
+
* When a11y data is sparse, includes DOM context (tag, classes, text preview).
|
|
25
34
|
*
|
|
26
|
-
* @param
|
|
35
|
+
* @param data - Accessibility node with DOM context
|
|
27
36
|
* @returns Formatted output string
|
|
28
37
|
*/
|
|
29
|
-
export declare function
|
|
38
|
+
export declare function formatA11yNodeWithContext(data: A11yNodeWithContext): string;
|
|
39
|
+
export {};
|
|
30
40
|
//# sourceMappingURL=a11y.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../../../src/ui/formatters/a11y.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
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"}
|
|
@@ -63,17 +63,20 @@ export function formatA11yQueryResult(result) {
|
|
|
63
63
|
return fmt.build();
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
|
-
* Format single accessibility node
|
|
66
|
+
* Format single accessibility node with DOM context fallback.
|
|
67
67
|
*
|
|
68
68
|
* Shows detailed properties including role, name, description, value, and states.
|
|
69
|
+
* When a11y data is sparse, includes DOM context (tag, classes, text preview).
|
|
69
70
|
*
|
|
70
|
-
* @param
|
|
71
|
+
* @param data - Accessibility node with DOM context
|
|
71
72
|
* @returns Formatted output string
|
|
72
73
|
*/
|
|
73
|
-
export function
|
|
74
|
+
export function formatA11yNodeWithContext(data) {
|
|
75
|
+
const { node, domContext } = data;
|
|
74
76
|
const fmt = new OutputFormatter();
|
|
75
77
|
fmt.text(`Accessibility Node: ${node.role}`).separator('─', SEPARATOR_WIDTH).blank();
|
|
76
78
|
const props = [];
|
|
79
|
+
// A11y properties
|
|
77
80
|
if (node.name) {
|
|
78
81
|
props.push(['Name', node.name]);
|
|
79
82
|
}
|
|
@@ -83,6 +86,18 @@ export function formatA11yNode(node) {
|
|
|
83
86
|
if (node.value !== undefined) {
|
|
84
87
|
props.push(['Value', node.value]);
|
|
85
88
|
}
|
|
89
|
+
// DOM context fallback when a11y data is sparse
|
|
90
|
+
if (domContext) {
|
|
91
|
+
props.push(['Tag', `<${domContext.tag}>`]);
|
|
92
|
+
if (domContext.classes && domContext.classes.length > 0) {
|
|
93
|
+
props.push(['Classes', domContext.classes.join(' ')]);
|
|
94
|
+
}
|
|
95
|
+
if (domContext.preview && !node.name && !node.description) {
|
|
96
|
+
// Only show text preview if no a11y name/description
|
|
97
|
+
props.push(['Text Preview', domContext.preview]);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// State properties
|
|
86
101
|
if (node.focusable) {
|
|
87
102
|
props.push(['Focusable', 'yes']);
|
|
88
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a11y.js","sourceRoot":"","sources":["../../../src/ui/formatters/a11y.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"a11y.js","sourceRoot":"","sources":["../../../src/ui/formatters/a11y.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,10 @@ export interface PreviewOptions {
|
|
|
19
19
|
follow?: boolean | undefined;
|
|
20
20
|
/** Current view timestamp (for follow mode to show refresh time). */
|
|
21
21
|
viewedAt?: Date | undefined;
|
|
22
|
+
/** Resource types that were filtered (for showing feedback when no matches). */
|
|
23
|
+
filteredTypes?: string[] | undefined;
|
|
24
|
+
/** Total network requests before filtering (for showing feedback when no matches). */
|
|
25
|
+
unfilteredNetworkCount?: number | undefined;
|
|
22
26
|
}
|
|
23
27
|
/**
|
|
24
28
|
* Format preview output (peek command)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/ui/formatters/preview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/ui/formatters/preview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAoDzC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,+BAA+B;IAC/B,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAC5B,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,sFAAsF;IACtF,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAMhF"}
|
|
@@ -1,49 +1,12 @@
|
|
|
1
|
+
import { RESOURCE_TYPE_ABBREVIATIONS, MIME_TYPE_RULES } from '../../constants.js';
|
|
1
2
|
import { OutputFormatter, truncateUrl, truncateText } from '../../ui/formatting.js';
|
|
2
3
|
import { PREVIEW_EMPTY_STATES, PREVIEW_HEADERS, compactTipsMessage, verboseCommandsMessage, } from '../../ui/messages/preview.js';
|
|
3
4
|
import { semantic } from './semantic.js';
|
|
4
|
-
/**
|
|
5
|
-
* Resource type abbreviation mapping for compact display.
|
|
6
|
-
* Defined at module level to avoid recreation on every call.
|
|
7
|
-
*/
|
|
8
|
-
const RESOURCE_TYPE_ABBREVIATIONS = {
|
|
9
|
-
Document: 'DOC',
|
|
10
|
-
Stylesheet: 'CSS',
|
|
11
|
-
Image: 'IMG',
|
|
12
|
-
Media: 'MED',
|
|
13
|
-
Font: 'FNT',
|
|
14
|
-
Script: 'SCR',
|
|
15
|
-
TextTrack: 'TXT',
|
|
16
|
-
XHR: 'XHR',
|
|
17
|
-
Fetch: 'FET',
|
|
18
|
-
Prefetch: 'PRE',
|
|
19
|
-
EventSource: 'EVT',
|
|
20
|
-
WebSocket: 'WS',
|
|
21
|
-
Manifest: 'MAN',
|
|
22
|
-
SignedExchange: 'SGX',
|
|
23
|
-
Ping: 'PNG',
|
|
24
|
-
CSPViolationReport: 'CSP',
|
|
25
|
-
Preflight: 'FLT',
|
|
26
|
-
FedCM: 'FED',
|
|
27
|
-
Other: 'OTH',
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* Rules for inferring resource types from MIME patterns.
|
|
31
|
-
* Ordered by precedence (first match wins).
|
|
32
|
-
*/
|
|
33
|
-
const MIME_TYPE_RULES = [
|
|
34
|
-
{ type: 'Document', match: /text\/html/i },
|
|
35
|
-
{ type: 'Stylesheet', match: /text\/css/i },
|
|
36
|
-
{ type: 'Script', match: /(java|ecma)script/i },
|
|
37
|
-
{ type: 'Image', match: /^image\//i },
|
|
38
|
-
{ type: 'Font', match: /font/i },
|
|
39
|
-
{ type: 'Media', match: /^(video|audio)\//i },
|
|
40
|
-
{ type: 'XHR', match: /json|xml/i },
|
|
41
|
-
];
|
|
42
5
|
/**
|
|
43
6
|
* Infer resource type from MIME type when CDP doesn't provide it.
|
|
44
7
|
*
|
|
45
8
|
* @param mimeType - MIME type string (e.g., 'application/json', 'text/html')
|
|
46
|
-
* @returns Inferred
|
|
9
|
+
* @returns Inferred resource type string or undefined
|
|
47
10
|
*/
|
|
48
11
|
function inferResourceTypeFromMime(mimeType) {
|
|
49
12
|
if (!mimeType)
|
|
@@ -145,14 +108,24 @@ function formatPreviewCompact(output, options) {
|
|
|
145
108
|
const hasNetworkData = output.data.network && output.data.network.length > 0;
|
|
146
109
|
const hasConsoleData = output.data.console && output.data.console.length > 0;
|
|
147
110
|
if (!options.console && output.data.network) {
|
|
148
|
-
if (options.console
|
|
111
|
+
if (!options.console || hasNetworkData) {
|
|
149
112
|
const requests = lastCount === 0 ? output.data.network : output.data.network.slice(-lastCount);
|
|
150
113
|
const showingCount = requests.length;
|
|
151
114
|
const totalCount = output.data.network.length;
|
|
152
115
|
const limitHint = formatLimitHint(showingCount, totalCount);
|
|
153
116
|
fmt.text(`NETWORK (${showingCount}/${totalCount})${limitHint}:`);
|
|
154
117
|
if (requests.length === 0) {
|
|
155
|
-
|
|
118
|
+
if (options.filteredTypes &&
|
|
119
|
+
options.filteredTypes.length > 0 &&
|
|
120
|
+
options.unfilteredNetworkCount &&
|
|
121
|
+
options.unfilteredNetworkCount > 0) {
|
|
122
|
+
const typesStr = options.filteredTypes.join(', ');
|
|
123
|
+
fmt.text(` No ${typesStr} requests found (filtered from ${options.unfilteredNetworkCount} total requests)`);
|
|
124
|
+
fmt.text(` Try: bdg peek --network (to see all types)`);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
fmt.text(` ${PREVIEW_EMPTY_STATES.NO_DATA}`);
|
|
128
|
+
}
|
|
156
129
|
}
|
|
157
130
|
else {
|
|
158
131
|
const networkLines = requests.map((req) => {
|
|
@@ -226,14 +199,24 @@ function formatPreviewVerbose(output, options) {
|
|
|
226
199
|
const hasNetworkData = output.data.network && output.data.network.length > 0;
|
|
227
200
|
const hasConsoleData = output.data.console && output.data.console.length > 0;
|
|
228
201
|
if (!options.console && output.data.network) {
|
|
229
|
-
if (options.console
|
|
202
|
+
if (!options.console || hasNetworkData) {
|
|
230
203
|
const requests = lastCount === 0 ? output.data.network : output.data.network.slice(-lastCount);
|
|
231
204
|
const title = lastCount === 0
|
|
232
205
|
? `Network Requests (all ${requests.length})`
|
|
233
206
|
: `Network Requests (last ${requests.length} of ${output.data.network.length})`;
|
|
234
207
|
fmt.text(title).separator('━', 50);
|
|
235
208
|
if (requests.length === 0) {
|
|
236
|
-
|
|
209
|
+
if (options.filteredTypes &&
|
|
210
|
+
options.filteredTypes.length > 0 &&
|
|
211
|
+
options.unfilteredNetworkCount &&
|
|
212
|
+
options.unfilteredNetworkCount > 0) {
|
|
213
|
+
const typesStr = options.filteredTypes.join(', ');
|
|
214
|
+
fmt.text(`No ${typesStr} requests found (filtered from ${options.unfilteredNetworkCount} total requests)`);
|
|
215
|
+
fmt.text(`Try: bdg peek --network (to see all resource types)`);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
fmt.text(PREVIEW_EMPTY_STATES.NO_NETWORK_REQUESTS);
|
|
219
|
+
}
|
|
237
220
|
}
|
|
238
221
|
else {
|
|
239
222
|
requests.forEach((req) => {
|