@a11yst/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/LICENSE +373 -0
  2. package/NOTICE.md +11 -0
  3. package/README.md +60 -0
  4. package/TRADEMARKS.md +52 -0
  5. package/dist/bin.d.ts +3 -0
  6. package/dist/bin.d.ts.map +1 -0
  7. package/dist/bin.js +9 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/ci-policy-options.d.ts +15 -0
  10. package/dist/ci-policy-options.d.ts.map +1 -0
  11. package/dist/ci-policy-options.js +54 -0
  12. package/dist/ci-policy-options.js.map +1 -0
  13. package/dist/cli-progress.d.ts +16 -0
  14. package/dist/cli-progress.d.ts.map +1 -0
  15. package/dist/cli-progress.js +35 -0
  16. package/dist/cli-progress.js.map +1 -0
  17. package/dist/command-program.d.ts +7 -0
  18. package/dist/command-program.d.ts.map +1 -0
  19. package/dist/command-program.js +950 -0
  20. package/dist/command-program.js.map +1 -0
  21. package/dist/commands/audit-flow-output.d.ts +4 -0
  22. package/dist/commands/audit-flow-output.d.ts.map +1 -0
  23. package/dist/commands/audit-flow-output.js +119 -0
  24. package/dist/commands/audit-flow-output.js.map +1 -0
  25. package/dist/commands/audit-policy-output.d.ts +9 -0
  26. package/dist/commands/audit-policy-output.d.ts.map +1 -0
  27. package/dist/commands/audit-policy-output.js +95 -0
  28. package/dist/commands/audit-policy-output.js.map +1 -0
  29. package/dist/commands/audit.d.ts +15 -0
  30. package/dist/commands/audit.d.ts.map +1 -0
  31. package/dist/commands/audit.js +178 -0
  32. package/dist/commands/audit.js.map +1 -0
  33. package/dist/commands/baseline-config.d.ts +14 -0
  34. package/dist/commands/baseline-config.d.ts.map +1 -0
  35. package/dist/commands/baseline-config.js +33 -0
  36. package/dist/commands/baseline-config.js.map +1 -0
  37. package/dist/commands/baseline.d.ts +86 -0
  38. package/dist/commands/baseline.d.ts.map +1 -0
  39. package/dist/commands/baseline.js +392 -0
  40. package/dist/commands/baseline.js.map +1 -0
  41. package/dist/commands/classify.d.ts +30 -0
  42. package/dist/commands/classify.d.ts.map +1 -0
  43. package/dist/commands/classify.js +105 -0
  44. package/dist/commands/classify.js.map +1 -0
  45. package/dist/commands/detect.d.ts +12 -0
  46. package/dist/commands/detect.d.ts.map +1 -0
  47. package/dist/commands/detect.js +213 -0
  48. package/dist/commands/detect.js.map +1 -0
  49. package/dist/commands/doctor.d.ts +16 -0
  50. package/dist/commands/doctor.d.ts.map +1 -0
  51. package/dist/commands/doctor.js +404 -0
  52. package/dist/commands/doctor.js.map +1 -0
  53. package/dist/commands/findings.d.ts +45 -0
  54. package/dist/commands/findings.d.ts.map +1 -0
  55. package/dist/commands/findings.js +220 -0
  56. package/dist/commands/findings.js.map +1 -0
  57. package/dist/commands/flows.d.ts +30 -0
  58. package/dist/commands/flows.d.ts.map +1 -0
  59. package/dist/commands/flows.js +108 -0
  60. package/dist/commands/flows.js.map +1 -0
  61. package/dist/commands/init.d.ts +64 -0
  62. package/dist/commands/init.d.ts.map +1 -0
  63. package/dist/commands/init.js +293 -0
  64. package/dist/commands/init.js.map +1 -0
  65. package/dist/commands/profiles.d.ts +5 -0
  66. package/dist/commands/profiles.d.ts.map +1 -0
  67. package/dist/commands/profiles.js +39 -0
  68. package/dist/commands/profiles.js.map +1 -0
  69. package/dist/commands/report.d.ts +72 -0
  70. package/dist/commands/report.d.ts.map +1 -0
  71. package/dist/commands/report.js +284 -0
  72. package/dist/commands/report.js.map +1 -0
  73. package/dist/commands/results-loader.d.ts +15 -0
  74. package/dist/commands/results-loader.d.ts.map +1 -0
  75. package/dist/commands/results-loader.js +100 -0
  76. package/dist/commands/results-loader.js.map +1 -0
  77. package/dist/commands/routes.d.ts +35 -0
  78. package/dist/commands/routes.d.ts.map +1 -0
  79. package/dist/commands/routes.js +201 -0
  80. package/dist/commands/routes.js.map +1 -0
  81. package/dist/commands/unclassify.d.ts +22 -0
  82. package/dist/commands/unclassify.d.ts.map +1 -0
  83. package/dist/commands/unclassify.js +79 -0
  84. package/dist/commands/unclassify.js.map +1 -0
  85. package/dist/index.d.ts +11 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +10 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/output.d.ts +9 -0
  90. package/dist/output.d.ts.map +1 -0
  91. package/dist/output.js +29 -0
  92. package/dist/output.js.map +1 -0
  93. package/dist/presentation/ansi.d.ts +12 -0
  94. package/dist/presentation/ansi.d.ts.map +1 -0
  95. package/dist/presentation/ansi.js +51 -0
  96. package/dist/presentation/ansi.js.map +1 -0
  97. package/dist/presentation/audit-presentation.d.ts +20 -0
  98. package/dist/presentation/audit-presentation.d.ts.map +1 -0
  99. package/dist/presentation/audit-presentation.js +409 -0
  100. package/dist/presentation/audit-presentation.js.map +1 -0
  101. package/dist/presentation/boundary.d.ts +5 -0
  102. package/dist/presentation/boundary.d.ts.map +1 -0
  103. package/dist/presentation/boundary.js +4 -0
  104. package/dist/presentation/boundary.js.map +1 -0
  105. package/dist/presentation/brand-header.d.ts +6 -0
  106. package/dist/presentation/brand-header.d.ts.map +1 -0
  107. package/dist/presentation/brand-header.js +18 -0
  108. package/dist/presentation/brand-header.js.map +1 -0
  109. package/dist/presentation/capabilities.d.ts +4 -0
  110. package/dist/presentation/capabilities.d.ts.map +1 -0
  111. package/dist/presentation/capabilities.js +25 -0
  112. package/dist/presentation/capabilities.js.map +1 -0
  113. package/dist/presentation/color.d.ts +13 -0
  114. package/dist/presentation/color.d.ts.map +1 -0
  115. package/dist/presentation/color.js +27 -0
  116. package/dist/presentation/color.js.map +1 -0
  117. package/dist/presentation/disclaimers.d.ts +3 -0
  118. package/dist/presentation/disclaimers.d.ts.map +1 -0
  119. package/dist/presentation/disclaimers.js +3 -0
  120. package/dist/presentation/disclaimers.js.map +1 -0
  121. package/dist/presentation/finding-groups.d.ts +14 -0
  122. package/dist/presentation/finding-groups.d.ts.map +1 -0
  123. package/dist/presentation/finding-groups.js +77 -0
  124. package/dist/presentation/finding-groups.js.map +1 -0
  125. package/dist/presentation/finding-source-report.d.ts +21 -0
  126. package/dist/presentation/finding-source-report.d.ts.map +1 -0
  127. package/dist/presentation/finding-source-report.js +134 -0
  128. package/dist/presentation/finding-source-report.js.map +1 -0
  129. package/dist/presentation/human-output.d.ts +4 -0
  130. package/dist/presentation/human-output.d.ts.map +1 -0
  131. package/dist/presentation/human-output.js +8 -0
  132. package/dist/presentation/human-output.js.map +1 -0
  133. package/dist/presentation/index.d.ts +15 -0
  134. package/dist/presentation/index.d.ts.map +1 -0
  135. package/dist/presentation/index.js +13 -0
  136. package/dist/presentation/index.js.map +1 -0
  137. package/dist/presentation/mode.d.ts +4 -0
  138. package/dist/presentation/mode.d.ts.map +1 -0
  139. package/dist/presentation/mode.js +8 -0
  140. package/dist/presentation/mode.js.map +1 -0
  141. package/dist/presentation/progress-mode.d.ts +20 -0
  142. package/dist/presentation/progress-mode.d.ts.map +1 -0
  143. package/dist/presentation/progress-mode.js +38 -0
  144. package/dist/presentation/progress-mode.js.map +1 -0
  145. package/dist/presentation/progress-reporter.d.ts +18 -0
  146. package/dist/presentation/progress-reporter.d.ts.map +1 -0
  147. package/dist/presentation/progress-reporter.js +236 -0
  148. package/dist/presentation/progress-reporter.js.map +1 -0
  149. package/dist/presentation/progress-signals.d.ts +2 -0
  150. package/dist/presentation/progress-signals.d.ts.map +1 -0
  151. package/dist/presentation/progress-signals.js +14 -0
  152. package/dist/presentation/progress-signals.js.map +1 -0
  153. package/dist/presentation/status.d.ts +11 -0
  154. package/dist/presentation/status.d.ts.map +1 -0
  155. package/dist/presentation/status.js +14 -0
  156. package/dist/presentation/status.js.map +1 -0
  157. package/dist/presentation/types.d.ts +23 -0
  158. package/dist/presentation/types.d.ts.map +1 -0
  159. package/dist/presentation/types.js +2 -0
  160. package/dist/presentation/types.js.map +1 -0
  161. package/dist/run-cli.d.ts +6 -0
  162. package/dist/run-cli.d.ts.map +1 -0
  163. package/dist/run-cli.js +15 -0
  164. package/dist/run-cli.js.map +1 -0
  165. package/package.json +69 -0
