@empiricalrun/playwright-utils 0.52.0 → 0.53.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 (55) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +0 -1
  3. package/dist/auth/index.d.ts.map +1 -1
  4. package/dist/auth/index.js +2 -1
  5. package/dist/inbox-client.d.ts.map +1 -1
  6. package/dist/inbox-client.js +8 -4
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +0 -1
  10. package/dist/overlay-tests/cache.spec.js +2 -1
  11. package/dist/overlay-tests/click.spec.js +6 -3
  12. package/dist/reporter/attachment-cleanup-test-reporter.d.ts.map +1 -1
  13. package/dist/reporter/attachment-cleanup-test-reporter.js +2 -1
  14. package/dist/reporter/attachment-cleanup.d.ts.map +1 -1
  15. package/dist/reporter/attachment-cleanup.js +17 -8
  16. package/dist/reporter/blob-utils.d.ts.map +1 -1
  17. package/dist/reporter/blob-utils.js +4 -2
  18. package/dist/reporter/empirical-reporter.d.ts.map +1 -1
  19. package/dist/reporter/empirical-reporter.js +12 -6
  20. package/dist/reporter/harness.d.ts +9 -0
  21. package/dist/reporter/harness.d.ts.map +1 -1
  22. package/dist/reporter/harness.js +58 -5
  23. package/dist/reporter/ibr-utils.d.ts.map +1 -1
  24. package/dist/reporter/ibr-utils.js +4 -2
  25. package/dist/reporter/incremental-blob-reporter.d.ts.map +1 -1
  26. package/dist/reporter/incremental-blob-reporter.js +6 -3
  27. package/dist/reporter/lifecycle-events.d.ts.map +1 -1
  28. package/dist/reporter/lifecycle-events.js +2 -1
  29. package/dist/reporter/test-case-sync-reporter.d.ts +12 -0
  30. package/dist/reporter/test-case-sync-reporter.d.ts.map +1 -0
  31. package/dist/reporter/test-case-sync-reporter.js +28 -0
  32. package/dist/reporter/test-case-sync.d.ts +28 -0
  33. package/dist/reporter/test-case-sync.d.ts.map +1 -0
  34. package/dist/reporter/test-case-sync.js +134 -0
  35. package/dist/reporter/uploader.d.ts.map +1 -1
  36. package/dist/reporter/uploader.js +2 -1
  37. package/dist/reporter/util.d.ts.map +1 -1
  38. package/dist/reporter/util.js +12 -6
  39. package/dist/test/expect/visual.d.ts.map +1 -1
  40. package/dist/test/expect/visual.js +5 -3
  41. package/dist/test/expect/webhook.d.ts.map +1 -1
  42. package/dist/test/expect/webhook.js +2 -1
  43. package/dist/test/index.d.ts +0 -2
  44. package/dist/test/index.d.ts.map +1 -1
  45. package/dist/test/index.js +4 -7
  46. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/utils.d.ts.map +1 -1
  47. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/utils.js +2 -1
  48. package/dist/webhook.d.ts.map +1 -1
  49. package/dist/webhook.js +4 -2
  50. package/package.json +10 -4
  51. package/tsconfig.tsbuildinfo +1 -1
  52. package/dist/postgres.d.ts +0 -22
  53. package/dist/postgres.d.ts.map +0 -1
  54. package/dist/postgres.js +0 -146
  55. package/docs/postgres.md +0 -78
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @empiricalrun/playwright-utils
2
2
 
3
+ ## 0.53.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 3848c83: chore: remove postgres related fixtures
8
+
9
+ ## 0.52.1
10
+
11
+ ### Patch Changes
12
+
13
+ - b17c77d: feat: new custom reporter for dependency groups
14
+
3
15
  ## 0.52.0
4
16
 
5
17
  ### Minor Changes
package/README.md CHANGED
@@ -14,7 +14,6 @@ Playwright utils for test code repos of our customers
14
14
  - [Email automation](./docs/email.md)
15
15
  - [Authentication](./docs/auth.md)
16
16
  - [KV Store](./docs/kv.md)
17
- - [Postgres](./docs/postgres.md)
18
17
 
19
18
  ## Development
