mcp-accessibility-scanner 3.3.1 → 3.4.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.
- package/README.md +74 -5
- package/config.d.ts +30 -0
- package/lib/browserServerBackend.js +6 -0
- package/lib/browserServerBackend.js.map +1 -1
- package/lib/browserSessions.js +3 -0
- package/lib/browserSessions.js.map +1 -1
- package/lib/config.js +56 -10
- package/lib/config.js.map +1 -1
- package/lib/context.js +382 -56
- package/lib/context.js.map +1 -1
- package/lib/extension/cdpRelay.js +28 -6
- package/lib/extension/cdpRelay.js.map +1 -1
- package/lib/extension/extensionContextFactory.js +11 -6
- package/lib/extension/extensionContextFactory.js.map +1 -1
- package/lib/mcp/http.js +115 -41
- package/lib/mcp/http.js.map +1 -1
- package/lib/mcp/server.js +16 -8
- package/lib/mcp/server.js.map +1 -1
- package/lib/mcp/tool.js +11 -9
- package/lib/mcp/tool.js.map +1 -1
- package/lib/program.js +6 -3
- package/lib/program.js.map +1 -1
- package/lib/response.js +14 -2
- package/lib/response.js.map +1 -1
- package/lib/sessionLog.js +66 -20
- package/lib/sessionLog.js.map +1 -1
- package/lib/tab.js +13 -7
- package/lib/tab.js.map +1 -1
- package/lib/tools/auditKeyboard.js +27 -25
- package/lib/tools/auditKeyboard.js.map +1 -1
- package/lib/tools/auditScreenReader.js +30 -53
- package/lib/tools/auditScreenReader.js.map +1 -1
- package/lib/tools/auditSite.js +88 -56
- package/lib/tools/auditSite.js.map +1 -1
- package/lib/tools/axe.js +38 -17
- package/lib/tools/axe.js.map +1 -1
- package/lib/tools/common.js +39 -1
- package/lib/tools/common.js.map +1 -1
- package/lib/tools/files.js +55 -1
- package/lib/tools/files.js.map +1 -1
- package/lib/tools/pdf.js +4 -2
- package/lib/tools/pdf.js.map +1 -1
- package/lib/tools/recorder.js +52 -0
- package/lib/tools/recorder.js.map +1 -0
- package/lib/tools/report.js +13 -0
- package/lib/tools/report.js.map +1 -0
- package/lib/tools/scanPageMatrix.js +20 -33
- package/lib/tools/scanPageMatrix.js.map +1 -1
- package/lib/tools/screenshot.js +6 -3
- package/lib/tools/screenshot.js.map +1 -1
- package/lib/tools/snapshot.js +5 -2
- package/lib/tools/snapshot.js.map +1 -1
- package/lib/tools.js +2 -0
- package/lib/tools.js.map +1 -1
- package/lib/vscode/browserContextFactory.js +11 -4
- package/lib/vscode/browserContextFactory.js.map +1 -1
- package/lib/vscode/host.js +25 -2
- package/lib/vscode/host.js.map +1 -1
- package/lib/vscode/main.js +15 -0
- package/lib/vscode/main.js.map +1 -1
- package/lib/vscode/validation.js +78 -0
- package/lib/vscode/validation.js.map +1 -0
- package/package.json +6 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
1
|
import { z } from 'zod';
|
|
3
2
|
import { defineTabTool } from './tool.js';
|
|
3
|
+
import { writeJsonReport } from './report.js';
|
|
4
4
|
import { safeIsoTimestampForFileName, sanitizeForFilePath } from '../utils/fileUtils.js';
|
|
5
5
|
function buildFingerprint(point) {
|
|
6
6
|
return [
|
|
@@ -31,6 +31,10 @@ function isLikelySkipLink(point) {
|
|
|
31
31
|
}
|
|
32
32
|
// WCAG 2.2 SC 2.5.8 Target Size (Minimum), in CSS pixels.
|
|
33
33
|
const MIN_TARGET_SIZE_PX = 24;
|
|
34
|
+
// Payload caps for the in-page focus probe; passed as evaluate args because
|
|
35
|
+
// the serialized function cannot close over module scope.
|
|
36
|
+
const maxNeighborTargets = 32;
|
|
37
|
+
const maxFocusTextLength = 200;
|
|
34
38
|
function rectCenter(rect) {
|
|
35
39
|
return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };
|
|
36
40
|
}
|
|
@@ -166,7 +170,7 @@ export async function runKeyboardFocusAudit(options, callbacks) {
|
|
|
166
170
|
skipLinkActivation = {
|
|
167
171
|
attempted: true,
|
|
168
172
|
hashChanged,
|
|
169
|
-
focusChanged:
|
|
173
|
+
focusChanged: beforeActivation.fingerprint !== buildFingerprint(afterActivation),
|
|
170
174
|
scrollChanged: beforeActivation.scrollY !== afterActivation.scrollY || beforeActivation.scrollX !== afterActivation.scrollX,
|
|
171
175
|
navigationOccurred,
|
|
172
176
|
urlBefore,
|
|
@@ -250,8 +254,13 @@ const auditKeyboard = defineTabTool({
|
|
|
250
254
|
type: 'destructive',
|
|
251
255
|
},
|
|
252
256
|
handle: async (tab, params, response) => {
|
|
257
|
+
const { reportFile, ...auditOptions } = params;
|
|
258
|
+
const reportFileName = reportFile ?? `audit-keyboard-${safeIsoTimestampForFileName()}.json`;
|
|
259
|
+
const reportPath = await tab.context.outputFile(reportFileName, reportFile !== undefined);
|
|
260
|
+
if (reportFile !== undefined)
|
|
261
|
+
response.deleteFileOnError(reportPath);
|
|
253
262
|
const getActiveElementInfo = async () => {
|
|
254
|
-
return await tab.page.evaluate(() => {
|
|
263
|
+
return await tab.page.evaluate(({ checkTargetSize, checkFocusObscured, minTargetSize, maxNeighborTargets, maxTextLength }) => {
|
|
255
264
|
const current = document.activeElement;
|
|
256
265
|
const scrollX = window.scrollX;
|
|
257
266
|
const scrollY = window.scrollY;
|
|
@@ -276,7 +285,7 @@ const auditKeyboard = defineTabTool({
|
|
|
276
285
|
}
|
|
277
286
|
const role = current.getAttribute('role') || current.tagName.toLowerCase();
|
|
278
287
|
const labelledBy = current.getAttribute('aria-labelledby');
|
|
279
|
-
const text = current.textContent?.trim().slice(0,
|
|
288
|
+
const text = current.textContent?.trim().slice(0, maxTextLength) || null;
|
|
280
289
|
const name = current.getAttribute('aria-label')
|
|
281
290
|
|| labelledBy && document.getElementById(labelledBy)?.textContent?.trim()
|
|
282
291
|
|| current.getAttribute('title')
|
|
@@ -293,8 +302,6 @@ const auditKeyboard = defineTabTool({
|
|
|
293
302
|
&& rect.right >= 0
|
|
294
303
|
&& rect.top <= window.innerHeight
|
|
295
304
|
&& rect.left <= window.innerWidth;
|
|
296
|
-
// Kept in sync with MIN_TARGET_SIZE_PX; page.evaluate cannot close over it.
|
|
297
|
-
const minTargetSize = 24;
|
|
298
305
|
// ponytail: target size comes from the layout box, so a target whose visible
|
|
299
306
|
// area is cut down by an overflow or clip-path ancestor is under-reported.
|
|
300
307
|
// Intersecting with clipping ancestors was measured against ordinary markup and
|
|
@@ -328,7 +335,7 @@ const auditKeyboard = defineTabTool({
|
|
|
328
335
|
// sentence; SC 2.5.8's exception is about the sentence, not the display keyword.
|
|
329
336
|
const inlineTarget = isPointerTarget && style.display.startsWith('inline') && hasSentenceText;
|
|
330
337
|
const neighborTargets = [];
|
|
331
|
-
if (isPointerTarget && (rect.width < minTargetSize || rect.height < minTargetSize)) {
|
|
338
|
+
if (checkTargetSize && isPointerTarget && (rect.width < minTargetSize || rect.height < minTargetSize)) {
|
|
332
339
|
for (const candidate of document.querySelectorAll(targetSelector)) {
|
|
333
340
|
if (candidate === current)
|
|
334
341
|
continue;
|
|
@@ -346,7 +353,7 @@ const auditKeyboard = defineTabTool({
|
|
|
346
353
|
neighborTargets.push({ x: other.x, y: other.y, width: other.width, height: other.height });
|
|
347
354
|
// ponytail: payload cap. A cluster denser than 32 neighbors within 48px
|
|
348
355
|
// would under-report rather than over-report; raise the cap if that appears.
|
|
349
|
-
if (neighborTargets.length >=
|
|
356
|
+
if (neighborTargets.length >= maxNeighborTargets)
|
|
350
357
|
break;
|
|
351
358
|
}
|
|
352
359
|
}
|
|
@@ -358,7 +365,7 @@ const auditKeyboard = defineTabTool({
|
|
|
358
365
|
// SC 2.4.11 applies to anything that receives focus, so this is deliberately not
|
|
359
366
|
// gated on isPointerTarget: contenteditable, iframes and tabindex-only widgets
|
|
360
367
|
// are sampled too.
|
|
361
|
-
if (rect.width > 0 && rect.height > 0 && clipRight >= clipLeft && clipBottom >= clipTop) {
|
|
368
|
+
if (checkFocusObscured && rect.width > 0 && rect.height > 0 && clipRight >= clipLeft && clipBottom >= clipTop) {
|
|
362
369
|
const inset = (low, high, value) => Math.min(Math.max(value, low), high);
|
|
363
370
|
const samples = [
|
|
364
371
|
[inset(clipLeft, clipRight, clipLeft + 1), inset(clipTop, clipBottom, clipTop + 1)],
|
|
@@ -414,7 +421,7 @@ const auditKeyboard = defineTabTool({
|
|
|
414
421
|
}
|
|
415
422
|
return {
|
|
416
423
|
role,
|
|
417
|
-
name: name ? name.slice(0,
|
|
424
|
+
name: name ? name.slice(0, maxTextLength) : null,
|
|
418
425
|
tagName: current.tagName,
|
|
419
426
|
id: current.id || null,
|
|
420
427
|
href: current instanceof HTMLAnchorElement ? current.href : null,
|
|
@@ -434,6 +441,12 @@ const auditKeyboard = defineTabTool({
|
|
|
434
441
|
scrollX,
|
|
435
442
|
scrollY,
|
|
436
443
|
};
|
|
444
|
+
}, {
|
|
445
|
+
checkTargetSize: auditOptions.checkTargetSize,
|
|
446
|
+
checkFocusObscured: auditOptions.checkFocusObscured,
|
|
447
|
+
minTargetSize: MIN_TARGET_SIZE_PX,
|
|
448
|
+
maxNeighborTargets,
|
|
449
|
+
maxTextLength: maxFocusTextLength,
|
|
437
450
|
});
|
|
438
451
|
};
|
|
439
452
|
const captureScreenshot = async (label) => {
|
|
@@ -441,7 +454,6 @@ const auditKeyboard = defineTabTool({
|
|
|
441
454
|
await tab.page.screenshot({ path: fileName, fullPage: true });
|
|
442
455
|
return fileName;
|
|
443
456
|
};
|
|
444
|
-
const { reportFile, ...auditOptions } = params;
|
|
445
457
|
const result = await runKeyboardFocusAudit(auditOptions, {
|
|
446
458
|
pressKey: async (key) => {
|
|
447
459
|
await tab.waitForCompletion(async () => {
|
|
@@ -471,14 +483,10 @@ const auditKeyboard = defineTabTool({
|
|
|
471
483
|
},
|
|
472
484
|
...result,
|
|
473
485
|
};
|
|
474
|
-
const
|
|
475
|
-
const reportPath = await tab.context.outputFile(reportFileName);
|
|
476
|
-
await fs.promises.writeFile(reportPath, JSON.stringify(report, null, 2), 'utf-8');
|
|
477
|
-
const reportResourceLink = response.addFileResourceLink(reportPath, {
|
|
486
|
+
const reportResource = await writeJsonReport(response, reportPath, report, {
|
|
478
487
|
name: 'audit-keyboard-report',
|
|
479
488
|
title: 'Audit keyboard JSON report',
|
|
480
489
|
description: 'JSON report for keyboard navigation, focus, and skip-link findings.',
|
|
481
|
-
mimeType: 'application/json',
|
|
482
490
|
});
|
|
483
491
|
const screenshotResources = result.screenshots.map((screenshotPath, index) => {
|
|
484
492
|
const link = response.addFileResourceLink(screenshotPath, {
|
|
@@ -497,13 +505,7 @@ const auditKeyboard = defineTabTool({
|
|
|
497
505
|
});
|
|
498
506
|
response.setStructuredContent({
|
|
499
507
|
kind: 'audit_keyboard',
|
|
500
|
-
report:
|
|
501
|
-
path: reportPath,
|
|
502
|
-
uri: reportResourceLink.uri,
|
|
503
|
-
name: reportResourceLink.name,
|
|
504
|
-
title: reportResourceLink.title ?? null,
|
|
505
|
-
mimeType: reportResourceLink.mimeType ?? null,
|
|
506
|
-
},
|
|
508
|
+
report: reportResource,
|
|
507
509
|
page: {
|
|
508
510
|
url: tab.page.url(),
|
|
509
511
|
},
|
|
@@ -521,7 +523,7 @@ const auditKeyboard = defineTabTool({
|
|
|
521
523
|
screenshotCount: result.screenshots.length,
|
|
522
524
|
},
|
|
523
525
|
screenshots: screenshotResources,
|
|
524
|
-
reportUri:
|
|
526
|
+
reportUri: reportResource.uri,
|
|
525
527
|
});
|
|
526
528
|
const focusVisibilityPreview = result.focusVisibilityIssues.slice(0, 10).map(stop => (`- Step ${stop.step} (${stop.key}): ${stop.role ?? 'unknown-role'} ${stop.name ?? ''}`.trim()));
|
|
527
529
|
const focusJumpPreview = result.focusJumpIssues.slice(0, 10).map(stop => (`- Step ${stop.step}: deltaY=${stop.scrollDeltaY}, inViewport=${stop.inViewport}`));
|
|
@@ -548,7 +550,7 @@ const auditKeyboard = defineTabTool({
|
|
|
548
550
|
...(focusObscuredPreview.length ? focusObscuredPreview : ['- None']),
|
|
549
551
|
...(result.screenshots.length ? ['', 'Issue screenshots:', ...result.screenshots.map(path => `- ${path}`)] : []),
|
|
550
552
|
'',
|
|
551
|
-
`JSON report: ${
|
|
553
|
+
`JSON report: ${reportResource.path}`,
|
|
552
554
|
].join('\n'));
|
|
553
555
|
},
|
|
554
556
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auditKeyboard.js","sourceRoot":"","sources":["../../src/tools/auditKeyboard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auditKeyboard.js","sourceRoot":"","sources":["../../src/tools/auditKeyboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
1
|
import { z } from 'zod';
|
|
3
2
|
import { defineTabTool } from './tool.js';
|
|
4
3
|
import { frameConcurrency, frameReadTimeoutMs, injectAxeForNames, withConcurrency, withFrameTimeout } from './axe.js';
|
|
5
|
-
import {
|
|
4
|
+
import { writeJsonReport } from './report.js';
|
|
5
|
+
import { safeIsoTimestampForFileName } from '../utils/fileUtils.js';
|
|
6
6
|
// Roles that a screen-reader user reaches out of context, so an empty or
|
|
7
7
|
// meaningless accessible name leaves them with nothing to act on.
|
|
8
8
|
const namedRoles = new Set([
|
|
@@ -26,6 +26,9 @@ const filenameNamePattern = /\.(jpe?g|png|gif|webp|svg|avif|bmp|tiff?|ico)$/i;
|
|
|
26
26
|
const cameraFileNamePattern = /^(img|dsc|dscn|pxl|screenshot|image|photo)[-_ ]?\d{3,}$/i;
|
|
27
27
|
// Refs are resolved and measured in chunks of this size.
|
|
28
28
|
const measureChunkSize = 50;
|
|
29
|
+
// Budget for resolving one ref to an element handle: a ref gone stale must
|
|
30
|
+
// not cost a full frame read per element, so it is bounded separately.
|
|
31
|
+
const refResolutionTimeoutMs = 1000;
|
|
29
32
|
// Bands narrower than this are noise (sr-only clip boxes, 1px spacers).
|
|
30
33
|
const minLayoutSizePx = 2;
|
|
31
34
|
const layoutTolerancePx = 1;
|
|
@@ -80,7 +83,19 @@ function overlapRatio(a, b, axis) {
|
|
|
80
83
|
}
|
|
81
84
|
function countBands(rects, axis) {
|
|
82
85
|
const band = rects.map((_, index) => index);
|
|
83
|
-
|
|
86
|
+
// Iterative find with write-back path compression, so a long union chain
|
|
87
|
+
// costs O(1) per lookup instead of a walk each time.
|
|
88
|
+
const rootOf = (index) => {
|
|
89
|
+
let root = index;
|
|
90
|
+
while (band[root] !== root)
|
|
91
|
+
root = band[root];
|
|
92
|
+
while (band[index] !== root) {
|
|
93
|
+
const next = band[index];
|
|
94
|
+
band[index] = root;
|
|
95
|
+
index = next;
|
|
96
|
+
}
|
|
97
|
+
return root;
|
|
98
|
+
};
|
|
84
99
|
for (let i = 0; i < rects.length; i++) {
|
|
85
100
|
for (let j = i + 1; j < rects.length; j++) {
|
|
86
101
|
if (overlapRatio(rects[i], rects[j], axis) >= bandOverlapRatio)
|
|
@@ -738,6 +753,10 @@ const auditScreenReader = defineTabTool({
|
|
|
738
753
|
type: 'readOnly',
|
|
739
754
|
},
|
|
740
755
|
handle: async (tab, params, response) => {
|
|
756
|
+
const reportFileName = params.reportFile ?? `audit-screen-reader-${safeIsoTimestampForFileName()}.json`;
|
|
757
|
+
const reportPath = await tab.context.outputFile(reportFileName, params.reportFile !== undefined);
|
|
758
|
+
if (params.reportFile !== undefined)
|
|
759
|
+
response.deleteFileOnError(reportPath);
|
|
741
760
|
const ariaNodes = parseAriaSnapshot(await tab.page.ariaSnapshot({ mode: 'ai' }));
|
|
742
761
|
const refIndexes = ariaNodes.map((node, index) => node.ref ? index : -1).filter(index => index >= 0);
|
|
743
762
|
const childCounts = new Map();
|
|
@@ -769,7 +788,7 @@ const auditScreenReader = defineTabTool({
|
|
|
769
788
|
}
|
|
770
789
|
let settled = false;
|
|
771
790
|
let timedOut = false;
|
|
772
|
-
const work = Promise.resolve().then(start).then(value => {
|
|
791
|
+
const work = Promise.resolve().then(start).catch(() => fallback).then(value => {
|
|
773
792
|
settled = true;
|
|
774
793
|
frameWork.inFlight--;
|
|
775
794
|
if (timedOut)
|
|
@@ -777,14 +796,6 @@ const auditScreenReader = defineTabTool({
|
|
|
777
796
|
wakeFrameWork(frameWork);
|
|
778
797
|
onSettled?.(value, timedOut);
|
|
779
798
|
return value;
|
|
780
|
-
}, () => {
|
|
781
|
-
settled = true;
|
|
782
|
-
frameWork.inFlight--;
|
|
783
|
-
if (timedOut)
|
|
784
|
-
frameWork.timedOut--;
|
|
785
|
-
wakeFrameWork(frameWork);
|
|
786
|
-
onSettled?.(fallback, timedOut);
|
|
787
|
-
return fallback;
|
|
788
799
|
});
|
|
789
800
|
const value = await withFrameTimeout(work, fallback, frameReadTimeoutMs(frame));
|
|
790
801
|
if (!settled) {
|
|
@@ -797,28 +808,6 @@ const auditScreenReader = defineTabTool({
|
|
|
797
808
|
const disposeHandles = (handles) => {
|
|
798
809
|
void Promise.all(handles.map(handle => handle.dispose().catch(() => undefined)));
|
|
799
810
|
};
|
|
800
|
-
const injectFrameAxe = async (frame, onSettled) => {
|
|
801
|
-
if (!await reserveFrameWork(frameWork)) {
|
|
802
|
-
frameWorkSaturated = true;
|
|
803
|
-
return { value: false, timedOut: false, started: false };
|
|
804
|
-
}
|
|
805
|
-
let settled = false;
|
|
806
|
-
let timedOut = false;
|
|
807
|
-
const value = await injectAxeForNames(frame, installed => {
|
|
808
|
-
settled = true;
|
|
809
|
-
frameWork.inFlight--;
|
|
810
|
-
if (timedOut)
|
|
811
|
-
frameWork.timedOut--;
|
|
812
|
-
wakeFrameWork(frameWork);
|
|
813
|
-
onSettled?.(installed, timedOut);
|
|
814
|
-
});
|
|
815
|
-
if (!settled) {
|
|
816
|
-
timedOut = true;
|
|
817
|
-
frameWork.timedOut++;
|
|
818
|
-
wakeFrameWork(frameWork);
|
|
819
|
-
}
|
|
820
|
-
return { value, timedOut: !settled, started: true };
|
|
821
|
-
};
|
|
822
811
|
// maxElements budgets the elements a screen reader can actually reach: the
|
|
823
812
|
// AI snapshot also refs aria-hidden subtrees, and slicing the raw ref list
|
|
824
813
|
// let those spend the whole budget and leave every visible control below
|
|
@@ -833,7 +822,7 @@ const auditScreenReader = defineTabTool({
|
|
|
833
822
|
const size = Math.min(measureChunkSize, params.maxElements - reachable, measureCeiling - start);
|
|
834
823
|
const chunk = refIndexes.slice(start, start + size);
|
|
835
824
|
start += size;
|
|
836
|
-
const handles = await Promise.all(chunk.map(index => tab.page.locator(`aria-ref=${ariaNodes[index].ref}`).elementHandle({ timeout:
|
|
825
|
+
const handles = await Promise.all(chunk.map(index => tab.page.locator(`aria-ref=${ariaNodes[index].ref}`).elementHandle({ timeout: refResolutionTimeoutMs }).catch(() => null)));
|
|
837
826
|
// The owner lookup is a renderer round-trip too, so a frame that stopped
|
|
838
827
|
// answering since the resolution above would hold the audit here. It is
|
|
839
828
|
// bounded, and since the owner is what the lookup finds, given the larger
|
|
@@ -855,9 +844,7 @@ const auditScreenReader = defineTabTool({
|
|
|
855
844
|
const byFrame = new Map();
|
|
856
845
|
for (const [position, handle] of handles.entries()) {
|
|
857
846
|
const frame = owners[position];
|
|
858
|
-
if (!handle)
|
|
859
|
-
continue;
|
|
860
|
-
if (!frame)
|
|
847
|
+
if (!handle || !frame)
|
|
861
848
|
continue;
|
|
862
849
|
const batch = byFrame.get(frame);
|
|
863
850
|
if (batch)
|
|
@@ -874,7 +861,7 @@ const auditScreenReader = defineTabTool({
|
|
|
874
861
|
if (measureNames) {
|
|
875
862
|
let installed = axeByFrame.get(frame);
|
|
876
863
|
if (installed === undefined) {
|
|
877
|
-
const installation = await
|
|
864
|
+
const installation = await runFrameWork(() => injectAxeForNames(frame), false, frame, (installed, timedOut) => {
|
|
878
865
|
if (timedOut) {
|
|
879
866
|
axeByFrame.set(frame, installed);
|
|
880
867
|
unavailableFrames.delete(frame);
|
|
@@ -986,24 +973,14 @@ const auditScreenReader = defineTabTool({
|
|
|
986
973
|
truncatedChecks: result.truncatedChecks,
|
|
987
974
|
findings: result.findings,
|
|
988
975
|
};
|
|
989
|
-
const
|
|
990
|
-
const reportPath = await tab.context.outputFile(reportFileName);
|
|
991
|
-
await fs.promises.writeFile(reportPath, JSON.stringify(report, null, 2), 'utf-8');
|
|
992
|
-
const reportResourceLink = response.addFileResourceLink(reportPath, {
|
|
976
|
+
const reportResource = await writeJsonReport(response, reportPath, report, {
|
|
993
977
|
name: 'audit-screen-reader-report',
|
|
994
978
|
title: 'Audit screen reader JSON report',
|
|
995
979
|
description: 'JSON report for accessible name quality and reading order findings.',
|
|
996
|
-
mimeType: 'application/json',
|
|
997
980
|
});
|
|
998
981
|
response.setStructuredContent({
|
|
999
982
|
kind: 'audit_screen_reader',
|
|
1000
|
-
report:
|
|
1001
|
-
path: reportPath,
|
|
1002
|
-
uri: reportResourceLink.uri,
|
|
1003
|
-
name: reportResourceLink.name,
|
|
1004
|
-
title: reportResourceLink.title ?? null,
|
|
1005
|
-
mimeType: reportResourceLink.mimeType ?? null,
|
|
1006
|
-
},
|
|
983
|
+
report: reportResource,
|
|
1007
984
|
page: {
|
|
1008
985
|
url: tab.page.url(),
|
|
1009
986
|
},
|
|
@@ -1018,7 +995,7 @@ const auditScreenReader = defineTabTool({
|
|
|
1018
995
|
truncatedChecks: result.truncatedChecks,
|
|
1019
996
|
},
|
|
1020
997
|
findings: result.findings,
|
|
1021
|
-
reportUri:
|
|
998
|
+
reportUri: reportResource.uri,
|
|
1022
999
|
});
|
|
1023
1000
|
const findingLines = result.findings.map(finding => (`- [${finding.check}] WCAG ${finding.wcag} — ${finding.problem}\n Fix: ${finding.fix}${finding.ref ? `\n Ref: ${finding.ref}` : ''}`));
|
|
1024
1001
|
response.addCode('// Read the accessibility tree with page.ariaSnapshot() and compared names and geometry against reading order.');
|
|
@@ -1044,7 +1021,7 @@ const auditScreenReader = defineTabTool({
|
|
|
1044
1021
|
'',
|
|
1045
1022
|
...(findingLines.length ? findingLines : ['- No screen-reader-level issues detected.']),
|
|
1046
1023
|
'',
|
|
1047
|
-
`JSON report: ${
|
|
1024
|
+
`JSON report: ${reportResource.path}`,
|
|
1048
1025
|
].join('\n'));
|
|
1049
1026
|
},
|
|
1050
1027
|
});
|