@@ -0,0 +1,409 @@
1
+ import { buildFindingGroupKey, countUniqueIssues, formatReportSourceLocation, groupFindings, resolveFindingReportSource, } from "@a11yst/reporters";
2
+ export { buildFindingGroupKey, countUniqueIssues, groupFindings, };
3
+ import { padVisible, styleSeverityLabel, styleText } from "./ansi.js";
4
+ import { resolveColorEnabled } from "./color.js";
5
+ import { resolveTerminalPresentationMode } from "./mode.js";
6
+ const SEVERITY_ORDER = ["critical", "high", "medium", "minor"];
7
+ const MAX_AFFECTED_INSTANCES = 10;
8
+ const WIDE_TABLE_MIN_WIDTH = 96;
9
+ const NARROW_TABLE_MIN_WIDTH = 56;
10
+ function formatTargetSelector(target) {
11
+ if (target.length === 0) {
12
+ return "(no target)";
13
+ }
14
+ return target.join(" > ");
15
+ }
16
+ function formatSourceLabel(finding, verbose) {
17
+ const ranked = finding.sourceRanking?.selected;
18
+ if (ranked?.location) {
19
+ const location = formatReportSourceLocation(ranked.location);
20
+ return {
21
+ label: location,
22
+ kind: "source",
23
+ confidence: ranked.effectiveConfidence,
24
+ };
25
+ }
26
+ const source = resolveFindingReportSource(finding);
27
+ if (source.status === "mapped" && source.location) {
28
+ return {
29
+ label: formatReportSourceLocation(source.location),
30
+ kind: "source",
31
+ confidence: source.confidence,
32
+ };
33
+ }
34
+ if (source.status === "ambiguous" && source.alternatives?.[0]) {
35
+ return {
36
+ label: formatReportSourceLocation(source.alternatives[0]),
37
+ kind: "source",
38
+ confidence: "ambiguous",
39
+ };
40
+ }
41
+ if (verbose) {
42
+ return {
43
+ label: formatTargetSelector(finding.target),
44
+ kind: "target",
45
+ };
46
+ }
47
+ return {
48
+ label: formatTargetSelector(finding.target),
49
+ kind: "target",
50
+ };
51
+ }
52
+ function formatConfidenceHint(confidence, colorEnabled) {
53
+ if (!confidence || confidence === "exact" || confidence === "high") {
54
+ return "";
55
+ }
56
+ const text = `(${confidence} confidence)`;
57
+ return colorEnabled ? styleText(text, { dim: true }, true) : text;
58
+ }
59
+ function formatGroupSourceSummary(group) {
60
+ const labels = [];
61
+ const seen = new Set();
62
+ for (const finding of group.findings) {
63
+ const { label } = formatSourceLabel(finding, false);
64
+ if (!seen.has(label)) {
65
+ seen.add(label);
66
+ labels.push(label);
67
+ }
68
+ }
69
+ if (labels.length === 0) {
70
+ return "(unknown)";
71
+ }
72
+ if (labels.length === 1) {
73
+ return labels[0];
74
+ }
75
+ return `${labels[0]} +${labels.length - 1}`;
76
+ }
77
+ function resolveTerminalWidth(explicit) {
78
+ if (explicit !== undefined && explicit > 0) {
79
+ return explicit;
80
+ }
81
+ return process.stdout.columns && process.stdout.columns > 0 ? process.stdout.columns : 80;
82
+ }
83
+ function resolvePresentationContext(options = {}) {
84
+ const capabilities = options.capabilities ?? {
85
+ isTTY: Boolean(process.stdout.isTTY),
86
+ isStderrTTY: Boolean(process.stderr.isTTY),
87
+ isCI: false,
88
+ isDumbTerminal: false,
89
+ noColor: false,
90
+ supportsColor: Boolean(process.stdout.isTTY),
91
+ };
92
+ const mode = options.presentationMode ?? resolveTerminalPresentationMode(capabilities);
93
+ const colorMode = options.colorMode ?? "auto";
94
+ return {
95
+ colorEnabled: resolveColorEnabled(colorMode, capabilities),
96
+ mode,
97
+ width: resolveTerminalWidth(options.terminalWidth),
98
+ verbose: options.verbose ?? false,
99
+ };
100
+ }
101
+ function formatExecutionStatusLine(result) {
102
+ if (result.status === "failed") {
103
+ return ["Execution FAILED"];
104
+ }
105
+ if (result.summary.failedRuns > 0) {
106
+ return [
107
+ "Execution SUCCESS",
108
+ `Accessibility ${result.summary.findingCount} barrier${result.summary.findingCount === 1 ? "" : "s"} found; ${result.summary.failedRuns} run${result.summary.failedRuns === 1 ? "" : "s"} failed`,
109
+ ];
110
+ }
111
+ if (result.summary.findingCount > 0) {
112
+ return [
113
+ "Execution SUCCESS",
114
+ `Accessibility ${result.summary.findingCount} barrier${result.summary.findingCount === 1 ? "" : "s"} found`,
115
+ ];
116
+ }
117
+ return ["Execution SUCCESS", "Accessibility no barriers found"];
118
+ }
119
+ function formatRunStatusLine(run) {
120
+ if (run.status === "skipped") {
121
+ return "SKIP";
122
+ }
123
+ if (run.status === "failed") {
124
+ return "ERROR";
125
+ }
126
+ if (run.findings.length === 0) {
127
+ return "PASS No automated barriers found";
128
+ }
129
+ const automated = run.findings.filter((finding) => (finding.automation ?? "automated") === "automated").length;
130
+ const heuristic = run.findings.filter((finding) => finding.automation === "heuristic").length;
131
+ const review = run.findings.filter((finding) => finding.automation === "manual-review").length;
132
+ const parts = [];
133
+ if (automated > 0) {
134
+ parts.push(`${automated} automated barrier${automated === 1 ? "" : "s"}`);
135
+ }
136
+ if (heuristic > 0) {
137
+ parts.push(`${heuristic} heuristic finding${heuristic === 1 ? "" : "s"}`);
138
+ }
139
+ if (review > 0) {
140
+ parts.push(`${review} generated manual check${review === 1 ? "" : "s"}`);
141
+ }
142
+ return `ISSUES ${parts.join("; ")}`;
143
+ }
144
+ function formatSummaryTable(groups, ctx) {
145
+ if (groups.length === 0) {
146
+ return [];
147
+ }
148
+ const lines = ["Summary", ""];
149
+ const wide = ctx.mode === "interactive" && ctx.width >= WIDE_TABLE_MIN_WIDTH;
150
+ const narrow = ctx.mode === "interactive" && ctx.width >= NARROW_TABLE_MIN_WIDTH;
151
+ if (wide) {
152
+ const severityWidth = 10;
153
+ const ruleWidth = Math.min(24, Math.max(12, ...groups.map((group) => group.ruleId.length)));
154
+ const affectedWidth = 10;
155
+ lines.push([
156
+ padVisible("Severity", severityWidth),
157
+ padVisible("Rule", ruleWidth),
158
+ padVisible("Affected", affectedWidth),
159
+ "Route/Source",
160
+ ].join(" "));
161
+ for (const group of groups) {
162
+ const route = group.findings.length === 1
163
+ ? (group.findings[0]?.route ?? formatGroupSourceSummary(group))
164
+ : formatGroupSourceSummary(group);
165
+ lines.push([
166
+ padVisible(styleSeverityLabel(group.severity, ctx.colorEnabled), severityWidth),
167
+ padVisible(group.ruleId, ruleWidth),
168
+ padVisible(String(group.findings.length), affectedWidth),
169
+ route,
170
+ ].join(" "));
171
+ }
172
+ lines.push("");
173
+ return lines;
174
+ }
175
+ if (narrow) {
176
+ for (const group of groups) {
177
+ lines.push(`${styleSeverityLabel(group.severity, ctx.colorEnabled)} ${group.ruleId} x${group.findings.length} ${formatGroupSourceSummary(group)}`);
178
+ }
179
+ lines.push("");
180
+ return lines;
181
+ }
182
+ for (const group of groups) {
183
+ lines.push(`${group.severity.toUpperCase()} ${group.ruleId} ${group.findings.length} ${formatGroupSourceSummary(group)}`);
184
+ }
185
+ lines.push("");
186
+ return lines;
187
+ }
188
+ function resolveEngineLabel(source) {
189
+ if (source === "axe") {
190
+ return "axe-core";
191
+ }
192
+ if (source === "a11yst") {
193
+ return "a11yst";
194
+ }
195
+ return undefined;
196
+ }
197
+ function formatVerboseFindingDetails(finding, colorEnabled) {
198
+ const lines = [];
199
+ if (finding.target.length > 0) {
200
+ lines.push("Target selector:");
201
+ for (const target of finding.target) {
202
+ lines.push(` ${target}`);
203
+ }
204
+ }
205
+ const engine = resolveEngineLabel(finding.source);
206
+ if (engine || finding.sourceImpact) {
207
+ lines.push("");
208
+ lines.push("Technical provenance");
209
+ if (engine) {
210
+ lines.push(`Engine ${engine}`);
211
+ }
212
+ if (finding.sourceImpact) {
213
+ lines.push(`Source impact ${finding.sourceImpact}`);
214
+ }
215
+ }
216
+ if (finding.failureSummary) {
217
+ lines.push("Failure summary:");
218
+ lines.push(` ${finding.failureSummary}`);
219
+ }
220
+ if (finding.description) {
221
+ lines.push(`Description: ${finding.description}`);
222
+ }
223
+ if (finding.sourceRanking?.ranked?.length) {
224
+ lines.push("Source ranking:");
225
+ for (const ranked of finding.sourceRanking.ranked.slice(0, 5)) {
226
+ const location = formatReportSourceLocation(ranked.location);
227
+ lines.push(` ${location} score=${ranked.score} confidence=${ranked.effectiveConfidence}`);
228
+ }
229
+ for (const diagnostic of finding.sourceRanking.diagnostics.slice(0, 3)) {
230
+ lines.push(` [${diagnostic.level}] ${diagnostic.message}`);
231
+ }
232
+ }
233
+ if (finding.evidence) {
234
+ lines.push("Evidence:");
235
+ lines.push(` ${styleText(JSON.stringify(finding.evidence), { dim: true }, colorEnabled)}`);
236
+ }
237
+ return lines;
238
+ }
239
+ function formatGroupDetail(group, ctx) {
240
+ const lines = [
241
+ `${styleSeverityLabel(group.severity, ctx.colorEnabled)} ${group.ruleId}`,
242
+ group.title,
243
+ `Affected elements: ${group.findings.length}`,
244
+ ];
245
+ lines.push("");
246
+ lines.push("Affected elements");
247
+ const visible = group.findings.slice(0, MAX_AFFECTED_INSTANCES);
248
+ visible.forEach((finding, index) => {
249
+ const source = formatSourceLabel(finding, ctx.verbose);
250
+ const prefix = source.kind === "source" ? "Likely source" : "Target";
251
+ const confidence = formatConfidenceHint(source.confidence, ctx.colorEnabled);
252
+ const routeSuffix = finding.route ? ` (${finding.route})` : "";
253
+ lines.push(` ${index + 1}. ${prefix} ${source.label}${confidence ? ` ${confidence}` : ""}${routeSuffix}`);
254
+ });
255
+ const remaining = group.findings.length - visible.length;
256
+ if (remaining > 0) {
257
+ lines.push(` + ${remaining} more (see JSON/HTML report or use --verbose)`);
258
+ }
259
+ if (group.recommendation?.summary || group.recommendation?.title) {
260
+ lines.push("");
261
+ lines.push("Recommendation");
262
+ if (group.recommendation.title) {
263
+ lines.push(` ${group.recommendation.title}`);
264
+ }
265
+ if (group.recommendation.summary) {
266
+ lines.push(` ${group.recommendation.summary}`);
267
+ }
268
+ }
269
+ if (ctx.verbose) {
270
+ lines.push("");
271
+ lines.push("Verbose details");
272
+ for (const finding of group.findings.slice(0, MAX_AFFECTED_INSTANCES)) {
273
+ lines.push(...formatVerboseFindingDetails(finding, ctx.colorEnabled));
274
+ lines.push("");
275
+ }
276
+ }
277
+ lines.push("");
278
+ return lines;
279
+ }
280
+ export function formatAuditFindingsPresentation(findings, options = {}) {
281
+ const ctx = resolvePresentationContext(options);
282
+ const groups = groupFindings(findings);
283
+ const lines = [];
284
+ lines.push(...formatSummaryTable(groups, ctx));
285
+ if (groups.length > 0) {
286
+ lines.push("Issues", "");
287
+ for (const group of groups) {
288
+ lines.push(...formatGroupDetail(group, ctx));
289
+ }
290
+ }
291
+ return lines;
292
+ }
293
+ export function formatAuditRunSummaries(runs, options = {}) {
294
+ const lines = [];
295
+ for (const run of runs) {
296
+ if (options.skipFlowCheckpoints && run.kind === "flow-checkpoint") {
297
+ continue;
298
+ }
299
+ if (run.status === "completed") {
300
+ const route = run.route ?? "(no route)";
301
+ const profile = run.profile;
302
+ const viewport = run.viewport?.name ?? "(no viewport)";
303
+ lines.push(`RUN ${route.padEnd(20)} ${profile.padEnd(16)} ${viewport}`);
304
+ lines.push(formatRunStatusLine(run));
305
+ lines.push("");
306
+ continue;
307
+ }
308
+ const route = run.route ?? "(n/a)";
309
+ const profile = run.profile;
310
+ const viewport = run.viewport?.name ?? "";
311
+ const label = run.status === "skipped" ? "SKIP" : "ERROR";
312
+ const location = [route, profile, viewport].filter(Boolean).join(" ");
313
+ const reason = run.skipReason ?? run.diagnostics[0]?.message ?? "see diagnostics";
314
+ lines.push(`${label} ${location}`);
315
+ lines.push(` ${reason}`);
316
+ lines.push("");
317
+ }
318
+ return lines;
319
+ }
320
+ export function formatAuditExecutionHeader(result, labelValue) {
321
+ const lines = [];
322
+ const webProject = result.plan.projects.find((project) => project.platform === "web");
323
+ if (webProject && webProject.platform === "web") {
324
+ lines.push(labelValue("Project", webProject.name));
325
+ lines.push(labelValue("Framework", webProject.framework));
326
+ lines.push(labelValue("Target", webProject.baseUrl));
327
+ lines.push(labelValue("Browser", result.environment.browser ?? "chromium"));
328
+ lines.push(labelValue("Mode", result.environment.headed ? "headed" : "headless"));
329
+ const uniqueRoutes = new Set(result.runs.map((run) => run.route).filter((route) => Boolean(route)));
330
+ if (uniqueRoutes.size > 0) {
331
+ lines.push(labelValue("Routes", String(uniqueRoutes.size)));
332
+ }
333
+ if (result.summary.plannedRuns > 0) {
334
+ lines.push(labelValue("Planned runs", String(result.summary.plannedRuns)));
335
+ }
336
+ lines.push("");
337
+ }
338
+ lines.push(...formatExecutionStatusLine(result));
339
+ lines.push("");
340
+ return lines;
341
+ }
342
+ export function formatAuditFooterSummary(result) {
343
+ const groups = groupFindings(result.findings);
344
+ const uniqueRoutes = new Set(result.runs.map((run) => run.route).filter((route) => Boolean(route)));
345
+ const profiles = new Set(result.runs.map((run) => run.profile));
346
+ const viewports = new Set(result.runs
347
+ .map((run) => run.viewport?.name)
348
+ .filter((viewport) => Boolean(viewport)));
349
+ const lines = ["Summary", ""];
350
+ lines.push(`Routes ${uniqueRoutes.size}`);
351
+ lines.push(`Profiles ${profiles.size}`);
352
+ lines.push(`Viewports ${viewports.size}`);
353
+ lines.push(`Unique issues ${groups.length}`);
354
+ lines.push(`Affected elements ${result.summary.findingCount}`);
355
+ lines.push("");
356
+ for (const severity of SEVERITY_ORDER) {
357
+ const count = result.summary.findingsBySeverity[severity];
358
+ if (count > 0) {
359
+ const label = `${severity.charAt(0).toUpperCase()}${severity.slice(1)}`;
360
+ lines.push(`${label.padEnd(20)}${count}`);
361
+ }
362
+ }
363
+ lines.push("");
364
+ lines.push(`Planned ${result.summary.plannedRuns}`);
365
+ lines.push(`Completed ${result.summary.completedRuns}`);
366
+ lines.push(`Skipped ${result.summary.skippedRuns}`);
367
+ lines.push(`Failed runs ${result.summary.failedRuns}`);
368
+ lines.push("");
369
+ return lines;
370
+ }
371
+ export function formatProfileReviewSections(result) {
372
+ if (!result.profileSummary) {
373
+ return [];
374
+ }
375
+ const lines = ["Profiles completed"];
376
+ for (const profile of result.profileSummary.completed) {
377
+ lines.push(`- ${profile}`);
378
+ }
379
+ lines.push("");
380
+ lines.push("Findings");
381
+ lines.push(`Automated findings ${result.profileSummary.findingsByAutomation.automated}`);
382
+ lines.push(`Heuristic findings ${result.profileSummary.findingsByAutomation.heuristic}`);
383
+ lines.push(`Generated manual checks ${result.profileSummary.manualReviewPending}`);
384
+ lines.push("");
385
+ lines.push("Coverage");
386
+ for (const coverage of result.profileSummary.coverage) {
387
+ lines.push("");
388
+ lines.push(coverage.profile.toUpperCase());
389
+ lines.push("Automated checks completed");
390
+ for (const check of coverage.automatedChecks) {
391
+ lines.push(`- ${check}`);
392
+ }
393
+ if (coverage.manualChecks.length > 0) {
394
+ lines.push("Manual accessibility review still required");
395
+ for (const check of coverage.manualChecks) {
396
+ lines.push(`- ${check}`);
397
+ }
398
+ }
399
+ if (coverage.limitations.length > 0) {
400
+ lines.push("Not covered");
401
+ for (const limitation of coverage.limitations) {
402
+ lines.push(`- ${limitation}`);
403
+ }
404
+ }
405
+ }
406
+ lines.push("");
407
+ return lines;
408
+ }
409
+ //# sourceMappingURL=audit-presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-presentation.js","sourceRoot":"","sources":["../../src/presentation/audit-presentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { OutputKind } from "./types.js";
2
+ export declare function shouldRenderBranding(options: {
3
+ outputKind: OutputKind;
4
+ }): boolean;
5
+ //# sourceMappingURL=boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../src/presentation/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,UAAU,EAAE,UAAU,CAAC;CACxB,GAAG,OAAO,CAEV"}
@@ -0,0 +1,4 @@
1
+ export function shouldRenderBranding(options) {
2
+ return options.outputKind === "human";
3
+ }
4
+ //# sourceMappingURL=boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../src/presentation/boundary.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,OAEpC;IACC,OAAO,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC;AACxC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { BrandHeaderOptions } from "./types.js";
2
+ /** Plain brand header: product name and optional primary tagline. */
3
+ export declare function createPlainBrandHeader(options?: Pick<BrandHeaderOptions, "tagline">): string;
4
+ /** Human brand header for interactive and plain terminal modes. */
5
+ export declare function createBrandHeader(options?: BrandHeaderOptions): string;
6
+ //# sourceMappingURL=brand-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-header.d.ts","sourceRoot":"","sources":["../../src/presentation/brand-header.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAUrD,qEAAqE;AACrE,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAM,GAAG,MAAM,CAGhG;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAsC,GAAG,MAAM,CAEzF"}
@@ -0,0 +1,18 @@
1
+ import { productIdentity } from "@a11yst/types";
2
+ function renderIdentityLines(includeTagline) {
3
+ const lines = [productIdentity.displayName];
4
+ if (includeTagline) {
5
+ lines.push(productIdentity.tagline);
6
+ }
7
+ return lines;
8
+ }
9
+ /** Plain brand header: product name and optional primary tagline. */
10
+ export function createPlainBrandHeader(options = {}) {
11
+ const includeTagline = options.tagline !== false;
12
+ return renderIdentityLines(includeTagline).join("\n");
13
+ }
14
+ /** Human brand header for interactive and plain terminal modes. */
15
+ export function createBrandHeader(options = { mode: "plain" }) {
16
+ return createPlainBrandHeader({ tagline: options.tagline });
17
+ }
18
+ //# sourceMappingURL=brand-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-header.js","sourceRoot":"","sources":["../../src/presentation/brand-header.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,SAAS,mBAAmB,CAAC,cAAuB;IAClD,MAAM,KAAK,GAAa,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CAAC,UAA+C,EAAE;IACtF,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC;IACjD,OAAO,mBAAmB,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,UAA8B,EAAE,IAAI,EAAE,OAAO,EAAE;IAC/E,OAAO,sBAAsB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { TerminalCapabilities, TerminalCapabilitiesInput } from "./types.js";
2
+ /** Derive terminal capabilities once at the CLI boundary; inject overrides in tests. */
3
+ export declare function resolveTerminalCapabilities(input?: TerminalCapabilitiesInput): TerminalCapabilities;
4
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/presentation/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAWlF,wFAAwF;AACxF,wBAAgB,2BAA2B,CACzC,KAAK,GAAE,yBAA8B,GACpC,oBAAoB,CAgBtB"}
@@ -0,0 +1,25 @@
1
+ function readCiFlag() {
2
+ const ci = process.env.CI;
3
+ return ci !== undefined && ci !== "" && ci !== "0" && ci !== "false";
4
+ }
5
+ function readNoColorFlag() {
6
+ return process.env.NO_COLOR !== undefined && process.env.NO_COLOR !== "";
7
+ }
8
+ /** Derive terminal capabilities once at the CLI boundary; inject overrides in tests. */
9
+ export function resolveTerminalCapabilities(input = {}) {
10
+ const isTTY = input.isTTY ?? Boolean(process.stdout.isTTY);
11
+ const isStderrTTY = input.isStderrTTY ?? Boolean(process.stderr.isTTY);
12
+ const term = input.term ?? process.env.TERM;
13
+ const isCI = input.isCI ?? readCiFlag();
14
+ const noColor = input.noColor ?? readNoColorFlag();
15
+ const isDumbTerminal = term === "dumb";
16
+ return {
17
+ isTTY,
18
+ isStderrTTY,
19
+ isCI,
20
+ isDumbTerminal,
21
+ noColor,
22
+ supportsColor: isTTY && !noColor && !isDumbTerminal,
23
+ };
24
+ }
25
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/presentation/capabilities.ts"],"names":[],"mappings":"AAEA,SAAS,UAAU;IACjB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1B,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,OAAO,CAAC;AACvE,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,EAAE,CAAC;AAC3E,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,2BAA2B,CACzC,QAAmC,EAAE;IAErC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;IACnD,MAAM,cAAc,GAAG,IAAI,KAAK,MAAM,CAAC;IAEvC,OAAO;QACL,KAAK;QACL,WAAW;QACX,IAAI;QACJ,cAAc;QACd,OAAO;QACP,aAAa,EAAE,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,cAAc;KACpD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { TerminalCapabilities } from "./types.js";
2
+ export type ColorMode = "auto" | "always" | "never";
3
+ /**
4
+ * ANSI color enablement priority (highest wins):
5
+ * 1. Machine output formats (JSON, SARIF, JUnit, etc.) — never ANSI; enforced at call site.
6
+ * 2. `--color never`
7
+ * 3. `NO_COLOR` environment variable
8
+ * 4. `--color always` — ANSI on human terminal text output
9
+ * 5. `--color auto` — ANSI when stdout is an interactive TTY (not dumb, not CI-suppressed)
10
+ */
11
+ export declare function resolveColorEnabled(mode: ColorMode, capabilities: TerminalCapabilities): boolean;
12
+ export declare function parseColorMode(value: string | undefined): ColorMode;
13
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/presentation/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAWT;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAKnE"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * ANSI color enablement priority (highest wins):
3
+ * 1. Machine output formats (JSON, SARIF, JUnit, etc.) — never ANSI; enforced at call site.
4
+ * 2. `--color never`
5
+ * 3. `NO_COLOR` environment variable
6
+ * 4. `--color always` — ANSI on human terminal text output
7
+ * 5. `--color auto` — ANSI when stdout is an interactive TTY (not dumb, not CI-suppressed)
8
+ */
9
+ export function resolveColorEnabled(mode, capabilities) {
10
+ if (mode === "never") {
11
+ return false;
12
+ }
13
+ if (capabilities.noColor) {
14
+ return false;
15
+ }
16
+ if (mode === "always") {
17
+ return true;
18
+ }
19
+ return capabilities.supportsColor;
20
+ }
21
+ export function parseColorMode(value) {
22
+ if (value === "always" || value === "never") {
23
+ return value;
24
+ }
25
+ return "auto";
26
+ }
27
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/presentation/color.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAe,EACf,YAAkC;IAElC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,YAAY,CAAC,aAAa,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Stable scope note for audit help; not a WCAG conformance claim. */
2
+ export declare const AUDIT_HELP_DISCLAIMER = "Automated accessibility testing can identify many barriers but does not establish WCAG conformance or replace manual testing.";
3
+ //# sourceMappingURL=disclaimers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclaimers.d.ts","sourceRoot":"","sources":["../../src/presentation/disclaimers.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,kIAC+F,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Stable scope note for audit help; not a WCAG conformance claim. */
2
+ export const AUDIT_HELP_DISCLAIMER = "Automated accessibility testing can identify many barriers but does not establish WCAG conformance or replace manual testing.";
3
+ //# sourceMappingURL=disclaimers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclaimers.js","sourceRoot":"","sources":["../../src/presentation/disclaimers.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAChC,+HAA+H,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Finding, Severity } from "@a11yst/types";
2
+ import { type FindingRecommendationSummary } from "./finding-source-report.js";
3
+ export type FindingGroup = {
4
+ key: string;
5
+ severity: Severity;
6
+ ruleId: string;
7
+ title: string;
8
+ findings: Finding[];
9
+ recommendation?: FindingRecommendationSummary;
10
+ };
11
+ export declare function buildFindingGroupKey(finding: Finding): string;
12
+ export declare function groupFindings(findings: Finding[]): FindingGroup[];
13
+ export declare function countUniqueIssues(findings: Finding[]): number;
14
+ //# sourceMappingURL=finding-groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-groups.d.ts","sourceRoot":"","sources":["../../src/presentation/finding-groups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,4BAA4B,CAAC;AAIpC,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,4BAA4B,CAAC;CAC/C,CAAC;AA4BF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAU7D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAsCjE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAE7D"}