@thymian/plugin-reporter 0.1.10 → 0.1.11-canary.20260625-39589d8

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.
@@ -1,17 +1,18 @@
1
- import type { ThymianReport, ThymianReportSeverity } from '@thymian/core';
1
+ import type { Report, Severity } from '@thymian/core';
2
2
  export type ThymianReportStatistics = {
3
3
  numberOfReports: number;
4
- numberOfItems: number;
5
- severityCounts: Record<ThymianReportSeverity, number>;
4
+ numberOfRuns: number;
5
+ numberOfFindings: number;
6
+ severityCounts: Record<Severity, number>;
6
7
  };
7
8
  export type ReportAnalysis = {
8
9
  statistics: ThymianReportStatistics;
9
10
  };
10
- export declare function analyze(reports: Map<string, ThymianReport[]>): ReportAnalysis;
11
+ export declare function analyze(reports: Report[]): ReportAnalysis;
11
12
  export interface Formatter<Options = Record<PropertyKey, unknown>> {
12
13
  options: Options;
13
14
  init(options: Options): void | Promise<void>;
14
- report(report: ThymianReport): void | Promise<void>;
15
+ report(report: Report): void | Promise<void>;
15
16
  flush(): string | undefined | Promise<string | undefined>;
16
17
  }
17
18
  //# sourceMappingURL=formatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE1E,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,uBAAuB,CAAC;CACrC,CAAC;AAEF,wBAAgB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,GAAG,cAAc,CAgC7E;AAED,MAAM,WAAW,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;IAC/D,OAAO,EAAE,OAAO,CAAC;IAEjB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD,KAAK,IAAI,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC3D"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErE,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,uBAAuB,CAAC;CACrC,CAAC;AAcF,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,CA4BzD;AAED,MAAM,WAAW,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;IAC/D,OAAO,EAAE,OAAO,CAAC;IAEjB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,KAAK,IAAI,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC3D"}
