@empiricalrun/playwright-utils 0.62.0 → 0.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/api-worker-client.d.ts +0 -13
  3. package/dist/api-worker-client.d.ts.map +1 -1
  4. package/dist/api-worker-client.js +0 -15
  5. package/dist/auth/google.d.ts.map +1 -1
  6. package/dist/auth/google.js +0 -1
  7. package/dist/auth/index.d.ts.map +1 -1
  8. package/dist/auth/index.js +0 -9
  9. package/dist/config/index.d.ts.map +1 -1
  10. package/dist/config/index.js +0 -8
  11. package/dist/generated/api-worker-openapi.d.ts +2773 -1298
  12. package/dist/generated/api-worker-openapi.d.ts.map +1 -1
  13. package/dist/overlay-tests/cache.spec.js +0 -10
  14. package/dist/overlay-tests/click.spec.js +0 -18
  15. package/dist/playwright-extensions.d.ts.map +1 -1
  16. package/dist/playwright-extensions.js +0 -1
  17. package/dist/reporter/attachment-cleanup-test-reporter.d.ts +0 -6
  18. package/dist/reporter/attachment-cleanup-test-reporter.d.ts.map +1 -1
  19. package/dist/reporter/attachment-cleanup-test-reporter.js +0 -6
  20. package/dist/reporter/attachment-cleanup.d.ts +0 -33
  21. package/dist/reporter/attachment-cleanup.d.ts.map +1 -1
  22. package/dist/reporter/attachment-cleanup.js +2 -51
  23. package/dist/reporter/empirical-reporter.d.ts.map +1 -1
  24. package/dist/reporter/empirical-reporter.js +0 -9
  25. package/dist/reporter/harness.d.ts +0 -62
  26. package/dist/reporter/harness.d.ts.map +1 -1
  27. package/dist/reporter/harness.js +1 -53
  28. package/dist/reporter/ibr-utils.d.ts +0 -5
  29. package/dist/reporter/ibr-utils.d.ts.map +1 -1
  30. package/dist/reporter/ibr-utils.js +0 -5
  31. package/dist/reporter/incremental-blob-reporter.d.ts +0 -17
  32. package/dist/reporter/incremental-blob-reporter.d.ts.map +1 -1
  33. package/dist/reporter/incremental-blob-reporter.js +5 -35
  34. package/dist/reporter/lifecycle-events.d.ts.map +1 -1
  35. package/dist/reporter/lifecycle-events.js +0 -9
  36. package/dist/reporter/parity-utils.d.ts +0 -30
  37. package/dist/reporter/parity-utils.d.ts.map +1 -1
  38. package/dist/reporter/parity-utils.js +4 -28
  39. package/dist/reporter/reporter-state.d.ts +0 -12
  40. package/dist/reporter/reporter-state.d.ts.map +1 -1
  41. package/dist/reporter/reporter-state.js +0 -12
  42. package/dist/reporter/test-case-sync.d.ts.map +1 -1
  43. package/dist/reporter/test-case-sync.js +0 -12
  44. package/dist/reporter/uploader.d.ts.map +1 -1
  45. package/dist/reporter/uploader.js +0 -6
  46. package/dist/reporter/util.d.ts +0 -33
  47. package/dist/reporter/util.d.ts.map +1 -1
  48. package/dist/reporter/util.js +0 -37
  49. package/dist/telemetry.d.ts.map +1 -1
  50. package/dist/telemetry.js +1 -10
  51. package/dist/test/coverage.d.ts.map +1 -1
  52. package/dist/test/coverage.js +1 -3
  53. package/dist/test/expect/visual.d.ts.map +1 -1
  54. package/dist/test/expect/visual.js +1 -9
  55. package/dist/test/index.d.ts.map +1 -1
  56. package/dist/test/index.js +4 -21
  57. package/dist/test/scripts/agent-capabilities.js +2 -2
  58. package/dist/test/scripts/index.d.ts +2 -2
  59. package/dist/test/scripts/index.d.ts.map +1 -1
  60. package/dist/test/scripts/index.js +3 -16
  61. package/dist/test/scripts/pw-locator-patch/actions/click.d.ts.map +1 -0
  62. package/dist/test/scripts/pw-locator-patch/{highlight → actions}/click.js +0 -6
  63. package/dist/test/scripts/pw-locator-patch/actions/hover.d.ts.map +1 -0
  64. package/dist/test/scripts/pw-locator-patch/{highlight → actions}/hover.js +0 -3
  65. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/cache.d.ts.map +1 -1
  66. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/cache.js +0 -7
  67. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.d.ts.map +1 -1
  68. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.js +1 -9
  69. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/prompt.d.ts.map +1 -1
  70. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/prompt.js +0 -1
  71. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/utils.d.ts.map +1 -1
  72. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/utils.js +2 -5
  73. package/dist/test/scripts/pw-locator-patch/utils/index.d.ts +0 -1
  74. package/dist/test/scripts/pw-locator-patch/utils/index.d.ts.map +1 -1
  75. package/dist/test/scripts/pw-locator-patch/utils/index.js +0 -18
  76. package/dist/test/types.d.ts +2 -5
  77. package/dist/test/types.d.ts.map +1 -1
  78. package/dist/test/video-labels.d.ts.map +1 -1
  79. package/dist/test/video-labels.js +0 -1
  80. package/dist/webhook.d.ts.map +1 -1
  81. package/dist/webhook.js +0 -3
  82. package/docs/fixtures.md +4 -5
  83. package/package.json +6 -6
  84. package/playwright.config.ts +0 -4
  85. package/tsconfig.tsbuildinfo +1 -1
  86. package/upstream-oracle/ibr-adapter.js +0 -23
  87. package/upstream-oracle/run.mjs +1 -69
  88. package/dist/test/scripts/locator-highlights.d.ts +0 -4
  89. package/dist/test/scripts/locator-highlights.d.ts.map +0 -1
  90. package/dist/test/scripts/locator-highlights.js +0 -28
  91. package/dist/test/scripts/pw-locator-patch/highlight/click.d.ts.map +0 -1
  92. package/dist/test/scripts/pw-locator-patch/highlight/expect.d.ts +0 -5
  93. package/dist/test/scripts/pw-locator-patch/highlight/expect.d.ts.map +0 -1
  94. package/dist/test/scripts/pw-locator-patch/highlight/expect.js +0 -23
  95. package/dist/test/scripts/pw-locator-patch/highlight/hover.d.ts.map +0 -1
  96. package/dist/test/scripts/pw-locator-patch/highlight/inner-text.d.ts +0 -6
  97. package/dist/test/scripts/pw-locator-patch/highlight/inner-text.d.ts.map +0 -1
  98. package/dist/test/scripts/pw-locator-patch/highlight/inner-text.js +0 -30
  99. package/dist/test/scripts/pw-locator-patch/highlight/input-value.d.ts +0 -6
  100. package/dist/test/scripts/pw-locator-patch/highlight/input-value.d.ts.map +0 -1
  101. package/dist/test/scripts/pw-locator-patch/highlight/input-value.js +0 -30
  102. package/dist/test/scripts/pw-locator-patch/highlight/is-checked.d.ts +0 -6
  103. package/dist/test/scripts/pw-locator-patch/highlight/is-checked.d.ts.map +0 -1
  104. package/dist/test/scripts/pw-locator-patch/highlight/is-checked.js +0 -30
  105. package/dist/test/scripts/pw-locator-patch/highlight/is-disabled.d.ts +0 -6
  106. package/dist/test/scripts/pw-locator-patch/highlight/is-disabled.d.ts.map +0 -1
  107. package/dist/test/scripts/pw-locator-patch/highlight/is-disabled.js +0 -30
  108. package/dist/test/scripts/pw-locator-patch/highlight/is-editable.d.ts +0 -6
  109. package/dist/test/scripts/pw-locator-patch/highlight/is-editable.d.ts.map +0 -1
  110. package/dist/test/scripts/pw-locator-patch/highlight/is-editable.js +0 -29
  111. package/dist/test/scripts/pw-locator-patch/highlight/text-content.d.ts +0 -6
  112. package/dist/test/scripts/pw-locator-patch/highlight/text-content.d.ts.map +0 -1
  113. package/dist/test/scripts/pw-locator-patch/highlight/text-content.js +0 -30
  114. /package/dist/test/scripts/pw-locator-patch/{highlight → actions}/click.d.ts +0 -0
  115. /package/dist/test/scripts/pw-locator-patch/{highlight → actions}/hover.d.ts +0 -0
