mcp-accessibility-scanner 3.0.1 → 3.2.0

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.
Files changed (85) hide show
  1. package/README.md +265 -12
  2. package/index.d.ts +1 -1
  3. package/lib/browserContextFactory.js +1161 -94
  4. package/lib/browserContextFactory.js.map +1 -1
  5. package/lib/browserServerBackend.js +199 -22
  6. package/lib/browserServerBackend.js.map +1 -1
  7. package/lib/browserSessions.js +172 -0
  8. package/lib/browserSessions.js.map +1 -0
  9. package/lib/config.js +48 -7
  10. package/lib/config.js.map +1 -1
  11. package/lib/context.js +321 -71
  12. package/lib/context.js.map +1 -1
  13. package/lib/extension/cdpRelay.js +5 -0
  14. package/lib/extension/cdpRelay.js.map +1 -1
  15. package/lib/extension/extensionContextFactory.js +12 -1
  16. package/lib/extension/extensionContextFactory.js.map +1 -1
  17. package/lib/index.js +5 -1
  18. package/lib/index.js.map +1 -1
  19. package/lib/mcp/http.js +194 -44
  20. package/lib/mcp/http.js.map +1 -1
  21. package/lib/mcp/inProcessTransport.js.map +1 -1
  22. package/lib/mcp/mdb.js +7 -9
  23. package/lib/mcp/mdb.js.map +1 -1
  24. package/lib/mcp/proxyBackend.js +76 -18
  25. package/lib/mcp/proxyBackend.js.map +1 -1
  26. package/lib/mcp/server.js +70 -41
  27. package/lib/mcp/server.js.map +1 -1
  28. package/lib/mcp/sharedClientSlot.js +134 -0
  29. package/lib/mcp/sharedClientSlot.js.map +1 -0
  30. package/lib/mcp/tool.js +3 -0
  31. package/lib/mcp/tool.js.map +1 -1
  32. package/lib/networkPolicy.js +73 -0
  33. package/lib/networkPolicy.js.map +1 -0
  34. package/lib/program.js +91 -12
  35. package/lib/program.js.map +1 -1
  36. package/lib/response.js +16 -3
  37. package/lib/response.js.map +1 -1
  38. package/lib/sessionLog.js +36 -6
  39. package/lib/sessionLog.js.map +1 -1
  40. package/lib/tab.js +149 -18
  41. package/lib/tab.js.map +1 -1
  42. package/lib/tools/auditKeyboard.js +204 -4
  43. package/lib/tools/auditKeyboard.js.map +1 -1
  44. package/lib/tools/auditScreenReader.js +823 -0
  45. package/lib/tools/auditScreenReader.js.map +1 -0
  46. package/lib/tools/auditSite.js +268 -90
  47. package/lib/tools/auditSite.js.map +1 -1
  48. package/lib/tools/axe.js +479 -21
  49. package/lib/tools/axe.js.map +1 -1
  50. package/lib/tools/dialogs.js +18 -4
  51. package/lib/tools/dialogs.js.map +1 -1
  52. package/lib/tools/evaluate.js +34 -5
  53. package/lib/tools/evaluate.js.map +1 -1
  54. package/lib/tools/network.js +136 -8
  55. package/lib/tools/network.js.map +1 -1
  56. package/lib/tools/pdf.js +5 -2
  57. package/lib/tools/pdf.js.map +1 -1
  58. package/lib/tools/scanPageMatrix.js +135 -47
  59. package/lib/tools/scanPageMatrix.js.map +1 -1
  60. package/lib/tools/screenshot.js +8 -4
  61. package/lib/tools/screenshot.js.map +1 -1
  62. package/lib/tools/session.js +53 -0
  63. package/lib/tools/session.js.map +1 -0
  64. package/lib/tools/snapshot.js +266 -8
  65. package/lib/tools/snapshot.js.map +1 -1
  66. package/lib/tools/tool.js.map +1 -1
  67. package/lib/tools/utils.js +62 -6
  68. package/lib/tools/utils.js.map +1 -1
  69. package/lib/tools.js +11 -2
  70. package/lib/tools.js.map +1 -1
  71. package/lib/utils/dataUrl.js +58 -35
  72. package/lib/utils/dataUrl.js.map +1 -1
  73. package/lib/utils/fileUtils.js +35 -0
  74. package/lib/utils/fileUtils.js.map +1 -1
  75. package/lib/utils/guid.js +8 -0
  76. package/lib/utils/guid.js.map +1 -1
  77. package/lib/utils/jsSource.js +187 -0
  78. package/lib/utils/jsSource.js.map +1 -0
  79. package/lib/vscode/browserContextFactory.js +87 -0
  80. package/lib/vscode/browserContextFactory.js.map +1 -0
  81. package/lib/vscode/host.js +189 -33
  82. package/lib/vscode/host.js.map +1 -1
  83. package/lib/vscode/main.js +3 -35
  84. package/lib/vscode/main.js.map +1 -1
  85. package/package.json +13 -9
