@ciach/playwright-private-reporter 0.1.1 → 0.1.2

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 (64) hide show
  1. package/README.md +49 -1
  2. package/dist/cjs/cli/generateReport.d.ts.map +1 -1
  3. package/dist/cjs/cli/generateReport.js +41 -2
  4. package/dist/cjs/cli/generateReport.js.map +1 -1
  5. package/dist/cjs/index.d.ts +2 -1
  6. package/dist/cjs/index.d.ts.map +1 -1
  7. package/dist/cjs/index.js +5 -1
  8. package/dist/cjs/index.js.map +1 -1
  9. package/dist/cjs/reporter/summary.d.ts.map +1 -1
  10. package/dist/cjs/reporter/summary.js +5 -0
  11. package/dist/cjs/reporter/summary.js.map +1 -1
  12. package/dist/cjs/templates/shared.d.ts +4 -0
  13. package/dist/cjs/templates/shared.d.ts.map +1 -0
  14. package/dist/cjs/templates/shared.js +20 -0
  15. package/dist/cjs/templates/shared.js.map +1 -0
  16. package/dist/cjs/templates/summary.classic.d.ts +3 -0
  17. package/dist/cjs/templates/summary.classic.d.ts.map +1 -0
  18. package/dist/cjs/templates/summary.classic.js +60 -0
  19. package/dist/cjs/templates/summary.classic.js.map +1 -0
  20. package/dist/cjs/templates/summary.html.d.ts +5 -2
  21. package/dist/cjs/templates/summary.html.d.ts.map +1 -1
  22. package/dist/cjs/templates/summary.html.js +32 -58
  23. package/dist/cjs/templates/summary.html.js.map +1 -1
  24. package/dist/cjs/templates/summary.modern.d.ts +3 -0
  25. package/dist/cjs/templates/summary.modern.d.ts.map +1 -0
  26. package/dist/cjs/templates/summary.modern.js +543 -0
  27. package/dist/cjs/templates/summary.modern.js.map +1 -0
  28. package/dist/cjs/types/schema.d.ts +22 -0
  29. package/dist/cjs/types/schema.d.ts.map +1 -1
  30. package/dist/esm/cli/generateReport.d.ts.map +1 -1
  31. package/dist/esm/cli/generateReport.js +41 -3
  32. package/dist/esm/cli/generateReport.js.map +1 -1
  33. package/dist/esm/index.d.ts +2 -1
  34. package/dist/esm/index.d.ts.map +1 -1
  35. package/dist/esm/index.js +1 -0
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/reporter/summary.d.ts.map +1 -1
  38. package/dist/esm/reporter/summary.js +5 -0
  39. package/dist/esm/reporter/summary.js.map +1 -1
  40. package/dist/esm/templates/shared.d.ts +4 -0
  41. package/dist/esm/templates/shared.d.ts.map +1 -0
  42. package/dist/esm/templates/shared.js +15 -0
  43. package/dist/esm/templates/shared.js.map +1 -0
  44. package/dist/esm/templates/summary.classic.d.ts +3 -0
  45. package/dist/esm/templates/summary.classic.d.ts.map +1 -0
  46. package/dist/esm/templates/summary.classic.js +57 -0
  47. package/dist/esm/templates/summary.classic.js.map +1 -0
  48. package/dist/esm/templates/summary.html.d.ts +5 -2
  49. package/dist/esm/templates/summary.html.d.ts.map +1 -1
  50. package/dist/esm/templates/summary.html.js +30 -58
  51. package/dist/esm/templates/summary.html.js.map +1 -1
  52. package/dist/esm/templates/summary.modern.d.ts +3 -0
  53. package/dist/esm/templates/summary.modern.d.ts.map +1 -0
  54. package/dist/esm/templates/summary.modern.js +540 -0
  55. package/dist/esm/templates/summary.modern.js.map +1 -0
  56. package/dist/esm/types/schema.d.ts +22 -0
  57. package/dist/esm/types/schema.d.ts.map +1 -1
  58. package/examples/playwright.config.ts +1 -0
  59. package/examples/summary-template-minimal.cjs +84 -0
  60. package/examples/summary-template-ops.cjs +131 -0
  61. package/examples/summary-template.cjs +63 -0
  62. package/examples/summary-templates.md +111 -0
  63. package/package.json +1 -1
  64. package/schemas/run.schema.json +191 -42
package/README.md CHANGED
@@ -6,7 +6,7 @@ Jenkins-first Playwright reporting utilities.
6
6
 
7
7
  - A `withPrivateReporter()` config wrapper for Playwright projects.
8
8
  - A `PrivateReporter` implementation that emits `run.json`, `failures.json`, and `health.json`.
