nfunc-mcp 0.2.0 → 0.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 +85 -335
- package/dist/index.js +27 -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/labFieldComparator.d.ts +62 -0
- package/dist/mappers/labFieldComparator.js +134 -0
- package/dist/mappers/labFieldComparator.js.map +1 -0
- 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/mappers/psiAggregator.d.ts +130 -0
- package/dist/mappers/psiAggregator.js +293 -0
- package/dist/mappers/psiAggregator.js.map +1 -0
- package/dist/mappers/webVitalsMapper.d.ts +52 -0
- package/dist/mappers/webVitalsMapper.js +131 -0
- package/dist/mappers/webVitalsMapper.js.map +1 -0
- 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/performanceAudit.d.ts +2 -0
- package/dist/tools/performanceAudit.js +446 -0
- package/dist/tools/performanceAudit.js.map +1 -0
- package/dist/tools/performanceAuditPlan.d.ts +2 -0
- package/dist/tools/performanceAuditPlan.js +438 -0
- package/dist/tools/performanceAuditPlan.js.map +1 -0
- package/dist/tools/qaGate.js +109 -34
- package/dist/tools/qaGate.js.map +1 -1
- package/dist/utils/csvReader.d.ts +20 -0
- package/dist/utils/csvReader.js +172 -0
- package/dist/utils/csvReader.js.map +1 -0
- package/dist/utils/httpClient.d.ts +84 -0
- package/dist/utils/httpClient.js +171 -0
- package/dist/utils/httpClient.js.map +1 -0
- package/dist/utils/outputParsers.d.ts +25 -0
- package/dist/utils/outputParsers.js +42 -0
- package/dist/utils/outputParsers.js.map +1 -1
- package/dist/utils/psiAuth.d.ts +26 -0
- package/dist/utils/psiAuth.js +36 -0
- package/dist/utils/psiAuth.js.map +1 -0
- package/dist/utils/psiParser.d.ts +124 -0
- package/dist/utils/psiParser.js +200 -0
- package/dist/utils/psiParser.js.map +1 -0
- package/dist/utils/publicUrl.d.ts +17 -0
- package/dist/utils/publicUrl.js +115 -0
- package/dist/utils/publicUrl.js.map +1 -0
- package/dist/utils/sitemapReader.d.ts +27 -0
- package/dist/utils/sitemapReader.js +272 -0
- package/dist/utils/sitemapReader.js.map +1 -0
- package/dist/utils/urlClassifier.d.ts +45 -0
- package/dist/utils/urlClassifier.js +267 -0
- package/dist/utils/urlClassifier.js.map +1 -0
- package/docs/manual.md +558 -0
- package/docs/psi-report-spec.md +174 -0
- package/package.json +14 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a11yDedupe.js","sourceRoot":"","sources":["../../src/mappers/a11yDedupe.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAA6B,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAOzE;;;;;;;;;;;GAWG;AACH,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAmB;IACpD,0DAA0D;IAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+C,CAAC;IAErE,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,GAAG,GACP,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG;YAC3C,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QAED,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QACpB,0EAA0E;QAC1E,2DAA2D;QAC3D,IAAI,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3E,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAClE,KAAK,GAAG,CAAC;QACP,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;QACvE,CAAC,CAAC,OAAO,CACZ,CAAC;IAEF,sEAAsE;IACtE,yEAAyE;IACzE,uEAAuE;IACvE,wEAAwE;IACxE,qEAAqE;IACrE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YACpB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACjE,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EACpD,CAAC,CACF,CAAC;QACF,GAAG,CAAC,IAAI,CAAC;YACP,GAAG,KAAK;YACR,WAAW,EACT,GAAG,KAAK,CAAC,WAAW,uBAAuB,QAAQ,6BAA6B;gBAChF,wDAAwD,QAAQ,sBAAsB;gBACtF,0CAA0C;YAC5C,QAAQ,EAAE;gBACR,GAAG,KAAK,CAAC,QAAQ;gBACjB,WAAW,EAAE,QAAQ;gBACrB,iBAAiB,EAAE,KAAK,CAAC,MAAM;gBAC/B,QAAQ,EAAE,IAAI;gBACd,gBAAgB,EAAE,KAAK;qBACpB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;qBACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;aACpD;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Finding } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Lighthouse's own category scores ARE a calibrated 0–100 health signal, with
|
|
4
|
+
* per-audit weighting Google already tuned. Re-deriving one by counting
|
|
5
|
+
* findings throws that away and double-counts besides: total-blocking-time,
|
|
6
|
+
* bootup-time, mainthread-work-breakdown, interactive and max-potential-fid are
|
|
7
|
+
* five findings describing one overloaded main thread, and the old formula
|
|
8
|
+
* charged 75 points for it. So use the category scores directly.
|
|
9
|
+
*/
|
|
10
|
+
export declare function lighthouseSubScore(categoryScores: Record<string, number>): number | null;
|
|
11
|
+
export declare function a11ySubScore(findings: Finding[]): number;
|
|
12
|
+
export declare function staticSubScore(findings: Finding[]): number;
|
|
13
|
+
export interface SubScores {
|
|
14
|
+
lighthouse: number | null;
|
|
15
|
+
pa11y: number | null;
|
|
16
|
+
static: number | null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Weighted mean over the tools that produced a score. Weights are renormalised
|
|
20
|
+
* across whatever ran, so a url-only run and a url+path run are on the same
|
|
21
|
+
* scale. Returns null when nothing scored.
|
|
22
|
+
*/
|
|
23
|
+
export declare function compositeScore(sub: SubScores): number | null;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composite health score.
|
|
3
|
+
*
|
|
4
|
+
* The previous formula was a single global subtraction — 100 minus 15 per P1,
|
|
5
|
+
* 7 per P2, 3 per P3 — which had two structural faults:
|
|
6
|
+
*
|
|
7
|
+
* 1. No resolution. Seven P1 findings floored it at 0, so a mediocre page and
|
|
8
|
+
* a catastrophic one were indistinguishable. Real pages routinely exceed
|
|
9
|
+
* that within a single tool.
|
|
10
|
+
* 2. Running more tools lowered the score, because every tool fed the same
|
|
11
|
+
* running subtraction. A url-only run was not comparable to a url+path run,
|
|
12
|
+
* which is exactly backwards: broader checking should not look like worse
|
|
13
|
+
* health.
|
|
14
|
+
*
|
|
15
|
+
* Both are fixed by scoring each tool to its own 0–100 sub-score and taking a
|
|
16
|
+
* weighted mean over only the tools that actually ran.
|
|
17
|
+
*/
|
|
18
|
+
const SEVERITY_DAMAGE = { P1: 10, P2: 3, P3: 1 };
|
|
19
|
+
/**
|
|
20
|
+
* Saturating decay. Never reaches 0, always preserves ordering, and each
|
|
21
|
+
* additional finding costs less than the one before — which matches how the
|
|
22
|
+
* information actually behaves: the twentieth P1 tells you far less about the
|
|
23
|
+
* page than the first did.
|
|
24
|
+
*
|
|
25
|
+
* K sets where the curve has resolution. At K = 90 a single P1 scores 89, five
|
|
26
|
+
* P1s score 57, and fifteen P1s score 19 — spread across the range real pages
|
|
27
|
+
* occupy instead of collapsing onto the floor.
|
|
28
|
+
*/
|
|
29
|
+
function decay(damage, k) {
|
|
30
|
+
return Math.round(100 * Math.exp(-damage / k));
|
|
31
|
+
}
|
|
32
|
+
function damageOf(findings) {
|
|
33
|
+
return findings.reduce((sum, f) => sum + SEVERITY_DAMAGE[f.priority], 0);
|
|
34
|
+
}
|
|
35
|
+
// Tuned so a page's sub-score lands where a human triager would put it. Static
|
|
36
|
+
// analysis decays faster because code defects are fewer and more directly
|
|
37
|
+
// actionable than page-level accessibility violations.
|
|
38
|
+
const A11Y_K = 90;
|
|
39
|
+
const STATIC_K = 60;
|
|
40
|
+
/**
|
|
41
|
+
* Relative weights of the Lighthouse categories inside the Lighthouse
|
|
42
|
+
* sub-score. Lighthouse publishes per-audit weights but no cross-category
|
|
43
|
+
* weighting, so this is our judgement: performance and accessibility carry the
|
|
44
|
+
* most user impact, SEO and best-practices matter but less directly.
|
|
45
|
+
*
|
|
46
|
+
* Categories not listed here — currently the experimental "agentic-browsing" —
|
|
47
|
+
* get UNKNOWN_CATEGORY_WEIGHT so a new or volatile category cannot dominate the
|
|
48
|
+
* score, while still being visible in the breakdown.
|
|
49
|
+
*/
|
|
50
|
+
const CATEGORY_WEIGHTS = {
|
|
51
|
+
performance: 0.3,
|
|
52
|
+
accessibility: 0.3,
|
|
53
|
+
"best-practices": 0.2,
|
|
54
|
+
seo: 0.2,
|
|
55
|
+
};
|
|
56
|
+
const UNKNOWN_CATEGORY_WEIGHT = 0.05;
|
|
57
|
+
/**
|
|
58
|
+
* Lighthouse's own category scores ARE a calibrated 0–100 health signal, with
|
|
59
|
+
* per-audit weighting Google already tuned. Re-deriving one by counting
|
|
60
|
+
* findings throws that away and double-counts besides: total-blocking-time,
|
|
61
|
+
* bootup-time, mainthread-work-breakdown, interactive and max-potential-fid are
|
|
62
|
+
* five findings describing one overloaded main thread, and the old formula
|
|
63
|
+
* charged 75 points for it. So use the category scores directly.
|
|
64
|
+
*/
|
|
65
|
+
export function lighthouseSubScore(categoryScores) {
|
|
66
|
+
const entries = Object.entries(categoryScores);
|
|
67
|
+
if (entries.length === 0)
|
|
68
|
+
return null;
|
|
69
|
+
let weighted = 0;
|
|
70
|
+
let totalWeight = 0;
|
|
71
|
+
for (const [name, score] of entries) {
|
|
72
|
+
const w = CATEGORY_WEIGHTS[name] ?? UNKNOWN_CATEGORY_WEIGHT;
|
|
73
|
+
weighted += w * score;
|
|
74
|
+
totalWeight += w;
|
|
75
|
+
}
|
|
76
|
+
return totalWeight > 0 ? Math.round(weighted / totalWeight) : null;
|
|
77
|
+
}
|
|
78
|
+
export function a11ySubScore(findings) {
|
|
79
|
+
return decay(damageOf(findings), A11Y_K);
|
|
80
|
+
}
|
|
81
|
+
export function staticSubScore(findings) {
|
|
82
|
+
return decay(damageOf(findings), STATIC_K);
|
|
83
|
+
}
|
|
84
|
+
// How much each tool contributes to the composite. Static analysis is weighted
|
|
85
|
+
// lowest because a clean scan of a small directory returns 100 and would
|
|
86
|
+
// otherwise flatter a run whose real problems are all in the browser.
|
|
87
|
+
const TOOL_WEIGHTS = { lighthouse: 0.4, pa11y: 0.4, static: 0.2 };
|
|
88
|
+
/**
|
|
89
|
+
* Weighted mean over the tools that produced a score. Weights are renormalised
|
|
90
|
+
* across whatever ran, so a url-only run and a url+path run are on the same
|
|
91
|
+
* scale. Returns null when nothing scored.
|
|
92
|
+
*/
|
|
93
|
+
export function compositeScore(sub) {
|
|
94
|
+
const parts = [];
|
|
95
|
+
if (sub.lighthouse !== null)
|
|
96
|
+
parts.push([sub.lighthouse, TOOL_WEIGHTS.lighthouse]);
|
|
97
|
+
if (sub.pa11y !== null)
|
|
98
|
+
parts.push([sub.pa11y, TOOL_WEIGHTS.pa11y]);
|
|
99
|
+
if (sub.static !== null)
|
|
100
|
+
parts.push([sub.static, TOOL_WEIGHTS.static]);
|
|
101
|
+
if (parts.length === 0)
|
|
102
|
+
return null;
|
|
103
|
+
const totalWeight = parts.reduce((s, [, w]) => s + w, 0);
|
|
104
|
+
const weighted = parts.reduce((s, [v, w]) => s + v * w, 0);
|
|
105
|
+
return Math.round(weighted / totalWeight);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=compositeScore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compositeScore.js","sourceRoot":"","sources":["../../src/mappers/compositeScore.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,17 +9,49 @@ function promotePriority(p) {
|
|
|
9
9
|
// Maps Lighthouse accessibility audit IDs to substrings that appear inside the
|
|
10
10
|
// pa11y rule_code for the same class of issue. A leading "." prevents matching
|
|
11
11
|
// partial segment names (e.g. ".H44" won't accidentally match ".1H44").
|
|
12
|
+
//
|
|
13
|
+
// Keep this keyed on defects the two tools genuinely detect in common. A wrong
|
|
14
|
+
// entry is worse than a missing one: a bogus match promotes a finding a whole
|
|
15
|
+
// priority tier and stamps it "confirmed by two tools". Where Lighthouse and
|
|
16
|
+
// pa11y test adjacent-but-different criteria (e.g. label-content-name-mismatch
|
|
17
|
+
// under WCAG 2.5.3 vs F68 under 1.3.1) they are deliberately left unmapped.
|
|
12
18
|
const LH_TO_PA11Y_SUBSTRINGS = {
|
|
19
|
+
// Colour / contrast
|
|
13
20
|
"color-contrast": [".G18", ".G145", ".G174"],
|
|
21
|
+
// Images
|
|
14
22
|
"image-alt": [".H37", ".H67", ".F65"],
|
|
23
|
+
"input-image-alt": [".H36"],
|
|
24
|
+
"object-alt": [".H53"],
|
|
25
|
+
// Accessible names on controls
|
|
15
26
|
label: [".H44", ".F68", ".H91.Input", ".H91.Select", ".H91.Textarea"],
|
|
27
|
+
"form-field-multiple-labels": [".H44", ".F68"],
|
|
28
|
+
"button-name": [".H91.Button"],
|
|
29
|
+
"select-name": [".H91.Select"],
|
|
30
|
+
"aria-input-field-name": [".ARIA6", ".ARIA9", ".H91"],
|
|
31
|
+
"aria-toggle-field-name": [".ARIA6", ".ARIA9", ".H91"],
|
|
32
|
+
"aria-command-name": [".ARIA6", ".ARIA9", ".H91"],
|
|
33
|
+
"aria-dialog-name": [".ARIA6", ".ARIA9"],
|
|
34
|
+
// ARIA misuse
|
|
35
|
+
"aria-prohibited-attr": [".ARIA6", ".ARIA4"],
|
|
36
|
+
"aria-valid-attr-value": [".ARIA9"],
|
|
37
|
+
// Links
|
|
16
38
|
"link-name": [".H30", ".H91.A."],
|
|
39
|
+
"link-text": [".H30", ".H91.A."],
|
|
40
|
+
"crawlable-anchors": [".G1,G123,G124", ".H30"],
|
|
41
|
+
// Document / language
|
|
17
42
|
"document-title": [".H25", ".F89"],
|
|
18
43
|
"html-has-lang": [".H57"],
|
|
44
|
+
"html-lang-valid": [".H57"],
|
|
45
|
+
"valid-lang": [".H58"],
|
|
46
|
+
// Structure
|
|
47
|
+
"heading-order": [".G141", ".H42"],
|
|
19
48
|
"frame-title": [".H64"],
|
|
20
|
-
|
|
21
|
-
|
|
49
|
+
// Duplicate identifiers. Lighthouse 12 removed duplicate-id-aria altogether,
|
|
50
|
+
// which is why a page throwing 35 pa11y F77 violations correlated with
|
|
51
|
+
// nothing under Lighthouse 13. Both ids are kept so older Lighthouse output
|
|
52
|
+
// still matches; there is currently no LH 13 equivalent to pair F77 with.
|
|
22
53
|
"duplicate-id-aria": [".H93", ".F77"],
|
|
54
|
+
"duplicate-id-active": [".H93", ".F77"],
|
|
23
55
|
};
|
|
24
56
|
// Lighthouse performance audit IDs where Rule 2 (code linkage) is relevant.
|
|
25
57
|
const PERFORMANCE_AUDIT_IDS = new Set([
|
|
@@ -30,14 +62,27 @@ const PERFORMANCE_AUDIT_IDS = new Set([
|
|
|
30
62
|
"mainthread-work-breakdown",
|
|
31
63
|
"total-blocking-time",
|
|
32
64
|
]);
|
|
65
|
+
// Deterministic non-crypto string hash (djb2), base36-encoded.
|
|
66
|
+
// Selectors are long and routinely share long prefixes — e.g.
|
|
67
|
+
// "#accordion-panel-:rn: > div > div > input:nth-child(1)" and the same
|
|
68
|
+
// selector ending ":nth-child(3)" are identical for their first 40 characters.
|
|
69
|
+
// The previous id truncated the selector to 16 chars, so those two distinct
|
|
70
|
+
// findings collapsed to one id and consumedA11yIds claimed the wrong entry
|
|
71
|
+
// during correlation. Hashing the whole selector keeps ids short and unique.
|
|
72
|
+
function shortHash(input) {
|
|
73
|
+
let h = 5381;
|
|
74
|
+
for (let i = 0; i < input.length; i++) {
|
|
75
|
+
h = ((h << 5) + h + input.charCodeAt(i)) | 0;
|
|
76
|
+
}
|
|
77
|
+
return (h >>> 0).toString(36);
|
|
78
|
+
}
|
|
33
79
|
function makeId(tool, f) {
|
|
34
80
|
const e = f.evidence;
|
|
35
81
|
if (tool === "lighthouse")
|
|
36
82
|
return `lh:${String(e["audit_id"] ?? f.title)}`;
|
|
37
83
|
if (tool === "a11y") {
|
|
38
84
|
const code = String(e["rule_code"] ?? "").split(".").slice(-2).join(".");
|
|
39
|
-
|
|
40
|
-
return `a11y:${code}:${sel}`;
|
|
85
|
+
return `a11y:${code}:${shortHash(String(e["selector"] ?? ""))}`;
|
|
41
86
|
}
|
|
42
87
|
const basename = String(e["file"] ?? "").split("/").pop() ?? "";
|
|
43
88
|
return `static:${String(e["source"] ?? "")}:${basename}:${String(e["line"] ?? "")}`;
|
|
@@ -58,37 +103,53 @@ function applyRule1(lhFindings, a11yFindings) {
|
|
|
58
103
|
const substrings = LH_TO_PA11Y_SUBSTRINGS[auditId];
|
|
59
104
|
if (!substrings)
|
|
60
105
|
continue;
|
|
61
|
-
|
|
106
|
+
// Claim every unconsumed pa11y finding covering the same technique, not
|
|
107
|
+
// just the first. One Lighthouse audit routinely corresponds to several
|
|
108
|
+
// pa11y violations — one per offending element — and stopping at the first
|
|
109
|
+
// left the rest to reappear as uncorroborated copies of the same defect.
|
|
110
|
+
const matches = a11yFindings.filter((a11yF) => {
|
|
62
111
|
if (consumedA11yIds.has(a11yF.id))
|
|
63
|
-
|
|
112
|
+
return false;
|
|
64
113
|
const ruleCode = String(a11yF.evidence["rule_code"] ?? "");
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
114
|
+
return substrings.some((s) => ruleCode.includes(s));
|
|
115
|
+
});
|
|
116
|
+
if (matches.length === 0)
|
|
117
|
+
continue;
|
|
118
|
+
// Use the most severe of the matched pa11y findings, then take the better
|
|
119
|
+
// (lower index = higher priority) of that and the Lighthouse finding as the
|
|
120
|
+
// base, and promote it one tier.
|
|
121
|
+
const worstA11y = matches.reduce((a, b) => PRIORITY_ORDER[a.priority] <= PRIORITY_ORDER[b.priority] ? a : b);
|
|
122
|
+
const basePriority = PRIORITY_ORDER[lhF.priority] <= PRIORITY_ORDER[worstA11y.priority]
|
|
123
|
+
? lhF.priority
|
|
124
|
+
: worstA11y.priority;
|
|
125
|
+
// Findings arrive here already deduplicated, so fold the collapsed
|
|
126
|
+
// occurrence counts back in to report how many elements are affected.
|
|
127
|
+
const elementCount = matches.reduce((n, m) => n + Number(m.evidence["occurrences"] ?? 1), 0);
|
|
128
|
+
correlated.push({
|
|
129
|
+
id: `corr:lh+a11y:${auditId}`,
|
|
130
|
+
source_tool: "lighthouse+pa11y",
|
|
131
|
+
priority: promotePriority(basePriority),
|
|
132
|
+
title: lhF.title,
|
|
133
|
+
description: `[Lighthouse] ${lhF.description} ` +
|
|
134
|
+
`[pa11y] ${worstA11y.description} ` +
|
|
135
|
+
`Two independent tools flagged the same accessibility gap across ` +
|
|
136
|
+
`${elementCount} element${elementCount !== 1 ? "s" : ""} — ` +
|
|
137
|
+
`this cross-tool confirmation increases confidence that the issue is real and affects real users.`,
|
|
138
|
+
evidence: {
|
|
139
|
+
...lhF.evidence,
|
|
140
|
+
pa11y_rule_codes: [
|
|
141
|
+
...new Set(matches.map((m) => String(m.evidence["rule_code"] ?? ""))),
|
|
142
|
+
],
|
|
143
|
+
pa11y_selectors: matches
|
|
144
|
+
.slice(0, 5)
|
|
145
|
+
.map((m) => String(m.evidence["selector"] ?? "")),
|
|
146
|
+
pa11y_elements_affected: elementCount,
|
|
147
|
+
},
|
|
148
|
+
confirmed_by: ["lighthouse", "pa11y"],
|
|
149
|
+
});
|
|
150
|
+
consumedLhIds.add(lhF.id);
|
|
151
|
+
for (const m of matches)
|
|
152
|
+
consumedA11yIds.add(m.id);
|
|
92
153
|
}
|
|
93
154
|
return { correlated, consumedLhIds, consumedA11yIds };
|
|
94
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"correlator.js","sourceRoot":"","sources":["../../src/mappers/correlator.ts"],"names":[],"mappings":"AA+BA,MAAM,cAAc,GAA6B,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAEzE,SAAS,eAAe,CAAC,CAAW;IAClC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAC/E,gFAAgF;AAChF,wEAAwE;AACxE,MAAM,sBAAsB,GAA6B;IACvD,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"correlator.js","sourceRoot":"","sources":["../../src/mappers/correlator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,42 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { lighthouseImpactToPriority, a11yTechniqueToPriority, axeImpactToPriority, staticAnalysisToPriority, } from "./priorityMapper.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parenthesised measurement, or nothing at all.
|
|
4
|
+
*
|
|
5
|
+
* displayValue is absent on binary audits and comes and goes across Lighthouse
|
|
6
|
+
* versions, so interpolating it directly left "()" or a doubled space stranded
|
|
7
|
+
* mid-sentence. Every template that appends a measurement goes through this;
|
|
8
|
+
* templates that build a sentence *around* the value guard it explicitly and
|
|
9
|
+
* supply alternative phrasing instead.
|
|
10
|
+
*/
|
|
11
|
+
const paren = (v) => (v ? ` (${v})` : "");
|
|
2
12
|
const QA_DESCRIPTIONS = {
|
|
3
|
-
"first-contentful-paint": (a) =>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
"first-contentful-paint": (a) => a.displayValue
|
|
14
|
+
? `Users see the first piece of content ${a.displayValue} after navigation, which is slower than the recommended threshold for a smooth perceived load.`
|
|
15
|
+
: `Users see the first piece of content later after navigation than the recommended threshold for a smooth perceived load.`,
|
|
16
|
+
"largest-contentful-paint": (a) => a.displayValue
|
|
17
|
+
? `Users see the main page content ${a.displayValue} after navigation, above the recommended threshold for a responsive feel.`
|
|
18
|
+
: `Users see the main page content later after navigation than the recommended threshold for a responsive feel.`,
|
|
19
|
+
"speed-index": (a) => a.displayValue
|
|
20
|
+
? `The page takes ${a.displayValue} to visually populate, which feels sluggish to users on first load.`
|
|
21
|
+
: `The page is slow to visually populate, which feels sluggish to users on first load.`,
|
|
22
|
+
"total-blocking-time": (a) => a.displayValue
|
|
23
|
+
? `The page is unresponsive to user input for ${a.displayValue} during load, causing noticeable input lag.`
|
|
24
|
+
: `The page is unresponsive to user input for a prolonged stretch of the load, causing noticeable input lag.`,
|
|
25
|
+
"cumulative-layout-shift": (a) => `The page layout shifts unexpectedly during load${a.displayValue ? ` (CLS ${a.displayValue})` : ""}, causing users to misclick or lose their reading place.`,
|
|
26
|
+
interactive: (a) => a.displayValue
|
|
27
|
+
? `The page takes ${a.displayValue} before it can reliably respond to user input.`
|
|
28
|
+
: `The page takes a long time before it can reliably respond to user input.`,
|
|
29
|
+
// Lighthouse 13 changed this displayValue from a bare duration to a clause
|
|
30
|
+
// ("Root document took 780 ms"), which broke the original inlined phrasing.
|
|
31
|
+
"server-response-time": (a) => a.displayValue
|
|
32
|
+
? `${a.displayValue} to respond to the initial request, delaying every downstream load step.`
|
|
33
|
+
: `The server is slow to respond to the initial request, delaying every downstream load step.`,
|
|
34
|
+
"document-latency-insight": (a) => `The initial HTML document is slow to arrive${paren(a.displayValue)}; nothing else can start loading until it does, so this delay is paid by every other resource on the page.`,
|
|
35
|
+
"render-blocking-resources": (a) => `Render-blocking scripts or styles are delaying the first paint${paren(a.displayValue)}; users stare at a blank page longer than necessary.`,
|
|
36
|
+
"unused-javascript": (a) => `The page ships JavaScript that is never executed${paren(a.displayValue)}, inflating load time on slower connections.`,
|
|
37
|
+
"unused-css-rules": (a) => `The page ships CSS rules that go unused${paren(a.displayValue)}, wasting bytes on every visit.`,
|
|
38
|
+
"uses-responsive-images": (a) => `Images larger than their displayed size are being served${paren(a.displayValue)}, wasting bandwidth on mobile users.`,
|
|
39
|
+
"uses-optimized-images": (a) => `Images are not optimally compressed${paren(a.displayValue)}; users on slower networks wait longer than necessary.`,
|
|
15
40
|
"color-contrast": () => `Text on the page does not have sufficient contrast against its background, making it hard to read for users with low vision.`,
|
|
16
41
|
"image-alt": () => `One or more images are missing alt text; screen-reader users cannot understand what the image conveys.`,
|
|
17
42
|
label: () => `Form fields are missing accessible labels; assistive-tech users cannot tell what each field is for.`,
|
|
@@ -21,13 +46,64 @@ const QA_DESCRIPTIONS = {
|
|
|
21
46
|
"meta-description": () => `The page is missing a meta description; search results show no preview snippet to users.`,
|
|
22
47
|
"is-on-https": () => `The page is served over HTTP rather than HTTPS; browsers warn users that the connection is not secure.`,
|
|
23
48
|
viewport: () => `The page has no viewport meta tag; on mobile, content renders at desktop width and users must pinch-zoom to read.`,
|
|
49
|
+
// --- Responsiveness / main thread ---
|
|
50
|
+
"max-potential-fid": (a) => a.displayValue
|
|
51
|
+
? `The worst-case delay between a user's first tap or click and the page reacting to it is ${a.displayValue}; users who interact early during load will feel the page freeze.`
|
|
52
|
+
: `There is a long worst-case delay between a user's first tap or click and the page reacting to it; users who interact early during load will feel the page freeze.`,
|
|
53
|
+
"mainthread-work-breakdown": (a) => a.displayValue
|
|
54
|
+
? `The browser's main thread is busy for ${a.displayValue} during load, so scrolling, taps, and clicks are ignored or delayed while it catches up.`
|
|
55
|
+
: `The browser's main thread is busy for much of the load, so scrolling, taps, and clicks are ignored or delayed while it catches up.`,
|
|
56
|
+
"bootup-time": (a) => a.displayValue
|
|
57
|
+
? `JavaScript occupies the main thread for ${a.displayValue}; on mid-range phones this is where most of the perceived slowness comes from.`
|
|
58
|
+
: `JavaScript occupies the main thread for a prolonged stretch of the load; on mid-range phones this is where most of the perceived slowness comes from.`,
|
|
59
|
+
"forced-reflow-insight": (a) => `Scripts read layout values immediately after changing the DOM, forcing the browser to recalculate layout mid-frame${paren(a.displayValue)}; this shows up as stutter during scroll and interaction.`,
|
|
60
|
+
// --- Console / runtime health ---
|
|
61
|
+
"errors-in-console": () => `The page logs JavaScript errors to the browser console during load. Each one is a code path that failed at runtime, and features downstream of it may be silently broken for real users.`,
|
|
62
|
+
deprecations: (a) => `The page relies on browser APIs that are deprecated${paren(a.displayValue)}; these will stop working in a future browser release and break the feature that depends on them.`,
|
|
63
|
+
"inspector-issues": () => `Chrome DevTools recorded issues against this page — typically blocked requests, cookie problems, or content-security violations. Each represents browser-enforced behaviour that may differ from what was tested locally.`,
|
|
64
|
+
"third-party-cookies": (a) => `The page sets third-party cookies${paren(a.displayValue)}. Browsers are phasing these out, so any feature depending on them — analytics, personalisation, embedded checkout — will degrade as that rollout completes.`,
|
|
65
|
+
// --- Caching / payload ---
|
|
66
|
+
"bf-cache": (a) => `The page blocks back/forward cache restoration${paren(a.displayValue)}, so pressing Back triggers a full reload instead of an instant restore — a visible regression on the most common navigation in a browsing session.`,
|
|
67
|
+
"cache-insight": (a) => `Static assets are served with short or missing cache lifetimes${paren(a.displayValue)}; returning visitors re-download content that has not changed.`,
|
|
68
|
+
// displayValue here is already a full clause ("Total size was 4,814 KiB"),
|
|
69
|
+
// unlike the bare metrics most audits report, so it leads the sentence
|
|
70
|
+
// instead of being inlined mid-clause.
|
|
71
|
+
"total-byte-weight": (a) => a.displayValue
|
|
72
|
+
? `${a.displayValue} — a payload that size is slow and expensive to load for users on mobile data or metered connections.`
|
|
73
|
+
: `The page transfers more data than it needs to render, which is slow and expensive for users on mobile data or metered connections.`,
|
|
74
|
+
"unminified-javascript": (a) => `JavaScript is shipped unminified${paren(a.displayValue)}, sending comments and whitespace to every visitor.`,
|
|
75
|
+
"legacy-javascript-insight": (a) => `The bundle ships transpiled polyfills that modern browsers do not need${paren(a.displayValue)}, penalising up-to-date users to support ones that may no longer be in the support matrix.`,
|
|
76
|
+
"image-delivery-insight": (a) => `Images are not delivered in an optimal format or size${paren(a.displayValue)}; users on slower networks wait longer than necessary for the same visual result.`,
|
|
77
|
+
"unsized-images": () => `Images are missing explicit width and height attributes, so the browser cannot reserve space before they load and surrounding content jumps as each one arrives.`,
|
|
78
|
+
// --- Network / critical path ---
|
|
79
|
+
"render-blocking-insight": (a) => `Scripts or stylesheets block the first paint${paren(a.displayValue)}; users stare at a blank page until they finish downloading.`,
|
|
80
|
+
"lcp-discovery-insight": () => `The browser cannot discover the largest content element early — it is loaded lazily, injected by script, or not preloaded — so the main content paints later than the network allows.`,
|
|
81
|
+
"network-dependency-tree-insight": () => `Critical resources load in a long dependent chain rather than in parallel, so total load time is the sum of the chain instead of its slowest link.`,
|
|
82
|
+
// --- Accessibility (Lighthouse-side) ---
|
|
83
|
+
"aria-prohibited-attr": () => `An element carries an ARIA attribute that its role does not permit; assistive tech either ignores the attribute or announces the element incorrectly.`,
|
|
84
|
+
// Shared with the axe runner, whose rule ids match Lighthouse audit ids.
|
|
85
|
+
"aria-allowed-attr": () => `An element uses an ARIA attribute its role does not support; the attribute is ignored, so the state it was meant to convey — pressed, expanded, selected — never reaches screen-reader users.`,
|
|
86
|
+
"aria-required-children": () => `An ARIA role that requires specific child roles is missing them; assistive tech cannot interpret the widget and may skip or misannounce its contents.`,
|
|
87
|
+
"aria-required-parent": () => `An element with a child ARIA role sits outside the parent role it requires; screen readers lose the relationship and announce the item without its surrounding context.`,
|
|
88
|
+
"aria-valid-attr-value": () => `An ARIA attribute holds an invalid value, often an id reference pointing at an element that does not exist; the name or relationship it was meant to establish silently fails.`,
|
|
89
|
+
"duplicate-id-aria": () => `An id used by an ARIA reference appears more than once; the reference resolves to the wrong element, so labels and relationships attach to the wrong control.`,
|
|
90
|
+
"aria-dialog-name": () => `A dialog or alertdialog has no accessible name; screen-reader users are moved into a modal with no indication of what it is asking them to do.`,
|
|
91
|
+
"heading-order": () => `Heading levels skip a step (for example h2 straight to h4); screen-reader users navigating by heading get a broken outline and may believe content is missing.`,
|
|
92
|
+
"label-content-name-mismatch": () => `An element's visible text is not contained in its accessible name, so speech-control users saying the label they can see fail to activate the control.`,
|
|
93
|
+
"meta-viewport": () => `The viewport tag disables zooming (user-scalable="no" or maximum-scale under 5); low-vision users cannot pinch-zoom to read the page.`,
|
|
94
|
+
// --- SEO / crawlability ---
|
|
95
|
+
"link-text": (a) => `One or more links use non-descriptive text such as "click here"${paren(a.displayValue)}; screen-reader users listing links out of context cannot tell where they lead, and search engines gain no signal from the anchor.`,
|
|
96
|
+
"crawlable-anchors": () => `Links are not crawlable — they lack a resolvable href, so search engines cannot follow them and the destination pages may go unindexed.`,
|
|
97
|
+
"robots-txt": () => `robots.txt is invalid. Crawlers may misread the directives and either index pages meant to stay private or skip pages meant to rank.`,
|
|
98
|
+
"llms-txt": () => `llms.txt is missing or does not follow the recommended format, so AI agents fetching the site get no curated guide to its content.`,
|
|
99
|
+
"agent-accessibility-tree": () => `The accessibility tree is malformed, which degrades both screen readers and automated agents that navigate the page through it.`,
|
|
24
100
|
};
|
|
25
101
|
function fallbackDescription(audit) {
|
|
26
102
|
const detail = audit.displayValue ? ` (current: ${audit.displayValue})` : "";
|
|
27
103
|
return `The "${audit.title}" check did not meet the recommended quality threshold${detail}.`;
|
|
28
104
|
}
|
|
29
105
|
export function formatLighthouseFinding(audit) {
|
|
30
|
-
const priority =
|
|
106
|
+
const priority = lighthouseImpactToPriority(audit.score, audit.weight);
|
|
31
107
|
if (!priority)
|
|
32
108
|
return null;
|
|
33
109
|
const describe = QA_DESCRIPTIONS[audit.id];
|
|
@@ -39,6 +115,10 @@ export function formatLighthouseFinding(audit) {
|
|
|
39
115
|
evidence: {
|
|
40
116
|
audit_id: audit.id,
|
|
41
117
|
value: audit.displayValue ?? "",
|
|
118
|
+
// Why this landed where it did — weight is Lighthouse's own importance
|
|
119
|
+
// signal, and weight 0 marks a diagnostic that blocks nothing.
|
|
120
|
+
...(audit.weight !== undefined ? { category_weight: audit.weight } : {}),
|
|
121
|
+
...(audit.category ? { category: audit.category } : {}),
|
|
42
122
|
},
|
|
43
123
|
};
|
|
44
124
|
}
|
|
@@ -186,10 +266,44 @@ export function formatStaticAnalysisFinding(issue) {
|
|
|
186
266
|
},
|
|
187
267
|
};
|
|
188
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* axe rule ids are the same identifiers Lighthouse uses for its accessibility
|
|
271
|
+
* audits — Lighthouse runs axe internally — so an axe finding can borrow the
|
|
272
|
+
* QA prose already written for the matching Lighthouse audit instead of
|
|
273
|
+
* duplicating it. Falls back to axe's own help text, stripped of the trailing
|
|
274
|
+
* documentation URL that would otherwise land in a defect ticket.
|
|
275
|
+
*/
|
|
276
|
+
function axeDescription(violation) {
|
|
277
|
+
const shared = QA_DESCRIPTIONS[violation.code];
|
|
278
|
+
if (shared) {
|
|
279
|
+
return shared({ id: violation.code, displayValue: "" });
|
|
280
|
+
}
|
|
281
|
+
const cleaned = violation.message.replace(/\s*\(https?:\/\/[^)]*\)\s*$/, "").trim();
|
|
282
|
+
return cleaned
|
|
283
|
+
? `${cleaned}. Flagged by axe as ${violation.impact ?? "unrated"} impact; assistive-tech users are likely affected.`
|
|
284
|
+
: `axe rule "${violation.code}" failed; assistive-tech users are likely affected.`;
|
|
285
|
+
}
|
|
189
286
|
export function formatA11yFinding(violation) {
|
|
190
287
|
if (violation.type === "notice")
|
|
191
288
|
return null;
|
|
192
|
-
|
|
289
|
+
if (violation.runner === "axe") {
|
|
290
|
+
const priority = axeImpactToPriority(violation.impact, violation.needsReview);
|
|
291
|
+
if (!priority)
|
|
292
|
+
return null;
|
|
293
|
+
return {
|
|
294
|
+
priority,
|
|
295
|
+
title: violation.message.replace(/\s*\(https?:\/\/[^)]*\)\s*$/, "").trim() || violation.code,
|
|
296
|
+
description: axeDescription(violation),
|
|
297
|
+
evidence: {
|
|
298
|
+
rule_code: violation.code,
|
|
299
|
+
selector: violation.selector,
|
|
300
|
+
runner: "axe",
|
|
301
|
+
...(violation.impact ? { axe_impact: violation.impact } : {}),
|
|
302
|
+
...(violation.needsReview ? { needs_manual_review: true } : {}),
|
|
303
|
+
},
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
const priority = a11yTechniqueToPriority(violation.technique, violation.wcagLevel);
|
|
193
307
|
if (!priority)
|
|
194
308
|
return null;
|
|
195
309
|
const describe = lookupA11yTemplate(violation.technique);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defectFormatter.js","sourceRoot":"","sources":["../../src/mappers/defectFormatter.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAK7B,MAAM,eAAe,GAA8B;IACjD,wBAAwB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9B,wCAAwC,CAAC,CAAC,YAAY,gGAAgG;IACxJ,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAChC,mCAAmC,CAAC,CAAC,YAAY,2EAA2E;IAC9H,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CACnB,kBAAkB,CAAC,CAAC,YAAY,qEAAqE;IACvG,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3B,8CAA8C,CAAC,CAAC,YAAY,6CAA6C;IAC3G,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC/B,wDAAwD,CAAC,CAAC,YAAY,2DAA2D;IACnI,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CACjB,kBAAkB,CAAC,CAAC,YAAY,gDAAgD;IAClF,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5B,oBAAoB,CAAC,CAAC,YAAY,0EAA0E;IAC9G,2BAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,CACjC,mEAAmE,CAAC,CAAC,YAAY,uDAAuD;IAC1I,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACzB,qDAAqD,CAAC,CAAC,YAAY,+CAA+C;IACpH,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CACxB,4CAA4C,CAAC,CAAC,YAAY,kCAAkC;IAC9F,wBAAwB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9B,6DAA6D,CAAC,CAAC,YAAY,uCAAuC;IACpH,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7B,wCAAwC,CAAC,CAAC,YAAY,yDAAyD;IACjH,gBAAgB,EAAE,GAAG,EAAE,CACrB,8HAA8H;IAChI,WAAW,EAAE,GAAG,EAAE,CAChB,wGAAwG;IAC1G,KAAK,EAAE,GAAG,EAAE,CACV,qGAAqG;IACvG,WAAW,EAAE,GAAG,EAAE,CAChB,kGAAkG;IACpG,gBAAgB,EAAE,GAAG,EAAE,CACrB,4GAA4G;IAC9G,eAAe,EAAE,GAAG,EAAE,CACpB,oFAAoF;IACtF,kBAAkB,EAAE,GAAG,EAAE,CACvB,0FAA0F;IAC5F,aAAa,EAAE,GAAG,EAAE,CAClB,wGAAwG;IAC1G,QAAQ,EAAE,GAAG,EAAE,CACb,mHAAmH;CACtH,CAAC;AAEF,SAAS,mBAAmB,CAAC,KAAyB;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,OAAO,QAAQ,KAAK,CAAC,KAAK,yDAAyD,MAAM,GAAG,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAyB;IAEzB,MAAM,QAAQ,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC5E,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW;QACX,QAAQ,EAAE;YACR,QAAQ,EAAE,KAAK,CAAC,EAAE;YAClB,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE;SAChC;KACF,CAAC;AACJ,CAAC;AAID,oEAAoE;AACpE,kCAAkC;AAClC,yEAAyE;AACzE,+EAA+E;AAC/E,yEAAyE;AACzE,wEAAwE;AACxE,8DAA8D;AAC9D,MAAM,iBAAiB,GAAkC;IACvD,SAAS;IACT,GAAG,EAAE,GAAG,EAAE,CACR,wHAAwH;IAC1H,GAAG,EAAE,GAAG,EAAE,CACR,wHAAwH;IAC1H,GAAG,EAAE,GAAG,EAAE,CACR,iGAAiG;IACnG,GAAG,EAAE,GAAG,EAAE,CACR,qHAAqH;IAEvH,QAAQ;IACR,GAAG,EAAE,GAAG,EAAE,CACR,uHAAuH;IACzH,iBAAiB,EAAE,GAAG,EAAE,CACtB,sHAAsH;IACxH,YAAY,EAAE,GAAG,EAAE,CACjB,sFAAsF;IACxF,iBAAiB,EAAE,GAAG,EAAE,CACtB,4GAA4G;IAE9G,UAAU;IACV,iBAAiB,EAAE,GAAG,EAAE,CACtB,uGAAuG;IACzG,kBAAkB,EAAE,GAAG,EAAE,CACvB,2GAA2G;IAE7G,iCAAiC;IACjC,oBAAoB,EAAE,GAAG,EAAE,CACzB,wGAAwG;IAC1G,wBAAwB,EAAE,GAAG,EAAE,CAC7B,uGAAuG;IACzG,qBAAqB,EAAE,GAAG,EAAE,CAC1B,6FAA6F;IAC/F,sBAAsB,EAAE,GAAG,EAAE,CAC3B,+FAA+F;IACjG,mBAAmB,EAAE,GAAG,EAAE,CACxB,6GAA6G;IAC/G,sBAAsB,EAAE,GAAG,EAAE,CAC3B,yGAAyG;IAC3G,mBAAmB,EAAE,GAAG,EAAE,CACxB,sGAAsG;IACxG,wBAAwB,EAAE,GAAG,EAAE,CAC7B,oGAAoG;IACtG,qBAAqB,EAAE,GAAG,EAAE,CAC1B,qGAAqG;IACvG,oBAAoB,EAAE,GAAG,EAAE,CACzB,+GAA+G;IACjH,iBAAiB,EAAE,GAAG,EAAE,CACtB,6FAA6F;IAC/F,mBAAmB,EAAE,GAAG,EAAE,CACxB,wGAAwG;IAE1G,2EAA2E;IAC3E,GAAG,EAAE,GAAG,EAAE,CACR,wIAAwI;IAE1I,uBAAuB;IACvB,GAAG,EAAE,GAAG,EAAE,CACR,uHAAuH;IACzH,GAAG,EAAE,GAAG,EAAE,CACR,8HAA8H;IAChI,GAAG,EAAE,GAAG,EAAE,CACR,0HAA0H;IAC5H,GAAG,EAAE,GAAG,EAAE,CACR,+FAA+F;IACjG,KAAK,EAAE,GAAG,EAAE,CACV,iHAAiH;IACnH,KAAK,EAAE,GAAG,EAAE,CACV,0HAA0H;IAE5H,kCAAkC;IAClC,GAAG,EAAE,GAAG,EAAE,CACR,wIAAwI;IAC1I,GAAG,EAAE,GAAG,EAAE,CACR,wGAAwG;IAC1G,IAAI,EAAE,GAAG,EAAE,CACT,gIAAgI;IAElI,wBAAwB;IACxB,GAAG,EAAE,GAAG,EAAE,CACR,gHAAgH;IAClH,GAAG,EAAE,GAAG,EAAE,CACR,uHAAuH;IACzH,GAAG,EAAE,GAAG,EAAE,CACR,sGAAsG;IACxG,GAAG,EAAE,GAAG,EAAE,CACR,wGAAwG;IAE1G,SAAS;IACT,GAAG,EAAE,GAAG,EAAE,CACR,iGAAiG;IAEnG,gCAAgC;IAChC,GAAG,EAAE,GAAG,EAAE,CACR,6HAA6H;IAC/H,GAAG,EAAE,GAAG,EAAE,CACR,+GAA+G;IAEjH,2BAA2B;IAC3B,WAAW,EAAE,GAAG,EAAE,CAChB,kJAAkJ;IACpJ,GAAG,EAAE,GAAG,EAAE,CACR,kJAAkJ;IACpJ,KAAK,EAAE,GAAG,EAAE,CACV,4HAA4H;IAE9H,mBAAmB;IACnB,GAAG,EAAE,GAAG,EAAE,CACR,wHAAwH;IAC1H,IAAI,EAAE,GAAG,EAAE,CACT,0HAA0H;IAC5H,UAAU,EAAE,GAAG,EAAE,CACf,wHAAwH;IAC1H,WAAW,EAAE,GAAG,EAAE,CAChB,0HAA0H;IAC5H,IAAI,EAAE,GAAG,EAAE,CACT,uHAAuH;IAEzH,6CAA6C;IAC7C,EAAE,EAAE,GAAG,EAAE,CACP,qIAAqI;IACvI,GAAG,EAAE,GAAG,EAAE,CACR,kHAAkH;IAEpH,mBAAmB;IACnB,GAAG,EAAE,GAAG,EAAE,CACR,sHAAsH;IACxH,GAAG,EAAE,GAAG,EAAE,CACR,uHAAuH;IAEzH,mBAAmB;IACnB,IAAI,EAAE,GAAG,EAAE,CACT,iIAAiI;IACnI,GAAG,EAAE,GAAG,EAAE,CACR,kGAAkG;IACpG,GAAG,EAAE,GAAG,EAAE,CACR,8GAA8G;CACjH,CAAC;AAEF,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,wEAAwE;IACxE,oFAAoF;IACpF,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QACpB,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,OAAO,GAAG,CAAC;YAAE,MAAM;QACvB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAAC,SAAyB;IACxD,gFAAgF;IAChF,2EAA2E;IAC3E,6BAA6B;IAC7B,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS;QACnC,CAAC,CAAC,QAAQ,SAAS,CAAC,SAAS,EAAE;QAC/B,CAAC,CAAC,uBAAuB,CAAC;IAC5B,OAAO,sBAAsB,SAAS,4FAA4F,CAAC;AACrI,CAAC;AAeD,6EAA6E;AAC7E,2DAA2D;AAC3D,MAAM,wBAAwB,GAA2B;IACvD,gBAAgB,EACd,uMAAuM;IACzM,UAAU,EACR,gMAAgM;IAClM,MAAM,EACJ,4LAA4L;IAC9L,gBAAgB,EACd,wLAAwL;IAC1L,YAAY,EACV,iNAAiN;IACnN,UAAU,EACR,4KAA4K;IAC9K,uBAAuB,EACrB,8LAA8L;CACjM,CAAC;AAEF,SAAS,8BAA8B,CAAC,KAA0B;IAChE,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAChE,OAAO,CACL,+CAA+C,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,OAAO,GAAG;YACjF,+FAA+F;YAC/F,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,OAAO,CACL,GAAG,KAAK,SAAS,KAAK,CAAC,MAAM,+BAA+B,KAAK,CAAC,OAAO,GAAG;QAC5E,8FAA8F;QAC9F,wCAAwC,CACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,KAA0B;IAE1B,MAAM,QAAQ,GAAG,wBAAwB,CACvC,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,CACf,CAAC;IACF,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC;IACvE,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;QACvC,WAAW,EAAE,8BAA8B,CAAC,KAAK,CAAC;QAClD,QAAQ,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,MAAM;YACrB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAyB;IACzD,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,QAAQ;QAC1B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QACrB,CAAC,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACvC,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI;QAC/D,WAAW;QACX,QAAQ,EAAE;YACR,SAAS,EAAE,SAAS,CAAC,IAAI;YACzB,QAAQ,EAAE,SAAS,CAAC,QAAQ;SAC7B;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"defectFormatter.js","sourceRoot":"","sources":["../../src/mappers/defectFormatter.ts"],"names":[],"mappings":"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"}
|