20
19
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5D,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,KAAK,OAAO,GAAG,SAAS,GAAG,kBAAkB,CAAC;AAE9C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,GAAG,cAAc,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,SAAS,CAAC,CAAC,SAAS,OAAO,CAAC,EAAE,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,CAAC,CAAC;IACf,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;gBACxD,EACV,IAAI,EACJ,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,OAAmB,GACpB,EAAE;QACD,IAAI,EAAE,IAAI,CAAC;QACX,WAAW,EAAE,CAAC,CAAC;QACf,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACpE,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB;IAQK,eAAe;IAIf,YAAY,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAkC/C,MAAM,CAAC,qBAAqB,CAC1B,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAC5B,KAAK,EAAE,WAAW,GACjB,MAAM,GAAG,SAAS;YAyBP,qBAAqB;YAqCrB,aAAa;IA6B3B,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;WAIxC,eAAe,CAC1B,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC;CAoB5B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5D,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,KAAK,OAAO,GAAG,SAAS,GAAG,kBAAkB,CAAC;AAE9C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,GAAG,cAAc,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,SAAS,CAAC,CAAC,SAAS,OAAO,CAAC,EAAE,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,CAAC,CAAC;IACf,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;gBACxD,EACV,IAAI,EACJ,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,OAAmB,GACpB,EAAE;QACD,IAAI,EAAE,IAAI,CAAC;QACX,WAAW,EAAE,CAAC,CAAC;QACf,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACpE,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB;IAQK,eAAe;IAIf,YAAY,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAkC/C,MAAM,CAAC,qBAAqB,CAC1B,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAC5B,KAAK,EAAE,WAAW,GACjB,MAAM,GAAG,SAAS;YAyBP,qBAAqB;YAuCrB,aAAa;IA6B3B,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;WAIxC,eAAe,CAC1B,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC;CAoB5B"}
@@ -86,8 +86,9 @@ class AuthStore {
86
86
  const tmp = await page.context().newPage();
87
87
  try {
88
88
  for (const origin of authState.origins) {
89
- if (!origin.localStorage?.length)
89
+ if (!origin.localStorage?.length) {
90
90
  continue;
91
+ }
91
92
  await tmp.goto(origin.origin, {
92
93
  waitUntil: "domcontentloaded",
93
94
  });
@@ -1 +1 @@
1
- {"version":3,"file":"inbox-client.d.ts","sourceRoot":"","sources":["../src/inbox-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,KAAK,IAAI,GAAG;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAmBF,KAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,kBAAkB;IAK9B,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1D,OAAO,CAAC,UAAU,CAAC;YASR,cAAc;IAoD5B,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,YAAY;CAcrB"}
1
+ {"version":3,"file":"inbox-client.d.ts","sourceRoot":"","sources":["../src/inbox-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,KAAK,IAAI,GAAG;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAmBF,KAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,kBAAkB;IAK9B,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1D,OAAO,CAAC,UAAU,CAAC;YASR,cAAc;IA0D5B,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,YAAY;CAgBrB"}
@@ -23,12 +23,15 @@ class InboxClient {
23
23
  to: address,
24
24
  received_after: receivedAfter.toISOString(),
25
25
  });
26
- if (filter?.from)
26
+ if (filter?.from) {
27
27
  params.set("from", filter.from);
28
- if (filter?.subject)
28
+ }
29
+ if (filter?.subject) {
29
30
  params.set("subject", filter.subject);
30
- if (filter?.body)
31
+ }
32
+ if (filter?.body) {
31
33
  params.set("body", filter.body);
34
+ }
32
35
  const path = `/api/messages?${params.toString()}`;
33
36
  let result;
34
37
  try {
@@ -90,8 +93,9 @@ class InboxClient {
90
93
  const codes = [];
91
94
  const codeRegex = /\b(\d{4,8})\b/g;
92
95
  for (const content of [text, html]) {
93
- if (!content)
96
+ if (!content) {
94
97
  continue;
98
+ }
95
99
  let match;
96
100
  while ((match = codeRegex.exec(content)) !== null) {
97
101
  if (!codes.includes(match[1])) {
package/dist/index.d.ts CHANGED
@@ -6,6 +6,5 @@ export { getProxyConfig } from "./config/proxy";
6
6
  export * from "./email";
7
7
  export * from "./kv";
8
8
  export * from "./playwright-extensions";
9
- export * from "./postgres";
10
9
  export * from "./webhook";
11
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,yBAAyB,CAAC;AACxC,cAAc,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -28,5 +28,4 @@ Object.defineProperty(exports, "getProxyConfig", { enumerable: true, get: functi
28
28
  __exportStar(require("./email"), exports);
29
29
  __exportStar(require("./kv"), exports);
30
30
  __exportStar(require("./playwright-extensions"), exports);
31
- __exportStar(require("./postgres"), exports);
32
31
  __exportStar(require("./webhook"), exports);
@@ -25,8 +25,9 @@ fixtures_1.test.beforeEach(async ({ page }) => {
25
25
  });
26
26
  fixtures_1.test.afterEach(() => {
27
27
  // Delete overlay cache
28
- if (fs_1.default.existsSync(cache_1.CACHE_FILE))
28
+ if (fs_1.default.existsSync(cache_1.CACHE_FILE)) {
29
29
  fs_1.default.unlinkSync(cache_1.CACHE_FILE);
30
+ }
30
31
  });
31
32
  (0, fixtures_1.test)("overlay dismiss should not trigger recursively when executing from cache", async ({ page, server, }) => {
32
33
  // Set up cache with a bad value: click on "Target" to dimiss the glass pane
@@ -12,22 +12,25 @@ fixtures_1.test.beforeEach(async ({ page }) => {
12
12
  });
13
13
  fixtures_1.test.afterAll(async () => {
14
14
  // Delete overlay cache
15
- if (fs_1.default.existsSync(cache_1.CACHE_FILE))
15
+ if (fs_1.default.existsSync(cache_1.CACHE_FILE)) {
16
16
  fs_1.default.unlinkSync(cache_1.CACHE_FILE);
17
+ }
17
18
  });
18
19
  function getCacheDataWithDom({ dom }) {
19
20
  const cacheData = JSON.parse(fs_1.default.readFileSync(cache_1.CACHE_FILE, "utf8"));
20
21
  return cacheData.data.find(({ element }) => {
21
- if (dom)
22
+ if (dom) {
22
23
  return element.dom.includes(dom);
24
+ }
23
25
  return false;
24
26
  });
25
27
  }
26
28
  function getCacheDataWithTextContent({ textContent }) {
27
29
  const cacheData = JSON.parse(fs_1.default.readFileSync(cache_1.CACHE_FILE, "utf8"));
28
30
  return cacheData.data.find(({ element }) => {
29
- if (textContent)
31
+ if (textContent) {
30
32
  return element.textContent.includes(textContent);
33
+ }
31
34
  return false;
32
35
  });
33
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-cleanup-test-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/attachment-cleanup-test-reporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAwCnC,cAAM,6BAA8B,YAAW,QAAQ;IACrD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAkC;;IAYhD,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IA2BvC,KAAK,CAAC,OAAO,EAAE,UAAU;CA0BhC;AAED,eAAe,6BAA6B,CAAC"}
1
+ {"version":3,"file":"attachment-cleanup-test-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/attachment-cleanup-test-reporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AA0CnC,cAAM,6BAA8B,YAAW,QAAQ;IACrD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAkC;;IAYhD,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IA2BvC,KAAK,CAAC,OAAO,EAAE,UAAU;CA0BhC;AAED,eAAe,6BAA6B,CAAC"}
@@ -33,8 +33,9 @@ class AsyncQueue {
33
33
  finally {
34
34
  this._running--;
35
35
  const next = this._waiting.shift();
36
- if (next)
36
+ if (next) {
37
37
  next();
38
+ }
38
39
  }
39
40
  }
40
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-cleanup.d.ts","sourceRoot":"","sources":["../../src/reporter/attachment-cleanup.ts"],"names":[],"mappings":"AAoDA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAyC;gBAE7C,UAAU,GAAE,MAAmC;IAY3D;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;IAelD;;;OAGG;IACH,YAAY,CAAC,cAAc,EAAE,MAAM;IASnC,OAAO,CAAC,MAAM;IA4Bd,OAAO,CAAC,cAAc;IAStB,UAAU;IAUV,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAE3C;IAED,IAAI,KAAK;;;;;;;;;MAWR;CACF"}
1
+ {"version":3,"file":"attachment-cleanup.d.ts","sourceRoot":"","sources":["../../src/reporter/attachment-cleanup.ts"],"names":[],"mappings":"AA2DA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAyC;gBAE7C,UAAU,GAAE,MAAmC;IAY3D;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;IAmBlD;;;OAGG;IACH,YAAY,CAAC,cAAc,EAAE,MAAM;IAWnC,OAAO,CAAC,MAAM;IA4Bd,OAAO,CAAC,cAAc;IAStB,UAAU;IAUV,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAE3C;IAED,IAAI,KAAK;;;;;;;;;MAWR;CACF"}
@@ -11,18 +11,21 @@ function getDefaultDiskLimitBytes() {
11
11
  const raw = process.env.ATTACHMENT_CLEANUP_LIMIT_BYTES;
12
12
  if (raw != null) {
13
13
  const parsed = Number(raw);
14
- if (Number.isSafeInteger(parsed) && parsed > 0)
14
+ if (Number.isSafeInteger(parsed) && parsed > 0) {
15
15
  return parsed;
16
+ }
16
17
  logger_1.logger.warn(`[AttachmentCleanup] Invalid ATTACHMENT_CLEANUP_LIMIT_BYTES=${raw}, using default`);
17
18
  }
18
19
  return 10 * 1024 * 1024 * 1024; // 10 GB
19
20
  }
20
21
  const DISK_LOG_INTERVAL_MS = 30_000;
21
22
  function formatBytes(bytes) {
22
- if (bytes < 1024 * 1024)
23
+ if (bytes < 1024 * 1024) {
23
24
  return `${(bytes / 1024).toFixed(1)} KB`;
24
- if (bytes < 1024 * 1024 * 1024)
25
+ }
26
+ if (bytes < 1024 * 1024 * 1024) {
25
27
  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
28
+ }
26
29
  return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;
27
30
  }
28
31
  function getDiskUsage() {
@@ -39,8 +42,9 @@ function getDiskUsage() {
39
42
  function getDiskBreakdown() {
40
43
  try {
41
44
  const output = (0, child_process_1.execSync)("du -sh test-results/.playwright-artifacts-* test-results/ blob-report/ playwright-report/ /tmp/playwright-artifacts-* 2>/dev/null | sort -rh", { encoding: "utf8", timeout: 8000, cwd: "/app/source-repo" }).trim();
42
- if (!output)
45
+ if (!output) {
43
46
  return "none";
47
+ }
44
48
  const lines = output
45
49
  .split("\n")
46
50
  .map((l) => l.replace("test-results/", "").replace(/\t/g, " "));
@@ -89,7 +93,9 @@ class AttachmentCleanup {
89
93
  _onEvict = null;
90
94
  constructor(limitBytes = getDefaultDiskLimitBytes()) {
91
95
  this._limitBytes = limitBytes;
92
- logger_1.logger.debug(`[AttachmentCleanup] Initialized with limit: ${formatBytes(limitBytes)}`);
96
+ // logger.debug(
97
+ // `[AttachmentCleanup] Initialized with limit: ${formatBytes(limitBytes)}`,
98
+ // );
93
99
  this._diskLogTimer = setInterval(() => {
94
100
  this._logDiskStatus();
95
101
  }, DISK_LOG_INTERVAL_MS);
@@ -102,10 +108,12 @@ class AttachmentCleanup {
102
108
  */
103
109
  register(attachment) {
104
110
  try {
105
- if (!attachment.path)
111
+ if (!attachment.path) {
106
112
  return;
107
- if (this._pending.has(attachment.path))
113
+ }
114
+ if (this._pending.has(attachment.path)) {
108
115
  return;
116
+ }
109
117
  const stat = fs_1.default.statSync(attachment.path);
110
118
  const sizeBytes = stat.size;
111
119
  this._pending.set(attachment.path, sizeBytes);
@@ -123,8 +131,9 @@ class AttachmentCleanup {
123
131
  */
124
132
  markUploaded(attachmentPath) {
125
133
  const size = this._pending.get(attachmentPath);
126
- if (size === undefined)
134
+ if (size === undefined) {
127
135
  return;
136
+ }
128
137
  this._pending.delete(attachmentPath);
129
138
  this._uploaded.push({ path: attachmentPath, size });
130
139
  this._uploadedCount++;
@@ -1 +1 @@
1
- {"version":3,"file":"blob-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/blob-utils.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,aAAa,CAEf;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAoEjC"}
1
+ {"version":3,"file":"blob-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/blob-utils.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,aAAa,CAEf;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwEjC"}
@@ -28,8 +28,9 @@ async function patchBlobZip(zipPath, attachmentUrlMap) {
28
28
  retryCounters.set(testId, retryIndex + 1);
29
29
  testRetryMap.set(event.params.result.id, retryIndex);
30
30
  for (const attachment of event.params.result?.attachments ?? []) {
31
- if (!attachment.path)
31
+ if (!attachment.path) {
32
32
  continue;
33
+ }
33
34
  const key = makeAttachmentKey(testId, retryIndex, attachment.name);
34
35
  const url = attachmentUrlMap.get(key);
35
36
  if (url) {
@@ -42,8 +43,9 @@ async function patchBlobZip(zipPath, attachmentUrlMap) {
42
43
  const resultId = event.params.resultId;
43
44
  const retryIndex = testRetryMap.get(resultId) ?? retryCounters.get(testId) ?? 0;
44
45
  for (const attachment of event.params.attachments ?? []) {
45
- if (!attachment.path)
46
+ if (!attachment.path) {
46
47
  continue;
48
+ }
47
49
  const key = makeAttachmentKey(testId, retryIndex, attachment.name);
48
50
  const url = attachmentUrlMap.get(key);
49
51
  if (url) {
@@ -1 +1 @@
1
- {"version":3,"file":"empirical-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/empirical-reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAuBnC,cAAM,iBAAkB,YAAW,QAAQ;IACzC,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAG1B;IACF,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,kBAAkB,CAA2B;;IAMrD,OAAO,CAAC,6BAA6B,CAqCnC;IAEF,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IA+HtC,KAAK,CAAC,MAAM,EAAE,UAAU;IAmG9B,OAAO,CAAC,qBAAqB;YAkBf,gBAAgB;YAOhB,iBAAiB;CAmChC;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"empirical-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/empirical-reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAuBnC,cAAM,iBAAkB,YAAW,QAAQ;IACzC,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAG1B;IACF,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,kBAAkB,CAA2B;;IAMrD,OAAO,CAAC,6BAA6B,CAuCnC;IAEF,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAmItC,KAAK,CAAC,MAAM,EAAE,UAAU;IAuG9B,OAAO,CAAC,qBAAqB;YAkBf,gBAAgB;YAOhB,iBAAiB;CAqChC;AAED,eAAe,iBAAiB,CAAC"}
@@ -27,8 +27,9 @@ class EmpiricalReporter {
27
27
  this._uploader = (0, uploader_1.getUploader)();
28
28
  }
29
29
  enqueTestAttachmentUploadTask = async (attachment) => {
30
- if (!this._uploader)
30
+ if (!this._uploader) {
31
31
  return;
32
+ }
32
33
  if (!attachment.path) {
33
34
  logger_1.logger.warn(`[Empirical Reporter] Skipping attachment without path: ${attachment.name}`);
34
35
  return;
@@ -48,10 +49,12 @@ class EmpiricalReporter {
48
49
  }
49
50
  };
50
51
  onTestEnd(test, result) {
51
- if ((0, reporter_state_1.isFinalized)())
52
+ if ((0, reporter_state_1.isFinalized)()) {
52
53
  return;
53
- if (!this._uploader)
54
+ }
55
+ if (!this._uploader) {
54
56
  return;
57
+ }
55
58
  if (!process.env.TEST_RUN_GITHUB_ACTION_ID) {
56
59
  logger_1.logger.debug("[Empirical Reporter] TEST_RUN_GITHUB_ACTION_ID is not set");
57
60
  return;
@@ -154,10 +157,12 @@ class EmpiricalReporter {
154
157
  }
155
158
  }
156
159
  async onEnd(result) {
157
- if ((0, reporter_state_1.isFinalized)())
160
+ if ((0, reporter_state_1.isFinalized)()) {
158
161
  return;
159
- if (!this._uploader)
162
+ }
163
+ if (!this._uploader) {
160
164
  return;
165
+ }
161
166
  logger_1.logger.info(`[Empirical Reporter] Test run completed with status: ${result.status}`);
162
167
  logger_1.logger.debug(`[Empirical Reporter] State: cwd=${this._currentWorkingDir}, hasSharding=${this._hasSharding}`);
163
168
  const startTime = Date.now();
@@ -237,8 +242,9 @@ class EmpiricalReporter {
237
242
  }
238
243
  }
239
244
  async _uploadBlobReport(blobDir) {
240
- if (!this._uploader)
245
+ if (!this._uploader) {
241
246
  return;
247
+ }
242
248
  const uploadStartTime = Date.now();
243
249
  try {
244
250
  const files = await fs_1.default.promises.readdir(blobDir);
@@ -3,6 +3,10 @@ export interface IBRTestContext {
3
3
  blobDir: string;
4
4
  zipPath: string;
5
5
  }
6
+ export interface TestCaseSyncTestContext {
7
+ tempDir: string;
8
+ outputPath: string;
9
+ }
6
10
  export declare function sleep(ms: number): Promise<void>;
7
11
  /**
8
12
  * Sets up a temp directory with the IBR fixture files.
@@ -12,6 +16,10 @@ export declare function setupFixture(suite: string): Promise<{
12
16
  ctx: IBRTestContext;
13
17
  cleanup: () => Promise<void>;
14
18
  }>;
19
+ export declare function setupTestCaseSyncFixture(suite: string): Promise<{
20
+ ctx: TestCaseSyncTestContext;
21
+ cleanup: () => Promise<void>;
22
+ }>;
15
23
  /**
16
24
  * Cleans blob artifacts from a previous run inside the same temp dir.
17
25
  */
@@ -31,6 +39,7 @@ export declare function runPlaywrightWithSigint(ctx: IBRTestContext, opts: {
31
39
  workers: number;
32
40
  waitFor: WaitFor;
33
41
  }): Promise<RunResult>;
42
+ export declare function runPlaywrightList(ctx: TestCaseSyncTestContext): Promise<RunResult>;
34
43
  export interface BlobEvent {
35
44
  method: string;
36
45
  params?: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/reporter/harness.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACzD,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC,CA2BD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,OAAO,GAAG,cAAc,GAAG,cAAc,CAAC;AAOtD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC1C,OAAO,CAAC,SAAS,CAAC,CAiDpB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,SAAS,EAAE,CAAC,CAUtB"}
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/reporter/harness.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACzD,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC,CAaD;AAqCD,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACrE,GAAG,EAAE,uBAAuB,CAAC;IAC7B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC,CAaD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,OAAO,GAAG,cAAc,GAAG,cAAc,CAAC;AAOtD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC1C,OAAO,CAAC,SAAS,CAAC,CAiDpB;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,uBAAuB,GAC3B,OAAO,CAAC,SAAS,CAAC,CA6BpB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,SAAS,EAAE,CAAC,CAUtB"}
@@ -5,8 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.sleep = sleep;
7
7
  exports.setupFixture = setupFixture;
8
+ exports.setupTestCaseSyncFixture = setupTestCaseSyncFixture;
8
9
  exports.cleanBlobArtifacts = cleanBlobArtifacts;
9
10
  exports.runPlaywrightWithSigint = runPlaywrightWithSigint;
11
+ exports.runPlaywrightList = runPlaywrightList;
10
12
  exports.readBlobEvents = readBlobEvents;
11
13
  const zip_1 = require("@empiricalrun/r2-uploader/zip");
12
14
  const child_process_1 = require("child_process");
@@ -15,6 +17,7 @@ const os_1 = __importDefault(require("os"));
15
17
  const path_1 = __importDefault(require("path"));
16
18
  const TEST_DATA_DIR = path_1.default.resolve(__dirname, "../../test-data");
17
19
  const REPORTER_PATH = path_1.default.resolve(__dirname, "../../dist/reporter/incremental-blob-reporter.js");
20
+ const TEST_CASE_SYNC_REPORTER_PATH = path_1.default.resolve(__dirname, "../../dist/reporter/test-case-sync-reporter.js");
18
21
  const PLAYWRIGHT_BIN = path_1.default.resolve(__dirname, "../../node_modules/.bin/playwright");
19
22
  async function sleep(ms) {
20
23
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -24,27 +27,52 @@ async function sleep(ms) {
24
27
  * Returns a context object and a cleanup function.
25
28
  */
26
29
  async function setupFixture(suite) {
30
+ const { tempDir, cleanup } = await setupReporterFixture({
31
+ suite,
32
+ reporterPath: REPORTER_PATH,
33
+ tempPrefix: "incr-blob-test-",
34
+ });
35
+ const blobDir = path_1.default.join(tempDir, "blob-report-incremental");
36
+ const zipPath = path_1.default.join(blobDir, "incremental-report-1.zip");
37
+ return {
38
+ ctx: { tempDir, blobDir, zipPath },
39
+ cleanup,
40
+ };
41
+ }
42
+ async function setupReporterFixture({ suite, reporterPath, tempPrefix, }) {
27
43
  const fixtureDir = path_1.default.join(TEST_DATA_DIR, suite);
28
- const tempDir = await fs_1.default.promises.mkdtemp(path_1.default.join(os_1.default.tmpdir(), "incr-blob-test-"));
44
+ const tempDir = await fs_1.default.promises.mkdtemp(path_1.default.join(os_1.default.tmpdir(), tempPrefix));
29
45
  const files = await fs_1.default.promises.readdir(fixtureDir);
30
46
  for (const file of files) {
31
47
  const src = path_1.default.join(fixtureDir, file);
32
48
  const dest = path_1.default.join(tempDir, file);
33
49
  if (file === "playwright.config.ts") {
34
50
  const content = await fs_1.default.promises.readFile(src, "utf8");
35
- await fs_1.default.promises.writeFile(dest, content.replace("__REPORTER_PATH__", REPORTER_PATH));
51
+ await fs_1.default.promises.writeFile(dest, content.replace("__REPORTER_PATH__", reporterPath));
36
52
  }
37
53
  else {
38
54
  await fs_1.default.promises.copyFile(src, dest);
39
55
  }
40
56
  }
41
- const blobDir = path_1.default.join(tempDir, "blob-report-incremental");
42
- const zipPath = path_1.default.join(blobDir, "incremental-report-1.zip");
43
57
  return {
44
- ctx: { tempDir, blobDir, zipPath },
58
+ tempDir,
45
59
  cleanup: () => fs_1.default.promises.rm(tempDir, { recursive: true, force: true }),
46
60
  };
47
61
  }
62
+ async function setupTestCaseSyncFixture(suite) {
63
+ const { tempDir, cleanup } = await setupReporterFixture({
64
+ suite,
65
+ reporterPath: TEST_CASE_SYNC_REPORTER_PATH,
66
+ tempPrefix: "test-case-sync-",
67
+ });
68
+ return {
69
+ ctx: {
70
+ tempDir,
71
+ outputPath: path_1.default.join(tempDir, "test-case-sync.json"),
72
+ },
73
+ cleanup,
74
+ };
75
+ }
48
76
  /**
49
77
  * Cleans blob artifacts from a previous run inside the same temp dir.
50
78
  */
@@ -108,6 +136,31 @@ async function runPlaywrightWithSigint(ctx, opts) {
108
136
  });
109
137
  return { stdout, stderr };
110
138
  }
139
+ async function runPlaywrightList(ctx) {
140
+ const child = (0, child_process_1.spawn)(PLAYWRIGHT_BIN, ["test", "--list"], {
141
+ cwd: ctx.tempDir,
142
+ env: {
143
+ ...process.env,
144
+ EMPIRICAL_TEST_CASE_SYNC_OUTPUT: ctx.outputPath,
145
+ },
146
+ stdio: ["pipe", "pipe", "pipe"],
147
+ });
148
+ let stdout = "";
149
+ let stderr = "";
150
+ child.stdout?.on("data", (data) => {
151
+ stdout += data.toString();
152
+ });
153
+ child.stderr?.on("data", (data) => {
154
+ stderr += data.toString();
155
+ });
156
+ const exitCode = await new Promise((resolve) => {
157
+ child.on("close", (code) => resolve(code));
158
+ });
159
+ if (exitCode !== 0) {
160
+ throw new Error(`playwright test --list failed with exit code ${exitCode}\n${stderr}`);
161
+ }
162
+ return { stdout, stderr };
163
+ }
111
164
  /**
112
165
  * Reads `report.jsonl` from the blob zip and returns parsed events.
113
166
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ibr-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/ibr-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAO3E,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,CAAC;AAIF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAChD,WAAW,EAAE,CAOf;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAO3E;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,EAAE,QAAQ,GACb,MAAM,CAOR;AAID,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD,CAAC;AAIF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,CAAC;CACvC,CAAC;AAIF,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAc3E;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAsBvE;AAMD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC5B,SAAS,GAAG,IAAI,CAmBlB;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAK7D;AAED,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAED,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CAkBf"}
1
+ {"version":3,"file":"ibr-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/ibr-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAO3E,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,CAAC;AAIF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAChD,WAAW,EAAE,CAOf;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAO3E;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,EAAE,QAAQ,GACb,MAAM,CAOR;AAID,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD,CAAC;AAIF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,CAAC;CACvC,CAAC;AAIF,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAc3E;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAsBvE;AAMD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC5B,SAAS,GAAG,IAAI,CAqBlB;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAK7D;AAED,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAED,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CAoBf"}
@@ -107,8 +107,9 @@ function filterSuiteByCompletedTests(suite, completedTestIds) {
107
107
  }
108
108
  }
109
109
  }
110
- if (filteredEntries.length === 0)
110
+ if (filteredEntries.length === 0) {
111
111
  return null;
112
+ }
112
113
  return { ...suite, entries: filteredEntries };
113
114
  }
114
115
  function hasValidReport(reportLines) {
@@ -133,8 +134,9 @@ function toResourcePath(absolutePath) {
133
134
  return `resources/${hash}${ext}`;
134
135
  }
135
136
  function embedAttachment(attachmentPath, resultId, stagingDir) {
136
- if (!attachmentPath || !fs_1.default.existsSync(attachmentPath))
137
+ if (!attachmentPath || !fs_1.default.existsSync(attachmentPath)) {
137
138
  return null;
139
+ }
138
140
  if (!isLocalTesting()) {
139
141
  return null;
140
142
  }
@@ -1 +1 @@
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,UAAU,EACV,QAAQ,EACT,MAAM,2BAA2B,CAAC;AAwBnC;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnD,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,SAAS,CAAyB;IAC1C,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAGN;IACd,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,gBAAgB,CAA8B;;IAetD,OAAO,CAAC,cAAc,CAA6B;IAEnD,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,qBAAqB;YASf,uBAAuB;IAqErC,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,8BAA8B;IAStC,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,KAAK,QAAQ,GAKnB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;YAUP,SAAS;IAwBvB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAgB/C,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAIrD,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAyBnD,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAYrE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAY7D,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9C;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI5D,aAAa,IAAI,OAAO;CAGzB;AAID,wBAAgB,0BAA0B,IAAI,uBAAuB,GAAG,IAAI,CAE3E;AAED,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,uBAAuB,GAChC,IAAI,CAEN;AAED,eAAe,uBAAuB,CAAC"}
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,UAAU,EACV,QAAQ,EACT,MAAM,2BAA2B,CAAC;AAwBnC;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnD,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,SAAS,CAAyB;IAC1C,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAGN;IACd,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,gBAAgB,CAA8B;;IAetD,OAAO,CAAC,cAAc,CAA6B;IAEnD,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,qBAAqB;YASf,uBAAuB;IAqErC,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,8BAA8B;IAWtC,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,KAAK,QAAQ,GAKnB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,aAAa;YAUP,SAAS;IAwBvB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAgB/C,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAIrD,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAyBnD,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAYrE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAY7D,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9C;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI5D,aAAa,IAAI,OAAO;CAGzB;AAID,wBAAgB,0BAA0B,IAAI,uBAAuB,GAAG,IAAI,CAE3E;AAED,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,uBAAuB,GAChC,IAAI,CAEN;AAED,eAAe,uBAAuB,CAAC"}
@@ -148,8 +148,9 @@ class IncrementalBlobReporter {
148
148
  this._reportLines = this._reportLines.filter((line) => {
149
149
  const parsed = JSON.parse(line);
150
150
  const resultId = parsed.params?.resultId ?? parsed.params?.result?.id;
151
- if (!resultId)
151
+ if (!resultId) {
152
152
  return true;
153
+ }
153
154
  return this._completedResultIds.has(resultId);
154
155
  });
155
156
  }
@@ -157,8 +158,9 @@ class IncrementalBlobReporter {
157
158
  for (let i = 0; i < this._reportLines.length; i++) {
158
159
  const line = this._reportLines[i];
159
160
  const parsed = JSON.parse(line);
160
- if (parsed.method !== "onProject")
161
+ if (parsed.method !== "onProject") {
161
162
  continue;
163
+ }
162
164
  const project = parsed.params.project;
163
165
  const filteredSuites = project.suites
164
166
  .map((suite) => (0, ibr_utils_1.filterSuiteByCompletedTests)(suite, this._completedTestIds))
@@ -181,8 +183,9 @@ class IncrementalBlobReporter {
181
183
  fs_1.default.mkdirSync(this._outputDir, { recursive: true });
182
184
  }
183
185
  _appendEvent(event) {
184
- if ((0, reporter_state_1.isFinalized)())
186
+ if ((0, reporter_state_1.isFinalized)()) {
185
187
  return false;
188
+ }
186
189
  this._reportLines.push(JSON.stringify(event));
187
190
  return true;
188
191
  }
@@ -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,UAAU,EACV,QAAQ,EACT,MAAM,2BAA2B,CAAC;AAgBnC,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,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,SAAS,EAAE,CAmDb;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,KAAK,EACnB,iBAAiB,EAAE,MAAM,GACxB,SAAS,CA+BX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAeX;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,EAAE,MAAM,GACjB,SAAS,EAAE,CAqDb;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,GAC/B,SAAS,CAsBX;AAED,wBAAgB,mBAAmB,CACjC,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,GAC/B,SAAS,CAuBX;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,UAAU,EACV,QAAQ,EACT,MAAM,2BAA2B,CAAC;AAgBnC,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,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,SAAS,EAAE,CAqDb;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,KAAK,EACnB,iBAAiB,EAAE,MAAM,GACxB,SAAS,CA+BX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAeX;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,EAAE,MAAM,GACjB,SAAS,EAAE,CAqDb;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,GAC/B,SAAS,CAsBX;AAED,wBAAgB,mBAAmB,CACjC,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,GAC/B,SAAS,CAuBX;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAW7D"}
@@ -52,8 +52,9 @@ function buildOnBeginEvents(config, suite, currentWorkingDir, shardIndex, totalS
52
52
  // 3. onProject for each project
53
53
  for (const projectSuite of suite.suites) {
54
54
  const project = config.projects.find((p) => p.name === projectSuite.title);
55
- if (!project)
55
+ if (!project) {
56
56
  continue;
57
+ }
57
58
  events.push(buildOnProjectEvent(config, project, projectSuite, currentWorkingDir));
58
59
  }
59
60
  // 4. onBegin (empty params per Playwright format)
@@ -0,0 +1,12 @@
1
+ import type { FullConfig, Reporter, Suite } from "@playwright/test/reporter";
2
+ interface TestCaseSyncReporterOptions {
3
+ outputFile?: string;
4
+ }
5
+ declare class TestCaseSyncReporter implements Reporter {
6
+ private readonly outputFile;
7
+ constructor(options?: TestCaseSyncReporterOptions);
8
+ printsToStdio(): boolean;
9
+ onBegin(config: FullConfig, suite: Suite): void;
10
+ }
11
+ export default TestCaseSyncReporter;
12
+ //# sourceMappingURL=test-case-sync-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-case-sync-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/test-case-sync-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAK7E,UAAU,2BAA2B;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,cAAM,oBAAqB,YAAW,QAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,GAAE,2BAAgC;IAOrD,aAAa,IAAI,OAAO;IAIxB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAOhD;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const test_case_sync_1 = require("./test-case-sync");
9
+ class TestCaseSyncReporter {
10
+ outputFile;
11
+ constructor(options = {}) {
12
+ this.outputFile =
13
+ options.outputFile ||
14
+ process.env.EMPIRICAL_TEST_CASE_SYNC_OUTPUT ||
15
+ "test-case-sync.json";
16
+ }
17
+ printsToStdio() {
18
+ return false;
19
+ }
20
+ onBegin(config, suite) {
21
+ const manifest = (0, test_case_sync_1.collectTestCaseSyncManifest)(config, suite);
22
+ fs_1.default.mkdirSync(path_1.default.dirname(path_1.default.resolve(this.outputFile)), {
23
+ recursive: true,
24
+ });
25
+ fs_1.default.writeFileSync(this.outputFile, JSON.stringify(manifest, null, 2));
26
+ }
27
+ }
28
+ exports.default = TestCaseSyncReporter;