@arghajit/playwright-pulse-report 0.3.4 → 0.3.5

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.
@@ -4,5 +4,7 @@ export interface PlaywrightPulseReport {
4
4
  results: TestResult[];
5
5
  metadata: {
6
6
  generatedAt: string;
7
+ reportDescription?: string;
8
+ logo?: string;
7
9
  };
8
10
  }
@@ -4,11 +4,13 @@ export declare class PlaywrightPulseReporter implements Reporter {
4
4
  private config;
5
5
  private suite;
6
6
  private results;
7
+ private _pendingTestEnds;
7
8
  private runStartTime;
8
9
  private options;
9
10
  private outputDir;
10
11
  private attachmentsDir;
11
12
  private baseOutputFile;
13
+ private individualReportsSubDir;
12
14
  private isSharded;
13
15
  private shardIndex;
14
16
  private resetOnEachRun;
@@ -21,14 +23,28 @@ export declare class PlaywrightPulseReporter implements Reporter {
21
23
  private getBrowserDetails;
22
24
  private processStep;
23
25
  onTestEnd(test: TestCase, result: PwTestResult): Promise<void>;
26
+ private _processTestEnd;
24
27
  private _getFinalizedResults;
25
28
  onError(error: any): void;
26
29
  private _getEnvDetails;
27
30
  private _writeShardResults;
28
31
  private _mergeShardResults;
29
32
  private _cleanupTemporaryFiles;
33
+ /**
34
+ * Removes all individual run JSON files from the `pulse-results/` directory
35
+ * that were left over from previous test sessions.
36
+ *
37
+ * When `resetOnEachRun: false`, each run writes its own timestamped JSON to
38
+ * `pulse-results/` and then `_mergeAllRunReports()` merges them all. However,
39
+ * if files from *older* sessions accumulate there (e.g. because a previous run
40
+ * was interrupted before the post-merge cleanup, or because the user ran tests
41
+ * on a previous day), `_getFinalizedResults()` de-duplicates by `test.id` and
42
+ * collapses results from both sessions into a single entry — producing a
43
+ * `totalTests` count lower than the actual number of tests that ran.
44
+ *
45
+ * Cleaning up at `onBegin` time guarantees each run starts with a fresh slate.
46
+ */
30
47
  private _ensureDirExists;
31
48
  onEnd(result: FullResult): Promise<void>;
32
- private _mergeAllRunReports;
33
49
  }
34
50
  export default PlaywrightPulseReporter;
@@ -64,19 +64,21 @@ const convertStatus = (status, testCase) => {
64
64
  };
65
65
  const TEMP_SHARD_FILE_PREFIX = ".pulse-shard-results-";
66
66
  const ATTACHMENTS_SUBDIR = "attachments";
67
- const INDIVIDUAL_REPORTS_SUBDIR = "pulse-results";
68
67
  class PlaywrightPulseReporter {
69
68
  constructor(options = {}) {
70
- var _a, _b, _c;
69
+ var _a, _b, _c, _d;
71
70
  this.results = [];
71
+ this._pendingTestEnds = [];
72
72
  this.baseOutputFile = "playwright-pulse-report.json";
73
+ this.individualReportsSubDir = "pulse-results";
73
74
  this.isSharded = false;
74
75
  this.shardIndex = undefined;
75
76
  this.options = options;
76
77
  this.baseOutputFile = (_a = options.outputFile) !== null && _a !== void 0 ? _a : this.baseOutputFile;
77
78
  this.outputDir = (_b = options.outputDir) !== null && _b !== void 0 ? _b : "pulse-report";
79
+ this.individualReportsSubDir = (_c = options.individualReportsSubDir) !== null && _c !== void 0 ? _c : "pulse-results";
78
80
  this.attachmentsDir = path.join(this.outputDir, ATTACHMENTS_SUBDIR);
79
- this.resetOnEachRun = (_c = options.resetOnEachRun) !== null && _c !== void 0 ? _c : true;
81
+ this.resetOnEachRun = (_d = options.resetOnEachRun) !== null && _d !== void 0 ? _d : true;
80
82
  }
81
83
  printsToStdio() {
82
84
  return this.shardIndex === undefined || this.shardIndex === 0;
@@ -99,12 +101,12 @@ class PlaywrightPulseReporter {
99
101
  ? this.config.shard.current - 1
100
102
  : undefined;
101
103
  this._ensureDirExists(this.outputDir)
102
- .then(() => {
104
+ .then(async () => {
103
105
  if (this.printsToStdio()) {
104
106
  console.log(`PlaywrightPulseReporter: Starting test run with ${suite.allTests().length} tests${this.isSharded ? ` across ${totalShards} shards` : ""}. Pulse outputting to ${this.outputDir}`);
105
107
  if (this.shardIndex === undefined ||
106
108
  (this.isSharded && this.shardIndex === 0)) {
107
- return this._cleanupTemporaryFiles();
109
+ await this._cleanupTemporaryFiles();
108
110
  }
109
111
  }
110
112
  })
@@ -120,19 +122,19 @@ class PlaywrightPulseReporter {
120
122
  extractCodeSnippet(filePath, targetLine, targetColumn) {
121
123
  var _a;
122
124
  try {
123
- const fsSync = require('fs');
125
+ const fsSync = require("fs");
124
126
  if (!fsSync.existsSync(filePath)) {
125
- return '';
127
+ return "";
126
128
  }
127
- const content = fsSync.readFileSync(filePath, 'utf8');
128
- const lines = content.split('\n');
129
+ const content = fsSync.readFileSync(filePath, "utf8");
130
+ const lines = content.split("\n");
129
131
  if (targetLine < 1 || targetLine > lines.length) {
130
- return '';
132
+ return "";
131
133
  }
132
- return ((_a = lines[targetLine - 1]) === null || _a === void 0 ? void 0 : _a.trim()) || '';
134
+ return ((_a = lines[targetLine - 1]) === null || _a === void 0 ? void 0 : _a.trim()) || "";
133
135
  }
134
136
  catch (e) {
135
- return '';
137
+ return "";
136
138
  }
137
139
  }
138
140
  getBrowserDetails(test) {
@@ -199,7 +201,7 @@ class PlaywrightPulseReporter {
199
201
  const startTime = new Date(step.startTime);
200
202
  const endTime = new Date(startTime.getTime() + Math.max(0, duration));
201
203
  let codeLocation = "";
202
- let codeSnippet = '';
204
+ let codeSnippet = "";
203
205
  if (step.location) {
204
206
  codeLocation = `${path.relative(this.config.rootDir, step.location.file)}:${step.location.line}:${step.location.column}`;
205
207
  codeSnippet = this.extractCodeSnippet(step.location.file, step.location.line, step.location.column);
@@ -226,9 +228,19 @@ class PlaywrightPulseReporter {
226
228
  };
227
229
  }
228
230
  async onTestEnd(test, result) {
231
+ // Track this async call so onEnd() can wait for all in-flight processing
232
+ // before it reads this.results. This prevents the race condition where
233
+ // onEnd() fires before an interrupted test's onTestEnd() has finished
234
+ // its async attachment I/O and pushed to this.results.
235
+ const p = this._processTestEnd(test, result);
236
+ this._pendingTestEnds.push(p);
237
+ await p;
238
+ }
239
+ async _processTestEnd(test, result) {
229
240
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
230
241
  const project = (_a = test.parent) === null || _a === void 0 ? void 0 : _a.project();
231
242
  const browserDetails = this.getBrowserDetails(test);
243
+ const uniqueTestId = `${(project === null || project === void 0 ? void 0 : project.name) || "default"}-${test.id}`;
232
244
  // Captured outcome from Playwright
233
245
  const outcome = test.outcome();
234
246
  // Calculate final status based on the last result (Last-Run-Wins)
@@ -239,15 +251,15 @@ class PlaywrightPulseReporter {
239
251
  // Existing behavior: fail if flaky (implied by user request "existing status field should remain failed")
240
252
  // If outcome is flaky, status should be 'failed' to indicate initial failure, but final_status is 'passed'
241
253
  let testStatus = finalStatus;
242
- if (outcome === 'flaky') {
243
- testStatus = 'flaky';
254
+ if (outcome === "flaky") {
255
+ testStatus = "flaky";
244
256
  }
245
257
  const startTime = new Date(result.startTime);
246
258
  const endTime = new Date(startTime.getTime() + result.duration);
247
259
  const processAllSteps = async (steps) => {
248
260
  let processed = [];
249
261
  for (const step of steps) {
250
- const processedStep = await this.processStep(step, test.id, browserDetails, test);
262
+ const processedStep = await this.processStep(step, uniqueTestId, browserDetails, test);
251
263
  processed.push(processedStep);
252
264
  if (step.steps && step.steps.length > 0) {
253
265
  processedStep.steps = await processAllSteps(step.steps);
@@ -255,7 +267,7 @@ class PlaywrightPulseReporter {
255
267
  }
256
268
  return processed;
257
269
  };
258
- let codeSnippet = '';
270
+ let codeSnippet = "";
259
271
  if (((_b = test.location) === null || _b === void 0 ? void 0 : _b.file) && ((_c = test.location) === null || _c === void 0 ? void 0 : _c.line) && ((_d = test.location) === null || _d === void 0 ? void 0 : _d.column)) {
260
272
  codeSnippet = this.extractCodeSnippet(test.location.file, test.location.line, test.location.column);
261
273
  }
@@ -284,14 +296,14 @@ class PlaywrightPulseReporter {
284
296
  : undefined,
285
297
  };
286
298
  const pulseResult = {
287
- id: test.id,
299
+ id: uniqueTestId,
288
300
  runId: "TBD",
289
301
  describe: describeBlockName,
290
302
  spec_file: specFileName,
291
303
  name: test.titlePath().join(" > "),
292
304
  suiteName: (project === null || project === void 0 ? void 0 : project.name) || ((_g = this.config.projects[0]) === null || _g === void 0 ? void 0 : _g.name) || "Default Suite",
293
305
  status: testStatus,
294
- outcome: outcome === 'flaky' ? outcome : undefined, // Only Include if flaky
306
+ outcome: outcome === "flaky" ? outcome : undefined, // Only Include if flaky
295
307
  final_status: finalStatus, // New Field
296
308
  duration: result.duration,
297
309
  startTime: startTime,
@@ -318,7 +330,7 @@ class PlaywrightPulseReporter {
318
330
  if (!attachment.path)
319
331
  continue;
320
332
  try {
321
- const testSubfolder = test.id.replace(/[^a-zA-Z0-9_-]/g, "_");
333
+ const testSubfolder = uniqueTestId.replace(/[^a-zA-Z0-9_-]/g, "_");
322
334
  const safeAttachmentName = path
323
335
  .basename(attachment.path)
324
336
  .replace(/[^a-zA-Z0-9_.-]/g, "_");
@@ -363,21 +375,30 @@ class PlaywrightPulseReporter {
363
375
  }
364
376
  const finalResults = [];
365
377
  for (const [testId, attempts] of resultsMap.entries()) {
366
- attempts.sort((a, b) => a.retries - b.retries);
378
+ // Sort by retry count (ASC) then timestamp (DESC) to ensure stable resolution
379
+ attempts.sort((a, b) => {
380
+ if (a.retries !== b.retries)
381
+ return a.retries - b.retries;
382
+ return (new Date(b.startTime).getTime() - new Date(a.startTime).getTime());
383
+ });
367
384
  const firstAttempt = attempts[0];
368
385
  const retryAttempts = attempts.slice(1);
369
386
  // Only populate retryHistory if there were actual failures that triggered retries
370
387
  // If all attempts passed, we don't need to show retry history
371
- const hasActualRetries = retryAttempts.length > 0 && retryAttempts.some(attempt => attempt.status === 'failed' || attempt.status === 'flaky' || firstAttempt.status === 'failed' || firstAttempt.status === 'flaky');
388
+ const hasActualRetries = retryAttempts.length > 0 &&
389
+ retryAttempts.some((attempt) => attempt.status === "failed" ||
390
+ attempt.status === "flaky" ||
391
+ firstAttempt.status === "failed" ||
392
+ firstAttempt.status === "flaky");
372
393
  if (hasActualRetries) {
373
394
  firstAttempt.retryHistory = retryAttempts;
374
395
  // Calculate final status and outcome from the last attempt if retries exist
375
396
  const lastAttempt = attempts[attempts.length - 1];
376
397
  firstAttempt.final_status = lastAttempt.status;
377
398
  // If the last attempt was flaky, ensure outcome is set on the main result
378
- if (lastAttempt.outcome === 'flaky' || lastAttempt.status === 'flaky') {
379
- firstAttempt.outcome = 'flaky';
380
- firstAttempt.status = 'flaky';
399
+ if (lastAttempt.outcome === "flaky" || lastAttempt.status === "flaky") {
400
+ firstAttempt.outcome = "flaky";
401
+ firstAttempt.status = "flaky";
381
402
  }
382
403
  }
383
404
  else {
@@ -444,10 +465,10 @@ class PlaywrightPulseReporter {
444
465
  }
445
466
  const finalResultsList = this._getFinalizedResults(allShardProcessedResults);
446
467
  finalResultsList.forEach((r) => (r.runId = finalRunData.id));
447
- finalRunData.passed = finalResultsList.filter((r) => r.status === "passed").length;
448
- finalRunData.failed = finalResultsList.filter((r) => r.status === "failed").length;
449
- finalRunData.skipped = finalResultsList.filter((r) => r.status === "skipped").length;
450
- finalRunData.flaky = finalResultsList.filter((r) => r.status === "flaky").length;
468
+ finalRunData.passed = finalResultsList.filter((r) => (r.final_status || r.status) === "passed").length;
469
+ finalRunData.failed = finalResultsList.filter((r) => (r.final_status || r.status) === "failed").length;
470
+ finalRunData.skipped = finalResultsList.filter((r) => (r.final_status || r.status) === "skipped").length;
471
+ finalRunData.flaky = finalResultsList.filter((r) => (r.final_status || r.status) === "flaky").length;
451
472
  finalRunData.totalTests = finalResultsList.length;
452
473
  const reviveDates = (key, value) => {
453
474
  const isoDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/;
@@ -461,7 +482,11 @@ class PlaywrightPulseReporter {
461
482
  return {
462
483
  run: finalRunData,
463
484
  results: properlyTypedResults,
464
- metadata: { generatedAt: new Date().toISOString() },
485
+ metadata: {
486
+ generatedAt: new Date().toISOString(),
487
+ reportDescription: this.options.reportDescription,
488
+ logo: this.options.logo,
489
+ },
465
490
  };
466
491
  }
467
492
  async _cleanupTemporaryFiles() {
@@ -478,6 +503,20 @@ class PlaywrightPulseReporter {
478
503
  }
479
504
  }
480
505
  }
506
+ /**
507
+ * Removes all individual run JSON files from the `pulse-results/` directory
508
+ * that were left over from previous test sessions.
509
+ *
510
+ * When `resetOnEachRun: false`, each run writes its own timestamped JSON to
511
+ * `pulse-results/` and then `_mergeAllRunReports()` merges them all. However,
512
+ * if files from *older* sessions accumulate there (e.g. because a previous run
513
+ * was interrupted before the post-merge cleanup, or because the user ran tests
514
+ * on a previous day), `_getFinalizedResults()` de-duplicates by `test.id` and
515
+ * collapses results from both sessions into a single entry — producing a
516
+ * `totalTests` count lower than the actual number of tests that ran.
517
+ *
518
+ * Cleaning up at `onBegin` time guarantees each run starts with a fresh slate.
519
+ */
481
520
  async _ensureDirExists(dirPath) {
482
521
  try {
483
522
  await fs.mkdir(dirPath, { recursive: true });
@@ -490,6 +529,11 @@ class PlaywrightPulseReporter {
490
529
  }
491
530
  }
492
531
  async onEnd(result) {
532
+ // Wait for ALL in-flight onTestEnd calls to finish before reading this.results.
533
+ // This guards against Playwright calling onEnd() concurrently with (or just
534
+ // before) the last onTestEnd() finishing its async attachment I/O — which
535
+ // would cause that test to be silently dropped from the report.
536
+ await Promise.allSettled(this._pendingTestEnds);
493
537
  if (this.shardIndex !== undefined) {
494
538
  await this._writeShardResults();
495
539
  return;
@@ -505,10 +549,10 @@ class PlaywrightPulseReporter {
505
549
  timestamp: new Date(this.runStartTime),
506
550
  // Use the length of the de-duplicated array for all counts
507
551
  totalTests: finalResults.length,
508
- passed: finalResults.filter((r) => r.status === "passed").length,
509
- failed: finalResults.filter((r) => r.status === "failed").length,
510
- skipped: finalResults.filter((r) => r.status === "skipped").length,
511
- flaky: finalResults.filter((r) => r.status === "flaky").length,
552
+ passed: finalResults.filter((r) => (r.final_status || r.status) === "passed").length,
553
+ failed: finalResults.filter((r) => (r.final_status || r.status) === "failed").length,
554
+ skipped: finalResults.filter((r) => (r.final_status || r.status) === "skipped").length,
555
+ flaky: finalResults.filter((r) => (r.final_status || r.status) === "flaky").length,
512
556
  duration,
513
557
  environment: environmentDetails,
514
558
  };
@@ -523,7 +567,11 @@ class PlaywrightPulseReporter {
523
567
  run: runData,
524
568
  // Use the de-duplicated results
525
569
  results: finalResults,
526
- metadata: { generatedAt: new Date().toISOString() },
570
+ metadata: {
571
+ generatedAt: new Date().toISOString(),
572
+ reportDescription: this.options.reportDescription,
573
+ logo: this.options.logo,
574
+ },
527
575
  };
528
576
  }
529
577
  if (!finalReport) {
@@ -552,108 +600,28 @@ class PlaywrightPulseReporter {
552
600
  }
553
601
  else {
554
602
  // Logic for appending/merging reports
555
- const pulseResultsDir = path.join(this.outputDir, INDIVIDUAL_REPORTS_SUBDIR);
556
- const individualReportPath = path.join(pulseResultsDir, `playwright-pulse-report-${Date.now()}.json`);
603
+ const pulseResultsDir = path.join(this.outputDir, this.individualReportsSubDir);
604
+ const shardPrefix = this.baseOutputFile.replace(".json", "-");
605
+ const individualReportPath = path.join(pulseResultsDir, `${shardPrefix}${Date.now()}.json`);
557
606
  try {
558
607
  await this._ensureDirExists(pulseResultsDir);
559
608
  await fs.writeFile(individualReportPath, JSON.stringify(finalReport, jsonReplacer, 2));
560
609
  if (this.printsToStdio()) {
561
610
  console.log(`PlaywrightPulseReporter: Individual run report for merging written to ${individualReportPath}`);
562
611
  }
563
- await this._mergeAllRunReports();
612
+ // DEFERRED MERGING:
613
+ // We do not call _mergeAllRunReports() here anymore when resetOnEachRun is false.
614
+ // The individual JSON files in pulse-results/ will be collected and merged
615
+ // into the main JSON when the user next runs one of the report generator commands.
564
616
  }
565
617
  catch (error) {
566
- console.error(`Pulse Reporter: Failed to write or merge report. Error: ${error.message}`);
618
+ console.error(`Pulse Reporter: Failed to write report. Error: ${error.message}`);
567
619
  }
568
620
  }
569
621
  if (this.isSharded) {
570
622
  await this._cleanupTemporaryFiles();
571
623
  }
572
624
  }
573
- async _mergeAllRunReports() {
574
- const pulseResultsDir = path.join(this.outputDir, INDIVIDUAL_REPORTS_SUBDIR);
575
- const finalOutputPath = path.join(this.outputDir, this.baseOutputFile);
576
- let reportFiles;
577
- try {
578
- const allFiles = await fs.readdir(pulseResultsDir);
579
- reportFiles = allFiles.filter((file) => file.startsWith("playwright-pulse-report-") && file.endsWith(".json"));
580
- }
581
- catch (error) {
582
- if (error.code === "ENOENT") {
583
- if (this.printsToStdio()) {
584
- console.log(`Pulse Reporter: No individual reports directory found at ${pulseResultsDir}. Skipping merge.`);
585
- }
586
- return;
587
- }
588
- console.error(`Pulse Reporter: Error reading report directory ${pulseResultsDir}:`, error);
589
- return;
590
- }
591
- if (reportFiles.length === 0) {
592
- if (this.printsToStdio()) {
593
- console.log("Pulse Reporter: No matching JSON report files found to merge.");
594
- }
595
- return;
596
- }
597
- const allResultsFromAllFiles = [];
598
- let latestTimestamp = new Date(0);
599
- let lastRunEnvironment = undefined;
600
- let totalDuration = 0;
601
- for (const file of reportFiles) {
602
- const filePath = path.join(pulseResultsDir, file);
603
- try {
604
- const content = await fs.readFile(filePath, "utf-8");
605
- const json = JSON.parse(content);
606
- if (json.run) {
607
- const runTimestamp = new Date(json.run.timestamp);
608
- if (runTimestamp > latestTimestamp) {
609
- latestTimestamp = runTimestamp;
610
- lastRunEnvironment = json.run.environment || undefined;
611
- }
612
- }
613
- if (json.results) {
614
- allResultsFromAllFiles.push(...json.results);
615
- }
616
- }
617
- catch (err) {
618
- console.warn(`Pulse Reporter: Could not parse report file ${filePath}. Skipping. Error: ${err.message}`);
619
- }
620
- }
621
- // De-duplicate the results from ALL merged files using the helper function
622
- const finalMergedResults = this._getFinalizedResults(allResultsFromAllFiles);
623
- // Sum the duration from the final, de-duplicated list of tests
624
- totalDuration = finalMergedResults.reduce((acc, r) => acc + (r.duration || 0), 0);
625
- const combinedRun = {
626
- id: `merged-${Date.now()}`,
627
- timestamp: latestTimestamp,
628
- environment: lastRunEnvironment,
629
- // Recalculate counts based on the truly final, de-duplicated list
630
- totalTests: finalMergedResults.length,
631
- passed: finalMergedResults.filter((r) => r.status === "passed").length,
632
- failed: finalMergedResults.filter((r) => r.status === "failed").length,
633
- skipped: finalMergedResults.filter((r) => r.status === "skipped").length,
634
- duration: totalDuration,
635
- };
636
- const finalReport = {
637
- run: combinedRun,
638
- results: finalMergedResults, // Use the de-duplicated list
639
- metadata: {
640
- generatedAt: new Date().toISOString(),
641
- },
642
- };
643
- try {
644
- await fs.writeFile(finalOutputPath, JSON.stringify(finalReport, (key, value) => {
645
- if (value instanceof Date)
646
- return value.toISOString();
647
- return value;
648
- }, 2));
649
- if (this.printsToStdio()) {
650
- console.log(`PlaywrightPulseReporter: ✅ Merged report with ${finalMergedResults.length} total results saved to ${finalOutputPath}`);
651
- }
652
- }
653
- catch (err) {
654
- console.error(`Pulse Reporter: Failed to write final merged report to ${finalOutputPath}. Error: ${err.message}`);
655
- }
656
- }
657
625
  }
658
626
  exports.PlaywrightPulseReporter = PlaywrightPulseReporter;
659
627
  exports.default = PlaywrightPulseReporter;
@@ -0,0 +1 @@
1
+ {"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/playwright-core/types/protocol.d.ts","../../node_modules/playwright-core/types/structs.d.ts","../../node_modules/playwright-core/types/types.d.ts","../../node_modules/playwright/types/test.d.ts","../../node_modules/playwright/types/testreporter.d.ts","../../node_modules/@playwright/test/reporter.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/lucide-react/dist/lucide-react.d.ts","../../src/types/index.ts","../../src/lib/report-types.ts","../../src/reporter/playwright-pulse-reporter.ts","../../node_modules/@types/caseless/index.d.ts","../../node_modules/@types/d3-array/index.d.ts","../../node_modules/@types/d3-color/index.d.ts","../../node_modules/@types/d3-ease/index.d.ts","../../node_modules/@types/d3-interpolate/index.d.ts","../../node_modules/@types/d3-path/index.d.ts","../../node_modules/@types/d3-time/index.d.ts","../../node_modules/@types/d3-scale/index.d.ts","../../node_modules/@types/d3-shape/index.d.ts","../../node_modules/@types/d3-timer/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/long/index.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/file.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/filereader.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/request/node_modules/form-data/index.d.ts","../../node_modules/@types/tough-cookie/index.d.ts","../../node_modules/@types/request/index.d.ts","../../node_modules/@types/shimmer/index.d.ts","../../node_modules/@types/triple-beam/index.d.ts","../../node_modules/@types/yauzl/index.d.ts"],"fileIdsList":[[83,110,153],[110,153],[95,110,153],[99,110,153],[98,110,153],[110,150,153],[110,152,153],[153],[110,153,158,187],[110,153,154,159,165,166,173,184,195],[110,153,154,155,165,173],[105,106,107,110,153],[110,153,156,196],[110,153,157,158,166,174],[110,153,158,184,192],[110,153,159,161,165,173],[110,152,153,160],[110,153,161,162],[110,153,165],[110,153,163,165],[110,152,153,165],[110,153,165,166,167,184,195],[110,153,165,166,167,180,184,187],[110,148,153,200],[110,153,161,165,168,173,184,195],[110,153,165,166,168,169,173,184,192,195],[110,153,168,170,184,192,195],[108,109,110,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201],[110,153,165,171],[110,153,172,195,200],[110,153,161,165,173,184],[110,153,174],[110,153,175],[110,152,153,176],[110,150,151,152,153,154,155,156,157,158,159,160,161,162,163,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201],[110,153,178],[110,153,179],[110,153,165,180,181],[110,153,180,182,196,198],[110,153,165,184,185,186,187],[110,153,184,186],[110,153,184,185],[110,153,187],[110,153,188],[110,150,153,184],[110,153,165,190,191],[110,153,190,191],[110,153,158,173,184,192],[110,153,193],[110,153,173,194],[110,153,168,179,195],[110,153,158,196],[110,153,184,197],[110,153,172,198],[110,153,199],[110,153,158,165,167,176,184,195,198,200],[110,153,184,201],[88,110,153],[85,86,87,110,153],[93,110,153,166,168,170,173,184,195,202,204,205],[110,153,168,184,202],[110,153,165,184,202],[81,110,153],[79,80,110,153,154,166,184],[82,110,153],[110,120,124,153,195],[110,120,153,184,195],[110,115,153],[110,117,120,153,192,195],[110,153,173,192],[110,153,202],[110,115,153,202],[110,117,120,153,173,195],[110,112,113,116,119,153,165,184,195],[110,120,127,153],[110,112,118,153],[110,120,141,142,153],[110,116,120,153,187,195,202],[110,141,153,202],[110,114,115,153,202],[110,120,153],[110,114,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,142,143,144,145,146,147,153],[110,120,135,153],[110,120,127,128,153],[110,118,120,128,129,153],[110,119,153],[110,112,115,120,153],[110,120,124,128,129,153],[110,124,153],[110,118,120,123,153,195],[110,112,117,120,127,153],[110,153,184],[110,115,120,141,153,200,202],[90,110,153],[84,90,91,110,153,167,175],[89,110,153]],"fileInfos":[{"version":"e41c290ef7dd7dab3493e6cbe5909e0148edf4a8dad0271be08edec368a0f7b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"e12a46ce14b817d4c9e6b2b478956452330bf00c9801b79de46f7a1815b5bd40","impliedFormat":1},{"version":"4fd3f3422b2d2a3dfd5cdd0f387b3a8ec45f006c6ea896a4cb41264c2100bb2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"62bb211266ee48b2d0edf0d8d1b191f0c24fc379a82bd4c1692a082c540bc6b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"f1e2a172204962276504466a6393426d2ca9c54894b1ad0a6c9dad867a65f876","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"bab26767638ab3557de12c900f0b91f710c7dc40ee9793d5a27d32c04f0bf646","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"61d6a2092f48af66dbfb220e31eea8b10bc02b6932d6e529005fd2d7b3281290","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ef72620b8ed8555b1a571fba0573059b427c72c0f8fe0af12117c01deaa62aa","impliedFormat":1},{"version":"32727845ab5bd8a9ef3e4844c567c09f6d418fcf0f90d381c00652a6f23e7f6e","impliedFormat":1},{"version":"317522008ac4f9a976630cb65fd5b072d7aea6da0a93ec0cfe0c0b0336337ee2","impliedFormat":1},{"version":"e241a236efd22fd53f0cad74d812bece9bc1691bf3890e95705a6e3b73e2f98e","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3cd566b0923109e83f1fe321c59266003ba22668d73195cf53e2eab3a71746f","impliedFormat":1},{"version":"04392f8e190f9e51301f73d17bbb34babd54858c1efc932d2193962f66dabae2","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"65ff5a0aefd7817a03c1ad04fee85c9cdd3ec415cc3c9efec85d8008d4d5e4ee","impliedFormat":1},{"version":"b89c2ddec6bd955e8721d41e24ca667de06882338d88b183c2cdc1f41f4c5a34","affectsGlobalScope":true,"impliedFormat":1},{"version":"6717dad91e44ad22d68f1fc0db74e5eb5398c2c06a2943bf06d3a168e8b1ba45","impliedFormat":99},{"version":"83aa54434d56363ddc949b3af4dd9eccd2fa9db2ecbae5c4a12b6984f66a630c","signature":"9f468e28df7bf40a346ac2cdd8b64e9f10cf2fbec522b58b92fef46b17c42720"},{"version":"331a971aff7a6da8693ab1ab38961996fecd854f6a639d430c81f8207dc92e96","signature":"14e0d6b6ab7688c7a2b60eb9c844d911175dd49a0e950b19863a5e09b8f9f6bd"},{"version":"c43cfd76af4b5b3dbe5d13d8f3e4ff975093fc952e444f1ad7d2263160c04b25","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2174e20517788d2a1379fc0aaacd87899a70f9e0197b4295edabfe75c4db03d8","impliedFormat":1},{"version":"e0c868a08451c879984ccf4d4e3c1240b3be15af8988d230214977a3a3dad4ce","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"bb220eaac1677e2ad82ac4e7fd3e609a0c7b6f2d6d9c673a35068c97f9fcd5cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"0e60e0cbf2283adfd5a15430ae548cd2f662d581b5da6ecd98220203e7067c70","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fd06258805d26c72f5997e07a23155d322d5f05387adb3744a791fe6a0b042d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"a72ffc815104fb5c075106ebca459b2d55d07862a773768fce89efc621b3964b","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"d674383111e06b6741c4ad2db962131b5b0fa4d0294b998566c635e86195a453","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"f77d9188e41291acf14f476e931972460a303e1952538f9546e7b370cb8d0d20","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"c4a806152acbef81593f96cae6f2b04784d776457d97adbe2694478b243fcf03","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"c60db41f7bee80fb80c0b12819f5e465c8c8b465578da43e36d04f4a4646f57d","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"235bfb54b4869c26f7e98e3d1f68dbfc85acf4cf5c38a4444a006fbf74a8a43d","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"bb715efb4857eb94539eafb420352105a0cff40746837c5140bf6b035dd220ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"fdedf82878e4c744bc2a1c1e802ae407d63474da51f14a54babe039018e53d8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"27d8987fd22d92efe6560cf0ce11767bf089903ffe26047727debfd1f3bf438b","affectsGlobalScope":true,"impliedFormat":1},{"version":"578d8bb6dcb2a1c03c4c3f8eb71abc9677e1a5c788b7f24848e3138ce17f3400","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"e91ad231af87f864b3f07cd0e39b1cf6c133988156f087c1c3ccb0a5491c9115","impliedFormat":1},{"version":"03c258e060b7da220973f84b89615e4e9850e9b5d30b3a8e4840b3e3268ae8eb","impliedFormat":1},{"version":"319c37263037e8d9481a3dc7eadf6afa6a5f5c002189ebe28776ac1a62a38e15","impliedFormat":1},{"version":"837f5c12e3e94ee97aca37aa2a50ede521e5887fb7fa89330f5625b70597e116","impliedFormat":1},{"version":"908217c4f2244ec402b73533ebfcc46d6dcd34fc1c807ff403d7f98702abb3bc","impliedFormat":1},{"version":"74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185","impliedFormat":1}],"root":[90,92],"options":{"allowJs":true,"declaration":true,"declarationDir":"./","emitDeclarationOnly":false,"esModuleInterop":true,"jsx":2,"module":1,"outDir":"./","skipLibCheck":true,"strict":true,"target":3},"referencedMap":[[84,1],[93,2],[94,2],[95,2],[96,2],[97,3],[98,2],[100,4],[101,5],[99,2],[102,2],[103,2],[104,2],[150,6],[151,6],[152,7],[110,8],[153,9],[154,10],[155,11],[105,2],[108,12],[106,2],[107,2],[156,13],[157,14],[158,15],[159,16],[160,17],[161,18],[162,18],[164,19],[163,20],[165,21],[166,22],[167,23],[149,24],[109,2],[168,25],[169,26],[170,27],[202,28],[171,29],[172,30],[173,31],[174,32],[175,33],[176,34],[177,35],[178,36],[179,37],[180,38],[181,38],[182,39],[183,2],[184,40],[186,41],[185,42],[187,43],[188,44],[189,45],[190,46],[191,47],[192,48],[193,49],[194,50],[195,51],[196,52],[197,53],[198,54],[199,55],[200,56],[201,57],[87,2],[203,58],[85,2],[88,59],[206,60],[204,61],[207,2],[205,2],[208,2],[209,62],[111,2],[86,2],[89,58],[79,2],[80,63],[81,64],[82,63],[83,65],[77,2],[78,2],[13,2],[14,2],[16,2],[15,2],[2,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[3,2],[25,2],[26,2],[4,2],[27,2],[31,2],[28,2],[29,2],[30,2],[32,2],[33,2],[34,2],[5,2],[35,2],[36,2],[37,2],[38,2],[6,2],[42,2],[39,2],[40,2],[41,2],[43,2],[7,2],[44,2],[49,2],[50,2],[45,2],[46,2],[47,2],[48,2],[8,2],[54,2],[51,2],[52,2],[53,2],[55,2],[9,2],[56,2],[57,2],[58,2],[60,2],[59,2],[61,2],[62,2],[10,2],[63,2],[64,2],[65,2],[11,2],[66,2],[67,2],[68,2],[69,2],[70,2],[1,2],[71,2],[72,2],[12,2],[75,2],[74,2],[73,2],[76,2],[127,66],[137,67],[126,66],[147,68],[118,69],[117,70],[146,71],[140,72],[145,73],[120,74],[134,75],[119,76],[143,77],[115,78],[114,71],[144,79],[116,80],[121,81],[122,2],[125,81],[112,2],[148,82],[138,83],[129,84],[130,85],[132,86],[128,87],[131,88],[141,71],[123,89],[124,90],[133,91],[113,92],[136,83],[135,81],[139,2],[142,93],[91,94],[92,95],[90,96]],"version":"5.7.3"}
@@ -1,4 +1,3 @@
1
- import type { LucideIcon } from "lucide-react";
2
1
  export type TestStatus = "passed" | "failed" | "skipped" | "expected-failure" | "unexpected-success" | "explicitly-skipped" | "flaky";
3
2
  export interface TestStep {
4
3
  id: string;
@@ -81,17 +80,56 @@ export interface TrendDataPoint {
81
80
  skipped: number;
82
81
  flaky?: number;
83
82
  }
84
- export interface SummaryMetric {
85
- label: string;
86
- value: string | number;
87
- icon: LucideIcon;
88
- color?: string;
89
- }
90
83
  export interface PlaywrightPulseReporterOptions {
84
+ /**
85
+ * The name of the output JSON file. Kindly do not change.
86
+ * @default "playwright-pulse-report.json"
87
+ */
91
88
  outputFile?: string;
89
+ /**
90
+ * The directory where the report files will be generated.
91
+ *
92
+ * Mostly useful while using sharding
93
+ *
94
+ * @default "pulse-report"
95
+ */
92
96
  outputDir?: string;
97
+ /**
98
+ * Whether to embed images directly as base64 strings in the report.
99
+ * @default false
100
+ */
93
101
  base64Images?: boolean;
102
+ /**
103
+ * Whether to reset the output directory before each run.
104
+ *
105
+ * Mostly useful while running multiple test suites in a single run with `&&` operator.
106
+ *
107
+ * example: `npx playwright test test1.spec.ts && npx playwright test test2.spec.ts`
108
+ *
109
+ * If `resetOnEachRun` is set to `false`, then the report of `test2.spec.ts` will be merged with `test1.spec.ts` report.
110
+ *
111
+ * @default true
112
+ */
94
113
  resetOnEachRun?: boolean;
114
+ /**
115
+ * A custom description to embed or display in the report.
116
+ *
117
+ * If not added, the component will not appear in the html reports
118
+ */
119
+ reportDescription?: string;
120
+ /**
121
+ * Path to a custom logo image file to use in the report, which will be displayed in the header of the html report's logo and favicon.
122
+ *
123
+ * If not added, the default logo will be used.
124
+ */
125
+ logo?: string;
126
+ /**
127
+ * The subdirectory within `outputDir` where individual run reports are stored.
128
+ * Only used when `resetOnEachRun` is `false`.
129
+ *
130
+ * @default "pulse-results"
131
+ */
132
+ individualReportsSubDir?: string;
95
133
  }
96
134
  export interface EnvDetails {
97
135
  host: string;