9
- - A `generateReport` CLI that creates `summary.md` and a static `summary.html` suitable for Jenkins HTML Publisher.
9
+ - A `generateReport` CLI that creates `summary.md` and a themeable static `summary.html` suitable for Jenkins HTML Publisher.
10
10
  - JSON schemas and examples for Jenkins + Playwright adoption.
11
11
 
12
12
  ## Installation
@@ -43,6 +43,7 @@ export default withPrivateReporter(
43
43
  {
44
44
  projectName: 'payments-ui',
45
45
  outputDir: 'artifacts',
46
+ summaryTheme: 'modern',
46
47
  enableHistoryDiff: true,
47
48
  },
48
49
  );
@@ -102,6 +103,49 @@ After a CI run, expect these artifacts:
102
103
  - `artifacts/internal-report/summary.md`
103
104
  - `artifacts/internal-report/summary.html`
104
105
 
106
+ ## Themes and custom templates
107
+
108
+ The HTML summary renderer is presentation-only. The Playwright reporter still writes JSON first, and `generateReport()` turns that data into HTML later.
109
+
110
+ Built-in themes:
111
+
112
+ - `classic`: compact version of the original summary.
113
+ - `modern`: richer default with visual hierarchy, cards, collapsible failure groups, and improved artifact navigation.
114
+
115
+ Set a built-in theme in config or when calling `generateReport()`:
116
+
117
+ ```ts
118
+ withPrivateReporter(defineConfig({}), {
119
+ projectName: 'payments-ui',
120
+ summaryTheme: 'modern',
121
+ });
122
+ ```
123
+
124
+ For full control, point `summaryTemplatePath` at a local `.js`, `.mjs`, or `.cjs` module that exports either `default` or `renderSummary(context)`.
125
+
126
+ ```ts
127
+ withPrivateReporter(defineConfig({}), {
128
+ projectName: 'payments-ui',
129
+ summaryTemplatePath: './reporting/summary-template.mjs',
130
+ });
131
+ ```
132
+
133
+ The renderer receives `title`, `theme`, `runSummary`, `failuresSummary`, `diff`, and `artifactLinks`.
134
+
135
+ See `examples/summary-templates.md` for the full template guide and the three ready-to-copy examples. You can also import the built-ins from the package and wrap them:
136
+
137
+ ```ts
138
+ import { renderModernSummaryHtml } from '@ciach/playwright-private-reporter';
139
+ ```
140
+
141
+ If you invoke the standalone CLI directly, you can also override presentation with env vars:
142
+
143
+ ```bash
144
+ PRIVATE_REPORT_SUMMARY_THEME=modern \
145
+ PRIVATE_REPORT_SUMMARY_TEMPLATE_PATH=./reporting/summary-template.mjs \
146
+ npx playwright-private-reporter-generate
147
+ ```
148
+
105
149
  ## How to test this package in this repo right now
106
150
 
107
151
  From the repository root:
@@ -145,4 +189,8 @@ npm publish --workspace @ciach/playwright-private-reporter --access public
145
189
  ## Example files
146
190
  - Playwright config example: `examples/playwright.config.ts`
147
191
  - Jenkins pipeline example: `examples/Jenkinsfile`
192
+ - Template guide: `examples/summary-templates.md`
193
+ - Template example: `examples/summary-template.cjs`
194
+ - Template example: `examples/summary-template-minimal.cjs`
195
+ - Template example: `examples/summary-template-ops.cjs`
148
196
  - Architecture/build spec: `../../docs/playwright-private-reporter-build-spec.md`