@@ -1 +1 @@
1
- {"version":3,"file":"auditSite.js","sourceRoot":"","sources":["../../src/tools/auditSite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auditSite.js","sourceRoot":"","sources":["../../src/tools/auditSite.ts"],"names":[],"mappings":"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"}
package/lib/tools/axe.js CHANGED
@@ -1,13 +1,475 @@
1
- import { AxeBuilder } from '@axe-core/playwright';
1
+ import axe from 'axe-core';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { z } from 'zod';
4
+ import { truncateDataUrls } from '../utils/dataUrl.js';
2
5
  export const axeTagValues = [
3
6
  'wcag2a', 'wcag2aa', 'wcag2aaa', 'wcag21a', 'wcag21aa', 'wcag21aaa',
4
7
  'wcag22a', 'wcag22aa', 'wcag22aaa', 'section508', 'cat.aria', 'cat.color',
5
8
  'cat.forms', 'cat.keyboard', 'cat.language', 'cat.name-role-value',
6
9
  'cat.parsing', 'cat.semantics', 'cat.sensory-and-visual-cues',
7
10
  'cat.structure', 'cat.tables', 'cat.text-alternatives', 'cat.time-and-media',
11
+ 'best-practice', 'experimental',
8
12
  ];
9
- export async function runAxeScan(page, tags) {
10
- return await new AxeBuilder({ page }).withTags([...tags]).analyze();
13
+ // Default scan set: only tags that map to a conformance criterion, so a default
14
+ // report keeps meaning "this fails WCAG/Section 508".
15
+ //
16
+ // The `cat.*` tags are deliberately absent. Axe matches `runOnly` tags with OR,
17
+ // so keeping e.g. `cat.keyboard` in the default set pulls in best-practice rules
18
+ // like `region` and `landmark-one-main` that carry both tags — merely omitting
19
+ // the `best-practice` tag does not make those rules opt-in. Almost nothing is
20
+ // lost: the only rules reachable solely through a `cat.*` tag are `duplicate-id`
21
+ // and `duplicate-id-active`, both deprecated in Axe since WCAG dropped SC 4.1.1.
22
+ //
23
+ // Five rules tagged `experimental` also carry a real `wcag*` tag and therefore
24
+ // still run by default: css-orientation-lock (SC 1.3.4),
25
+ // label-content-name-mismatch (SC 2.5.3), p-as-heading, table-fake-caption and
26
+ // td-has-header (SC 1.3.1). That is deliberate. `experimental` in Axe describes
27
+ // how settled the heuristic is, not whether the criterion is real, so filtering
28
+ // them out would drop genuine conformance coverage from the default scan — the
29
+ // opposite of what this tag set is for.
30
+ export const defaultAxeTags = axeTagValues.filter(tag => tag.startsWith('wcag') || tag === 'section508');
31
+ // Shared by every scan tool so scoping means the same thing everywhere.
32
+ export const axeScopeSchemaShape = {
33
+ includeSelectors: z.array(z.string().min(1)).optional().describe('CSS selectors to restrict the scan to, e.g. ["#checkout-form"]. Omit to scan the whole page. Each selector may match multiple elements.'),
34
+ excludeSelectors: z.array(z.string().min(1)).optional().describe('CSS selectors to exclude from the scan, e.g. ["#cookie-banner", "iframe.chat-widget"]. Applied after includeSelectors, so it can carve regions out of an included subtree.'),
35
+ };
36
+ // Shared by every scan tool so rule filtering means the same thing everywhere.
37
+ export const axeRuleSchemaShape = {
38
+ withRules: z.array(z.string().min(1)).min(1).optional().describe('Run only these Axe rule ids, e.g. ["color-contrast", "image-alt"]. Axe can run a rule list or a tag list but never both, so setting withRules ignores violationsTag entirely. Unknown rule ids are rejected rather than silently skipped, and so is an empty list — omit the option to scan by tags instead.'),
39
+ disableRules: z.array(z.string().min(1)).optional().describe('Axe rule ids to skip, e.g. ["color-contrast"]. Unlike withRules this narrows whatever is already selected, so it applies to violationsTag and withRules alike. Disabling every rule in withRules is an error, not an empty scan. Unknown rule ids are rejected rather than silently skipped.'),
40
+ };
41
+ // The rule catalogue comes from the very axe-core build injected into the page
42
+ // (`axe.source` below), so ids can never drift from what the scan supports and
43
+ // no extra injection is needed to check them.
44
+ // Axe does reject unknown ids itself, but only from inside the page after
45
+ // injection, surfacing as an opaque `frame.evaluate` failure; checking up front
46
+ // names the bad id and costs nothing.
47
+ let knownRuleIds;
48
+ function assertRuleIdsExist(ruleIds, label) {
49
+ if (!ruleIds.length)
50
+ return;
51
+ knownRuleIds ??= new Set(axe.getRules().map(rule => rule.ruleId));
52
+ const unknown = ruleIds.filter(ruleId => !knownRuleIds.has(ruleId));
53
+ if (unknown.length)
54
+ throw new Error(`Unknown Axe rule id(s) in ${label}: ${unknown.join(', ')}. See https://dequeuniversity.com/rules/axe/ for valid ids.`);
55
+ }
56
+ // Rule options are run-wide input and need no page, so a crawler can validate
57
+ // them once before navigating anything instead of failing every page in turn.
58
+ // Returns the rule list to actually run, empty when the caller passed none.
59
+ // (Scope selectors stay per-page on purpose: a component may legitimately be
60
+ // absent from some pages of a crawl.)
61
+ export function assertRuleOptionsValid(options) {
62
+ // An explicitly empty list is a contradiction, not a no-op: the caller asked
63
+ // to run only the listed rules and listed none. Treating it like an omitted
64
+ // option would silently fall back to the full tag set and scan far more than
65
+ // requested — the same trap the disableRules-empties-withRules guard closes.
66
+ if (options.rules && !options.rules.length)
67
+ throw new Error('withRules is an empty list, which would silently fall back to scanning the full tag set. Omit withRules to scan by tags, or name at least one rule id.');
68
+ assertRuleIdsExist(options.rules ?? [], 'withRules');
69
+ assertRuleIdsExist(options.disableRules ?? [], 'disableRules');
70
+ if (!options.rules?.length)
71
+ return [];
72
+ // axe's ruleShouldRun returns on the runOnly-is-a-rule-list branch before it
73
+ // ever reads the per-rule `enabled` flag that disableRules sets, so passing
74
+ // both would silently run a rule the caller asked to disable. Subtract here
75
+ // so disableRules means the same thing next to withRules as next to tags.
76
+ const disabled = new Set(options.disableRules ?? []);
77
+ const rules = options.rules.filter(rule => !disabled.has(rule));
78
+ // axe rejects an empty runOnly list with a message that names neither
79
+ // option, and falling back to the tag set would scan far more than asked.
80
+ if (!rules.length)
81
+ throw new Error(`disableRules disabled every rule in withRules (${options.rules.join(', ')}), leaving nothing to scan.`);
82
+ return rules;
83
+ }
84
+ // Axe only rejects a scope when the *whole* include set resolves to nothing, so
85
+ // one typo among several include selectors silently shrinks the scan and the
86
+ // report still looks clean. Resolve every selector ourselves first: a scan that
87
+ // quietly covers less than asked is worse than one that fails loudly.
88
+ async function assertScopeSelectorsResolve(page, include, exclude) {
89
+ if (!include.length && !exclude.length)
90
+ return;
91
+ // One round trip for both lists: the includes come first, so the counts split
92
+ // back apart at `include.length`.
93
+ const selectors = [...include, ...exclude];
94
+ const counts = await page.evaluate(list => list.map(selector => {
95
+ try {
96
+ return document.querySelectorAll(selector).length;
97
+ }
98
+ catch {
99
+ return -1;
100
+ }
101
+ }), selectors);
102
+ for (const [label, list, offset] of [
103
+ ['includeSelectors', include, 0],
104
+ ['excludeSelectors', exclude, include.length],
105
+ ]) {
106
+ const invalid = list.filter((_, index) => counts[offset + index] === -1);
107
+ if (invalid.length)
108
+ throw new Error(`Invalid CSS in ${label}: ${invalid.join(', ')}`);
109
+ }
110
+ // An unmatched exclude only leaves extra content in scope, and a crawl may
111
+ // legitimately hit pages without the excluded widget, so it is not an error.
112
+ const unmatched = include.filter((_, index) => counts[index] === 0);
113
+ if (unmatched.length)
114
+ throw new Error(`No elements matched includeSelectors: ${unmatched.join(', ')}. The scan would have silently covered less of the page than requested.`);
115
+ }
116
+ // Set by the configure step below, and the only thing the coverage check
117
+ // trusts. A frame that navigated to a document carrying its own axe of the same
118
+ // version would answer a bare version probe while lacking the allowedOrigins
119
+ // configuration the top-level run needs - and so would go unscanned while
120
+ // looking covered.
121
+ //
122
+ // Ceiling: any in-page marker can be forged by the page itself. The name is
123
+ // distinctive enough that an accidental collision does not happen; a page
124
+ // deliberately evading its own audit is out of scope.
125
+ const axeReadyMarker = '__mcpAccessibilityScannerAxeReady';
126
+ let axeReadySequence = 0;
127
+ const axeReadyNonce = randomUUID();
128
+ // Axe's frame support needs its own copy in every frame, and the copy talks to
129
+ // the top-level run over postMessage. `<unsafe_all_origins>` is what lets a
130
+ // cross-origin frame answer; without it those frames go unscanned.
131
+ const axeConfigureSource = `;axe.configure({ allowedOrigins: ['<unsafe_all_origins>'], branding: { application: 'playwright' } });`;
132
+ // Injected fresh for every scan rather than reused when `window.axe` already
133
+ // looks right: that global belongs to the page, which may have installed its own
134
+ // axe or reconfigured ours since, and a scan must run this server's build and
135
+ // configuration. Re-injection costs ~70ms per frame against a multi-second scan.
136
+ async function injectAxe(frame, source) {
137
+ await frame.evaluate(source);
138
+ }
139
+ // A child frame that never answers must not hang the scan. It goes unscanned
140
+ // instead - but not silently: a frame Axe never reached contributes no
141
+ // violations, and an unreported one turns into a clean-looking report.
142
+ const childFrameInjectionTimeoutMs = 1000;
143
+ // Every read from a child frame is bounded by it, not just the injection: an
144
+ // unresponsive renderer answers neither, and `frame.evaluate` has no timeout of
145
+ // its own, so an unbounded probe would hang the whole scan rather than produce
146
+ // the partial-coverage warning it exists to produce.
147
+ async function withFrameTimeout(work, fallback) {
148
+ let timeoutId;
149
+ try {
150
+ // Both branches resolve: a rejected loser of the race would surface as an
151
+ // unhandled rejection once the winner has already been awaited.
152
+ return await Promise.race([
153
+ work.catch(() => fallback),
154
+ new Promise(resolve => {
155
+ timeoutId = setTimeout(() => resolve(fallback), childFrameInjectionTimeoutMs);
156
+ }),
157
+ ]);
158
+ }
159
+ finally {
160
+ clearTimeout(timeoutId);
161
+ }
162
+ }
163
+ // Injections run a few at a time rather than all at once. Frames sharing a
164
+ // renderer run their evaluations on one thread, so launching every injection
165
+ // together starts every timeout clock together too, and a frame still queued
166
+ // behind its siblings is timed out for being slow before it has had a turn -
167
+ // the budget is meant to catch an unresponsive renderer, not a busy one.
168
+ //
169
+ // A pool fixes that because a frame's clock starts when a slot frees, never
170
+ // while it waits. Measured on a page of 48 same-origin frames: launching them
171
+ // all at once reported 28 healthy frames as unscanned and 96 frames reported
172
+ // every one of them; through the pool, none, at every size tried.
173
+ const frameInjectionConcurrency = 4;
174
+ async function withConcurrency(items, run) {
175
+ let next = 0;
176
+ const results = [];
177
+ await Promise.all(Array.from({ length: Math.min(frameInjectionConcurrency, items.length) }, async () => {
178
+ while (next < items.length) {
179
+ const index = next++;
180
+ results[index] = await run(items[index]);
181
+ }
182
+ }));
183
+ return results;
184
+ }
185
+ // A frame name is author-controlled and unbounded, so it is normalized and
186
+ // capped before going anywhere near a report.
187
+ const maxFrameNameLength = 80;
188
+ const maxFrameUrlLength = 2048;
189
+ // Identifies a frame for the coverage warning. The URL alone is not enough for
190
+ // a srcdoc or scripted about:blank frame - both report "about:blank" while
191
+ // holding a whole document - so the frame's name comes along when it has one.
192
+ // Both are truncated: a data: frame's URL is its document, a name can carry one
193
+ // too, and this string ends up in tool text, structured content and JSON
194
+ // reports alike.
195
+ function describeFrame(frame) {
196
+ const rawUrl = truncateDataUrls(frame.url()) || 'about:blank';
197
+ const url = rawUrl.length > maxFrameUrlLength ? `${rawUrl.slice(0, maxFrameUrlLength - 3)}...` : rawUrl;
198
+ const name = truncateDataUrls(frame.name().replace(/\s+/g, ' ').trim()).slice(0, maxFrameNameLength);
199
+ return name ? `${url} (name="${name}")` : url;
200
+ }
201
+ // Whether this frame currently holds the Axe this server injected and
202
+ // configured. A frame that navigated after its injection - or that appeared
203
+ // since, or that carries only the page's own axe - answers no.
204
+ async function hasAxe(frame, token) {
205
+ return withFrameTimeout(frame.evaluate(({ marker, token }) => window[marker] === token, { marker: axeReadyMarker, token }), false);
206
+ }
207
+ // A frame the caller scoped out of the scan is not a coverage gap: its contents
208
+ // were never going to be reported. Answered from the iframe element in its
209
+ // parent document, so an `excludeSelectors: ["iframe.chat-widget"]` entry - the
210
+ // documented recipe for dropping a flaky third-party widget - does not produce a
211
+ // warning about the very frame it removed.
212
+ //
213
+ // The whole ancestor chain is walked, not just the immediate parent document,
214
+ // because `closest()` stops at a frame boundary while an Axe context does not:
215
+ // `includeSelectors: ["#main"]` covers an iframe nested inside an iframe inside
216
+ // `#main`, and an exclude naming an outer frame drops everything below it.
217
+ //
218
+ // Only a positive determination suppresses the warning. An unreachable frame
219
+ // element or a probe that cannot answer in time falls through to reporting, so
220
+ // no genuine gap is hidden by a check that failed to resolve.
221
+ async function isFrameInScope(frame, mainFrame, include, exclude) {
222
+ let includeMatched = !include.length;
223
+ for (let current = frame; current.parentFrame(); current = current.parentFrame()) {
224
+ // Bounded like every other child-frame read: `frameElement()` takes no
225
+ // timeout of its own, so an unresponsive parent renderer would hang the
226
+ // scan here - on the very check that exists to report unresponsive frames.
227
+ const elementPromise = current.frameElement().catch(() => null);
228
+ const element = await withFrameTimeout(elementPromise, null);
229
+ if (!element) {
230
+ // The lookup may still land after the bound; do not leak that handle.
231
+ void elementPromise.then(late => late?.dispose().catch(() => { }));
232
+ return true;
233
+ }
234
+ let matches;
235
+ try {
236
+ matches = await withFrameTimeout(element.evaluate((node, scope) => {
237
+ const composedParent = (element) => {
238
+ const root = element.getRootNode();
239
+ if (element.assignedSlot) {
240
+ const slotRoot = element.assignedSlot.getRootNode();
241
+ return element.assignedSlot.parentElement ?? (slotRoot instanceof ShadowRoot ? slotRoot.host : null);
242
+ }
243
+ return element.parentElement ?? (root instanceof ShadowRoot ? root.host : null);
244
+ };
245
+ const matchesAny = (selectors) => selectors.some(selector => {
246
+ try {
247
+ for (let current = node; current;) {
248
+ if (current.matches(selector))
249
+ return true;
250
+ current = composedParent(current);
251
+ }
252
+ return false;
253
+ }
254
+ catch {
255
+ return false;
256
+ }
257
+ });
258
+ const roots = [document];
259
+ const modals = [];
260
+ for (const root of roots) {
261
+ modals.push(...[...root.querySelectorAll('dialog:modal')].filter(modal => {
262
+ const style = getComputedStyle(modal);
263
+ const rect = modal.getBoundingClientRect();
264
+ const visible = modal.checkVisibility?.({ checkOpacity: true, checkVisibilityCSS: true }) ??
265
+ (style.display !== 'none' && !['hidden', 'collapse'].includes(style.visibility) && style.opacity !== '0');
266
+ return visible &&
267
+ rect.width > 0 && rect.height > 0 &&
268
+ modal.getRootNode().elementsFromPoint(rect.left + 1, rect.top + 1).includes(modal);
269
+ }));
270
+ for (const element of root.querySelectorAll('*')) {
271
+ if (element.shadowRoot)
272
+ roots.push(element.shadowRoot);
273
+ }
274
+ }
275
+ const insideModal = modals.some(modal => {
276
+ for (let current = node; current;) {
277
+ if (current === modal)
278
+ return true;
279
+ current = composedParent(current);
280
+ }
281
+ return false;
282
+ });
283
+ let hidden = !!modals.length && !insideModal;
284
+ for (let current = node; current;) {
285
+ const parent = current.assignedSlot?.parentElement ?? current.parentElement;
286
+ const style = getComputedStyle(current);
287
+ const ariaHidden = current.getAttribute('aria-hidden') === 'true';
288
+ const flattenedChildren = parent ? [...parent.children].flatMap(child => {
289
+ if (child.localName !== 'slot')
290
+ return [child];
291
+ const assigned = child.assignedElements({ flatten: true });
292
+ return assigned.length ? assigned : [...child.children];
293
+ }) : [];
294
+ const closedDetails = parent?.localName === 'details' && !parent.hasAttribute('open') &&
295
+ (current.localName !== 'summary' || flattenedChildren.find(child => child.localName === 'summary') !== current);
296
+ const contentHidden = current !== node && style.getPropertyValue('content-visibility') === 'hidden';
297
+ if (ariaHidden || style.display === 'none' || current.hasAttribute('inert') || closedDetails || contentHidden) {
298
+ hidden = true;
299
+ break;
300
+ }
301
+ current = composedParent(current);
302
+ }
303
+ const visibility = getComputedStyle(node).visibility;
304
+ hidden ||= visibility === 'hidden' || visibility === 'collapse';
305
+ return { included: matchesAny(scope.include), excluded: matchesAny(scope.exclude), hidden };
306
+ }, current.parentFrame() === mainFrame
307
+ ? { include: [...include], exclude: [...exclude] }
308
+ : { include: [], exclude: [] }), null);
309
+ }
310
+ finally {
311
+ await element.dispose().catch(() => { });
312
+ }
313
+ if (!matches)
314
+ return true;
315
+ // Axe does not traverse a frame hidden from the accessibility tree, so a
316
+ // failed injection there is not missing coverage.
317
+ if (matches.hidden)
318
+ return false;
319
+ // Exclude wins wherever it matches: it drops the whole subtree under it.
320
+ if (matches.excluded)
321
+ return false;
322
+ includeMatched ||= matches.included;
323
+ }
324
+ return includeMatched;
325
+ }
326
+ // Returns an identifier for every child frame Axe could not be installed in, so
327
+ // the caller can say what the scan did not cover. Every failure is reported
328
+ // whatever the URL scheme: injection into an empty about:blank frame succeeds,
329
+ // so a frame that reaches here failed for a reason worth knowing about.
330
+ //
331
+ // Duplicates are kept: two unnamed about:blank frames that both fail are two
332
+ // documents that went unscanned, and collapsing them would under-count.
333
+ async function injectAxeIntoFrames(page, include, exclude) {
334
+ const token = `${axe.version}:${axeReadyNonce}:${++axeReadySequence}`;
335
+ const source = `${axe.source}${axeConfigureSource}window[${JSON.stringify(axeReadyMarker)}]=${JSON.stringify(token)};`;
336
+ const mainFrame = page.mainFrame();
337
+ await injectAxe(mainFrame, source);
338
+ await withConcurrency(page.frames().filter(frame => frame !== mainFrame), frame => withFrameTimeout(injectAxe(frame, source), undefined));
339
+ // Coverage is decided here rather than from the injection results: a frame
340
+ // that navigated while a slower sibling was still injecting has a new document
341
+ // without Axe, and one that appeared since was never injected at all. Both
342
+ // would otherwise contribute nothing to a report that still looked complete.
343
+ // The frame list is re-read for the same reason.
344
+ //
345
+ // Ceiling: a frame that navigates between this check and the run below is
346
+ // still missed. The window is microseconds rather than the length of the
347
+ // slowest injection, but it cannot be closed from outside the page.
348
+ const frameIds = new Map();
349
+ const frameId = (frame) => {
350
+ if (!frameIds.has(frame))
351
+ frameIds.set(frame, frameIds.size);
352
+ return frameIds.get(frame);
353
+ };
354
+ let previousSignature;
355
+ for (let round = 0; round < 4; round++) {
356
+ const children = page.frames().filter(frame => frame !== mainFrame);
357
+ const covered = await withConcurrency(children, frame => hasReachableAxe(frame, token));
358
+ const withoutAxe = new Set(children.filter((_, index) => !covered[index]));
359
+ // A frame whose own injection succeeded is still unreachable when an ancestor
360
+ // has no Axe: the top-level run reaches a nested document only by relaying
361
+ // through the frames above it, and a frame without Axe relays nothing.
362
+ const missed = children.filter(frame => {
363
+ for (let current = frame; current && current !== mainFrame; current = current.parentFrame()) {
364
+ if (withoutAxe.has(current))
365
+ return true;
366
+ }
367
+ return false;
368
+ });
369
+ const matches = await withConcurrency(missed, frame => isFrameInScope(frame, mainFrame, include, exclude));
370
+ const inScope = new Map(missed.map((frame, index) => [frame, matches[index]]));
371
+ const latest = page.frames().filter(frame => frame !== mainFrame);
372
+ const attached = new Set(latest);
373
+ const signature = `${children.map((frame, index) => `${frameId(frame)}:${covered[index] ? 1 : 0}:${inScope.get(frame) ? 1 : 0}`).join(',')}>${latest.map(frameId).join(',')}`;
374
+ const reported = missed.filter(frame => attached.has(frame) && inScope.get(frame)).map(describeFrame);
375
+ const unchanged = children.length === latest.length && children.every((frame, index) => frame === latest[index]);
376
+ if (!unchanged) {
377
+ previousSignature = undefined;
378
+ continue;
379
+ }
380
+ // A healthy, unchanged frame tree had no slow scope probes to race with.
381
+ if (!missed.length)
382
+ return [];
383
+ if (signature === previousSignature)
384
+ return reported;
385
+ previousSignature = signature;
386
+ }
387
+ throw new Error('The frame tree kept changing while Axe coverage was checked. Retry the scan once the page settles.');
388
+ }
389
+ async function hasReachableAxe(frame, token) {
390
+ if (!await hasAxe(frame, token))
391
+ return false;
392
+ const elementPromise = frame.frameElement().catch(() => null);
393
+ const element = await withFrameTimeout(elementPromise, null);
394
+ if (!element) {
395
+ void elementPromise.then(late => late?.dispose().catch(() => { }));
396
+ return false;
397
+ }
398
+ let reachable;
399
+ try {
400
+ reachable = await withFrameTimeout(element.evaluate(node => {
401
+ for (let current = node;;) {
402
+ const root = current.getRootNode();
403
+ if (!(root instanceof ShadowRoot))
404
+ return true;
405
+ if (root.host.shadowRoot !== root)
406
+ return false;
407
+ current = root.host;
408
+ }
409
+ }), false);
410
+ }
411
+ finally {
412
+ await element.dispose().catch(() => { });
413
+ }
414
+ return reachable && await hasAxe(frame, token);
415
+ }
416
+ // Runs in the page. Keeps axe's own result shape minus the parts nothing reads:
417
+ // per-node check arrays, and the node lists of passing/inapplicable rules.
418
+ async function runAxeInPage({ context, options }) {
419
+ const results = await window.axe.run(context ?? document, options);
420
+ const findings = (rules) => rules.map(rule => ({
421
+ id: rule.id,
422
+ impact: rule.impact,
423
+ tags: rule.tags,
424
+ help: rule.help,
425
+ helpUrl: rule.helpUrl,
426
+ description: rule.description,
427
+ nodes: rule.nodes.map((node) => ({
428
+ target: node.target,
429
+ html: node.html,
430
+ failureSummary: node.failureSummary ?? null,
431
+ })),
432
+ }));
433
+ return {
434
+ url: results.url,
435
+ violations: findings(results.violations),
436
+ incomplete: findings(results.incomplete),
437
+ passes: results.passes.map((rule) => ({ id: rule.id })),
438
+ inapplicable: results.inapplicable.map((rule) => ({ id: rule.id })),
439
+ };
440
+ }
441
+ export async function runAxeScan(page, options = {}) {
442
+ const rules = assertRuleOptionsValid(options);
443
+ const include = options.include ?? [];
444
+ const exclude = options.exclude ?? [];
445
+ await assertScopeSelectorsResolve(page, include, exclude);
446
+ // `runOnly` holds either a rule list or a tag list, never both. Explicit rule
447
+ // ids are the more specific request, so they win over tags — and the per-rule
448
+ // `enabled` flag disableRules would set is ignored on that branch, which is
449
+ // why assertRuleOptionsValid already subtracted them from the list.
450
+ const axeOptions = rules.length
451
+ ? { runOnly: { type: 'rule', values: rules } }
452
+ : { runOnly: { type: 'tag', values: [...(options.tags ?? defaultAxeTags)] } };
453
+ if (!rules.length && options.disableRules?.length)
454
+ axeOptions.rules = Object.fromEntries(options.disableRules.map(rule => [rule, { enabled: false }]));
455
+ // exclude wins over include for overlapping subtrees, which is what "scan
456
+ // this component minus the widget" needs.
457
+ const context = include.length || exclude.length ? { include: [...include], exclude: [...exclude] } : null;
458
+ const unscannedFrames = await injectAxeIntoFrames(page, include, exclude);
459
+ const results = await page.evaluate(runAxeInPage, { context, options: axeOptions });
460
+ return { ...results, unscannedFrames };
461
+ }
462
+ // A scan that could not reach a frame covered less than it looks like it did,
463
+ // so every tool that reports results says so in the same words.
464
+ export function unscannedFrameLines(unscannedFrames) {
465
+ if (!unscannedFrames.length)
466
+ return [];
467
+ return [
468
+ '',
469
+ `WARNING: Axe could not be installed in ${unscannedFrames.length} frame(s), whose contents were not scanned and contribute no findings above:`,
470
+ ...unscannedFrames.map(url => `- ${url}`),
471
+ 'A frame that is still loading may succeed on a re-run; one that consistently fails must be audited on its own.',
472
+ ];
11
473
  }
12
474
  export function dedupeAxeNodes(nodes) {
13
475
  const seen = new Set();
@@ -21,27 +483,23 @@ export function dedupeAxeNodes(nodes) {
21
483
  return true;
22
484
  });
23
485
  }
24
- export function trimAxeResults(results, options) {
486
+ export function trimAxeResults(violations, options) {
25
487
  // Callers that already deduped node lists can pass `dedupe: false` to skip a
26
488
  // redundant second dedup pass over potentially large node sets.
27
489
  const shouldDedupe = options.dedupe ?? true;
28
- return results.violations.map(violation => {
29
- const sourceNodes = shouldDedupe ? dedupeAxeNodes(violation.nodes) : violation.nodes;
30
- const nodes = sourceNodes.slice(0, options.maxNodesPerViolation).map(node => ({
31
- target: [...(node.target ?? [])],
32
- html: node.html ?? '',
33
- failureSummary: node.failureSummary ?? null,
34
- }));
35
- return {
36
- id: violation.id,
37
- impact: violation.impact,
38
- tags: [...violation.tags],
39
- help: violation.help,
40
- helpUrl: violation.helpUrl,
41
- description: violation.description,
42
- nodes,
43
- };
44
- });
490
+ return violations.map(violation => ({
491
+ ...violation,
492
+ nodes: (shouldDedupe ? dedupeAxeNodes(violation.nodes) : violation.nodes).slice(0, options.maxNodesPerViolation),
493
+ }));
494
+ }
495
+ // Dedupe once and reuse: callers need the deduped nodes for per-rule counting
496
+ // and aggregation, and the trimmed copy for the report payload.
497
+ export function prepareAxeResults(violations, maxNodesPerViolation) {
498
+ const deduped = violations.map(violation => ({
499
+ ...violation,
500
+ nodes: dedupeAxeNodes(violation.nodes),
501
+ }));
502
+ return { deduped, trimmed: trimAxeResults(deduped, { maxNodesPerViolation, dedupe: false }) };
45
503
  }
46
504
  export function summarizeAxeViolations(violations) {
47
505
  const byImpact = {};