@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
@@ -0,0 +1,540 @@
1
+ import { escapeHtml, joinTitlePath, pluralize } from './shared.js';
2
+ function renderHistoryState(group) {
3
+ if (!group.history) {
4
+ return '';
5
+ }
6
+ return `
7
+ <div class="meta-row">
8
+ <span class="meta-label">History</span>
9
+ <span class="history-chip history-${escapeHtml(group.history.state)}">${escapeHtml(group.history.state)}</span>
10
+ </div>`;
11
+ }
12
+ function renderAttachments(group) {
13
+ if (group.exampleAttachments.length === 0) {
14
+ return '';
15
+ }
16
+ return `
17
+ <section class="subsection">
18
+ <h4>Example attachments</h4>
19
+ <ul class="attachment-list">
20
+ ${group.exampleAttachments
21
+ .map((attachment) => `
22
+ <li>
23
+ <strong>${escapeHtml(attachment.name)}</strong>
24
+ ${attachment.contentType ? `<span>${escapeHtml(attachment.contentType)}</span>` : ''}
25
+ ${attachment.path ? `<code>${escapeHtml(attachment.path)}</code>` : ''}
26
+ </li>`)
27
+ .join('')}
28
+ </ul>
29
+ </section>`;
30
+ }
31
+ function renderTests(group) {
32
+ if (group.tests.length === 0) {
33
+ return '';
34
+ }
35
+ return `
36
+ <details class="nested-details">
37
+ <summary>Affected tests (${group.tests.length})</summary>
38
+ <ul class="test-list">
39
+ ${group.tests
40
+ .map((test) => `
41
+ <li>
42
+ <div class="test-title">${joinTitlePath(test.titlePath)}</div>
43
+ <div class="test-meta">
44
+ <span>Status: ${escapeHtml(test.status)}</span>
45
+ <span>Retry: ${test.retry}</span>
46
+ ${test.location ? `<code>${escapeHtml(test.location)}</code>` : ''}
47
+ </div>
48
+ </li>`)
49
+ .join('')}
50
+ </ul>
51
+ </details>`;
52
+ }
53
+ function renderFailureGroup(group, index) {
54
+ return `
55
+ <details class="failure-card" ${index == 0 ? 'open' : ''}>
56
+ <summary>
57
+ <div class="failure-heading">
58
+ <div>
59
+ <div class="eyebrow">${escapeHtml(group.projectName ?? 'project')} / ${escapeHtml(group.status)}</div>
60
+ <h3>${escapeHtml(group.title)}</h3>
61
+ </div>
62
+ <div class="failure-badges">
63
+ <span class="count-badge">${pluralize(group.countInRun, 'occurrence')}</span>
64
+ ${group.history ? `<span class="history-chip history-${escapeHtml(group.history.state)}">${escapeHtml(group.history.state)}</span>` : ''}
65
+ </div>
66
+ </div>
67
+ <div class="failure-summary-meta">
68
+ <code>${escapeHtml(group.fingerprint)}</code>
69
+ <span>${escapeHtml(group.testFile)}</span>
70
+ </div>
71
+ </summary>
72
+ <div class="failure-body">
73
+ <section class="subsection">
74
+ <h4>Normalized failure</h4>
75
+ <pre>${escapeHtml(group.normalizedMessage)}</pre>
76
+ </section>
77
+ ${group.firstMeaningfulStack ? `<section class="subsection"><h4>First meaningful stack frame</h4><pre>${escapeHtml(group.firstMeaningfulStack)}</pre></section>` : ''}
78
+ ${renderHistoryState(group)}
79
+ ${renderAttachments(group)}
80
+ ${renderTests(group)}
81
+ </div>
82
+ </details>`;
83
+ }
84
+ export function renderModernSummaryHtml(context) {
85
+ const { title, runSummary, failuresSummary, diff, artifactLinks } = context;
86
+ const failureCards = failuresSummary.groups
87
+ .slice(0, 25)
88
+ .map((group, index) => renderFailureGroup(group, index))
89
+ .join('');
90
+ return `<!DOCTYPE html>
91
+ <html lang="en">
92
+ <head>
93
+ <meta charset="utf-8" />
94
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
95
+ <title>${escapeHtml(title)}</title>
96
+ <style>
97
+ :root {
98
+ --bg: #f4efe8;
99
+ --panel: rgba(255, 255, 255, 0.86);
100
+ --panel-strong: #ffffff;
101
+ --ink: #1f2937;
102
+ --muted: #5b6575;
103
+ --line: rgba(31, 41, 55, 0.12);
104
+ --accent: #0f766e;
105
+ --accent-strong: #115e59;
106
+ --danger: #b42318;
107
+ --danger-soft: #fef3f2;
108
+ --success: #166534;
109
+ --success-soft: #ecfdf3;
110
+ --warning: #b54708;
111
+ --warning-soft: #fffaeb;
112
+ --shadow: 0 20px 40px rgba(15, 23, 42, 0.08);
113
+ }
114
+
115
+ * { box-sizing: border-box; }
116
+ html { color-scheme: light; }
117
+ body {
118
+ margin: 0;
119
+ min-height: 100vh;
120
+ font-family: "Segoe UI Variable", "Avenir Next", "Helvetica Neue", Arial, sans-serif;
121
+ color: var(--ink);
122
+ background:
123
+ radial-gradient(circle at top left, rgba(15, 118, 110, 0.16), transparent 28rem),
124
+ radial-gradient(circle at top right, rgba(180, 35, 24, 0.09), transparent 24rem),
125
+ linear-gradient(180deg, #fbf7f2 0%, var(--bg) 100%);
126
+ }
127
+
128
+ main {
129
+ width: min(1120px, calc(100% - 2rem));
130
+ margin: 0 auto;
131
+ padding: 2rem 0 3rem;
132
+ }
133
+
134
+ .hero,
135
+ .section,
136
+ .stat-card,
137
+ .artifact-card,
138
+ .failure-card {
139
+ backdrop-filter: blur(12px);
140
+ background: var(--panel);
141
+ border: 1px solid var(--line);
142
+ box-shadow: var(--shadow);
143
+ }
144
+
145
+ .hero {
146
+ border-radius: 28px;
147
+ padding: 2rem;
148
+ display: grid;
149
+ grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr);
150
+ gap: 1.5rem;
151
+ }
152
+
153
+ .eyebrow {
154
+ text-transform: uppercase;
155
+ letter-spacing: 0.14em;
156
+ font-size: 0.75rem;
157
+ color: var(--muted);
158
+ }
159
+
160
+ h1, h2, h3, h4, p { margin: 0; }
161
+ h1 { font-size: clamp(2rem, 5vw, 3.3rem); line-height: 0.95; margin-top: 0.45rem; }
162
+ h2 { font-size: 1.35rem; }
163
+ h3 { font-size: 1.05rem; line-height: 1.2; }
164
+ h4 { font-size: 0.95rem; margin-bottom: 0.5rem; }
165
+
166
+ .hero-copy p {
167
+ margin-top: 0.9rem;
168
+ max-width: 60ch;
169
+ color: var(--muted);
170
+ font-size: 1rem;
171
+ line-height: 1.6;
172
+ }
173
+
174
+ .status-pill {
175
+ display: inline-flex;
176
+ align-items: center;
177
+ gap: 0.5rem;
178
+ border-radius: 999px;
179
+ padding: 0.45rem 0.85rem;
180
+ font-weight: 700;
181
+ font-size: 0.92rem;
182
+ }
183
+
184
+ .status-passed { background: var(--success-soft); color: var(--success); }
185
+ .status-failed, .status-partial { background: var(--danger-soft); color: var(--danger); }
186
+
187
+ .hero-meta {
188
+ display: grid;
189
+ gap: 0.8rem;
190
+ align-content: start;
191
+ }
192
+
193
+ .meta-card {
194
+ border-radius: 18px;
195
+ padding: 1rem 1.1rem;
196
+ background: var(--panel-strong);
197
+ border: 1px solid var(--line);
198
+ }
199
+
200
+ .meta-label {
201
+ font-size: 0.8rem;
202
+ text-transform: uppercase;
203
+ letter-spacing: 0.08em;
204
+ color: var(--muted);
205
+ }
206
+
207
+ .meta-value,
208
+ .meta-card a {
209
+ display: block;
210
+ margin-top: 0.35rem;
211
+ color: var(--ink);
212
+ text-decoration: none;
213
+ word-break: break-word;
214
+ }
215
+
216
+ .section {
217
+ margin-top: 1.25rem;
218
+ border-radius: 24px;
219
+ padding: 1.35rem;
220
+ }
221
+
222
+ .section-header {
223
+ display: flex;
224
+ justify-content: space-between;
225
+ gap: 1rem;
226
+ align-items: baseline;
227
+ margin-bottom: 1rem;
228
+ }
229
+
230
+ .section-header p { color: var(--muted); line-height: 1.5; }
231
+
232
+ .stats-grid,
233
+ .artifacts-grid {
234
+ display: grid;
235
+ grid-template-columns: repeat(4, minmax(0, 1fr));
236
+ gap: 1rem;
237
+ }
238
+
239
+ .stat-card,
240
+ .artifact-card {
241
+ border-radius: 18px;
242
+ padding: 1.15rem;
243
+ }
244
+
245
+ .stat-card strong {
246
+ display: block;
247
+ margin-top: 0.75rem;
248
+ font-size: 2rem;
249
+ line-height: 1;
250
+ }
251
+
252
+ .stat-card span { color: var(--muted); }
253
+
254
+ .stat-card[data-tone="danger"] strong { color: var(--danger); }
255
+ .stat-card[data-tone="success"] strong { color: var(--success); }
256
+ .stat-card[data-tone="warning"] strong { color: var(--warning); }
257
+ .stat-card[data-tone="accent"] strong { color: var(--accent-strong); }
258
+
259
+ .history-grid {
260
+ display: grid;
261
+ grid-template-columns: repeat(3, minmax(0, 1fr));
262
+ gap: 1rem;
263
+ }
264
+
265
+ .artifact-card a {
266
+ color: var(--accent-strong);
267
+ font-weight: 700;
268
+ text-decoration: none;
269
+ }
270
+
271
+ .artifact-card p,
272
+ .empty-state p {
273
+ margin-top: 0.55rem;
274
+ color: var(--muted);
275
+ line-height: 1.55;
276
+ }
277
+
278
+ .failures-stack {
279
+ display: grid;
280
+ gap: 0.9rem;
281
+ }
282
+
283
+ .failure-card {
284
+ border-radius: 20px;
285
+ overflow: hidden;
286
+ }
287
+
288
+ .failure-card > summary {
289
+ list-style: none;
290
+ cursor: pointer;
291
+ padding: 1rem 1.15rem;
292
+ }
293
+
294
+ .failure-card > summary::-webkit-details-marker,
295
+ .nested-details > summary::-webkit-details-marker {
296
+ display: none;
297
+ }
298
+
299
+ .failure-heading,
300
+ .failure-summary-meta,
301
+ .test-meta,
302
+ .meta-row {
303
+ display: flex;
304
+ justify-content: space-between;
305
+ gap: 0.8rem;
306
+ align-items: start;
307
+ }
308
+
309
+ .failure-summary-meta,
310
+ .test-meta,
311
+ .meta-row {
312
+ margin-top: 0.8rem;
313
+ color: var(--muted);
314
+ font-size: 0.92rem;
315
+ flex-wrap: wrap;
316
+ }
317
+
318
+ .failure-badges {
319
+ display: flex;
320
+ gap: 0.6rem;
321
+ flex-wrap: wrap;
322
+ justify-content: end;
323
+ }
324
+
325
+ .count-badge,
326
+ .history-chip {
327
+ border-radius: 999px;
328
+ padding: 0.35rem 0.7rem;
329
+ font-size: 0.82rem;
330
+ font-weight: 700;
331
+ }
332
+
333
+ .count-badge { background: rgba(15, 118, 110, 0.1); color: var(--accent-strong); }
334
+ .history-new { background: var(--danger-soft); color: var(--danger); }
335
+ .history-still-failing { background: var(--warning-soft); color: var(--warning); }
336
+ .history-fixed { background: var(--success-soft); color: var(--success); }
337
+ .history-unknown { background: rgba(91, 101, 117, 0.12); color: var(--muted); }
338
+
339
+ .failure-body {
340
+ border-top: 1px solid var(--line);
341
+ padding: 1rem 1.15rem 1.15rem;
342
+ background: rgba(255, 255, 255, 0.52);
343
+ }
344
+
345
+ .subsection + .subsection,
346
+ .nested-details,
347
+ .meta-row {
348
+ margin-top: 1rem;
349
+ }
350
+
351
+ pre,
352
+ code {
353
+ font-family: "SFMono-Regular", "Cascadia Code", "JetBrains Mono", monospace;
354
+ }
355
+
356
+ pre,
357
+ code {
358
+ word-break: break-word;
359
+ }
360
+
361
+ pre {
362
+ margin: 0;
363
+ white-space: pre-wrap;
364
+ border-radius: 16px;
365
+ padding: 0.9rem 1rem;
366
+ background: #17202c;
367
+ color: #f8fafc;
368
+ line-height: 1.55;
369
+ }
370
+
371
+ code {
372
+ display: inline-block;
373
+ border-radius: 8px;
374
+ background: rgba(15, 23, 42, 0.06);
375
+ padding: 0.2rem 0.45rem;
376
+ }
377
+
378
+ .attachment-list,
379
+ .test-list {
380
+ margin: 0;
381
+ padding-left: 1.2rem;
382
+ }
383
+
384
+ .attachment-list li,
385
+ .test-list li {
386
+ margin-top: 0.55rem;
387
+ }
388
+
389
+ .test-title {
390
+ font-weight: 700;
391
+ color: var(--ink);
392
+ }
393
+
394
+ .nested-details {
395
+ border-top: 1px dashed var(--line);
396
+ padding-top: 1rem;
397
+ }
398
+
399
+ .nested-details > summary {
400
+ list-style: none;
401
+ cursor: pointer;
402
+ font-weight: 700;
403
+ }
404
+
405
+ .empty-state {
406
+ border-radius: 18px;
407
+ padding: 1.25rem;
408
+ background: var(--panel-strong);
409
+ border: 1px dashed var(--line);
410
+ }
411
+
412
+ @media (max-width: 960px) {
413
+ .hero,
414
+ .stats-grid,
415
+ .artifacts-grid,
416
+ .history-grid {
417
+ grid-template-columns: repeat(2, minmax(0, 1fr));
418
+ }
419
+ }
420
+
421
+ @media (max-width: 720px) {
422
+ main { width: min(100% - 1rem, 1120px); padding-top: 1rem; }
423
+ .hero,
424
+ .stats-grid,
425
+ .artifacts-grid,
426
+ .history-grid {
427
+ grid-template-columns: 1fr;
428
+ }
429
+ .hero { padding: 1.25rem; border-radius: 22px; }
430
+ .section { padding: 1rem; border-radius: 18px; }
431
+ .failure-heading,
432
+ .failure-summary-meta,
433
+ .test-meta,
434
+ .meta-row,
435
+ .section-header {
436
+ display: block;
437
+ }
438
+ .failure-badges { margin-top: 0.75rem; justify-content: start; }
439
+ }
440
+ </style>
441
+ </head>
442
+ <body>
443
+ <main>
444
+ <section class="hero">
445
+ <div class="hero-copy">
446
+ <div class="eyebrow">Playwright private reporter</div>
447
+ <h1>${escapeHtml(title)}</h1>
448
+ <p>Static CI-friendly summary with grouped failures, artifact shortcuts, and collapsible drill-down for the highest-signal debugging details.</p>
449
+ <p>
450
+ <span class="status-pill status-${escapeHtml(runSummary.run.status)}">${escapeHtml(runSummary.run.status)}</span>
451
+ </p>
452
+ </div>
453
+ <div class="hero-meta">
454
+ <div class="meta-card">
455
+ <span class="meta-label">Build</span>
456
+ <span class="meta-value">${escapeHtml(runSummary.run.buildId ?? 'n/a')}</span>
457
+ </div>
458
+ <div class="meta-card">
459
+ <span class="meta-label">Branch</span>
460
+ <span class="meta-value">${escapeHtml(runSummary.run.branch ?? 'n/a')}</span>
461
+ </div>
462
+ <div class="meta-card">
463
+ <span class="meta-label">Commit</span>
464
+ <span class="meta-value">${escapeHtml(runSummary.run.commit ?? 'n/a')}</span>
465
+ </div>
466
+ <div class="meta-card">
467
+ <span class="meta-label">Build URL</span>
468
+ ${runSummary.run.buildUrl ? `<a href="${escapeHtml(runSummary.run.buildUrl)}">${escapeHtml(runSummary.run.buildUrl)}</a>` : '<span class="meta-value">n/a</span>'}
469
+ </div>
470
+ </div>
471
+ </section>
472
+
473
+ <section class="section">
474
+ <div class="section-header">
475
+ <div>
476
+ <h2>Run overview</h2>
477
+ <p>Top-line results for the current run, including outcome buckets that matter during triage.</p>
478
+ </div>
479
+ </div>
480
+ <div class="stats-grid">
481
+ <article class="stat-card" data-tone="success"><span>Passed</span><strong>${runSummary.counts.passed}</strong></article>
482
+ <article class="stat-card" data-tone="danger"><span>Failed</span><strong>${runSummary.counts.failed}</strong></article>
483
+ <article class="stat-card" data-tone="warning"><span>Timed out</span><strong>${runSummary.counts.timedOut}</strong></article>
484
+ <article class="stat-card" data-tone="accent"><span>Failure groups</span><strong>${failuresSummary.groups.length}</strong></article>
485
+ </div>
486
+ </section>
487
+
488
+ <section class="section">
489
+ <div class="section-header">
490
+ <div>
491
+ <h2>History signals</h2>
492
+ <p>${diff ? 'Comparison against the previous failure snapshot.' : 'No previous failure snapshot was provided for diffing.'}</p>
493
+ </div>
494
+ </div>
495
+ <div class="history-grid">
496
+ <article class="stat-card" data-tone="danger"><span>New failures</span><strong>${runSummary.history.newFailures}</strong></article>
497
+ <article class="stat-card" data-tone="warning"><span>Still failing</span><strong>${runSummary.history.stillFailing}</strong></article>
498
+ <article class="stat-card" data-tone="success"><span>Fixed failures</span><strong>${runSummary.history.fixedFailures}</strong></article>
499
+ </div>
500
+ </section>
501
+
502
+ <section class="section">
503
+ <div class="section-header">
504
+ <div>
505
+ <h2>Artifacts</h2>
506
+ <p>Jump straight to the full HTML report, raw JUnit, or retained test attachments.</p>
507
+ </div>
508
+ </div>
509
+ <div class="artifacts-grid">
510
+ <article class="artifact-card">
511
+ <a href="${escapeHtml(artifactLinks.playwrightReport)}">Merged Playwright report</a>
512
+ <p>Rich timeline, trace, and suite navigation for full debugging context.</p>
513
+ </article>
514
+ <article class="artifact-card">
515
+ <a href="${escapeHtml(artifactLinks.junit)}">JUnit XML</a>
516
+ <p>Machine-readable test results for CI parsers and external dashboards.</p>
517
+ </article>
518
+ <article class="artifact-card">
519
+ <a href="${escapeHtml(artifactLinks.testResults)}">Test results attachments</a>
520
+ <p>Screenshots, videos, traces, and other retained failure evidence.</p>
521
+ </article>
522
+ </div>
523
+ </section>
524
+
525
+ <section class="section">
526
+ <div class="section-header">
527
+ <div>
528
+ <h2>Failure groups</h2>
529
+ <p>Grouped by fingerprint with collapsible drill-down, stack context, attachments, and affected tests.</p>
530
+ </div>
531
+ </div>
532
+ ${failureCards
533
+ ? `<div class="failures-stack">${failureCards}</div>`
534
+ : `<div class="empty-state"><h3>No failing groups</h3><p>This run produced no grouped failures.</p></div>`}
535
+ </section>
536
+ </main>
537
+ </body>
538
+ </html>`;
539
+ }
540
+ //# sourceMappingURL=summary.modern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.modern.js","sourceRoot":"","sources":["../../../src/templates/summary.modern.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
+ export type BuiltInSummaryTheme = 'classic' | 'modern';
1
2
  export type PrivateReporterOptions = {
2
3
  projectName: string;
3
4
  outputDir?: string;
4
5
  summaryTitle?: string;
6
+ summaryTheme?: BuiltInSummaryTheme;
7
+ summaryTemplatePath?: string;
5
8
  enableHistoryDiff?: boolean;
6
9
  ci?: boolean;
7
10
  buildUrlEnv?: string;
@@ -51,6 +54,11 @@ export type RunSummary = {
51
54
  schemaVersion: '1.0';
52
55
  projectName: string;
53
56
  generatedAt: string;
57
+ presentation?: {
58
+ summaryTitle?: string;
59
+ summaryTheme?: BuiltInSummaryTheme;
60
+ summaryTemplatePath?: string;
61
+ };
54
62
  run: {
55
63
  status: 'passed' | 'failed' | 'partial';
56
64
  buildId?: string;
@@ -93,4 +101,18 @@ export type HistoryDiff = {
93
101
  fixedFailures: FailureGroup[];
94
102
  stillFailing: FailureGroup[];
95
103
  };
104
+ export type SummaryArtifactLinks = {
105
+ playwrightReport: string;
106
+ junit: string;
107
+ testResults: string;
108
+ };
109
+ export type SummaryRenderContext = {
110
+ title: string;
111
+ theme: BuiltInSummaryTheme;
112
+ runSummary: RunSummary;
113
+ failuresSummary: FailuresSummary;
114
+ diff?: HistoryDiff;
115
+ artifactLinks: SummaryArtifactLinks;
116
+ };
117
+ export type SummaryRenderer = (context: SummaryRenderContext) => string | Promise<string>;
96
118
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/types/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/types/schema.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export default withPrivateReporter(
14
14
  projectName: 'payments-ui',
15
15
  outputDir: 'artifacts',
16
16
  summaryTitle: 'Payments UI Playwright Summary',
17
+ summaryTheme: 'modern',
17
18
  enableHistoryDiff: true,
18
19
  },
19
20
  );