package/dist/formatter.js CHANGED
@@ -1,3 +1,10 @@
1
+ function collectFindings(report) {
2
+ const visit = (executions) => (executions ?? []).flatMap((execution) => [
3
+ ...execution.findings,
4
+ ...visit(execution.children),
5
+ ]);
6
+ return report.runs.flatMap((run) => visit(run.executions));
7
+ }
1
8
  export function analyze(reports) {
2
9
  const severityCounts = {
3
10
  error: 0,
@@ -5,24 +12,20 @@ export function analyze(reports) {
5
12
  hint: 0,
6
13
  info: 0,
7
14
  };
8
- let reportCounter = 0;
9
- let reportItemsCounter = 0;
10
- for (const [, r] of reports.entries()) {
11
- reportCounter += r.length;
12
- for (const report of r) {
13
- for (const section of report.sections ?? []) {
14
- reportItemsCounter += section.items.length;
15
- for (const item of section.items ?? []) {
16
- severityCounts[item.severity] =
17
- (severityCounts[item.severity] ?? 0) + 1;
18
- }
19
- }
15
+ let runCounter = 0;
16
+ let findingsCounter = 0;
17
+ for (const report of reports) {
18
+ runCounter += report.runs.length;
19
+ for (const finding of collectFindings(report)) {
20
+ findingsCounter += 1;
21
+ severityCounts[finding.severity] += 1;
20
22
  }
21
23
  }
22
24
  return {
23
25
  statistics: {
24
- numberOfReports: reportCounter,
25
- numberOfItems: reportItemsCounter,
26
+ numberOfReports: reports.length,
27
+ numberOfRuns: runCounter,
28
+ numberOfFindings: findingsCounter,
26
29
  severityCounts,
27
30
  },
28
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,OAAO,CAAC,OAAqC;IAC3D,MAAM,cAAc,GAA0C;QAC5D,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;KACR,CAAC;IAEF,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACtC,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC;QAE1B,KAAK,MAAM,MAAM,IAAI,CAAC,EAAE,CAAC;YACvB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC5C,kBAAkB,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;gBAE3C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;oBACvC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAC3B,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU,EAAE;YACV,eAAe,EAAE,aAAa;YAC9B,aAAa,EAAE,kBAAkB;YACjC,cAAc;SACf;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAaA,SAAS,eAAe,CAAC,MAAc;IACrC,MAAM,KAAK,GAAG,CACZ,UAAgD,EAC/B,EAAE,CACnB,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;QACxC,GAAG,SAAS,CAAC,QAAQ;QACrB,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;KAC7B,CAAC,CAAC;IAEL,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAiB;IACvC,MAAM,cAAc,GAA6B;QAC/C,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;KACR,CAAC;IAEF,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAEjC,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,eAAe,IAAI,CAAC,CAAC;YACrB,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU,EAAE;YACV,eAAe,EAAE,OAAO,CAAC,MAAM;YAC/B,YAAY,EAAE,UAAU;YACxB,gBAAgB,EAAE,eAAe;YACjC,cAAc;SACf;KACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Logger, ThymianReport } from '@thymian/core';
1
+ import type { Logger, Report } from '@thymian/core';
2
2
  import type { Formatter } from '../formatter.js';
3
3
  export type CsvFormatterOptions = {
4
4
  path: string;
@@ -10,8 +10,8 @@ export declare class CsvFormatter implements Formatter<CsvFormatterOptions> {
10
10
  constructor(logger: Logger);
11
11
  flush(): Promise<string | undefined>;
12
12
  init(options: CsvFormatterOptions): Promise<void>;
13
- report(report: ThymianReport): Promise<void>;
13
+ report(report: Report): Promise<void>;
14
14
  }
15
- export declare function thymianReportToCsvLines(report: ThymianReport): string[];
15
+ export declare function reportToCsvLines(report: Report): string[];
16
16
  export declare function csvSafe(str: string | undefined): string;
17
17
  //# sourceMappingURL=csv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../src/formatters/csv.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,YAAa,YAAW,SAAS,CAAC,mBAAmB,CAAC;IAKrD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO,EAAG,mBAAmB,CAAC;gBAED,MAAM,EAAE,MAAM;IAE3C,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAUpC,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBjD,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAmB7C;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAkBvE;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAavD"}
1
+ {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../src/formatters/csv.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAqBF,qBAAa,YAAa,YAAW,SAAS,CAAC,mBAAmB,CAAC;IAKrD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO,EAAG,mBAAmB,CAAC;gBAED,MAAM,EAAE,MAAM;IAE3C,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IASpC,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBjD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBtC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAczD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAYvD"}
@@ -1,4 +1,18 @@
1
1
  import { createWriteStream } from 'node:fs';
2
+ function formatLocation(location) {
3
+ switch (location.type) {
4
+ case 'custom':
5
+ return location.value;
6
+ case 'file':
7
+ return [location.path, location.line, location.column]
8
+ .filter((part) => part !== undefined)
9
+ .join(':');
10
+ case 'url':
11
+ return location.url;
12
+ case 'thymianFormat':
13
+ return `format:${location.elementId}${location.pointer ? `#${location.pointer}` : ''}`;
14
+ }
15
+ }
2
16
  export class CsvFormatter {
3
17
  logger;
4
18
  stream;
@@ -22,20 +36,19 @@ export class CsvFormatter {
22
36
  });
23
37
  return new Promise((resolve) => {
24
38
  this.stream.on('ready', () => {
25
- this.stream.write('source,section,severity,ruleName,message,details\n');
39
+ this.stream.write('run_id,run_type,tool,execution_location,finding_kind,finding_id,severity,title,message,rule_id\n');
26
40
  resolve();
27
41
  });
28
42
  });
29
43
  }
30
44
  report(report) {
31
45
  return new Promise((resolve, reject) => {
32
- const lines = thymianReportToCsvLines(report);
46
+ const lines = reportToCsvLines(report);
33
47
  if (lines.length === 0) {
34
48
  resolve();
35
49
  return;
36
50
  }
37
- const data = lines.join('');
38
- this.stream.write(data, (err) => {
51
+ this.stream.write(lines.join(''), (err) => {
39
52
  if (err) {
40
53
  reject(err);
41
54
  }
@@ -46,16 +59,13 @@ export class CsvFormatter {
46
59
  });
47
60
  }
48
61
  }
49
- export function thymianReportToCsvLines(report) {
62
+ export function reportToCsvLines(report) {
50
63
  const lines = [];
51
- if (!report.sections || report.sections.length === 0) {
52
- // Report with no sections emit a single row with source and message
53
- lines.push(`${csvSafe(report.source)},,,,${csvSafe(report.message)},\n`);
54
- return lines;
55
- }
56
- for (const section of report.sections) {
57
- for (const item of section.items) {
58
- lines.push(`${csvSafe(report.source)},${csvSafe(section.heading)},${csvSafe(item.severity)},${csvSafe(item.ruleName)},${csvSafe(item.message)},${csvSafe(item.details)}\n`);
64
+ for (const run of report.runs) {
65
+ for (const execution of run.executions ?? []) {
66
+ for (const finding of execution.findings) {
67
+ lines.push(`${csvSafe(run.runId)},${csvSafe(run.runType)},${csvSafe(run.tool.name)},${csvSafe(formatLocation(execution.location))},${csvSafe(finding.kind)},${csvSafe(finding.id)},${csvSafe(finding.severity)},${csvSafe(finding.title)},${csvSafe(finding.message?.text)},${csvSafe('ruleId' in finding ? finding.ruleId : undefined)}\n`);
68
+ }
59
69
  }
60
70
  }
61
71
  return lines;
@@ -64,7 +74,6 @@ export function csvSafe(str) {
64
74
  if (!str) {
65
75
  return '';
66
76
  }
67
- // Escape double quotes by doubling them, wrap in quotes if needed
68
77
  const escaped = str.replaceAll('"', '""').replaceAll('\n', ' ');
69
78
  if (escaped.includes(',') || escaped.includes('"') || escaped.includes(' ')) {
70
79
  return `"${escaped}"`;
@@ -1 +1 @@
1
- {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../src/formatters/csv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../src/formatters/csv.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,17 @@
1
- import type { Logger, ThymianReport, ThymianReportSeverity } from '@thymian/core';
1
+ import type { Logger, Report, Severity } from '@thymian/core';
2
2
  import { type Formatter } from '../formatter.js';
3
3
  export declare const details: (text: string) => string;
4
- export declare function mapSeverityToBadge(severity: ThymianReportSeverity): string;
4
+ export declare function mapSeverityToBadge(severity: Severity): string;
5
5
  export type MarkdownFormatterOptions = {
6
6
  path: string;
7
7
  };
8
8
  export declare class MarkdownFormatter implements Formatter<MarkdownFormatterOptions> {
9
9
  private readonly logger;
10
10
  options: MarkdownFormatterOptions;
11
- private readonly reportsMap;
11
+ private readonly reports;
12
12
  constructor(logger: Logger);
13
13
  init(options: MarkdownFormatterOptions): void;
14
- report(report: ThymianReport): void;
14
+ report(report: Report): void;
15
15
  flush(): Promise<string | undefined>;
16
16
  }
17
17
  //# sourceMappingURL=markdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,qBAAqB,EACtB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG1D,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAK1B,CAAC;AAEd,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAW1E;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,iBAAkB,YAAW,SAAS,CAAC,wBAAwB,CAAC;IAK/D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,EAAG,wBAAwB,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2C;gBAEzC,MAAM,EAAE,MAAM;IAE3C,IAAI,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAI7C,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAQ7B,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CA4E3C"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG1D,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAC8B,CAAC;AAEtE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAW7D;AAqBD,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,iBAAkB,YAAW,SAAS,CAAC,wBAAwB,CAAC;IAK/D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,EAAG,wBAAwB,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;gBAEX,MAAM,EAAE,MAAM;IAE3C,IAAI,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAI7C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItB,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CA0C3C"}
@@ -2,11 +2,7 @@ import * as path from 'node:path';
2
2
  import { mkdir, writeFile } from 'fs/promises';
3
3
  import { analyze } from '../formatter.js';
4
4
  import { errorSymbol, hintSymbol, warnSymbol } from '../style.js';
5
- export const details = (text) => `
6
- <details>
7
- <summary>More details</summary>
8
- ${text}
9
- </details>`;
5
+ export const details = (text) => `\n<details>\n<summary>More details</summary>\n${text}\n</details>`;
10
6
  export function mapSeverityToBadge(severity) {
11
7
  if (severity === 'error') {
12
8
  return `${errorSymbol} error`;
@@ -19,10 +15,24 @@ export function mapSeverityToBadge(severity) {
19
15
  }
20
16
  return 'info';
21
17
  }
18
+ function formatLocation(location) {
19
+ switch (location.type) {
20
+ case 'custom':
21
+ return location.value;
22
+ case 'file':
23
+ return [location.path, location.line, location.column]
24
+ .filter((part) => part !== undefined)
25
+ .join(':');
26
+ case 'url':
27
+ return location.url;
28
+ case 'thymianFormat':
29
+ return `format:${location.elementId}${location.pointer ? `#${location.pointer}` : ''}`;
30
+ }
31
+ }
22
32
  export class MarkdownFormatter {
23
33
  logger;
24
34
  options;
25
- reportsMap = new Map();
35
+ reports = [];
26
36
  constructor(logger) {
27
37
  this.logger = logger;
28
38
  }
@@ -30,52 +40,29 @@ export class MarkdownFormatter {
30
40
  this.options = options;
31
41
  }
32
42
  report(report) {
33
- if (!this.reportsMap.has(report.source)) {
34
- this.reportsMap.set(report.source, []);
35
- }
36
- this.reportsMap.get(report.source)?.push(report);
43
+ this.reports.push(report);
37
44
  }
38
45
  async flush() {
39
- if (this.reportsMap.size === 0) {
46
+ if (this.reports.length === 0) {
40
47
  return undefined;
41
48
  }
42
- const analysis = analyze(this.reportsMap);
49
+ const analysis = analyze(this.reports);
43
50
  const lines = [];
44
51
  lines.push('# Thymian Report');
45
- const { numberOfReports, numberOfItems, severityCounts } = analysis.statistics;
46
- lines.push(`A total of ${numberOfReports} reports with ${numberOfItems} items were found.`);
47
- lines.push(`Of these there are ${severityCounts.error} errors, ${severityCounts.warn} warnings, ${severityCounts.hint} hints and ${severityCounts.info} infos.`);
48
52
  lines.push('');
49
- for (const [source, reports] of this.reportsMap.entries()) {
50
- lines.push(`## ${source}`);
51
- lines.push('');
52
- lines.push(reports
53
- .map((report) => report.message)
54
- .filter(Boolean)
55
- .join(' '));
53
+ lines.push(`Generated from ${analysis.statistics.numberOfReports} report(s), ${analysis.statistics.numberOfRuns} run(s), and ${analysis.statistics.numberOfFindings} finding(s).`);
54
+ lines.push('');
55
+ for (const report of this.reports) {
56
+ lines.push(`## Report ${report.reportId}`);
56
57
  lines.push('');
57
- for (const report of reports) {
58
- if (report.sections) {
59
- for (const section of report.sections) {
60
- lines.push(`### ${section.heading}`);
61
- lines.push('');
62
- for (const item of section.items) {
63
- const sev = mapSeverityToBadge(item.severity);
64
- lines.push(`- **${sev}**: ${item.message}`);
65
- if (item.ruleName) {
66
- lines.push(`<br/> *Rule: ${item.ruleName}*`);
67
- }
68
- if (item.details) {
69
- lines.push(details(item.details));
70
- }
71
- if (item.links && item.links.length > 0) {
72
- lines.push(' Related links:');
73
- for (const link of item.links) {
74
- lines.push(` - [${link.title ?? link.url}](${link.url})`);
75
- }
76
- }
77
- }
78
- lines.push('');
58
+ for (const run of report.runs) {
59
+ lines.push(`### ${run.tool.name} (${run.runType})`);
60
+ lines.push('');
61
+ lines.push('| Location | Severity | Kind | Title | Rule | Message |');
62
+ lines.push('| --- | --- | --- | --- | --- | --- |');
63
+ for (const execution of run.executions ?? []) {
64
+ for (const finding of execution.findings) {
65
+ lines.push(`| ${formatLocation(execution.location)} | ${mapSeverityToBadge(finding.severity)} | ${finding.kind} | ${finding.title} | ${'ruleId' in finding ? finding.ruleId : ''} | ${(finding.message?.text ?? '').replaceAll('|', '\\|')} |`);
79
66
  }
80
67
  }
81
68
  lines.push('');
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,15 @@
1
- import type { ThymianReport, ThymianReportSeverity } from '@thymian/core';
1
+ import type { Report } from '@thymian/core';
2
2
  import { type Formatter } from '../formatter.js';
3
- export declare function formatSeverityPrefix(severity: ThymianReportSeverity): string;
4
3
  export type TextFormatterOptions = {
5
4
  summaryOnly: boolean;
6
5
  path?: string;
7
6
  };
8
7
  export declare class TextFormatter implements Formatter<Partial<TextFormatterOptions>> {
9
8
  options: TextFormatterOptions;
10
- private readonly reportsMap;
9
+ private readonly reports;
11
10
  init(options: Partial<TextFormatterOptions>): void;
12
11
  flush(): Promise<string | undefined>;
13
- report(report: ThymianReport): void;
14
- /**
15
- * Ensure output is plain text (no ANSI escape sequences) when stdout is not a TTY.
16
- *
17
- * Chalk auto-detects TTY and sets `chalk.level = 0` for non-TTY, which prevents
18
- * new styling. However, if chalk level was forced or if any ANSI codes slip through
19
- * from other sources, this safety net strips them for non-TTY output.
20
- */
12
+ report(report: Report): void;
21
13
  private ensurePlainTextForNonTty;
22
14
  }
23
15
  //# sourceMappingURL=text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/formatters/text.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAI1E,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAsC1D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAY5E;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,aAAc,YAAW,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5E,OAAO,EAAG,oBAAoB,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2C;IAEtE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAO5C,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAiG1C,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAQnC;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;CAMjC"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/formatters/text.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,MAAM,EAAY,MAAM,eAAe,CAAC;AAIrE,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAsE1D,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,aAAc,YAAW,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5E,OAAO,EAAG,oBAAoB,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAO5C,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA6D1C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B,OAAO,CAAC,wBAAwB;CAOjC"}
@@ -4,49 +4,56 @@ import chalk from 'chalk';
4
4
  import { mkdir, writeFile } from 'fs/promises';
5
5
  import { analyze } from '../formatter.js';
6
6
  import { errorSymbol, hintSymbol, successSymbol, warnSymbol, } from '../style.js';
7
- /**
8
- * Visible column width of a severity prefix in a monospace terminal.
9
- *
10
- * Unicode symbols (✖ U+2716, ⚠ U+26A0, ℹ U+2139) each occupy one terminal
11
- * column in standard monospace fonts. We use hardcoded values instead of
12
- * `.length` on template strings because JavaScript's string length counts
13
- * UTF-16 code units, which may differ from visual column width for characters
14
- * outside the BMP. For these specific BMP symbols the values happen to match.
15
- *
16
- * Widths: "✖ error: " = 9, "⚠ warning: " = 11, "ℹ hint: " = 8
17
- */
18
- function severityPrefixWidth(severity) {
7
+ function severityPrefix(severity) {
19
8
  switch (severity) {
20
9
  case 'error':
21
- return 9; // "✖ error: "
10
+ return chalk.red(`${errorSymbol} error`);
22
11
  case 'warn':
23
- return 11; // "⚠ warning: "
12
+ return chalk.yellow(`${warnSymbol} warning`);
24
13
  case 'hint':
25
- return 8; // "ℹ hint: "
26
- default:
27
- return 0;
14
+ return chalk.blue(`${hintSymbol} hint`);
15
+ case 'info':
16
+ return chalk.cyan(`${hintSymbol} info`);
28
17
  }
29
18
  }
30
- /**
31
- * Regex matching severity-grouped section headings produced by the core report
32
- * sorter in severity mode, e.g. "Errors (3)", "Warnings (1)", "Hints (2)", "Info (1)".
33
- */
34
- const SEVERITY_HEADING_RE = /^(Errors|Warnings|Hints|Info)\s*\(\d+\)$/;
35
- export function formatSeverityPrefix(severity) {
36
- if (severity === 'hint') {
37
- return `${chalk.blue(`${hintSymbol} ${severity}`)}: `;
19
+ function renderFinding(finding, indent = ' ') {
20
+ const lines = [
21
+ `${indent}${severityPrefix(finding.severity)}: ${finding.title}`,
22
+ ];
23
+ if (finding.kind.startsWith('rule-') && 'ruleId' in finding) {
24
+ lines.push(`${indent} rule: ${finding.ruleId}`);
38
25
  }
39
- if (severity === 'warn') {
40
- return `${chalk.yellow(`${warnSymbol} warning`)}: `;
26
+ if (finding.message?.text && finding.message.text !== finding.title) {
27
+ lines.push(`${indent} ${finding.message.text}`);
41
28
  }
42
- if (severity === 'error') {
43
- return `${chalk.red(`${errorSymbol} ${severity}`)}: `;
29
+ if (finding.kind === 'assertion-failure') {
30
+ const assertionFailure = finding;
31
+ lines.push(`${indent} expected: ${JSON.stringify(assertionFailure.expected)}`);
32
+ lines.push(`${indent} actual: ${JSON.stringify(assertionFailure.actual)}`);
33
+ }
34
+ if (finding.kind === 'test-case-skip') {
35
+ const skipped = finding;
36
+ lines.push(`${indent} reason: ${skipped.reason}`);
37
+ }
38
+ return lines;
39
+ }
40
+ function renderLocation(location) {
41
+ switch (location.type) {
42
+ case 'custom':
43
+ return location.value;
44
+ case 'file':
45
+ return [location.path, location.line, location.column]
46
+ .filter((part) => part !== undefined)
47
+ .join(':');
48
+ case 'url':
49
+ return location.url;
50
+ case 'thymianFormat':
51
+ return `format:${location.elementId}${location.pointer ? `#${location.pointer}` : ''}`;
44
52
  }
45
- return '';
46
53
  }
47
54
  export class TextFormatter {
48
55
  options;
49
- reportsMap = new Map();
56
+ reports = [];
50
57
  init(options) {
51
58
  this.options = {
52
59
  summaryOnly: false,
@@ -54,87 +61,50 @@ export class TextFormatter {
54
61
  };
55
62
  }
56
63
  async flush() {
57
- if (this.reportsMap.size === 0) {
64
+ if (this.reports.length === 0) {
58
65
  const message = `${chalk.green(successSymbol)} No problems found`;
59
66
  if (this.options.path) {
60
- const plainText = stripVTControlCharacters(message);
61
67
  await mkdir(path.dirname(this.options.path), { recursive: true });
62
- await writeFile(this.options.path, plainText, 'utf-8');
68
+ await writeFile(this.options.path, stripVTControlCharacters(message), 'utf-8');
63
69
  }
64
70
  return this.ensurePlainTextForNonTty(message);
65
71
  }
66
- const analysis = analyze(this.reportsMap);
72
+ const analysis = analyze(this.reports);
67
73
  const lines = [];
68
74
  if (!this.options.summaryOnly) {
69
- for (const [source, reports] of this.reportsMap.entries()) {
70
- lines.push(`${source} ${Array.from({
71
- length: Math.max(1, 80 - source.length),
72
- })
73
- .map(() => '─')
74
- .join('')}`);
75
+ for (const report of this.reports) {
76
+ lines.push(`Report ${report.reportId}`);
75
77
  lines.push('');
76
- lines.push(reports
77
- .map((report) => report.message)
78
- .filter(Boolean)
79
- .join(' '));
80
- lines.push('');
81
- for (const report of reports) {
82
- if (report.sections && report.sections.length > 0) {
83
- for (const section of report.sections) {
84
- const isSeverityGrouped = SEVERITY_HEADING_RE.test(section.heading);
85
- lines.push(` ${chalk.bold(section.heading)}`);
86
- lines.push('');
87
- for (const item of section.items) {
88
- // When grouped by severity the heading already conveys the
89
- // severity level → skip the per-item severity prefix to
90
- // avoid redundant "Errors (3) ✖ error: …" lines.
91
- const prefix = isSeverityGrouped
92
- ? ''
93
- : formatSeverityPrefix(item.severity);
94
- // 4 spaces base indentation + prefix + message
95
- lines.push(` ${prefix}${item.message}`);
96
- // When grouped by rule the heading already shows the rule
97
- // name → skip the per-item rule name to avoid duplication.
98
- const ruleRedundant = item.ruleName === section.heading;
99
- if (item.ruleName && !ruleRedundant) {
100
- // Align rule name under message text:
101
- // 4 spaces base indent + prefix visible width
102
- const indent = isSeverityGrouped
103
- ? 4
104
- : 4 + severityPrefixWidth(item.severity);
105
- lines.push(`${' '.repeat(indent)}${chalk.dim(item.ruleName)}`);
106
- }
78
+ for (const run of report.runs) {
79
+ lines.push(`${run.tool.name} (${run.runType})`);
80
+ for (const execution of run.executions ?? []) {
81
+ lines.push(` ${chalk.bold(renderLocation(execution.location))}`);
82
+ for (const finding of execution.findings) {
83
+ lines.push(...renderFinding(finding));
84
+ }
85
+ for (const child of execution.children ?? []) {
86
+ lines.push(` ${chalk.bold(renderLocation(child.location))}`);
87
+ for (const finding of child.findings) {
88
+ lines.push(...renderFinding(finding, ' '));
107
89
  }
108
- lines.push('');
109
90
  }
110
91
  }
92
+ lines.push('');
111
93
  }
112
94
  }
113
95
  }
114
- lines.push('');
115
- const { error, warn, hint } = analysis.statistics.severityCounts;
116
- lines.push(`Found ${chalk.red(`${error} ${error === 1 ? 'error' : 'errors'}`)}, ${chalk.yellow(`${warn} ${warn === 1 ? 'warning' : 'warnings'}`)} and ${chalk.blue(`${hint} ${hint === 1 ? 'hint' : 'hints'}`)}.`);
117
- const coloredOutput = lines.join('\n');
96
+ const { error, warn, hint, info } = analysis.statistics.severityCounts;
97
+ lines.push(`Summary: ${error} error(s), ${warn} warning(s), ${hint} hint(s), ${info} info finding(s) across ${analysis.statistics.numberOfRuns} run(s).`);
98
+ const output = lines.join('\n');
118
99
  if (this.options.path) {
119
- const plainText = stripVTControlCharacters(coloredOutput);
120
100
  await mkdir(path.dirname(this.options.path), { recursive: true });
121
- await writeFile(this.options.path, plainText, 'utf-8');
101
+ await writeFile(this.options.path, stripVTControlCharacters(output), 'utf-8');
122
102
  }
123
- return this.ensurePlainTextForNonTty(coloredOutput);
103
+ return this.ensurePlainTextForNonTty(output);
124
104
  }
125
105
  report(report) {
126
- if (!this.reportsMap.has(report.source)) {
127
- this.reportsMap.set(report.source, []);
128
- }
129
- this.reportsMap.get(report.source)?.push(report);
106
+ this.reports.push(report);
130
107
  }
131
- /**
132
- * Ensure output is plain text (no ANSI escape sequences) when stdout is not a TTY.
133
- *
134
- * Chalk auto-detects TTY and sets `chalk.level = 0` for non-TTY, which prevents
135
- * new styling. However, if chalk level was forced or if any ANSI codes slip through
136
- * from other sources, this safety net strips them for non-TTY output.
137
- */
138
108
  ensurePlainTextForNonTty(output) {
139
109
  if (!process.stdout.isTTY) {
140
110
  return stripVTControlCharacters(output);
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/formatters/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAGrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAkB,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EACL,WAAW,EACX,UAAU,EACV,aAAa,EACb,UAAU,GACX,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;GAUG;AACH,SAAS,mBAAmB,CAAC,QAA+B;IAC1D,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,CAAC,CAAC,CAAC,cAAc;QAC1B,KAAK,MAAM;YACT,OAAO,EAAE,CAAC,CAAC,gBAAgB;QAC7B,KAAK,MAAM;YACT,OAAO,CAAC,CAAC,CAAC,aAAa;QACzB;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,mBAAmB,GAAG,0CAA0C,CAAC;AAEvE,MAAM,UAAU,oBAAoB,CAAC,QAA+B;IAClE,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC;IACxD,CAAC;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,UAAU,UAAU,CAAC,IAAI,CAAC;IACtD,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAOD,MAAM,OAAO,aAAa;IACxB,OAAO,CAAwB;IAEd,UAAU,GAAiC,IAAI,GAAG,EAAE,CAAC;IAEtE,IAAI,CAAC,OAAsC;QACzC,IAAI,CAAC,OAAO,GAAG;YACb,WAAW,EAAE,KAAK;YAClB,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAAC;YAElE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACtB,MAAM,SAAS,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;gBACpD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClE,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACzD,CAAC;YAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC9B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC1D,KAAK,CAAC,IAAI,CACR,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;oBACtB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;iBACxC,CAAC;qBACC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;qBACd,IAAI,CAAC,EAAE,CAAC,EAAE,CACd,CAAC;gBAEF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEf,KAAK,CAAC,IAAI,CACR,OAAO;qBACJ,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;qBAC/B,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;gBAEF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEf,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAClD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;4BACtC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAChD,OAAO,CAAC,OAAO,CAChB,CAAC;4BAEF,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;4BAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BAEf,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gCACjC,2DAA2D;gCAC3D,wDAAwD;gCACxD,kDAAkD;gCAClD,MAAM,MAAM,GAAG,iBAAiB;oCAC9B,CAAC,CAAC,EAAE;oCACJ,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gCAExC,+CAA+C;gCAC/C,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gCAE3C,0DAA0D;gCAC1D,2DAA2D;gCAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC;gCACxD,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;oCACpC,sCAAsC;oCACtC,8CAA8C;oCAC9C,MAAM,MAAM,GAAG,iBAAiB;wCAC9B,CAAC,CAAC,CAAC;wCACH,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oCAC3C,KAAK,CAAC,IAAI,CACR,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CACnD,CAAC;gCACJ,CAAC;4BACH,CAAC;4BAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACjB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;QACjE,KAAK,CAAC,IAAI,CACR,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CACvM,CAAC;QAEF,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,MAAqB;QAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;OAMG;IACK,wBAAwB,CAAC,MAAc;QAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/formatters/text.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,qBAAqB,CAAC;AAErE,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,qBAAqB,CAgH/D,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,qBAAqB,CAAC;AAErE,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,qBAAqB,CAmG/D,CAAC;AAEF,eAAe,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ export const reporterPlugin = {
13
13
  properties: {
14
14
  text: {
15
15
  nullable: true,
16
- description: 'Configuration for the text (console) formatter',
16
+ description: 'Configuration for the text formatter',
17
17
  type: 'object',
18
18
  properties: {
19
19
  summaryOnly: {
@@ -22,7 +22,7 @@ export const reporterPlugin = {
22
22
  nullable: true,
23
23
  },
24
24
  path: {
25
- description: 'File path where the plain text report will be saved (ANSI escape codes are stripped)',
25
+ description: 'File path where the plain text report will be saved',
26
26
  type: 'string',
27
27
  nullable: true,
28
28
  },
@@ -65,7 +65,7 @@ export const reporterPlugin = {
65
65
  listensOn: ['core.report'],
66
66
  },
67
67
  actions: {
68
- listensOn: ['core.report.flush', 'core.close'],
68
+ listensOn: ['core.close'],
69
69
  },
70
70
  async plugin(emitter, logger, { formatters: userFormatters, cwd }) {
71
71
  const formatters = Object.fromEntries(Object.entries({
@@ -73,22 +73,16 @@ export const reporterPlugin = {
73
73
  ...(userFormatters ?? {}),
74
74
  }).filter(([, options]) => options != null));
75
75
  let hasFlushed = false;
76
+ const reporters = await getFormatters(formatters, cwd, logger);
76
77
  const flushReporters = async () => {
77
78
  if (hasFlushed) {
78
- return {};
79
+ return;
79
80
  }
80
81
  hasFlushed = true;
81
- const results = await Promise.all(reporters.map(async (r) => r.flush()));
82
- // Collect text output from formatters that return strings (e.g. TextFormatter)
83
- const textParts = results.filter((r) => typeof r === 'string');
84
- return textParts.length > 0 ? { text: textParts.join('\n') } : {};
82
+ await Promise.all(reporters.map(async (r) => r.flush()));
85
83
  };
86
- const reporters = await getFormatters(formatters, cwd, logger);
87
84
  emitter.on('core.report', async (report) => {
88
- reporters.forEach((r) => r.report(report));
89
- });
90
- emitter.onAction('core.report.flush', async (_event, ctx) => {
91
- ctx.reply(await flushReporters());
85
+ await Promise.all(reporters.map(async (r) => r.report(report)));
92
86
  });
93
87
  emitter.onAction('core.close', async (_event, ctx) => {
94
88
  await flushReporters();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thymian/plugin-reporter",
3
- "version": "0.1.10",
3
+ "version": "0.1.11-canary.20260625-39589d8",
4
4
  "description": "Thymian plugin for formatting and outputting conformance analysis reports",
5
5
  "license": "AGPL-3.0-only",
6
6
  "bugs": {
@@ -42,6 +42,6 @@
42
42
  "dependencies": {
43
43
  "chalk": "^4.1.2",
44
44
  "tslib": "^2.3.0",
45
- "@thymian/core": "0.1.10"
45
+ "@thymian/core": "0.1.11-canary.20260625-39589d8"
46
46
  }
47
47
  }