nfunc-mcp 0.2.0 → 0.3.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 +47 -5
- package/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/dist/mappers/a11yDedupe.d.ts +25 -0
- package/dist/mappers/a11yDedupe.js +95 -0
- package/dist/mappers/a11yDedupe.js.map +1 -0
- package/dist/mappers/compositeScore.d.ts +23 -0
- package/dist/mappers/compositeScore.js +107 -0
- package/dist/mappers/compositeScore.js.map +1 -0
- package/dist/mappers/correlator.js +94 -33
- package/dist/mappers/correlator.js.map +1 -1
- package/dist/mappers/defectFormatter.js +129 -15
- package/dist/mappers/defectFormatter.js.map +1 -1
- package/dist/mappers/priorityMapper.d.ts +38 -0
- package/dist/mappers/priorityMapper.js +126 -0
- package/dist/mappers/priorityMapper.js.map +1 -1
- package/dist/tools/accessibility.js +72 -31
- package/dist/tools/accessibility.js.map +1 -1
- package/dist/tools/lighthouse.d.ts +14 -0
- package/dist/tools/lighthouse.js +134 -34
- package/dist/tools/lighthouse.js.map +1 -1
- package/dist/tools/qaGate.js +109 -34
- package/dist/tools/qaGate.js.map +1 -1
- package/dist/utils/outputParsers.d.ts +25 -0
- package/dist/utils/outputParsers.js +42 -0
- package/dist/utils/outputParsers.js.map +1 -1
- package/package.json +2 -2
package/dist/tools/lighthouse.js
CHANGED
|
@@ -4,57 +4,157 @@ import { parseLighthouseJSON } from "../utils/outputParsers.js";
|
|
|
4
4
|
import { shellErrorResponse, parseErrorResponse, } from "../utils/toolResponse.js";
|
|
5
5
|
import { formatLighthouseFinding } from "../mappers/defectFormatter.js";
|
|
6
6
|
import { sortFindingsByPriority } from "../mappers/priorityMapper.js";
|
|
7
|
+
/**
|
|
8
|
+
* Lighthouse defaults to mobile: a 412x823 screen, a mid-range Android UA,
|
|
9
|
+
* simulated slow 4G and a 4x CPU slowdown. Desktop needs --preset=desktop,
|
|
10
|
+
* which also drops throttling to 1x.
|
|
11
|
+
*
|
|
12
|
+
* These are not interchangeable runs. On a real commerce page the desktop
|
|
13
|
+
* pass scored accessibility 73 against mobile's 87 and surfaced image-alt,
|
|
14
|
+
* aria-required-children, aria-required-parent, aria-allowed-attr and
|
|
15
|
+
* aria-valid-attr-value failures that the mobile pass never reported, because
|
|
16
|
+
* the two render different DOM. Mobile likewise found failures desktop did
|
|
17
|
+
* not. Neither substitutes for the other.
|
|
18
|
+
*/
|
|
19
|
+
export function formFactorArgs(ff) {
|
|
20
|
+
return ff === "desktop" ? ["--preset=desktop"] : ["--form-factor=mobile"];
|
|
21
|
+
}
|
|
7
22
|
const inputShape = {
|
|
8
23
|
url: z.string().url(),
|
|
9
24
|
categories: z.array(z.string()).optional(),
|
|
10
25
|
thresholds: z.record(z.string(), z.number()).optional(),
|
|
26
|
+
form_factor: z
|
|
27
|
+
.enum(["mobile", "desktop", "both"])
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("Device profile to emulate. 'desktop' (default) runs unthrottled. " +
|
|
30
|
+
"'mobile' applies the Lighthouse CLI's own default profile — a " +
|
|
31
|
+
"412x823 screen on simulated slow 4G with a 4x CPU slowdown — which " +
|
|
32
|
+
"is considerably harsher and will report much lower performance " +
|
|
33
|
+
"scores for the same page. 'both' runs the two concurrently and " +
|
|
34
|
+
"reports each separately, tagging every finding with the form " +
|
|
35
|
+
"factors it affects; use it when you want to know which defects are " +
|
|
36
|
+
"device-specific, since the two profiles render different DOM and " +
|
|
37
|
+
"genuinely find different accessibility and SEO problems."),
|
|
11
38
|
};
|
|
12
39
|
export function registerLighthouseTool(server) {
|
|
13
40
|
server.registerTool("run_lighthouse", {
|
|
14
41
|
description: "Runs Google Lighthouse against a URL and returns a QA-style report " +
|
|
15
42
|
"with category scores, TTFB, and prioritised findings (P1/P2/P3). " +
|
|
16
|
-
"
|
|
17
|
-
"
|
|
43
|
+
"\n\n" +
|
|
44
|
+
"`form_factor` selects the device profile: 'mobile' (default, " +
|
|
45
|
+
"throttled slow 4G with 4x CPU slowdown), 'desktop' (unthrottled), or " +
|
|
46
|
+
"'both'. **Prefer 'both' when auditing a page properly** — the two " +
|
|
47
|
+
"profiles render different DOM and find different defects, not just " +
|
|
48
|
+
"different performance numbers. With 'both', `scores` is keyed by " +
|
|
49
|
+
"form factor and each finding carries affects_form_factors plus " +
|
|
50
|
+
"form_factor_specific, so device-only regressions are obvious. " +
|
|
51
|
+
"\n\n" +
|
|
52
|
+
"Requires the Lighthouse CLI on PATH (`npm install -g lighthouse`) " +
|
|
53
|
+
"and a Chrome/Chromium binary available.",
|
|
18
54
|
inputSchema: inputShape,
|
|
19
|
-
}, async ({ url, categories, thresholds }) => {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
55
|
+
}, async ({ url, categories, thresholds, form_factor }) => {
|
|
56
|
+
const requested = form_factor ?? "desktop";
|
|
57
|
+
const factors = requested === "both" ? ["mobile", "desktop"] : [requested];
|
|
58
|
+
const runOne = async (ff) => {
|
|
59
|
+
const args = [
|
|
60
|
+
url,
|
|
61
|
+
"--output=json",
|
|
62
|
+
"--quiet",
|
|
63
|
+
"--chrome-flags=--headless",
|
|
64
|
+
...formFactorArgs(ff),
|
|
65
|
+
];
|
|
66
|
+
if (categories && categories.length > 0) {
|
|
67
|
+
args.push(`--only-categories=${categories.join(",")}`);
|
|
68
|
+
}
|
|
69
|
+
return { ff, result: await runShell("lighthouse", args, { timeoutMs: 180_000 }) };
|
|
70
|
+
};
|
|
71
|
+
// Concurrent, so "both" costs little more wall time than a single run.
|
|
72
|
+
const runs = await Promise.all(factors.map(runOne));
|
|
73
|
+
const parsedByFactor = new Map();
|
|
74
|
+
for (const { ff, result } of runs) {
|
|
75
|
+
if (!result.stdout) {
|
|
76
|
+
if (factors.length === 1) {
|
|
77
|
+
return shellErrorResponse("Lighthouse produced no JSON output", result);
|
|
78
|
+
}
|
|
79
|
+
continue; // one form factor failed; report the other
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
parsedByFactor.set(ff, parseLighthouseJSON(result.stdout));
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
if (factors.length === 1) {
|
|
86
|
+
return parseErrorResponse("Failed to parse Lighthouse JSON", err, result);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
32
89
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
parsed = parseLighthouseJSON(result.stdout);
|
|
90
|
+
if (parsedByFactor.size === 0) {
|
|
91
|
+
return shellErrorResponse("Lighthouse produced no usable output for any form factor", runs[0].result);
|
|
36
92
|
}
|
|
37
|
-
|
|
38
|
-
|
|
93
|
+
const buildFindings = (parsed) => {
|
|
94
|
+
const out = [];
|
|
95
|
+
for (const audit of parsed.failedAudits) {
|
|
96
|
+
const threshold = thresholds?.[audit.id];
|
|
97
|
+
if (typeof threshold === "number" && audit.score >= threshold)
|
|
98
|
+
continue;
|
|
99
|
+
const f = formatLighthouseFinding(audit);
|
|
100
|
+
if (f)
|
|
101
|
+
out.push(f);
|
|
102
|
+
}
|
|
103
|
+
return out;
|
|
104
|
+
};
|
|
105
|
+
// Single form factor keeps the original flat report shape.
|
|
106
|
+
if (parsedByFactor.size === 1 && factors.length === 1) {
|
|
107
|
+
const parsed = parsedByFactor.get(factors[0]);
|
|
108
|
+
const findings = buildFindings(parsed);
|
|
109
|
+
sortFindingsByPriority(findings);
|
|
110
|
+
return {
|
|
111
|
+
content: [{ type: "text", text: JSON.stringify({
|
|
112
|
+
url,
|
|
113
|
+
form_factor: factors[0],
|
|
114
|
+
scores: parsed.categoryScores,
|
|
115
|
+
ttfb_ms: parsed.ttfbMs,
|
|
116
|
+
findings,
|
|
117
|
+
}, null, 2) }],
|
|
118
|
+
};
|
|
39
119
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
120
|
+
// Both: merge on audit_id and record which form factors each affects, so
|
|
121
|
+
// "fails on desktop only" is readable straight off the finding.
|
|
122
|
+
const merged = new Map();
|
|
123
|
+
const scores = {};
|
|
124
|
+
const ttfb = {};
|
|
125
|
+
for (const ff of factors) {
|
|
126
|
+
const parsed = parsedByFactor.get(ff);
|
|
127
|
+
if (!parsed)
|
|
44
128
|
continue;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
129
|
+
scores[ff] = parsed.categoryScores;
|
|
130
|
+
ttfb[ff] = parsed.ttfbMs;
|
|
131
|
+
for (const f of buildFindings(parsed)) {
|
|
132
|
+
const key = String(f.evidence["audit_id"]);
|
|
133
|
+
const existing = merged.get(key);
|
|
134
|
+
if (existing)
|
|
135
|
+
existing._ff.push(ff);
|
|
136
|
+
else
|
|
137
|
+
merged.set(key, { ...f, _ff: [ff] });
|
|
138
|
+
}
|
|
48
139
|
}
|
|
140
|
+
const findings = Array.from(merged.values()).map(({ _ff, ...f }) => ({
|
|
141
|
+
...f,
|
|
142
|
+
evidence: {
|
|
143
|
+
...f.evidence,
|
|
144
|
+
affects_form_factors: _ff,
|
|
145
|
+
form_factor_specific: _ff.length === 1,
|
|
146
|
+
},
|
|
147
|
+
}));
|
|
49
148
|
sortFindingsByPriority(findings);
|
|
50
|
-
const report = {
|
|
51
|
-
url,
|
|
52
|
-
scores: parsed.categoryScores,
|
|
53
|
-
ttfb_ms: parsed.ttfbMs,
|
|
54
|
-
findings,
|
|
55
|
-
};
|
|
56
149
|
return {
|
|
57
|
-
content: [{ type: "text", text: JSON.stringify(
|
|
150
|
+
content: [{ type: "text", text: JSON.stringify({
|
|
151
|
+
url,
|
|
152
|
+
form_factor: "both",
|
|
153
|
+
form_factors_run: Array.from(parsedByFactor.keys()),
|
|
154
|
+
scores,
|
|
155
|
+
ttfb_ms: ttfb,
|
|
156
|
+
findings,
|
|
157
|
+
}, null, 2) }],
|
|
58
158
|
};
|
|
59
159
|
});
|
|
60
160
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lighthouse.js","sourceRoot":"","sources":["../../src/tools/lighthouse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"lighthouse.js","sourceRoot":"","sources":["../../src/tools/lighthouse.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/qaGate.js
CHANGED
|
@@ -3,6 +3,9 @@ import { resolve } from "path";
|
|
|
3
3
|
import { runShell } from "../utils/shellRunner.js";
|
|
4
4
|
import { parseLighthouseJSON, parsePa11yJSON, parseSemgrepJSON, } from "../utils/outputParsers.js";
|
|
5
5
|
import { formatLighthouseFinding, formatA11yFinding, formatStaticAnalysisFinding, } from "../mappers/defectFormatter.js";
|
|
6
|
+
import { dedupeA11yFindings } from "../mappers/a11yDedupe.js";
|
|
7
|
+
import { lighthouseSubScore, a11ySubScore, staticSubScore, compositeScore, } from "../mappers/compositeScore.js";
|
|
8
|
+
import { formFactorArgs } from "./lighthouse.js";
|
|
6
9
|
import { runESLint } from "../utils/eslintRunner.js";
|
|
7
10
|
import { correlate, } from "../mappers/correlator.js";
|
|
8
11
|
import { generateHtmlReport } from "../utils/reportGenerator.js";
|
|
@@ -12,8 +15,14 @@ const PRIORITY_ORDER = { P1: 0, P2: 1, P3: 2 };
|
|
|
12
15
|
// Errors are surfaced as the `error` field so a partial failure in one tool
|
|
13
16
|
// doesn't prevent the other two from contributing findings.
|
|
14
17
|
// ---------------------------------------------------------------------------
|
|
15
|
-
async function runLighthouse(url) {
|
|
16
|
-
const result = await runShell("lighthouse", [
|
|
18
|
+
async function runLighthouse(url, formFactor) {
|
|
19
|
+
const result = await runShell("lighthouse", [
|
|
20
|
+
url,
|
|
21
|
+
"--output=json",
|
|
22
|
+
"--quiet",
|
|
23
|
+
"--chrome-flags=--headless",
|
|
24
|
+
...formFactorArgs(formFactor),
|
|
25
|
+
], { timeoutMs: 180_000 });
|
|
17
26
|
if (result.exitCode === -1 && !result.stdout && !result.stderr) {
|
|
18
27
|
return { scores: {}, ttfb_ms: null, findings: [], error: "Lighthouse is not installed or not found in PATH." };
|
|
19
28
|
}
|
|
@@ -37,25 +46,30 @@ async function runLighthouse(url) {
|
|
|
37
46
|
};
|
|
38
47
|
}
|
|
39
48
|
}
|
|
40
|
-
async function runA11y(url) {
|
|
41
|
-
const
|
|
42
|
-
if (
|
|
49
|
+
async function runA11y(url, engines) {
|
|
50
|
+
const results = await Promise.all(engines.map((e) => runShell("pa11y", [url, "--reporter", "json", "--standard", "WCAG2AA", "--runner", e], { timeoutMs: 120_000 })));
|
|
51
|
+
if (results.every((r) => r.exitCode === -1 && !r.stdout && !r.stderr)) {
|
|
43
52
|
return { violation_count: 0, findings: [], error: "pa11y is not installed or not found in PATH." };
|
|
44
53
|
}
|
|
45
54
|
// pa11y exits 2 when violations are found — that is a successful run.
|
|
46
|
-
const
|
|
47
|
-
if (
|
|
48
|
-
|
|
55
|
+
const usable = results.filter((r) => (r.exitCode === 0 || r.exitCode === 2) && r.stdout);
|
|
56
|
+
if (usable.length === 0) {
|
|
57
|
+
const r = results[0];
|
|
58
|
+
return { violation_count: 0, findings: [], error: `pa11y failed (exit ${r.exitCode}): ${r.stderr.slice(0, 300)}` };
|
|
49
59
|
}
|
|
50
60
|
try {
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
61
|
+
const rawFindings = [];
|
|
62
|
+
for (const result of usable) {
|
|
63
|
+
for (const v of parsePa11yJSON(result.stdout).violations) {
|
|
64
|
+
const f = formatA11yFinding(v);
|
|
65
|
+
if (f)
|
|
66
|
+
rawFindings.push(f);
|
|
67
|
+
}
|
|
57
68
|
}
|
|
58
|
-
|
|
69
|
+
// Dedup before the findings reach the correlator and the composite score —
|
|
70
|
+
// 35 copies of one defect otherwise floor the score and swamp all_findings.
|
|
71
|
+
const { findings, rawCount } = dedupeA11yFindings(rawFindings);
|
|
72
|
+
return { violation_count: findings.length, raw_violation_count: rawCount, findings };
|
|
59
73
|
}
|
|
60
74
|
catch (err) {
|
|
61
75
|
return {
|
|
@@ -116,18 +130,14 @@ function buildVerdict(findings) {
|
|
|
116
130
|
return "ADVISORY";
|
|
117
131
|
return "CLEAR";
|
|
118
132
|
}
|
|
119
|
-
//
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
else
|
|
128
|
-
score -= 3;
|
|
129
|
-
}
|
|
130
|
-
return Math.max(0, score);
|
|
133
|
+
// Composite score. See src/mappers/compositeScore.ts for why this is a
|
|
134
|
+
// weighted mean of per-tool sub-scores rather than one global subtraction.
|
|
135
|
+
function buildSubScores(lhData, a11yData, staticData) {
|
|
136
|
+
return {
|
|
137
|
+
lighthouse: lhData && !lhData.error ? lighthouseSubScore(lhData.scores) : null,
|
|
138
|
+
pa11y: a11yData && !a11yData.error ? a11ySubScore(a11yData.findings) : null,
|
|
139
|
+
static: staticData ? staticSubScore(staticData.findings) : null,
|
|
140
|
+
};
|
|
131
141
|
}
|
|
132
142
|
// Option 3: compact per-tool scorecard
|
|
133
143
|
// Any argument may be null when the caller did not supply the corresponding
|
|
@@ -162,10 +172,14 @@ function buildScorecard(lhData, a11yData, staticData) {
|
|
|
162
172
|
else {
|
|
163
173
|
const hasP1 = a11yData.findings.some((f) => f.priority === "P1");
|
|
164
174
|
const hasP2 = a11yData.findings.some((f) => f.priority === "P2");
|
|
175
|
+
const raw = a11yData.raw_violation_count;
|
|
165
176
|
entries.push({
|
|
166
177
|
tool: "pa11y",
|
|
167
178
|
gate: hasP1 ? "FAIL" : hasP2 ? "WARN" : "PASS",
|
|
168
179
|
issues: a11yData.violation_count,
|
|
180
|
+
...(raw !== undefined && raw > a11yData.violation_count
|
|
181
|
+
? { raw_issues: raw }
|
|
182
|
+
: {}),
|
|
169
183
|
});
|
|
170
184
|
}
|
|
171
185
|
if (staticData === null) {
|
|
@@ -227,6 +241,21 @@ const inputShape = {
|
|
|
227
241
|
.optional()
|
|
228
242
|
.describe("Optional free-text context about the project (e.g. 'React SPA', 'checkout flow', " +
|
|
229
243
|
"'marketing site'). Pass anything the user mentions about what the app is or does."),
|
|
244
|
+
form_factor: z
|
|
245
|
+
.enum(["mobile", "desktop", "both"])
|
|
246
|
+
.optional()
|
|
247
|
+
.describe("Lighthouse device profile: 'desktop' (default, unthrottled), 'mobile' " +
|
|
248
|
+
"(throttled slow 4G with a 4x CPU slowdown, which scores far lower for " +
|
|
249
|
+
"the same page), or 'both'. The profiles render different DOM and find " +
|
|
250
|
+
"different accessibility and SEO defects, so 'both' is the thorough " +
|
|
251
|
+
"choice; it runs concurrently and costs little extra wall time."),
|
|
252
|
+
a11y_runner: z
|
|
253
|
+
.enum(["htmlcs", "axe", "both"])
|
|
254
|
+
.optional()
|
|
255
|
+
.describe("pa11y engine: 'htmlcs' (default) for WCAG techniques, structure, " +
|
|
256
|
+
"labels and forms; 'axe' for materially better ARIA and computed " +
|
|
257
|
+
"contrast coverage; 'both' to merge them. Choose 'axe' or 'both' when " +
|
|
258
|
+
"the code under test involves ARIA or a component library."),
|
|
230
259
|
};
|
|
231
260
|
export function registerQaGateTool(server) {
|
|
232
261
|
server.registerTool("run_qa_gate", {
|
|
@@ -252,7 +281,7 @@ export function registerQaGateTool(server) {
|
|
|
252
281
|
"If any individual tool is not installed, the report is still produced from the others — " +
|
|
253
282
|
"it never fails completely.",
|
|
254
283
|
inputSchema: inputShape,
|
|
255
|
-
}, async ({ url, path: targetPath }) => {
|
|
284
|
+
}, async ({ url, path: targetPath, form_factor, a11y_runner }) => {
|
|
256
285
|
if (!url && !targetPath) {
|
|
257
286
|
return {
|
|
258
287
|
content: [{ type: "text", text: JSON.stringify({
|
|
@@ -262,13 +291,55 @@ export function registerQaGateTool(server) {
|
|
|
262
291
|
isError: true,
|
|
263
292
|
};
|
|
264
293
|
}
|
|
294
|
+
const requestedFF = form_factor ?? "desktop";
|
|
295
|
+
const factors = requestedFF === "both" ? ["mobile", "desktop"] : [requestedFF];
|
|
296
|
+
const requestedRunner = a11y_runner ?? "htmlcs";
|
|
297
|
+
const engines = requestedRunner === "both" ? ["htmlcs", "axe"] : [requestedRunner];
|
|
265
298
|
// Only run the tools we have inputs for. null means deliberately skipped,
|
|
266
299
|
// not a failure — the scorecard will show SKIPPED for those entries.
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
url
|
|
300
|
+
// Every leg — including each Lighthouse form factor — runs concurrently.
|
|
301
|
+
const [lhRuns, a11yData, staticData] = await Promise.all([
|
|
302
|
+
url
|
|
303
|
+
? Promise.all(factors.map(async (ff) => ({ ff, data: await runLighthouse(url, ff) })))
|
|
304
|
+
: null,
|
|
305
|
+
url ? runA11y(url, engines) : null,
|
|
270
306
|
targetPath ? runStatic(resolve(targetPath)) : null,
|
|
271
307
|
]);
|
|
308
|
+
// Collapse the form factors into one Lighthouse view for the rest of the
|
|
309
|
+
// report. Findings are merged on audit_id and tagged with the form
|
|
310
|
+
// factors they affect; scores keep the worst per category, since a page
|
|
311
|
+
// is only as healthy as its weaker profile.
|
|
312
|
+
const lhOk = lhRuns?.filter((r) => !r.data.error) ?? [];
|
|
313
|
+
const lhData = !lhRuns
|
|
314
|
+
? null
|
|
315
|
+
: lhOk.length === 0
|
|
316
|
+
? lhRuns[0].data
|
|
317
|
+
: (() => {
|
|
318
|
+
const scores = {};
|
|
319
|
+
for (const { data } of lhOk) {
|
|
320
|
+
for (const [k, v] of Object.entries(data.scores)) {
|
|
321
|
+
scores[k] = k in scores ? Math.min(scores[k], v) : v;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
const merged = new Map();
|
|
325
|
+
for (const { ff, data } of lhOk) {
|
|
326
|
+
for (const f of data.findings) {
|
|
327
|
+
const key = String(f.evidence["audit_id"]);
|
|
328
|
+
const hit = merged.get(key);
|
|
329
|
+
if (hit)
|
|
330
|
+
hit._ff.push(ff);
|
|
331
|
+
else
|
|
332
|
+
merged.set(key, { ...f, _ff: [ff] });
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const findings = Array.from(merged.values()).map(({ _ff, ...f }) => ({
|
|
336
|
+
...f,
|
|
337
|
+
evidence: factors.length > 1
|
|
338
|
+
? { ...f.evidence, affects_form_factors: _ff, form_factor_specific: _ff.length === 1 }
|
|
339
|
+
: f.evidence,
|
|
340
|
+
}));
|
|
341
|
+
return { scores, ttfb_ms: lhOk[0].data.ttfb_ms, findings };
|
|
342
|
+
})();
|
|
272
343
|
// Surface tool errors but don't abort — partial reports are still useful.
|
|
273
344
|
const errors = [];
|
|
274
345
|
if (lhData?.error)
|
|
@@ -311,12 +382,16 @@ export function registerQaGateTool(server) {
|
|
|
311
382
|
...(staticData ? ["eslint", "semgrep"] : []),
|
|
312
383
|
];
|
|
313
384
|
const readiness = buildVerdict(allFindings);
|
|
314
|
-
const
|
|
385
|
+
const subScores = buildSubScores(lhData, a11yData, staticData);
|
|
386
|
+
const composite = compositeScore(subScores);
|
|
315
387
|
const scorecard = buildScorecard(lhData, a11yData, staticData);
|
|
316
388
|
const summary = buildSummary(allFindings, toolsRan, readiness, correlations_count);
|
|
317
389
|
const report = {
|
|
318
390
|
release_readiness: readiness,
|
|
319
|
-
composite_score:
|
|
391
|
+
composite_score: composite,
|
|
392
|
+
// Per-tool 0–100 health, so a low composite is attributable rather than
|
|
393
|
+
// just low. Null means the tool did not run or did not produce a score.
|
|
394
|
+
sub_scores: subScores,
|
|
320
395
|
scorecard,
|
|
321
396
|
...(staticData ? { eslint_config_used: staticData.eslint_config_used } : {}),
|
|
322
397
|
summary,
|
|
@@ -333,7 +408,7 @@ export function registerQaGateTool(server) {
|
|
|
333
408
|
url,
|
|
334
409
|
path: targetPath,
|
|
335
410
|
release_readiness: readiness,
|
|
336
|
-
composite_score:
|
|
411
|
+
composite_score: composite ?? 0,
|
|
337
412
|
scorecard,
|
|
338
413
|
summary,
|
|
339
414
|
corroborated_findings: corroboratedFindings,
|
package/dist/tools/qaGate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qaGate.js","sourceRoot":"","sources":["../../src/tools/qaGate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,2BAA2B,GAE5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,SAAS,GAGV,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,cAAc,GAA6B,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAazE,8EAA8E;AAC9E,wEAAwE;AACxE,4EAA4E;AAC5E,4DAA4D;AAC5D,8EAA8E;AAE9E,KAAK,UAAU,aAAa,CAAC,GAAW;IAMtC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,YAAY,EACZ,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,2BAA2B,CAAC,EAC9D,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;IACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC/D,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,mDAAmD,EAAE,CAAC;IACjH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,2BAA2B,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;IAC3I,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC7E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACvC,KAAK,EAAE,0CAA0C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SACpG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAW;IAKhC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,OAAO,EACP,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,EACpD,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;IACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC/D,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,8CAA8C,EAAE,CAAC;IACrG,CAAC;IACD,sEAAsE;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC7B,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,sBAAsB,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;IAC/H,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAChC,KAAK,EAAE,qCAAqC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SAC/F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAe;IAMtC,MAAM,WAAW,GAAG;QAClB,uBAAuB,EAAE,uBAAuB;QAChD,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG;KAC3C,CAAC;IAEF,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnD,SAAS,CAAC,OAAO,CAAC;QAClB,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;KACvE,CAAC,CAAC;IAEH,MAAM,SAAS,GAA0B,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAa,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEnD,IAAI,aAAa,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QACpF,QAAQ,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACrE,CAAC;SAAM,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,KAAK,MAAM,CAAC,IAAI,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChE,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1J,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YAAC,QAAQ,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAAC,CAAC;IACnE,CAAC;IAED,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChF,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/C,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACzG,CAAC;AAED,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,wCAAwC;AACxC,SAAS,YAAY,CAAC,QAA6B;IACjD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IACpE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IACjE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qEAAqE;AACrE,SAAS,mBAAmB,CAAC,QAA6B;IACxD,IAAI,KAAK,GAAG,GAAG,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;YAAE,KAAK,IAAI,EAAE,CAAC;aAChC,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;YAAE,KAAK,IAAI,CAAC,CAAC;;YACpC,KAAK,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,uCAAuC;AACvC,4EAA4E;AAC5E,0EAA0E;AAC1E,yFAAyF;AACzF,SAAS,cAAc,CACrB,MAAiE,EACjE,QAAiF,EACjF,UAA+D;IAE/D,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3D,CAAC,CAAC,CAAC,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACpD,KAAK,EAAE,GAAG;YACV,SAAS,EAAE,MAAM,CAAC,MAAM;SACzB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YAC9C,MAAM,EAAE,QAAQ,CAAC,eAAe;SACjC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACpD,MAAM,EAAE,UAAU,CAAC,WAAW;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CACnB,WAAgC,EAChC,QAAkB,EAClB,SAA2B,EAC3B,iBAAyB;IAEzB,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;IAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAE1B,6DAA6D;IAC7D,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,SAAS,GAAG,CAChB,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CACd,IAAI,MAAM,CAAC;IAEZ,MAAM,QAAQ,GACZ,iBAAiB,GAAG,CAAC;QACnB,CAAC,CAAC,IAAI,iBAAiB,8EAA8E;QACrG,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,aAAa,GAAqC;QACtD,OAAO,EAAM,mDAAmD;QAChE,WAAW,EAAE,wDAAwD;QACrE,QAAQ,EAAK,+DAA+D;QAC5E,KAAK,EAAQ,iCAAiC;KAC/C,CAAC;IAEF,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,QAAQ,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;AAC1I,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,UAAU,GAAG;IACjB,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,CACP,8DAA8D;QAC9D,qDAAqD;QACrD,sEAAsE;QACtE,8EAA8E,CAC/E;IACH,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mFAAmF;QACnF,wDAAwD;QACxD,wEAAwE;QACxE,+EAA+E,CAChF;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mFAAmF;QACnF,mFAAmF,CACpF;CACJ,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EACT,8EAA8E;YAC9E,qFAAqF;YACrF,mFAAmF;YACnF,8EAA8E;YAC9E,mEAAmE;YACnE,4DAA4D;YAC5D,0DAA0D;YAC1D,mDAAmD;YACnD,MAAM;YACN,mFAAmF;YACnF,mFAAmF;YACnF,oFAAoF;YACpF,iFAAiF;YACjF,mFAAmF;YACnF,wBAAwB;YACxB,MAAM;YACN,2FAA2F;YAC3F,iGAAiG;YACjG,8DAA8D;YAC9D,0FAA0F;YAC1F,4BAA4B;QAC9B,WAAW,EAAE,UAAU;KACxB,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QAClC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACtD,KAAK,EAAE,uCAAuC;gCAC5C,oFAAoF;yBACvF,CAAC,EAAE,CAAC;gBACL,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,qEAAqE;QACrE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvD,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;YAC/B,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;YACzB,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;SACnD,CAAC,CAAC;QAEH,0EAA0E;QAC1E,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,MAAM,EAAE,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,UAAU,EAAE,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAgB;YAC3B,UAAU,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;gBACjC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;gBAC/E,CAAC,CAAC,IAAI;YACR,IAAI,EAAE,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC/B,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;gBAC5E,CAAC,CAAC,IAAI;YACR,MAAM,EAAE,UAAU;gBAChB,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE;gBACxE,CAAC,CAAC,IAAI;SACT,CAAC;QAEF,MAAM,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,GAChE,SAAS,CAAC,OAAO,CAAC,CAAC;QAErB,mEAAmE;QACnE,gEAAgE;QAChE,oEAAoE;QACpE,MAAM,oBAAoB,GAAG,mBAAmB;aAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,MAAe,EAAE,CAAC,CAAC;aACnD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE3E,MAAM,WAAW,GAAwB;YACvC,GAAG,mBAAmB;YACtB,GAAG,eAAe;SACnB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACd,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACtE,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9B,mEAAmE;YACnE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG;YACf,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,GAAG,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7C,CAAC;QAEF,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,cAAc,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAEnF,MAAM,MAAM,GAA4B;YACtC,iBAAiB,EAAE,SAAS;YAC5B,eAAe,EAAE,cAAc;YAC/B,SAAS;YACT,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,OAAO;YACP,qBAAqB,EAAE,oBAAoB;YAC3C,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACnC,YAAY,EAAE,WAAW;YACzB,kBAAkB,EAAE,kBAAkB;SACvC,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;QAEjD,wEAAwE;QACxE,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC;gBAC1C,GAAG;gBACH,IAAI,EAAE,UAAU;gBAChB,iBAAiB,EAAE,SAAS;gBAC5B,eAAe,EAAE,cAAc;gBAC/B,SAAS;gBACT,OAAO;gBACP,qBAAqB,EAAE,oBAAiE;gBACxF,YAAY,EAAE,WAAwD;gBACtE,kBAAkB,EAAE,kBAAkB;gBACtC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC9C,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM;aAC/E,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,GAAG,UAAU,UAAU,EAAE,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;QACxE,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"qaGate.js","sourceRoot":"","sources":["../../src/tools/qaGate.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,17 @@ export interface LighthouseAuditRef {
|
|
|
6
6
|
displayValue: string;
|
|
7
7
|
numericValue?: number;
|
|
8
8
|
numericUnit?: string;
|
|
9
|
+
/**
|
|
10
|
+
* The audit's weight inside its Lighthouse category, taken from
|
|
11
|
+
* categories[].auditRefs[]. This is Lighthouse's own statement of how much
|
|
12
|
+
* the audit matters: weight 0 means it is a diagnostic that contributes
|
|
13
|
+
* nothing to the category score. Undefined when the audit belongs to no
|
|
14
|
+
* category (rare — treat as unknown, not as zero).
|
|
15
|
+
*/
|
|
16
|
+
weight?: number;
|
|
17
|
+
/** Highest-weighted category the audit belongs to, for traceability. */
|
|
18
|
+
category?: string;
|
|
19
|
+
scoreDisplayMode?: string;
|
|
9
20
|
}
|
|
10
21
|
export interface ParsedLighthouse {
|
|
11
22
|
categoryScores: Record<string, number>;
|
|
@@ -15,6 +26,8 @@ export interface ParsedLighthouse {
|
|
|
15
26
|
}
|
|
16
27
|
export declare function parseLighthouseJSON(rawJson: string): ParsedLighthouse;
|
|
17
28
|
export type WcagLevel = "A" | "AA" | "AAA" | "unknown";
|
|
29
|
+
export type A11yRunner = "htmlcs" | "axe";
|
|
30
|
+
export type AxeImpact = "critical" | "serious" | "moderate" | "minor";
|
|
18
31
|
export interface Pa11yViolation {
|
|
19
32
|
code: string;
|
|
20
33
|
technique: string;
|
|
@@ -24,6 +37,18 @@ export interface Pa11yViolation {
|
|
|
24
37
|
type: "error" | "warning" | "notice";
|
|
25
38
|
wcagLevel: WcagLevel;
|
|
26
39
|
criterion: string | null;
|
|
40
|
+
/**
|
|
41
|
+
* Which engine produced this. The two emit completely different `code`
|
|
42
|
+
* shapes — htmlcs gives WCAG technique paths
|
|
43
|
+
* ("WCAG2AA.Principle1.Guideline1_1.1_1_1.H37"), axe gives bare rule ids
|
|
44
|
+
* ("image-alt") — so every consumer has to branch on this rather than
|
|
45
|
+
* pattern-matching the code.
|
|
46
|
+
*/
|
|
47
|
+
runner: A11yRunner;
|
|
48
|
+
/** axe only: axe's own severity rating, its equivalent of Lighthouse weight. */
|
|
49
|
+
impact?: AxeImpact;
|
|
50
|
+
/** axe only: the rule could not decide alone and wants human confirmation. */
|
|
51
|
+
needsReview?: boolean;
|
|
27
52
|
}
|
|
28
53
|
export interface ParsedPa11y {
|
|
29
54
|
violationCount: number;
|