@navinjoseph/web-perf-core 1.0.0-beta.3
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/dist/audits/accessibility.d.ts +10 -0
- package/dist/audits/accessibility.d.ts.map +1 -0
- package/dist/audits/accessibility.js +258 -0
- package/dist/audits/accessibility.js.map +1 -0
- package/dist/audits/best-practices.d.ts +10 -0
- package/dist/audits/best-practices.d.ts.map +1 -0
- package/dist/audits/best-practices.js +696 -0
- package/dist/audits/best-practices.js.map +1 -0
- package/dist/audits/constants.d.ts +8 -0
- package/dist/audits/constants.d.ts.map +1 -0
- package/dist/audits/constants.js +278 -0
- package/dist/audits/constants.js.map +1 -0
- package/dist/audits/performance.d.ts +11 -0
- package/dist/audits/performance.d.ts.map +1 -0
- package/dist/audits/performance.js +497 -0
- package/dist/audits/performance.js.map +1 -0
- package/dist/audits/pwa.d.ts +10 -0
- package/dist/audits/pwa.d.ts.map +1 -0
- package/dist/audits/pwa.js +396 -0
- package/dist/audits/pwa.js.map +1 -0
- package/dist/audits/security.d.ts +10 -0
- package/dist/audits/security.d.ts.map +1 -0
- package/dist/audits/security.js +249 -0
- package/dist/audits/security.js.map +1 -0
- package/dist/audits/seo.d.ts +10 -0
- package/dist/audits/seo.d.ts.map +1 -0
- package/dist/audits/seo.js +471 -0
- package/dist/audits/seo.js.map +1 -0
- package/dist/browser.d.ts +21 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +178 -0
- package/dist/browser.js.map +1 -0
- package/dist/dom-collector.d.ts +45 -0
- package/dist/dom-collector.d.ts.map +1 -0
- package/dist/dom-collector.js +173 -0
- package/dist/dom-collector.js.map +1 -0
- package/dist/formatter.d.ts +60 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +164 -0
- package/dist/formatter.js.map +1 -0
- package/dist/id-generator.d.ts +22 -0
- package/dist/id-generator.d.ts.map +1 -0
- package/dist/id-generator.js +29 -0
- package/dist/id-generator.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator.d.ts +41 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +194 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/reporters/html.d.ts +6 -0
- package/dist/reporters/html.d.ts.map +1 -0
- package/dist/reporters/html.js +688 -0
- package/dist/reporters/html.js.map +1 -0
- package/dist/reporters/index.d.ts +4 -0
- package/dist/reporters/index.d.ts.map +1 -0
- package/dist/reporters/index.js +17 -0
- package/dist/reporters/index.js.map +1 -0
- package/dist/reporters/json.d.ts +6 -0
- package/dist/reporters/json.d.ts.map +1 -0
- package/dist/reporters/json.js +7 -0
- package/dist/reporters/json.js.map +1 -0
- package/dist/reporters/terminal.d.ts +6 -0
- package/dist/reporters/terminal.d.ts.map +1 -0
- package/dist/reporters/terminal.js +180 -0
- package/dist/reporters/terminal.js.map +1 -0
- package/dist/reporters/types.d.ts +2 -0
- package/dist/reporters/types.d.ts.map +1 -0
- package/dist/reporters/types.js +2 -0
- package/dist/reporters/types.js.map +1 -0
- package/dist/types.d.ts +80 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +36 -0
- package/dist/types.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Issue, PendingCheck } from "../types.js";
|
|
2
|
+
import { BrowserPage } from "../browser.js";
|
|
3
|
+
/**
|
|
4
|
+
* Run accessibility audit using axe-core
|
|
5
|
+
*/
|
|
6
|
+
export declare function auditAccessibility(page: BrowserPage): Promise<{
|
|
7
|
+
issues: Issue[];
|
|
8
|
+
passed: PendingCheck[];
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=accessibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../src/audits/accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAsJ5C;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IACnE,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB,CAAC,CAuFD"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { WCAG_MAPPINGS } from "./constants.js";
|
|
2
|
+
import { generateContextualId } from "../id-generator.js";
|
|
3
|
+
import { createRequire } from "module";
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
const axe = require("axe-core");
|
|
6
|
+
const ACCESSIBILITY_RULES = [
|
|
7
|
+
"image-alt",
|
|
8
|
+
"button-name",
|
|
9
|
+
"link-name",
|
|
10
|
+
// "color-contrast", // Disabled - doesn't work reliably in JSDOM
|
|
11
|
+
"label",
|
|
12
|
+
"html-has-lang",
|
|
13
|
+
"document-title",
|
|
14
|
+
"heading-order",
|
|
15
|
+
"region",
|
|
16
|
+
"aria-valid-attr",
|
|
17
|
+
"aria-required-attr",
|
|
18
|
+
"aria-roles",
|
|
19
|
+
"meta-viewport",
|
|
20
|
+
"tabindex",
|
|
21
|
+
"duplicate-id",
|
|
22
|
+
"bypass",
|
|
23
|
+
"scrollable-region-focusable",
|
|
24
|
+
"frame-focusable-content",
|
|
25
|
+
"focus-order-semantics",
|
|
26
|
+
"video-caption",
|
|
27
|
+
"audio-caption",
|
|
28
|
+
"no-autoplay-audio",
|
|
29
|
+
"object-alt",
|
|
30
|
+
"svg-img-alt",
|
|
31
|
+
"td-headers-attr",
|
|
32
|
+
"th-has-data-cells",
|
|
33
|
+
"scope-attr-valid",
|
|
34
|
+
"table-fake-caption",
|
|
35
|
+
"definition-list",
|
|
36
|
+
"list",
|
|
37
|
+
"listitem",
|
|
38
|
+
"nested-interactive",
|
|
39
|
+
"input-image-alt",
|
|
40
|
+
"select-name",
|
|
41
|
+
"autocomplete-valid",
|
|
42
|
+
"frame-title",
|
|
43
|
+
"valid-lang",
|
|
44
|
+
"marquee",
|
|
45
|
+
"blink",
|
|
46
|
+
];
|
|
47
|
+
const RULE_TO_CATEGORY = {
|
|
48
|
+
"image-alt": "images",
|
|
49
|
+
"button-name": "interactive",
|
|
50
|
+
"link-name": "interactive",
|
|
51
|
+
"color-contrast": "color",
|
|
52
|
+
label: "forms",
|
|
53
|
+
"html-has-lang": "document",
|
|
54
|
+
"document-title": "document",
|
|
55
|
+
"heading-order": "structure",
|
|
56
|
+
region: "structure",
|
|
57
|
+
"aria-valid-attr": "aria",
|
|
58
|
+
"aria-required-attr": "aria",
|
|
59
|
+
"aria-roles": "aria",
|
|
60
|
+
"meta-viewport": "document",
|
|
61
|
+
tabindex: "technical",
|
|
62
|
+
"duplicate-id": "technical",
|
|
63
|
+
bypass: "interactive",
|
|
64
|
+
"scrollable-region-focusable": "interactive",
|
|
65
|
+
"frame-focusable-content": "interactive",
|
|
66
|
+
"focus-order-semantics": "interactive",
|
|
67
|
+
"video-caption": "images",
|
|
68
|
+
"audio-caption": "images",
|
|
69
|
+
"no-autoplay-audio": "images",
|
|
70
|
+
"object-alt": "images",
|
|
71
|
+
"svg-img-alt": "images",
|
|
72
|
+
"td-headers-attr": "structure",
|
|
73
|
+
"th-has-data-cells": "structure",
|
|
74
|
+
"scope-attr-valid": "structure",
|
|
75
|
+
"table-fake-caption": "structure",
|
|
76
|
+
"definition-list": "structure",
|
|
77
|
+
list: "structure",
|
|
78
|
+
listitem: "structure",
|
|
79
|
+
"nested-interactive": "interactive",
|
|
80
|
+
"input-image-alt": "forms",
|
|
81
|
+
"select-name": "forms",
|
|
82
|
+
"autocomplete-valid": "forms",
|
|
83
|
+
"frame-title": "document",
|
|
84
|
+
"valid-lang": "document",
|
|
85
|
+
marquee: "technical",
|
|
86
|
+
blink: "technical",
|
|
87
|
+
};
|
|
88
|
+
const FIX_GUIDANCE = {
|
|
89
|
+
"image-alt": () => "Add descriptive alt text that conveys the image content",
|
|
90
|
+
"button-name": (node) => node.html?.includes("aria-label")
|
|
91
|
+
? "Aria-label is present but may need improvement"
|
|
92
|
+
: "Add text content or aria-label to the button",
|
|
93
|
+
"link-name": () => "Add descriptive text content to the link",
|
|
94
|
+
"color-contrast": () => "Increase contrast ratio to at least 4.5:1 for normal text or 3:1 for large text",
|
|
95
|
+
label: () => "Associate a label with the input using for/id or wrapping",
|
|
96
|
+
"html-has-lang": () => "Add a lang attribute to the html element",
|
|
97
|
+
"document-title": () => "Add a descriptive title to the page",
|
|
98
|
+
"heading-order": () => "Ensure headings follow a logical order without skipping levels",
|
|
99
|
+
region: () => "Wrap content in landmark regions (main, nav, header, footer)",
|
|
100
|
+
"aria-valid-attr": () => "Fix or remove invalid ARIA attributes",
|
|
101
|
+
"aria-required-attr": () => "Add required ARIA attributes for the element role",
|
|
102
|
+
"aria-roles": () => "Use a valid ARIA role value",
|
|
103
|
+
"meta-viewport": () => "Allow users to zoom by setting viewport meta tag correctly",
|
|
104
|
+
tabindex: () => 'Use tabindex="0" or "-1" instead of positive values',
|
|
105
|
+
"duplicate-id": () => "Ensure all id attributes are unique on the page",
|
|
106
|
+
bypass: () => "Add a skip link to bypass repetitive content",
|
|
107
|
+
"scrollable-region-focusable": () => "Make scrollable regions keyboard accessible with tabindex",
|
|
108
|
+
"frame-focusable-content": () => "Ensure iframe content is keyboard accessible",
|
|
109
|
+
"focus-order-semantics": () => "Ensure focus order follows a logical sequence",
|
|
110
|
+
"video-caption": () => "Add captions to video content",
|
|
111
|
+
"audio-caption": () => "Provide a transcript for audio content",
|
|
112
|
+
"no-autoplay-audio": () => "Remove autoplay or provide controls to pause audio",
|
|
113
|
+
"object-alt": () => "Provide alternative text for object elements",
|
|
114
|
+
"svg-img-alt": () => 'Add accessible name to SVG with role="img"',
|
|
115
|
+
"td-headers-attr": () => "Use headers attribute to associate data cells with headers",
|
|
116
|
+
"th-has-data-cells": () => "Ensure table headers have associated data cells",
|
|
117
|
+
"scope-attr-valid": () => "Use valid scope values: row, col, rowgroup, colgroup",
|
|
118
|
+
"table-fake-caption": () => "Use <caption> element instead of fake caption cells",
|
|
119
|
+
"definition-list": () => "Ensure definition lists only contain dt and dd elements",
|
|
120
|
+
list: () => "Ensure lists only contain li elements",
|
|
121
|
+
listitem: () => "Ensure list items are inside ul or ol elements",
|
|
122
|
+
"nested-interactive": () => "Remove nested interactive elements",
|
|
123
|
+
"input-image-alt": () => "Add alt text to image input buttons",
|
|
124
|
+
"select-name": () => "Add an accessible name to the select element",
|
|
125
|
+
"autocomplete-valid": () => "Use valid autocomplete attribute values",
|
|
126
|
+
"frame-title": () => "Add a title attribute to the iframe",
|
|
127
|
+
"valid-lang": () => "Use a valid BCP 47 language code",
|
|
128
|
+
marquee: () => "Replace <marquee> with CSS animations",
|
|
129
|
+
blink: () => "Remove <blink> element - it is deprecated and causes accessibility issues",
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Run accessibility audit using axe-core
|
|
133
|
+
*/
|
|
134
|
+
export async function auditAccessibility(page) {
|
|
135
|
+
const issues = [];
|
|
136
|
+
const passed = [];
|
|
137
|
+
const config = {
|
|
138
|
+
rules: {
|
|
139
|
+
"color-contrast": { enabled: false }, // Doesn't work reliably in JSDOM
|
|
140
|
+
},
|
|
141
|
+
runOnly: {
|
|
142
|
+
type: "rule",
|
|
143
|
+
values: ACCESSIBILITY_RULES,
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
try {
|
|
147
|
+
// Inject axe-core into the jsdom window context (check if already injected for caching)
|
|
148
|
+
if (!page.window.axe) {
|
|
149
|
+
const script = page.document.createElement("script");
|
|
150
|
+
script.textContent = axe.source;
|
|
151
|
+
page.document.head.appendChild(script);
|
|
152
|
+
// Check if axe was injected successfully
|
|
153
|
+
if (!page.window.axe) {
|
|
154
|
+
throw new Error("Failed to inject axe-core into jsdom window");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Run axe-core from within the jsdom window context
|
|
158
|
+
const results = await page.window.axe.run(page.document, config);
|
|
159
|
+
// Process violations
|
|
160
|
+
for (const violation of results.violations) {
|
|
161
|
+
for (const node of violation.nodes) {
|
|
162
|
+
// Convert target to string selector
|
|
163
|
+
const selectorArray = Array.isArray(node.target)
|
|
164
|
+
? node.target
|
|
165
|
+
: [node.target];
|
|
166
|
+
const selector = typeof selectorArray[0] === "string" ? selectorArray[0] : "body";
|
|
167
|
+
const element = page.document.querySelector(selector);
|
|
168
|
+
const issue = {
|
|
169
|
+
id: generateContextualId("a11y", violation.id),
|
|
170
|
+
ruleId: violation.id,
|
|
171
|
+
severity: mapAxeSeverityToSeverity(violation.impact),
|
|
172
|
+
category: (RULE_TO_CATEGORY[violation.id] || "technical"),
|
|
173
|
+
message: violation.help || violation.id,
|
|
174
|
+
description: violation.description || "",
|
|
175
|
+
helpUrl: violation.helpUrl || "https://dequeuniversity.com",
|
|
176
|
+
wcag: WCAG_MAPPINGS[violation.id] || {
|
|
177
|
+
id: "Unknown",
|
|
178
|
+
level: "A",
|
|
179
|
+
name: violation.id,
|
|
180
|
+
description: violation.description || "",
|
|
181
|
+
},
|
|
182
|
+
element: {
|
|
183
|
+
selector,
|
|
184
|
+
html: element?.outerHTML?.substring(0, 200) || node.html || "",
|
|
185
|
+
failureSummary: node.failureSummary || violation.help || "",
|
|
186
|
+
},
|
|
187
|
+
fix: {
|
|
188
|
+
description: FIX_GUIDANCE[violation.id]?.(node) || "See documentation",
|
|
189
|
+
code: generateCodeFix(violation.id, node),
|
|
190
|
+
learnMoreUrl: violation.helpUrl || "https://dequeuniversity.com",
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
issues.push(issue);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Process passed checks
|
|
197
|
+
for (const pass of results.passes) {
|
|
198
|
+
passed.push({
|
|
199
|
+
id: `pass-${pass.id}`,
|
|
200
|
+
name: pass.help || pass.id,
|
|
201
|
+
category: RULE_TO_CATEGORY[pass.id] || "technical",
|
|
202
|
+
description: pass.description || "",
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
return { issues, passed };
|
|
210
|
+
}
|
|
211
|
+
function mapAxeSeverityToSeverity(impact) {
|
|
212
|
+
switch (impact) {
|
|
213
|
+
case "critical":
|
|
214
|
+
return "critical";
|
|
215
|
+
case "serious":
|
|
216
|
+
return "serious";
|
|
217
|
+
case "moderate":
|
|
218
|
+
return "moderate";
|
|
219
|
+
case "minor":
|
|
220
|
+
return "minor";
|
|
221
|
+
default:
|
|
222
|
+
return "moderate";
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function generateCodeFix(ruleId, node) {
|
|
226
|
+
const html = node.html || "<element>";
|
|
227
|
+
switch (ruleId) {
|
|
228
|
+
case "image-alt":
|
|
229
|
+
return `<img src="image.jpg" alt="[Describe what the image shows]">`;
|
|
230
|
+
case "button-name":
|
|
231
|
+
return `<button>Button text or aria-label="[purpose]">`;
|
|
232
|
+
case "link-name":
|
|
233
|
+
return `<a href="#target">Link text</a>`;
|
|
234
|
+
case "color-contrast":
|
|
235
|
+
return `/* Increase contrast ratio to 4.5:1 (normal text) or 3:1 (large text) */
|
|
236
|
+
/* Darken text or lighten background */`;
|
|
237
|
+
case "label":
|
|
238
|
+
return `<label for="input-id">Label text</label>
|
|
239
|
+
<input id="input-id" type="text">`;
|
|
240
|
+
case "document-title":
|
|
241
|
+
return `<title>Page Title - Site Name</title>`;
|
|
242
|
+
case "heading-order":
|
|
243
|
+
return `<!-- Follow order: h1 → h2 → h3 → h4 -->
|
|
244
|
+
<!-- Don't skip levels -->
|
|
245
|
+
<h1>Main heading</h1>
|
|
246
|
+
<h2>Subheading</h2>
|
|
247
|
+
<h3>Sub-subheading</h3>`;
|
|
248
|
+
case "video-caption":
|
|
249
|
+
return `<video controls>
|
|
250
|
+
<source src="video.mp4" type="video/mp4">
|
|
251
|
+
<track kind="captions" src="captions.vtt" srclang="en">
|
|
252
|
+
</video>`;
|
|
253
|
+
default:
|
|
254
|
+
return `<!-- Fix the ${ruleId} issue in the element: -->
|
|
255
|
+
${html}`;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=accessibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../../src/audits/accessibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Issue, PendingCheck } from "../types.js";
|
|
2
|
+
import { BrowserPage } from "../browser.js";
|
|
3
|
+
/**
|
|
4
|
+
* Run best practices audit
|
|
5
|
+
*/
|
|
6
|
+
export declare function auditBestPractices(page: BrowserPage): Promise<{
|
|
7
|
+
issues: Issue[];
|
|
8
|
+
passed: PendingCheck[];
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=best-practices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"best-practices.d.ts","sourceRoot":"","sources":["../../src/audits/best-practices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,WAAW,EAAiB,MAAM,eAAe,CAAC;AAE3D;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IACnE,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB,CAAC,CA6ID"}
|