@@ -1 +1 @@
1
- {"version":3,"file":"generateReport.d.ts","sourceRoot":"","sources":["../../../src/cli/generateReport.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAmB,sBAAsB,EAAc,MAAM,oBAAoB,CAAC;AAE9F,MAAM,MAAM,wBAAwB,GAAG;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAsB,cAAc,CAClC,eAAe,EAAE,sBAAsB,EACvC,UAAU,GAAE,wBAA6B,GACxC,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,iBAAe,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CASzC;AAGD,OAAO,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"generateReport.d.ts","sourceRoot":"","sources":["../../../src/cli/generateReport.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,sBAAsB,EAIvB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,wBAAwB,GAAG;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAgCF,wBAAsB,cAAc,CAClC,eAAe,EAAE,sBAAsB,EACvC,UAAU,GAAE,wBAA6B,GACxC,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED,iBAAe,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBzC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -7,6 +7,28 @@ const node_path_1 = require("node:path");
7
7
  const loadPrevious_js_1 = require("../history/loadPrevious.js");
8
8
  const diffRuns_js_1 = require("../history/diffRuns.js");
9
9
  const summary_html_js_1 = require("../templates/summary.html.js");
10
+ function normalizeArtifactPath(value) {
11
+ return value.replaceAll('\\', '/').replace(/^\.\//, '').replace(/\/+$/, '');
12
+ }
13
+ function createArtifactLinks(runSummary) {
14
+ const playwrightHtmlDir = normalizeArtifactPath(runSummary.artifacts.playwrightHtmlDir);
15
+ const junitPath = normalizeArtifactPath(runSummary.artifacts.junitPath);
16
+ const testResultsDir = normalizeArtifactPath(runSummary.artifacts.testResultsDir);
17
+ return {
18
+ playwrightReport: `../${playwrightHtmlDir}/index.html`,
19
+ junit: `../${junitPath}`,
20
+ testResults: `../${testResultsDir}/`,
21
+ };
22
+ }
23
+ function resolvePresentationOptions(reporterOptions, runSummary) {
24
+ return {
25
+ ...reporterOptions,
26
+ projectName: reporterOptions.projectName || runSummary.projectName,
27
+ summaryTitle: reporterOptions.summaryTitle ?? runSummary.presentation?.summaryTitle,
28
+ summaryTheme: reporterOptions.summaryTheme ?? runSummary.presentation?.summaryTheme,
29
+ summaryTemplatePath: reporterOptions.summaryTemplatePath ?? runSummary.presentation?.summaryTemplatePath,
30
+ };
31
+ }
10
32
  async function generateReport(reporterOptions, cliOptions = {}) {
11
33
  const currentRunPath = (0, node_path_1.resolve)(cliOptions.currentRunPath ?? 'artifacts/internal-report/run.json');
12
34
  const currentFailuresPath = (0, node_path_1.resolve)(cliOptions.currentFailuresPath ?? 'artifacts/internal-report/failures.json');
@@ -25,8 +47,19 @@ async function generateReport(reporterOptions, cliOptions = {}) {
25
47
  runSummary.history.fixedFailures = diff.fixedFailures.length;
26
48
  runSummary.history.stillFailing = diff.stillFailing.length;
27
49
  }
50
+ const resolvedReporterOptions = resolvePresentationOptions(reporterOptions, runSummary);
51
+ const title = resolvedReporterOptions.summaryTitle ?? `${runSummary.projectName} summary`;
52
+ const summaryContext = {
53
+ title,
54
+ theme: resolvedReporterOptions.summaryTheme === 'classic' ? 'classic' : 'modern',
55
+ runSummary,
56
+ failuresSummary,
57
+ diff,
58
+ artifactLinks: createArtifactLinks(runSummary),
59
+ };
60
+ const html = await (0, summary_html_js_1.renderSummaryHtml)(summaryContext, resolvedReporterOptions);
28
61
  const markdown = [
29
- `# ${reporterOptions.summaryTitle ?? reporterOptions.projectName} summary`,
62
+ `# ${title}`,
30
63
  '',
31
64
  `- Status: ${runSummary.run.status}`,
32
65
  `- Passed: ${runSummary.counts.passed}`,
@@ -41,7 +74,7 @@ async function generateReport(reporterOptions, cliOptions = {}) {
41
74
  await Promise.all([
42
75
  (0, promises_1.writeFile)((0, node_path_1.resolve)(outputDir, 'run.json'), JSON.stringify(runSummary, null, 2), 'utf8'),
43
76
  (0, promises_1.writeFile)((0, node_path_1.resolve)(outputDir, 'summary.md'), markdown, 'utf8'),
44
- (0, promises_1.writeFile)((0, node_path_1.resolve)(outputDir, 'summary.html'), (0, summary_html_js_1.renderSummaryHtml)(runSummary, failuresSummary), 'utf8'),
77
+ (0, promises_1.writeFile)((0, node_path_1.resolve)(outputDir, 'summary.html'), html, 'utf8'),
45
78
  ]);
46
79
  }
47
80
  async function runFromCli() {
@@ -50,6 +83,12 @@ async function runFromCli() {
50
83
  projectName,
51
84
  outputDir: process.env.PRIVATE_REPORT_OUTPUT_DIR ?? 'artifacts',
52
85
  summaryTitle: process.env.PRIVATE_REPORT_SUMMARY_TITLE,
86
+ summaryTheme: process.env.PRIVATE_REPORT_SUMMARY_THEME === 'classic'
87
+ ? 'classic'
88
+ : process.env.PRIVATE_REPORT_SUMMARY_THEME === 'modern'
89
+ ? 'modern'
90
+ : undefined,
91
+ summaryTemplatePath: process.env.PRIVATE_REPORT_SUMMARY_TEMPLATE_PATH,
53
92
  enableHistoryDiff: process.env.PRIVATE_REPORT_ENABLE_HISTORY_DIFF === 'true',
54
93
  });
55
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generateReport.js","sourceRoot":"","sources":["../../../src/cli/generateReport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateReport.js","sourceRoot":"","sources":["../../../src/cli/generateReport.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export { createFailureFingerprint, extractFirstMeaningfulStack, normalizeErrorMe
4
4
  export { generateReport } from './cli/generateReport.js';
5
5
  export { diffFailureGroups } from './history/diffRuns.js';
6
6
  export { loadPreviousFailuresSummary, loadPreviousRunSummary } from './history/loadPrevious.js';
7
- export type { AttachmentRecord, FailureGroup, FailuresSummary, HistoryDiff, PrivateReporterOptions, RunSummary, } from './types/schema.js';
7
+ export { renderClassicSummaryHtml, renderModernSummaryHtml, renderSummaryHtml } from './templates/summary.html.js';
8
+ export type { AttachmentRecord, BuiltInSummaryTheme, FailureGroup, FailuresSummary, HistoryDiff, PrivateReporterOptions, RunSummary, SummaryArtifactLinks, SummaryRenderContext, SummaryRenderer, } from './types/schema.js';
8
9
  export { PrivateReporter as default } from './reporter/PrivateReporter.js';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACzH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAChG,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACzH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACnH,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,MAAM,+BAA+B,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = exports.loadPreviousRunSummary = exports.loadPreviousFailuresSummary = exports.diffFailureGroups = exports.generateReport = exports.normalizeErrorMessage = exports.extractFirstMeaningfulStack = exports.createFailureFingerprint = exports.PrivateReporter = exports.withPrivateReporter = void 0;
3
+ exports.default = exports.renderSummaryHtml = exports.renderModernSummaryHtml = exports.renderClassicSummaryHtml = exports.loadPreviousRunSummary = exports.loadPreviousFailuresSummary = exports.diffFailureGroups = exports.generateReport = exports.normalizeErrorMessage = exports.extractFirstMeaningfulStack = exports.createFailureFingerprint = exports.PrivateReporter = exports.withPrivateReporter = void 0;
4
4
  var withPrivateReporter_js_1 = require("./config/withPrivateReporter.js");
5
5
  Object.defineProperty(exports, "withPrivateReporter", { enumerable: true, get: function () { return withPrivateReporter_js_1.withPrivateReporter; } });
6
6
  var PrivateReporter_js_1 = require("./reporter/PrivateReporter.js");
@@ -16,6 +16,10 @@ Object.defineProperty(exports, "diffFailureGroups", { enumerable: true, get: fun
16
16
  var loadPrevious_js_1 = require("./history/loadPrevious.js");
17
17
  Object.defineProperty(exports, "loadPreviousFailuresSummary", { enumerable: true, get: function () { return loadPrevious_js_1.loadPreviousFailuresSummary; } });
18
18
  Object.defineProperty(exports, "loadPreviousRunSummary", { enumerable: true, get: function () { return loadPrevious_js_1.loadPreviousRunSummary; } });
19
+ var summary_html_js_1 = require("./templates/summary.html.js");
20
+ Object.defineProperty(exports, "renderClassicSummaryHtml", { enumerable: true, get: function () { return summary_html_js_1.renderClassicSummaryHtml; } });
21
+ Object.defineProperty(exports, "renderModernSummaryHtml", { enumerable: true, get: function () { return summary_html_js_1.renderModernSummaryHtml; } });
22
+ Object.defineProperty(exports, "renderSummaryHtml", { enumerable: true, get: function () { return summary_html_js_1.renderSummaryHtml; } });
19
23
  var PrivateReporter_js_2 = require("./reporter/PrivateReporter.js");
20
24
  Object.defineProperty(exports, "default", { enumerable: true, get: function () { return PrivateReporter_js_2.PrivateReporter; } });
21
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,0EAAsE;AAA7D,6HAAA,mBAAmB,OAAA;AAC5B,oEAAgE;AAAvD,qHAAA,eAAe,OAAA;AACxB,4DAAyH;AAAhH,0HAAA,wBAAwB,OAAA;AAAE,6HAAA,2BAA2B,OAAA;AAAE,uHAAA,qBAAqB,OAAA;AACrF,6DAAyD;AAAhD,mHAAA,cAAc,OAAA;AACvB,qDAA0D;AAAjD,gHAAA,iBAAiB,OAAA;AAC1B,6DAAgG;AAAvF,8HAAA,2BAA2B,OAAA;AAAE,yHAAA,sBAAsB,OAAA;AAS5D,oEAA2E;AAAlE,6GAAA,eAAe,OAAW"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,0EAAsE;AAA7D,6HAAA,mBAAmB,OAAA;AAC5B,oEAAgE;AAAvD,qHAAA,eAAe,OAAA;AACxB,4DAAyH;AAAhH,0HAAA,wBAAwB,OAAA;AAAE,6HAAA,2BAA2B,OAAA;AAAE,uHAAA,qBAAqB,OAAA;AACrF,6DAAyD;AAAhD,mHAAA,cAAc,OAAA;AACvB,qDAA0D;AAAjD,gHAAA,iBAAiB,OAAA;AAC1B,6DAAgG;AAAvF,8HAAA,2BAA2B,OAAA;AAAE,yHAAA,sBAAsB,OAAA;AAC5D,+DAAmH;AAA1G,2HAAA,wBAAwB,OAAA;AAAE,0HAAA,uBAAuB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAa7E,oEAA2E;AAAlE,6GAAA,eAAe,OAAW"}
@@ -1 +1 @@
1
- {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/reporter/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,SAAS,EACT,UAAU,EACX,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC,CAAC;AAEF,wBAAgB,iBAAiB,IAAI,SAAS,CAS7C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CA0CxE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,sBAAsB,CAAC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,GAAG,UAAU,CAwCb;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,CAO7G"}
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/reporter/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,SAAS,EACT,UAAU,EACX,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC,CAAC;AAEF,wBAAgB,iBAAiB,IAAI,SAAS,CAS7C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CA0CxE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,sBAAsB,CAAC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,GAAG,UAAU,CA6Cb;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,CAO7G"}
@@ -65,6 +65,11 @@ function buildRunSummary(params) {
65
65
  schemaVersion: '1.0',
66
66
  projectName: params.options.projectName,
67
67
  generatedAt: new Date().toISOString(),
68
+ presentation: {
69
+ summaryTitle: params.options.summaryTitle,
70
+ summaryTheme: params.options.summaryTheme,
71
+ summaryTemplatePath: params.options.summaryTemplatePath,
72
+ },
68
73
  run: {
69
74
  status: hasFailures ? 'failed' : 'passed',
70
75
  buildId: process.env[buildIdEnv],
@@ -1 +1 @@
1
- {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/reporter/summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/reporter/summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function escapeHtml(value: string | undefined): string;
2
+ export declare function pluralize(count: number, singular: string, plural?: string): string;
3
+ export declare function joinTitlePath(titlePath: string[]): string;
4
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/templates/shared.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAO5D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAiB,GAAG,MAAM,CAE1F;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapeHtml = escapeHtml;
4
+ exports.pluralize = pluralize;
5
+ exports.joinTitlePath = joinTitlePath;
6
+ function escapeHtml(value) {
7
+ return (value ?? '')
8
+ .replaceAll('&', '&')
9
+ .replaceAll('<', '&lt;')
10
+ .replaceAll('>', '&gt;')
11
+ .replaceAll('"', '&quot;')
12
+ .replaceAll("'", '&#39;');
13
+ }
14
+ function pluralize(count, singular, plural = `${singular}s`) {
15
+ return `${count} ${count === 1 ? singular : plural}`;
16
+ }
17
+ function joinTitlePath(titlePath) {
18
+ return titlePath.map((segment) => escapeHtml(segment)).join(' / ');
19
+ }
20
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/templates/shared.ts"],"names":[],"mappings":";;AAAA,gCAOC;AAED,8BAEC;AAED,sCAEC;AAfD,SAAgB,UAAU,CAAC,KAAyB;IAClD,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;SACjB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,SAAS,CAAC,KAAa,EAAE,QAAgB,EAAE,MAAM,GAAG,GAAG,QAAQ,GAAG;IAChF,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACvD,CAAC;AAED,SAAgB,aAAa,CAAC,SAAmB;IAC/C,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SummaryRenderContext } from '../types/schema.js';
2
+ export declare function renderClassicSummaryHtml(context: SummaryRenderContext): string;
3
+ //# sourceMappingURL=summary.classic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.classic.d.ts","sourceRoot":"","sources":["../../../src/templates/summary.classic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI/D,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAyD9E"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderClassicSummaryHtml = renderClassicSummaryHtml;
4
+ const shared_js_1 = require("./shared.js");
5
+ function renderClassicSummaryHtml(context) {
6
+ const { title, runSummary, failuresSummary, artifactLinks } = context;
7
+ const failureItems = failuresSummary.groups
8
+ .slice(0, 10)
9
+ .map((group) => `
10
+ <li>
11
+ <strong>${(0, shared_js_1.escapeHtml)(group.title)}</strong>
12
+ <div>Fingerprint: <code>${(0, shared_js_1.escapeHtml)(group.fingerprint)}</code></div>
13
+ <div>Occurrences: ${group.countInRun}</div>
14
+ <div>${(0, shared_js_1.escapeHtml)(group.normalizedMessage)}</div>
15
+ </li>`)
16
+ .join('');
17
+ return `<!DOCTYPE html>
18
+ <html lang="en">
19
+ <head>
20
+ <meta charset="utf-8" />
21
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
22
+ <title>${(0, shared_js_1.escapeHtml)(title)}</title>
23
+ <style>
24
+ body { font-family: Arial, sans-serif; margin: 2rem; color: #1f2937; }
25
+ .grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1rem; }
26
+ .card { border: 1px solid #d1d5db; border-radius: 8px; padding: 1rem; background: #fff; }
27
+ code { background: #f3f4f6; padding: 0.1rem 0.3rem; border-radius: 4px; }
28
+ ul { padding-left: 1.25rem; }
29
+ @media (max-width: 900px) { .grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
30
+ @media (max-width: 640px) { body { margin: 1rem; } .grid { grid-template-columns: 1fr; } }
31
+ </style>
32
+ </head>
33
+ <body>
34
+ <h1>${(0, shared_js_1.escapeHtml)(title)}</h1>
35
+ <p>Status: <strong>${(0, shared_js_1.escapeHtml)(runSummary.run.status)}</strong></p>
36
+ <div class="grid">
37
+ <div class="card"><div>Passed</div><strong>${runSummary.counts.passed}</strong></div>
38
+ <div class="card"><div>Failed</div><strong>${runSummary.counts.failed}</strong></div>
39
+ <div class="card"><div>Skipped</div><strong>${runSummary.counts.skipped}</strong></div>
40
+ <div class="card"><div>Flaky</div><strong>${runSummary.counts.flaky}</strong></div>
41
+ </div>
42
+ <h2>Build metadata</h2>
43
+ <ul>
44
+ <li>Build ID: ${(0, shared_js_1.escapeHtml)(runSummary.run.buildId)}</li>
45
+ <li>Branch: ${(0, shared_js_1.escapeHtml)(runSummary.run.branch)}</li>
46
+ <li>Commit: ${(0, shared_js_1.escapeHtml)(runSummary.run.commit)}</li>
47
+ <li>Build URL: ${runSummary.run.buildUrl ? `<a href="${(0, shared_js_1.escapeHtml)(runSummary.run.buildUrl)}">${(0, shared_js_1.escapeHtml)(runSummary.run.buildUrl)}</a>` : 'n/a'}</li>
48
+ </ul>
49
+ <h2>Failure groups</h2>
50
+ <ul>${failureItems || '<li>No failing groups</li>'}</ul>
51
+ <h2>Artifacts</h2>
52
+ <ul>
53
+ <li><a href="${(0, shared_js_1.escapeHtml)(artifactLinks.playwrightReport)}">Merged Playwright HTML report</a></li>
54
+ <li><a href="${(0, shared_js_1.escapeHtml)(artifactLinks.junit)}">JUnit XML</a></li>
55
+ <li><a href="${(0, shared_js_1.escapeHtml)(artifactLinks.testResults)}">Test results attachments</a></li>
56
+ </ul>
57
+ </body>
58
+ </html>`;
59
+ }
60
+ //# sourceMappingURL=summary.classic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.classic.js","sourceRoot":"","sources":["../../../src/templates/summary.classic.ts"],"names":[],"mappings":";;AAIA,4DAyDC;AA3DD,2CAAyC;AAEzC,SAAgB,wBAAwB,CAAC,OAA6B;IACpE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IACtE,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM;SACxC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC;;oBAEG,IAAA,sBAAU,EAAC,KAAK,CAAC,KAAK,CAAC;oCACP,IAAA,sBAAU,EAAC,KAAK,CAAC,WAAW,CAAC;8BACnC,KAAK,CAAC,UAAU;iBAC7B,IAAA,sBAAU,EAAC,KAAK,CAAC,iBAAiB,CAAC;cACtC,CACT;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO;;;;;aAKI,IAAA,sBAAU,EAAC,KAAK,CAAC;;;;;;;;;;;;UAYpB,IAAA,sBAAU,EAAC,KAAK,CAAC;yBACF,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;;mDAEP,UAAU,CAAC,MAAM,CAAC,MAAM;mDACxB,UAAU,CAAC,MAAM,CAAC,MAAM;oDACvB,UAAU,CAAC,MAAM,CAAC,OAAO;kDAC3B,UAAU,CAAC,MAAM,CAAC,KAAK;;;;sBAInD,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;oBACpC,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;oBACjC,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;uBAC9B,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;;;UAG5I,YAAY,IAAI,4BAA4B;;;qBAGjC,IAAA,sBAAU,EAAC,aAAa,CAAC,gBAAgB,CAAC;qBAC1C,IAAA,sBAAU,EAAC,aAAa,CAAC,KAAK,CAAC;qBAC/B,IAAA,sBAAU,EAAC,aAAa,CAAC,WAAW,CAAC;;;QAGlD,CAAC;AACT,CAAC"}
@@ -1,3 +1,6 @@
1
- import type { FailuresSummary, RunSummary } from '../types/schema.js';
2
- export declare function renderSummaryHtml(run: RunSummary, failures: FailuresSummary): string;
1
+ import { renderClassicSummaryHtml } from './summary.classic.js';
2
+ import { renderModernSummaryHtml } from './summary.modern.js';
3
+ import type { PrivateReporterOptions, SummaryRenderContext } from '../types/schema.js';
4
+ export { renderClassicSummaryHtml, renderModernSummaryHtml };
5
+ export declare function renderSummaryHtml(context: SummaryRenderContext, options: PrivateReporterOptions): Promise<string>;
3
6
  //# sourceMappingURL=summary.html.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"summary.html.d.ts","sourceRoot":"","sources":["../../../src/templates/summary.html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAWtE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAsDpF"}
1
+ {"version":3,"file":"summary.html.d.ts","sourceRoot":"","sources":["../../../src/templates/summary.html.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAEV,sBAAsB,EACtB,oBAAoB,EAErB,MAAM,oBAAoB,CAAC;AAkC5B,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,CAAC;AAE7D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAYjB"}
@@ -1,64 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderModernSummaryHtml = exports.renderClassicSummaryHtml = void 0;
3
4
  exports.renderSummaryHtml = renderSummaryHtml;
4
- function escapeHtml(value) {
5
- return (value ?? '')
6
- .replaceAll('&', '&amp;')
7
- .replaceAll('<', '&lt;')
8
- .replaceAll('>', '&gt;')
9
- .replaceAll('"', '&quot;')
10
- .replaceAll("'", '&#39;');
5
+ const node_path_1 = require("node:path");
6
+ const summary_classic_js_1 = require("./summary.classic.js");
7
+ Object.defineProperty(exports, "renderClassicSummaryHtml", { enumerable: true, get: function () { return summary_classic_js_1.renderClassicSummaryHtml; } });
8
+ const summary_modern_js_1 = require("./summary.modern.js");
9
+ Object.defineProperty(exports, "renderModernSummaryHtml", { enumerable: true, get: function () { return summary_modern_js_1.renderModernSummaryHtml; } });
10
+ const BUILTIN_RENDERERS = {
11
+ classic: summary_classic_js_1.renderClassicSummaryHtml,
12
+ modern: summary_modern_js_1.renderModernSummaryHtml,
13
+ };
14
+ const dynamicImport = new Function('modulePath', 'return import(modulePath)');
15
+ function resolveSummaryTheme(options) {
16
+ return options.summaryTheme === 'classic' ? 'classic' : 'modern';
11
17
  }
12
- function renderSummaryHtml(run, failures) {
13
- const failureItems = failures.groups
14
- .slice(0, 10)
15
- .map((group) => `
16
- <li>
17
- <strong>${escapeHtml(group.title)}</strong>
18
- <div>Fingerprint: <code>${escapeHtml(group.fingerprint)}</code></div>
19
- <div>Occurrences: ${group.countInRun}</div>
20
- <div>${escapeHtml(group.normalizedMessage)}</div>
21
- </li>`)
22
- .join('');
23
- return `<!DOCTYPE html>
24
- <html lang="en">
25
- <head>
26
- <meta charset="utf-8" />
27
- <meta name="viewport" content="width=device-width, initial-scale=1" />
28
- <title>${escapeHtml(run.projectName)} test summary</title>
29
- <style>
30
- body { font-family: Arial, sans-serif; margin: 2rem; color: #1f2937; }
31
- .grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1rem; }
32
- .card { border: 1px solid #d1d5db; border-radius: 8px; padding: 1rem; background: #fff; }
33
- code { background: #f3f4f6; padding: 0.1rem 0.3rem; border-radius: 4px; }
34
- ul { padding-left: 1.25rem; }
35
- </style>
36
- </head>
37
- <body>
38
- <h1>${escapeHtml(run.projectName)} Playwright Summary</h1>
39
- <p>Status: <strong>${escapeHtml(run.run.status)}</strong></p>
40
- <div class="grid">
41
- <div class="card"><div>Passed</div><strong>${run.counts.passed}</strong></div>
42
- <div class="card"><div>Failed</div><strong>${run.counts.failed}</strong></div>
43
- <div class="card"><div>Skipped</div><strong>${run.counts.skipped}</strong></div>
44
- <div class="card"><div>Flaky</div><strong>${run.counts.flaky}</strong></div>
45
- </div>
46
- <h2>Build metadata</h2>
47
- <ul>
48
- <li>Build ID: ${escapeHtml(run.run.buildId)}</li>
49
- <li>Branch: ${escapeHtml(run.run.branch)}</li>
50
- <li>Commit: ${escapeHtml(run.run.commit)}</li>
51
- <li>Build URL: ${run.run.buildUrl ? `<a href="${escapeHtml(run.run.buildUrl)}">${escapeHtml(run.run.buildUrl)}</a>` : 'n/a'}</li>
52
- </ul>
53
- <h2>Failure groups</h2>
54
- <ul>${failureItems || '<li>No failing groups 🎉</li>'}</ul>
55
- <h2>Artifacts</h2>
56
- <ul>
57
- <li><a href="../playwright-report/index.html">Merged Playwright HTML report</a></li>
58
- <li><a href="../junit/results.xml">JUnit XML</a></li>
59
- <li><a href="../test-results/">Test results attachments</a></li>
60
- </ul>
61
- </body>
62
- </html>`;
18
+ async function loadSummaryRenderer(templatePath) {
19
+ const resolvedPath = (0, node_path_1.resolve)(templatePath);
20
+ const loadedModule = await dynamicImport(resolvedPath);
21
+ const renderer = loadedModule.renderSummary ?? loadedModule.default;
22
+ if (typeof renderer !== 'function') {
23
+ throw new Error(`Summary template "${resolvedPath}" must export a default function or a named "renderSummary" function.`);
24
+ }
25
+ return renderer;
26
+ }
27
+ async function renderSummaryHtml(context, options) {
28
+ const theme = resolveSummaryTheme(options);
29
+ const renderer = options.summaryTemplatePath
30
+ ? await loadSummaryRenderer(options.summaryTemplatePath)
31
+ : BUILTIN_RENDERERS[theme];
32
+ const html = await renderer({ ...context, theme });
33
+ if (typeof html !== 'string') {
34
+ throw new Error('Summary renderer must return an HTML string.');
35
+ }
36
+ return html;
63
37
  }
64
38
  //# sourceMappingURL=summary.html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"summary.html.js","sourceRoot":"","sources":["../../../src/templates/summary.html.ts"],"names":[],"mappings":";;AAWA,8CAsDC;AA/DD,SAAS,UAAU,CAAC,KAAyB;IAC3C,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;SACjB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAe,EAAE,QAAyB;IAC1E,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM;SACjC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC;;oBAEG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;oCACP,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC;8BACnC,KAAK,CAAC,UAAU;iBAC7B,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC;cACtC,CACT;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO;;;;;aAKI,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;;;;;;;;;;UAU9B,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;yBACZ,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;;mDAEA,GAAG,CAAC,MAAM,CAAC,MAAM;mDACjB,GAAG,CAAC,MAAM,CAAC,MAAM;oDAChB,GAAG,CAAC,MAAM,CAAC,OAAO;kDACpB,GAAG,CAAC,MAAM,CAAC,KAAK;;;;sBAI5C,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;oBAC7B,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC1B,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;uBACvB,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;;;UAGvH,YAAY,IAAI,+BAA+B;;;;;;;;QAQjD,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"summary.html.js","sourceRoot":"","sources":["../../../src/templates/summary.html.ts"],"names":[],"mappings":";;;AA6CA,8CAeC;AA5DD,yCAAoC;AAEpC,6DAAgE;AAyCvD,yGAzCA,6CAAwB,OAyCA;AAxCjC,2DAA8D;AAwC3B,wGAxC1B,2CAAuB,OAwC0B;AA3B1D,MAAM,iBAAiB,GAAiD;IACtE,OAAO,EAAE,6CAAwB;IACjC,MAAM,EAAE,2CAAuB;CAChC,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAEzC,CAAC;AAEpC,SAAS,mBAAmB,CAAC,OAA+B;IAC1D,OAAO,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IACrD,MAAM,YAAY,GAAG,IAAA,mBAAO,EAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,OAAO,CAAC;IAEpE,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,qBAAqB,YAAY,uEAAuE,CACzG,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAIM,KAAK,UAAU,iBAAiB,CACrC,OAA6B,EAC7B,OAA+B;IAE/B,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB;QAC1C,CAAC,CAAC,MAAM,mBAAmB,CAAC,OAAO,CAAC,mBAAmB,CAAC;QACxD,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SummaryRenderContext } from '../types/schema.js';
2
+ export declare function renderModernSummaryHtml(context: SummaryRenderContext): string;
3
+ //# sourceMappingURL=summary.modern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.modern.d.ts","sourceRoot":"","sources":["../../../src/templates/summary.modern.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAiG7E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CA0c7E"}