@@ -31,10 +31,6 @@ const PLAYWRIGHT_BIN = path_1.default.resolve(__dirname, "../../node_modules/.bi
31
31
  async function sleep(ms) {
32
32
  return new Promise((resolve) => setTimeout(resolve, ms));
33
33
  }
34
- /**
35
- * Sets up a temp directory with the IBR fixture files.
36
- * Returns a context object and a cleanup function.
37
- */
38
34
  async function setupFixture(suite) {
39
35
  const { tempDir, cleanup } = await setupReporterFixture({
40
36
  suite,
@@ -58,7 +54,6 @@ async function setupReporterFixture({ suite, reporterPath, tempPrefix, }) {
58
54
  const src = path_1.default.join(fixtureDir, entry.name);
59
55
  const dest = path_1.default.join(tempDir, entry.name);
60
56
  if (entry.isDirectory()) {
61
- // Fixtures that put specs under a testDir subdir.
62
57
  await fs_1.default.promises.cp(src, dest, { recursive: true });
63
58
  }
64
59
  else if (entry.name === "playwright.config.ts") {
@@ -90,9 +85,6 @@ async function setupTestCaseSyncFixture(suite) {
90
85
  cleanup,
91
86
  };
92
87
  }
93
- /**
94
- * Cleans blob artifacts from a previous run inside the same temp dir.
95
- */
96
88
  async function cleanBlobArtifacts(ctx) {
97
89
  if (fs_1.default.existsSync(ctx.blobDir)) {
98
90
  await fs_1.default.promises.rm(ctx.blobDir, { recursive: true, force: true });
@@ -103,13 +95,6 @@ const WAIT_FOR_PATTERNS = {
103
95
  "first-failed": /failed|✘|×/,
104
96
  };
105
97
  const MARKER_RE = /@@ ([A-Z0-9-]+) @@/g;
106
- /**
107
- * Spawns `playwright test` with the IBR reporter in its own process group,
108
- * signals the group mid-run, and waits for exit.
109
- *
110
- * The process group and the signal both match production: `cmd.ts` spawns the
111
- * runner detached and does `process.kill(-pid, signal)`.
112
- */
113
98
  async function runPlaywrightWithSignal(ctx, opts) {
114
99
  const { workers, waitForMarker, waitFor, delayBeforeSignalMs = 0, signal = "SIGINT", secondSignalAfterMs, killAfterMs, triggerTimeoutMs = 30_000, env, } = opts;
115
100
  const startedAt = Date.now();
@@ -162,9 +147,7 @@ async function runPlaywrightWithSignal(ctx, opts) {
162
147
  try {
163
148
  process.kill(-child.pid, sig);
164
149
  }
165
- catch {
166
- // The group is already gone.
167
- }
150
+ catch { }
168
151
  };
169
152
  const pattern = waitFor ? WAIT_FOR_PATTERNS[waitFor] : undefined;
170
153
  const isTriggered = () => waitForMarker
@@ -199,7 +182,6 @@ async function runPlaywrightWithSignal(ctx, opts) {
199
182
  if (killAfterMs !== undefined) {
200
183
  timers.push(setTimeout(() => signalGroup("SIGKILL"), killAfterMs));
201
184
  }
202
- // Backstop: never leave a runner behind if the suite misbehaves.
203
185
  timers.push(setTimeout(() => signalGroup("SIGKILL"), 120_000));
204
186
  try {
205
187
  await closed;
@@ -219,21 +201,13 @@ async function runPlaywrightWithSignal(ctx, opts) {
219
201
  startedAtEpochMs: startedAt,
220
202
  };
221
203
  }
222
- /**
223
- * Spawns `playwright test` with the IBR reporter, waits for a test outcome,
224
- * sends SIGINT, and waits for the process to exit.
225
- *
226
- * Returns captured stdout/stderr.
227
- */
228
204
  async function runPlaywrightWithSigint(ctx, opts) {
229
205
  return runPlaywrightWithSignal(ctx, {
230
206
  workers: opts.workers,
231
207
  waitFor: opts.waitFor,
232
- // Waiting for 1 sec to ensure second test has started
233
208
  delayBeforeSignalMs: 1_000,
234
209
  });
235
210
  }
236
- /** Marker names in the order they were printed. */
237
211
  function markerNames(result) {
238
212
  return result.markers.map((m) => m.name);
239
213
  }
@@ -262,15 +236,9 @@ async function runPlaywrightList(ctx) {
262
236
  }
263
237
  return { stdout, stderr };
264
238
  }
265
- /**
266
- * Reads `report.jsonl` from the blob zip and returns parsed events.
267
- */
268
239
  async function readBlobEvents(ctx) {
269
240
  return readEventsFromZip(ctx.zipPath);
270
241
  }
271
- /**
272
- * Reads `report.jsonl` from any blob-format zip (standard or incremental).
273
- */
274
242
  async function readEventsFromZip(zipPath) {
275
243
  const reportBuffer = await (0, zip_1.readZipEntry)(zipPath, "report.jsonl");
276
244
  if (!reportBuffer) {
@@ -282,10 +250,6 @@ async function readEventsFromZip(zipPath) {
282
250
  .split("\n")
283
251
  .map((line) => JSON.parse(line));
284
252
  }
285
- /**
286
- * Sets up a fixture whose config runs BOTH the built-in blob reporter and the
287
- * IBR on the same invocation, so one event stream feeds both zips.
288
- */
289
253
  async function setupParityFixture(suite) {
290
254
  const { tempDir, cleanup } = await setupReporterFixture({
291
255
  suite,
@@ -305,10 +269,6 @@ async function setupParityFixture(suite) {
305
269
  cleanup,
306
270
  };
307
271
  }
308
- /**
309
- * Spawns `playwright test` and lets it run to completion — the clean-finish
310
- * half of the matrix (the SIGINT helpers above cover interruption).
311
- */
312
272
  async function runPlaywrightClean(ctx, opts) {
313
273
  const args = ["test", `--workers=${opts.workers}`];
314
274
  if (opts.shard) {
@@ -319,8 +279,6 @@ async function runPlaywrightClean(ctx, opts) {
319
279
  env: {
320
280
  ...process.env,
321
281
  LOCAL_TEST: "false",
322
- // With --shard, the env vars are cleared on purpose so IBR falls back to
323
- // the same config.shard the built-in blob reporter sees.
324
282
  SHARD_INDEX: opts.shard ? undefined : "1",
325
283
  TOTAL_SHARDS: opts.shard ? undefined : "1",
326
284
  FORCE_COLOR: "0",
@@ -340,10 +298,6 @@ async function runPlaywrightClean(ctx, opts) {
340
298
  });
341
299
  return { stdout, stderr, exitCode };
342
300
  }
343
- /**
344
- * Runs `playwright merge-reports <blobDir> --reporter json` and returns the
345
- * parsed summary. Distinct output names let one temp dir hold both merges.
346
- */
347
301
  function mergeBlobDirToSummary(cwd, blobDir, outputName) {
348
302
  const outputPath = path_1.default.join(cwd, outputName);
349
303
  (0, child_process_1.execFileSync)(PLAYWRIGHT_BIN, ["merge-reports", blobDir, "--reporter", "json"], {
@@ -357,11 +311,6 @@ function mergeBlobDirToSummary(cwd, blobDir, outputName) {
357
311
  });
358
312
  return JSON.parse(fs_1.default.readFileSync(outputPath, "utf8"));
359
313
  }
360
- /**
361
- * A local stand-in for api-worker and the report bucket, so EmpiricalReporter
362
- * runs unmodified inside a real Playwright run. Records test-case events and
363
- * accepts every upload.
364
- */
365
314
  async function startDashboardStub() {
366
315
  const events = [];
367
316
  const server = http_1.default.createServer((req, res) => {
@@ -379,7 +328,6 @@ async function startDashboardStub() {
379
328
  res.end("{}");
380
329
  return;
381
330
  }
382
- // Everything else is the S3 client; r2-uploader always goes multipart.
383
331
  res.writeHead(200, { "content-type": "application/xml", etag: '"etag"' });
384
332
  if (req.method === "POST" && req.url?.includes("?uploads")) {
385
333
  res.end("<InitiateMultipartUploadResult><UploadId>upload</UploadId></InitiateMultipartUploadResult>");
@@ -43,11 +43,6 @@ export declare function relativeLocation(location: JsonLocation | undefined, roo
43
43
  export declare function relativeAnnotationLocations(annotations: TestAnnotation[], rootDir: string): TestAnnotation[];
44
44
  export declare function serializeTest(test: TestCase, rootDir: string): JsonTestCase;
45
45
  export declare function serializeSuite(suite: Suite, rootDir: string): JsonSuite;
46
- /**
47
- * Recursively filters a serialized suite tree to only include tests
48
- * whose testId is in the completedTestIds set. Removes empty parent suites.
49
- * Returns null if the suite has no completed test descendants.
50
- */
51
46
  export declare function filterSuiteByCompletedTests(suite: JsonSuite, completedTestIds: Set<string>): JsonSuite | null;
52
47
  export declare function hasValidReport(reportLines: string[]): boolean;
53
48
  export declare function buildUrlsJson(attachmentUrlMap: Map<string, string>): Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"ibr-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/ibr-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ibr-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/ibr-utils.ts"],"names":[],"mappings":"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"}
@@ -108,11 +108,6 @@ function serializeSuite(suite, rootDir) {
108
108
  function isTestEntry(entry) {
109
109
  return "testId" in entry;
110
110
  }
111
- /**
112
- * Recursively filters a serialized suite tree to only include tests
113
- * whose testId is in the completedTestIds set. Removes empty parent suites.
114
- * Returns null if the suite has no completed test descendants.
115
- */
116
111
  function filterSuiteByCompletedTests(suite, completedTestIds) {
117
112
  const filteredEntries = [];
118
113
  for (const entry of suite.entries) {
@@ -1,12 +1,4 @@
1
1
  import type { FullConfig, FullResult, Reporter, Suite, TestCase, TestError, TestResult, TestStep, WorkerInfo } from "@playwright/test/reporter";
2
- /**
3
- * IncrementalBlobReporter
4
- *
5
- * This reporter builds a report.jsonl incrementally matching Playwright's blob format.
6
- * The zip can be uploaded for merge at any point (e.g., on SIGTERM).
7
- *
8
- * Format matches Playwright's blob reporter exactly.
9
- */
10
2
  export type AttachmentUrlMap = Map<string, string>;
11
3
  declare class IncrementalBlobReporter implements Reporter {
12
4
  private _currentWorkingDir;
@@ -33,12 +25,6 @@ declare class IncrementalBlobReporter implements Reporter {
33
25
  private _removeSignalHandler;
34
26
  private _buildSyntheticResult;
35
27
  private _finalizeAndMaybeUpload;
36
- /**
37
- * Computes the lines to write, without touching `_reportLines`: recording
38
- * continues after the SIGINT salvage, and the onEnd pass re-finalizes from
39
- * the full stream — mutating here would make the second pass work from the
40
- * first pass's pruned leftovers.
41
- */
42
28
  private _buildFinalReportLines;
43
29
  private _computeCompletedSets;
44
30
  private _removeIncompleteTestArtifacts;
@@ -60,9 +46,6 @@ declare class IncrementalBlobReporter implements Reporter {
60
46
  onStepBegin(test: TestCase, result: TestResult, step: TestStep): void;
61
47
  onStepEnd(test: TestCase, result: TestResult, step: TestStep): void;
62
48
  onEnd(result: FullResult): Promise<void>;
63
- /**
64
- * Add a single attachment URL mapping
65
- */
66
49
  addAttachmentUrl(localPath: string, remoteUrl: string): void;
67
50
  printsToStdio(): boolean;
68
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"incremental-blob-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/incremental-blob-reporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"incremental-blob-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/incremental-blob-reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AA8BnC,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAOnD,cAAM,uBAAwB,YAAW,QAAQ;IAC/C,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,WAAW,CAIjB;IACF,OAAO,CAAC,UAAU,CAGhB;IACF,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,sBAAsB,CAAkC;IAChE,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAAsD;IAC1E,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAyB;IAEzC,cAWC;IAED,OAAO,CAAC,cAAc,CAA6B;IAEnD,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,qBAAqB;YASf,uBAAuB;IAiFrC,OAAO,CAAC,sBAAsB;IAkB9B,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,8BAA8B;IAWtC,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,KAAK,QAAQ,GAKnB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;YAUP,SAAS;IAqBvB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAa9C;IAED,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAEpD;IAED,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA0BlD;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAI3E;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAI3E;IAED,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAEvD;IAED,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAWpE;IAED,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAalE;IAEK,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B7C;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAE3D;IAED,aAAa,IAAI,OAAO,CAEvB;CACF;AAID,wBAAgB,0BAA0B,IAAI,uBAAuB,GAAG,IAAI,CAE3E;AAED,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,uBAAuB,GAChC,IAAI,CAEN;eAEc,uBAAuB"}
@@ -22,14 +22,14 @@ class IncrementalBlobReporter {
22
22
  _totalShards;
23
23
  _reportLines = [];
24
24
  _attachmentUrlMap = new Map();
25
- _resultIdMap = new Map(); // testId+retry -> resultId
26
- _stepIdMap = new Map(); // step -> stepId
27
- _knownAttachmentCounts = new Map(); // resultId -> attachments already sent
25
+ _resultIdMap = new Map();
26
+ _stepIdMap = new Map();
27
+ _knownAttachmentCounts = new Map();
28
28
  _uploader = null;
29
29
  _completedTestIds = new Set();
30
30
  _completedResultIds = new Set();
31
- _testRetries = new Map(); // testId → configured retries
32
- _testResults = new Map(); // testId → retryIndex → RecordedRetry
31
+ _testRetries = new Map();
32
+ _testResults = new Map();
33
33
  _startTime = Date.now();
34
34
  _finalizePromise = null;
35
35
  _rootDir = process.cwd();
@@ -99,7 +99,6 @@ class IncrementalBlobReporter {
99
99
  console.warn("[IncrementalBlobReporterFailure] No onBegin received, skipping upload (nothing to merge)");
100
100
  return;
101
101
  }
102
- // Wait for pending attachment uploads FIRST so URLs are available
103
102
  if (this._uploader) {
104
103
  await this._uploader.waitForUploads();
105
104
  }
@@ -127,33 +126,19 @@ class IncrementalBlobReporter {
127
126
  }
128
127
  logFinalizeComplete();
129
128
  }
130
- /**
131
- * Computes the lines to write, without touching `_reportLines`: recording
132
- * continues after the SIGINT salvage, and the onEnd pass re-finalizes from
133
- * the full stream — mutating here would make the second pass work from the
134
- * first pass's pruned leftovers.
135
- */
136
129
  _buildFinalReportLines(result, pruneIncompleteTests) {
137
130
  let lines = [...this._reportLines];
138
131
  if (pruneIncompleteTests) {
139
- // Determine which tests are fully complete (passed or all retries finished)
140
132
  this._computeCompletedSets();
141
- // Remove unrun tests from onProject suites
142
133
  lines = this._patchProjectSuites(lines);
143
- // Remove events (onTestBegin, onStepBegin, etc.) for incomplete tests
144
134
  lines = this._removeIncompleteTestArtifacts(lines);
145
135
  }
146
- // The onEnd event belongs only in the written report, never in the
147
- // in-memory stream — a later finalize pass appends its own.
148
136
  lines.push(JSON.stringify((0, lifecycle_events_1.buildOnEndEvent)(result)));
149
137
  return lines;
150
138
  }
151
139
  _computeCompletedSets() {
152
140
  for (const [testId, results] of this._testResults) {
153
141
  const maxRetries = this._testRetries.get(testId);
154
- // Shutdown artifacts are not finished retries. Counting them as
155
- // complete would put their results in the final zip alongside the
156
- // resume shard's, duplicating tests in the merge.
157
142
  const finished = new Map([...results].filter(([, r]) => !(0, reporter_state_1.isShutdownArtifact)(r.status, r.postSignal)));
158
143
  if ((0, reporter_1.areRetriesComplete)(maxRetries, finished)) {
159
144
  this._completedTestIds.add(testId);
@@ -222,13 +207,10 @@ class IncrementalBlobReporter {
222
207
  }
223
208
  async _writeZip(lines) {
224
209
  this._ensureDirs();
225
- // Write report.jsonl to the output directory
226
210
  const jsonlContent = lines.join("\n") + "\n";
227
211
  fs_1.default.writeFileSync(this._jsonlPath, jsonlContent, "utf8");
228
- // Write _empirical_urls.json with attachment URL mappings
229
212
  const urlsJson = (0, ibr_utils_1.buildUrlsJson)(this._attachmentUrlMap);
230
213
  fs_1.default.writeFileSync(this._urlsJsonPath, JSON.stringify(urlsJson, null, 2), "utf8");
231
- // Create zip from the staging directory
232
214
  const zipBuffer = await (0, zip_1.createZipFromDirectory)(this._stagingDir);
233
215
  fs_1.default.writeFileSync(this._zipPath, zipBuffer);
234
216
  console.log(`[IncrementalBlobReporter] Zip updated: ${this._zipPath} (${lines.length} events, ${this._attachmentUrlMap.size} attachments)`);
@@ -236,9 +218,6 @@ class IncrementalBlobReporter {
236
218
  onBegin(config, suite) {
237
219
  this._ensureDirs();
238
220
  this._rootDir = config.rootDir;
239
- // The env vars win (production sets them), but a sharded run without
240
- // them should still stamp the right shard into the blob metadata and
241
- // the zip name instead of defaulting every shard to 1/1.
242
221
  if (!process.env.SHARD_INDEX && config.shard) {
243
222
  this._shardIndex = config.shard.current;
244
223
  this._totalShards = config.shard.total;
@@ -264,8 +243,6 @@ class IncrementalBlobReporter {
264
243
  resultId,
265
244
  status: result.status,
266
245
  expectedStatus: test.expectedStatus,
267
- // The SIGINT salvage has started; this result arrived during
268
- // interruption shutdown rather than the normal run.
269
246
  postSignal: this._finalizePromise !== null,
270
247
  });
271
248
  }
@@ -288,10 +265,6 @@ class IncrementalBlobReporter {
288
265
  }
289
266
  async onEnd(result) {
290
267
  this._removeSignalHandler();
291
- // Second phase of an interrupted run: the SIGINT pass salvaged a snapshot
292
- // within milliseconds (SIGKILL insurance); by the time Playwright calls
293
- // onEnd the teardown chain has finished, so re-finalize from the full
294
- // stream and overwrite the salvage blob with the post-teardown report.
295
268
  if (this._finalizePromise) {
296
269
  await this._finalizePromise;
297
270
  this._finalizePromise = this._finalizeAndMaybeUpload({
@@ -314,9 +287,6 @@ class IncrementalBlobReporter {
314
287
  await this._finalizePromise;
315
288
  console.log(`[IncrementalBlobReporter] Finished with status: ${result.status}`);
316
289
  }
317
- /**
318
- * Add a single attachment URL mapping
319
- */
320
290
  addAttachmentUrl(localPath, remoteUrl) {
321
291
  this._attachmentUrlMap.set((0, ibr_utils_1.toResourcePath)(localPath), remoteUrl);
322
292
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/reporter/lifecycle-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAmBnC,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,SAAS,EAAE,CAwDb;AAGD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,MAAM,GACd,SAAS,CAgCX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAeX;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CAoBb;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CA0Cb;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAgBX;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,UAAU,GACtB,SAAS,CAcX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,GACd,SAAS,CA4BX;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CAqCb;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAW7D"}
1
+ {"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/reporter/lifecycle-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAmBnC,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,SAAS,EAAE,CAkDb;AAGD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,MAAM,GACd,SAAS,CAgCX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAeX;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CAoBb;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CA0Cb;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAgBX;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,UAAU,GACtB,SAAS,CAcX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,GACd,SAAS,CA4BX;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CAkCb;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAW7D"}
@@ -20,7 +20,6 @@ const BLOB_REPORT_VERSION = 2;
20
20
  function buildOnBeginEvents(config, suite, shardIndex, totalShards) {
21
21
  const events = [];
22
22
  const rootDir = config.rootDir || "";
23
- // 1. onBlobReportMetadata
24
23
  const osName = process.platform === "darwin" ? "macOS" : process.platform;
25
24
  const osVersion = os_1.default.release();
26
25
  events.push({
@@ -43,9 +42,6 @@ function buildOnBeginEvents(config, suite, shardIndex, totalShards) {
43
42
  maxFailures: config.maxFailures,
44
43
  metadata: config.metadata,
45
44
  rootDir: config.rootDir,
46
- // Round-trips into the merged report's FullConfig: `shard` and
47
- // `failOnFlakyTests` drive reporter behaviour after the merge, and
48
- // `tags` carries the config-level global tag.
49
45
  shard: config.shard,
50
46
  version: config.version,
51
47
  workers: config.workers,
@@ -57,7 +53,6 @@ function buildOnBeginEvents(config, suite, shardIndex, totalShards) {
57
53
  },
58
54
  },
59
55
  });
60
- // 3. onProject for each project
61
56
  for (const projectSuite of suite.suites) {
62
57
  const project = config.projects.find((p) => p.name === projectSuite.title);
63
58
  if (!project) {
@@ -65,7 +60,6 @@ function buildOnBeginEvents(config, suite, shardIndex, totalShards) {
65
60
  }
66
61
  events.push(buildOnProjectEvent(project, projectSuite, rootDir));
67
62
  }
68
- // 4. onBegin (empty params per Playwright format)
69
63
  events.push({ method: "onBegin" });
70
64
  return events;
71
65
  }
@@ -261,8 +255,6 @@ function buildOnStepBeginEvent(test, result, step, resultIdMap, stepIdMap, rootD
261
255
  function buildOnStepEndEvents(test, result, step, resultIdMap, stepIdMap, rootDir, stagingDir, knownAttachmentCounts) {
262
256
  const resultId = (0, ibr_utils_1.getOrCreateId)(resultIdMap, `${test.id}-${result.retry}`);
263
257
  const stepId = (0, ibr_utils_1.getOrCreateStepId)(stepIdMap, step);
264
- // Anything the step attached has to reach the receiver before the step end
265
- // that indexes into it.
266
258
  const events = buildNewAttachmentEvents(test, result, resultId, stagingDir, knownAttachmentCounts);
267
259
  events.push({
268
260
  method: "onStepEnd",
@@ -272,7 +264,6 @@ function buildOnStepEndEvents(test, result, step, resultIdMap, stepIdMap, rootDi
272
264
  step: {
273
265
  id: stepId,
274
266
  duration: step.duration,
275
- // Raw pass-through, like the result errors above.
276
267
  error: step.error,
277
268
  // Indices into the result's attachments, matching
278
269
  // TeleReporterEmitter._serializeStepEnd.
@@ -2,12 +2,6 @@ import type { BlobEvent } from "./harness";
2
2
  export interface NormalizedAttachment {
3
3
  name: string;
4
4
  contentType: string;
5
- /**
6
- * Whether the merged report still points at real content (path or inline
7
- * body). Compared only where a scenario opts in: the empirical pipeline
8
- * resolves attachment bytes through _empirical_urls.json, so name+type is
9
- * the baseline parity contract.
10
- */
11
5
  hasContent: boolean;
12
6
  }
13
7
  export interface NormalizedResult {
@@ -46,39 +40,15 @@ export interface NormalizedReport {
46
40
  stats: Record<string, unknown>;
47
41
  }
48
42
  export interface NormalizeOptions {
49
- /** Absolute fixture dir, replaced with a stable token in messages. */
50
43
  cwd: string;
51
- /** Include attachment `hasContent` in the comparison (see above). */
52
44
  compareAttachmentContent?: boolean;
53
45
  }
54
46
  export declare function normalizeJsonReport(report: Record<string, unknown>, opts: NormalizeOptions): NormalizedReport;
55
- /**
56
- * Per-result step signatures from a raw blob event stream, keyed by
57
- * `testId:retry` (stable across both reporters — they see the same run).
58
- * The merged JSON report drops steps, so step parity is checked here.
59
- */
60
47
  export declare function stepSignatures(events: BlobEvent[]): Map<string, string[]>;
61
- /**
62
- * What a reporter would see for `step.attachments` DURING onStepEnd, replayed
63
- * from the raw event stream the way teleReceiver does it: onAttach pushes onto
64
- * `result.attachments`, and a step end carries indices into that array
65
- * (TeleTestStep.attachments resolves them at access time). An attachment that
66
- * only arrives at test end therefore reads as `<missing>` here.
67
- *
68
- * Keyed by `testId:retry`; each entry is one `title -> [names]` line per
69
- * onStepEnd, in stream order.
70
- */
71
48
  export declare function stepAttachmentsAtStepEnd(events: BlobEvent[]): Map<string, string[]>;
72
- /**
73
- * The onConfigure config payload plus every onProject project payload, keyed
74
- * by project name. The merged report's FullConfig/FullProject is rebuilt from
75
- * exactly these, and normalizeJsonReport compares only the suite/stats body —
76
- * so this is where config and project serialization drift shows up.
77
- */
78
49
  export declare function configAndProjects(events: BlobEvent[]): {
79
50
  config: unknown;
80
51
  projects: Record<string, unknown>;
81
52
  };
82
- /** Event method names present in `reference` but absent from `candidate`. */
83
53
  export declare function missingEventMethods(reference: BlobEvent[], candidate: BlobEvent[]): string[];
84
54
  //# sourceMappingURL=parity-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parity-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/parity-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAiD3C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAwED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,gBAAgB,GACrB,gBAAgB,CAclB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA+CzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAgDvB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAYA;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,EAAE,EACtB,SAAS,EAAE,SAAS,EAAE,GACrB,MAAM,EAAE,CASV"}
1
+ {"version":3,"file":"parity-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/parity-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAyC3C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAwED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,gBAAgB,GACrB,gBAAgB,CAclB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA6CzE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAgDvB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAYA;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,EAAE,EACtB,SAAS,EAAE,SAAS,EAAE,GACrB,MAAM,EAAE,CASV"}
@@ -70,13 +70,8 @@ function normalizeJsonReport(report, opts) {
70
70
  stats,
71
71
  };
72
72
  }
73
- /**
74
- * Per-result step signatures from a raw blob event stream, keyed by
75
- * `testId:retry` (stable across both reporters — they see the same run).
76
- * The merged JSON report drops steps, so step parity is checked here.
77
- */
78
73
  function stepSignatures(events) {
79
- const resultKey = new Map(); // resultId -> testId:retry
74
+ const resultKey = new Map();
80
75
  for (const event of events) {
81
76
  if (event.method !== "onTestBegin") {
82
77
  continue;
@@ -95,8 +90,6 @@ function stepSignatures(events) {
95
90
  continue;
96
91
  }
97
92
  const list = signatures.get(key) ?? [];
98
- // The location is part of the signature: it travels relative to rootDir
99
- // and the merged HTML report renders it as-is.
100
93
  const location = params.step.location
101
94
  ? `${params.step.location.file}:${params.step.location.line}`
102
95
  : "";
@@ -108,20 +101,10 @@ function stepSignatures(events) {
108
101
  }
109
102
  return signatures;
110
103
  }
111
- /**
112
- * What a reporter would see for `step.attachments` DURING onStepEnd, replayed
113
- * from the raw event stream the way teleReceiver does it: onAttach pushes onto
114
- * `result.attachments`, and a step end carries indices into that array
115
- * (TeleTestStep.attachments resolves them at access time). An attachment that
116
- * only arrives at test end therefore reads as `<missing>` here.
117
- *
118
- * Keyed by `testId:retry`; each entry is one `title -> [names]` line per
119
- * onStepEnd, in stream order.
120
- */
121
104
  function stepAttachmentsAtStepEnd(events) {
122
- const resultKey = new Map(); // resultId -> testId:retry
123
- const attachmentNames = new Map(); // resultId -> names so far
124
- const stepTitles = new Map(); // stepId -> title
105
+ const resultKey = new Map();
106
+ const attachmentNames = new Map();
107
+ const stepTitles = new Map();
125
108
  const views = new Map();
126
109
  for (const event of events) {
127
110
  if (event.method === "onTestBegin") {
@@ -153,12 +136,6 @@ function stepAttachmentsAtStepEnd(events) {
153
136
  }
154
137
  return views;
155
138
  }
156
- /**
157
- * The onConfigure config payload plus every onProject project payload, keyed
158
- * by project name. The merged report's FullConfig/FullProject is rebuilt from
159
- * exactly these, and normalizeJsonReport compares only the suite/stats body —
160
- * so this is where config and project serialization drift shows up.
161
- */
162
139
  function configAndProjects(events) {
163
140
  let config;
164
141
  const projects = {};
@@ -173,7 +150,6 @@ function configAndProjects(events) {
173
150
  }
174
151
  return { config, projects };
175
152
  }
176
- /** Event method names present in `reference` but absent from `candidate`. */
177
153
  function missingEventMethods(reference, candidate) {
178
154
  const candidateMethods = new Set(candidate.map((e) => e.method));
179
155
  return [
@@ -1,16 +1,4 @@
1
1
  export declare function isFinalized(): boolean;
2
2
  export declare function setFinalized(): void;
3
- /**
4
- * Whether a result is a by-product of interruption shutdown rather than a
5
- * finished attempt: an "interrupted" result is a test cut off mid-flight, and
6
- * a post-signal "skipped" is a serial sibling Playwright marks off while
7
- * shutting down. The resume shard re-runs both. A post-signal passed/failed is
8
- * real, though: the test finished its body and only its aftermath overlapped
9
- * the shutdown.
10
- *
11
- * Shared so the blob and the run ledger agree on which results count; when
12
- * they disagree, the ledger calls a test unfinished that the blob already
13
- * holds, and the merged report gets it twice.
14
- */
15
3
  export declare function isShutdownArtifact(status: string, postSignal: boolean): boolean;
16
4
  //# sourceMappingURL=reporter-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reporter-state.d.ts","sourceRoot":"","sources":["../../src/reporter/reporter-state.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,GAClB,OAAO,CAET"}
1
+ {"version":3,"file":"reporter-state.d.ts","sourceRoot":"","sources":["../../src/reporter/reporter-state.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,GAClB,OAAO,CAET"}
@@ -10,18 +10,6 @@ function isFinalized() {
10
10
  function setFinalized() {
11
11
  _finalized = true;
12
12
  }
13
- /**
14
- * Whether a result is a by-product of interruption shutdown rather than a
15
- * finished attempt: an "interrupted" result is a test cut off mid-flight, and
16
- * a post-signal "skipped" is a serial sibling Playwright marks off while
17
- * shutting down. The resume shard re-runs both. A post-signal passed/failed is
18
- * real, though: the test finished its body and only its aftermath overlapped
19
- * the shutdown.
20
- *
21
- * Shared so the blob and the run ledger agree on which results count; when
22
- * they disagree, the ledger calls a test unfinished that the blob already
23
- * holds, and the merged report gets it twice.
24
- */
25
13
  function isShutdownArtifact(status, postSignal) {
26
14
  return status === "interrupted" || (postSignal && status === "skipped");
27
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test-case-sync.d.ts","sourceRoot":"","sources":["../../src/reporter/test-case-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EAErB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EACV,UAAU,EAEV,KAAK,EAEN,MAAM,2BAA2B,CAAC;AAUnC,YAAY,EACV,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,6CAA6C,CAAC;AAgUrD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,KAAK,GACf,oBAAoB,CAyBtB"}
1
+ {"version":3,"file":"test-case-sync.d.ts","sourceRoot":"","sources":["../../src/reporter/test-case-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EAErB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EACV,UAAU,EAEV,KAAK,EAEN,MAAM,2BAA2B,CAAC;AAMnC,YAAY,EACV,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,6CAA6C,CAAC;AAoTrD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,KAAK,GACf,oBAAoB,CAyBtB"}
@@ -108,12 +108,6 @@ function collectOutermostSerialGroup(rootDir, suite, state) {
108
108
  }
109
109
  return buildDependencyGroup(rootDir, suite, state, "playwright_serial", suite.allTests());
110
110
  }
111
- /**
112
- * Tests under this suite that Playwright would place in its sequential
113
- * ("general") group: everything except subtrees that opt back into
114
- * parallelism. Order is declaration order, which is the order the group
115
- * executes in.
116
- */
117
111
  function sequentialTests(suite) {
118
112
  const tests = [...suite.tests];
119
113
  for (const child of suite.suites) {
@@ -170,9 +164,6 @@ function walkSuite(rootDir, suite, state, testCases, dependencyGroups) {
170
164
  }
171
165
  }
172
166
  }
173
- // A serial group is emitted even inside a default scope: the outer default
174
- // group wins for scheduling, but serial membership carries extra semantics
175
- // (failure cascade, re-expansion) its consumers still need.
176
167
  const serialGroup = collectOutermostSerialGroup(rootDir, suite, nextState);
177
168
  if (serialGroup) {
178
169
  dependencyGroups.push(serialGroup);
@@ -186,9 +177,6 @@ function walkSuite(rootDir, suite, state, testCases, dependencyGroups) {
186
177
  dependencyGroups.push(defaultGroup);
187
178
  nextState.sequentialAncestor = suite;
188
179
  }
189
- // fullyParallel (project suite) or an explicit `mode: "parallel"` — every
190
- // descendant is independently schedulable unless a sequential suite below
191
- // says otherwise.
192
180
  if (mode === "parallel") {
193
181
  nextState.insideParallel = true;
194
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/reporter/uploader.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAElB,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAKnC,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAqB;IAEzC,YAAY,MAAM,EAAE,cAAc,EASjC;IAED,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgBhC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAKzE;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAEK,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,kBAAkB,GAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCxB;IAEK,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAef;IAEK,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA4BpC;CACF;AAID,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAM7C;AAED,wBAAgB,cAAc,IAAI,QAAQ,GAAG,IAAI,CAgEhD"}
1
+ {"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/reporter/uploader.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAElB,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAKnC,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAqB;IAEzC,YAAY,MAAM,EAAE,cAAc,EASjC;IAED,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgBhC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAKzE;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAEK,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,kBAAkB,GAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCxB;IAEK,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAef;IAEK,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBpC;CACF;AAID,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAM7C;AAED,wBAAgB,cAAc,IAAI,QAAQ,GAAG,IAAI,CA6DhD"}