@empiricalrun/playwright-utils 0.35.1 → 0.36.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @empiricalrun/playwright-utils
2
2
 
3
+ ## 0.36.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 2d9919d: feat: consolidate zip utils and move to streaming
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [2d9919d]
12
+ - @empiricalrun/r2-uploader@0.7.0
13
+ - @empiricalrun/test-gen@0.78.5
14
+
3
15
  ## 0.35.1
4
16
 
5
17
  ### Patch Changes
@@ -1,4 +1,4 @@
1
1
  export type AttachmentKey = string;
2
2
  export declare function makeAttachmentKey(testId: string, retryIndex: number, attachmentName: string): AttachmentKey;
3
- export declare function patchBlobZip(zipPath: string, attachmentUrlMap: Map<AttachmentKey, string>): Record<string, string>;
3
+ export declare function patchBlobZip(zipPath: string, attachmentUrlMap: Map<AttachmentKey, string>): Promise<Record<string, string>>;
4
4
  //# sourceMappingURL=blob-utils.d.ts.map
@@ -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,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,GAC3C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoExB"}
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,27 +1,25 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.makeAttachmentKey = makeAttachmentKey;
7
4
  exports.patchBlobZip = patchBlobZip;
8
- const adm_zip_1 = __importDefault(require("adm-zip"));
5
+ const zip_1 = require("@empiricalrun/r2-uploader/zip");
9
6
  const logger_1 = require("../logger");
10
7
  function makeAttachmentKey(testId, retryIndex, attachmentName) {
11
8
  return `${testId}|${retryIndex}|${attachmentName}`;
12
9
  }
13
- function patchBlobZip(zipPath, attachmentUrlMap) {
14
- const zip = new adm_zip_1.default(zipPath);
15
- const reportEntry = zip.getEntry("report.jsonl");
16
- if (!reportEntry) {
10
+ async function patchBlobZip(zipPath, attachmentUrlMap) {
11
+ const resourceToUrlMap = {};
12
+ const reportContent = await (0, zip_1.readZipEntry)(zipPath, "report.jsonl");
13
+ if (!reportContent) {
17
14
  logger_1.logger.debug(`[Blob Utils] No report.jsonl found in blob zip: ${zipPath}`);
18
15
  return {};
19
16
  }
20
- const content = reportEntry.getData().toString("utf8");
21
- const lines = content.split("\n").filter((line) => line.length);
17
+ const lines = reportContent
18
+ .toString("utf8")
19
+ .split("\n")
20
+ .filter((line) => line.length);
22
21
  const retryCounters = new Map();
23
22
  const testRetryMap = new Map();
24
- const resourceToUrlMap = {};
25
23
  for (const line of lines) {
26
24
  const event = JSON.parse(line);
27
25
  if (event.method === "onTestEnd") {
@@ -54,13 +52,15 @@ function patchBlobZip(zipPath, attachmentUrlMap) {
54
52
  }
55
53
  }
56
54
  }
57
- zip.addFile("_empirical_urls.json", Buffer.from(JSON.stringify(resourceToUrlMap, null, 2)));
58
- for (const entry of zip.getEntries()) {
59
- if (entry.entryName.startsWith("resources/")) {
60
- zip.deleteFile(entry.entryName);
61
- }
62
- }
63
- zip.writeZip(zipPath);
55
+ await (0, zip_1.patchZipFile)(zipPath, {
56
+ filterEntry: (filename) => !filename.startsWith("resources/"),
57
+ newEntries: [
58
+ {
59
+ filename: "_empirical_urls.json",
60
+ content: Buffer.from(JSON.stringify(resourceToUrlMap, null, 2)),
61
+ },
62
+ ],
63
+ });
64
64
  logger_1.logger.debug(`[Blob Utils] Patched blob zip: ${zipPath}, mapped ${Object.keys(resourceToUrlMap).length} resources`);
65
65
  return resourceToUrlMap;
66
66
  }
@@ -17,7 +17,6 @@ declare class EmpiricalReporter implements Reporter {
17
17
  onTestEnd(test: TestCase, result: TestResult): void;
18
18
  onEnd(result: FullResult): Promise<void>;
19
19
  private _patchBlobReport;
20
- private _patchBlobZip;
21
20
  private _uploadBlobReport;
22
21
  }
23
22
  export default EmpiricalReporter;
@@ -1 +1 @@
1
- {"version":3,"file":"empirical-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/empirical-reporter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAkBnC,cAAM,iBAAkB,YAAW,QAAQ;IACzC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAAkB;IAC9C,OAAO,CAAC,oBAAoB,CAG1B;IACF,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,UAAU,CACwE;IAC1F,OAAO,CAAC,sBAAsB,CAAuB;IAErD,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,YAAY;;IAyBpB,OAAO,CAAC,6BAA6B,CA4BnC;IAEF,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAuFtC,KAAK,CAAC,MAAM,EAAE,UAAU;YA4HhB,gBAAgB;IAO9B,OAAO,CAAC,aAAa;YAIP,iBAAiB;CAWhC;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"empirical-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/empirical-reporter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAkBnC,cAAM,iBAAkB,YAAW,QAAQ;IACzC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAAkB;IAC9C,OAAO,CAAC,oBAAoB,CAG1B;IACF,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,UAAU,CACwE;IAC1F,OAAO,CAAC,sBAAsB,CAAuB;IAErD,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,YAAY;;IAyBpB,OAAO,CAAC,6BAA6B,CA4BnC;IAEF,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAuFtC,KAAK,CAAC,MAAM,EAAE,UAAU;YA4HhB,gBAAgB;YAOhB,iBAAiB;CAWhC;AAED,eAAe,iBAAiB,CAAC"}
@@ -219,12 +219,9 @@ class EmpiricalReporter {
219
219
  async _patchBlobReport(blobDir) {
220
220
  const files = await fs_1.default.promises.readdir(blobDir);
221
221
  for (const fileName of files.filter((f) => f.endsWith(".zip"))) {
222
- this._patchBlobZip(path_1.default.join(blobDir, fileName));
222
+ await (0, blob_utils_1.patchBlobZip)(path_1.default.join(blobDir, fileName), this._attachmentUrlMap);
223
223
  }
224
224
  }
225
- _patchBlobZip(zipPath) {
226
- (0, blob_utils_1.patchBlobZip)(zipPath, this._attachmentUrlMap);
227
- }
228
225
  async _uploadBlobReport(blobDir) {
229
226
  const uploadTask = (0, uploader_1.createUploadTaskV2)({
230
227
  sourceDir: blobDir,
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/reporter/util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,cAAc,EAGd,UAAU,IAAI,oBAAoB,EAElC,QAAQ,EACT,MAAM,2BAA2B,CAAC;AAoBnC,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAmB7D;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,SAAS,UAMhC;AAED,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5E,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAyCD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ;;;EAwBrD;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAyDf;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,GAAG,EACR,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GACnC,GAAG,CAIL;AAED,wBAAsB,gCAAgC,CACpD,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,iBAwGjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,GAAG,EACb,iBAAiB,EAAE,GAAG,CACpB,MAAM,EACN;IAAE,WAAW,EAAE,2BAA2B,EAAE,CAAA;CAAE,EAAE,CACjD,QA+BF;AAGD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,oBAAoB,EACjC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,QAavC;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,mBAAmB,EAAE,MAAM,EAC3B,QAAQ,EAAE,MAAM,EAChB,cAAc,GAAE,OAAe,GAC9B,GAAG,CAAC,MAAM,EAAE;IAAE,WAAW,EAAE,2BAA2B,EAAE,CAAA;CAAE,EAAE,CAAC,CA4C/D;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,6CAoClB"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/reporter/util.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,cAAc,EAGd,UAAU,IAAI,oBAAoB,EAElC,QAAQ,EACT,MAAM,2BAA2B,CAAC;AAmBnC,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAmB7D;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,SAAS,UAMhC;AAED,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5E,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAyCD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ;;;EAwBrD;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAyDf;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,GAAG,EACR,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GACnC,GAAG,CAIL;AAED,wBAAsB,gCAAgC,CACpD,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,iBAuGjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,GAAG,EACb,iBAAiB,EAAE,GAAG,CACpB,MAAM,EACN;IAAE,WAAW,EAAE,2BAA2B,EAAE,CAAA;CAAE,EAAE,CACjD,QA+BF;AAGD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,oBAAoB,EACjC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,QAavC;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,mBAAmB,EAAE,MAAM,EAC3B,QAAQ,EAAE,MAAM,EAChB,cAAc,GAAE,OAAe,GAC9B,GAAG,CAAC,MAAM,EAAE;IAAE,WAAW,EAAE,2BAA2B,EAAE,CAAA;CAAE,EAAE,CAAC,CA4C/D;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,6CAoClB"}
@@ -15,7 +15,7 @@ exports.traverseJsonReportSuites = traverseJsonReportSuites;
15
15
  exports.buildTestAttachmentMapFromSummary = buildTestAttachmentMapFromSummary;
16
16
  exports.checkFileExistsAsync = checkFileExistsAsync;
17
17
  exports.updateSummaryJsonAttachmentPaths = updateSummaryJsonAttachmentPaths;
18
- const adm_zip_1 = __importDefault(require("adm-zip"));
18
+ const zip_1 = require("@empiricalrun/r2-uploader/zip");
19
19
  const async_retry_1 = __importDefault(require("async-retry"));
20
20
  const fs_1 = __importDefault(require("fs"));
21
21
  const path_1 = __importDefault(require("path"));
@@ -181,7 +181,7 @@ async function updateHtmlZipFileAttachmentPaths(jsonFilePath, htmlFilePath, repo
181
181
  const zipPath = path_1.default.join(tempDir, "archive.zip");
182
182
  try {
183
183
  await fs_1.default.promises.writeFile(zipPath, Buffer.from(base64, "base64"));
184
- new adm_zip_1.default(zipPath).extractAllTo(tempDir, true);
184
+ await (0, zip_1.extractZipToDirectory)(zipPath, tempDir);
185
185
  await fs_1.default.promises.unlink(zipPath);
186
186
  }
187
187
  catch (err) {
@@ -205,9 +205,8 @@ async function updateHtmlZipFileAttachmentPaths(jsonFilePath, htmlFilePath, repo
205
205
  console.error(`❌ Error processing test file ${file}:`, err);
206
206
  }
207
207
  }
208
- const newZip = new adm_zip_1.default();
209
- newZip.addLocalFolder(tempDir);
210
- const newBase64 = newZip.toBuffer().toString("base64");
208
+ const newBuffer = await (0, zip_1.createZipFromDirectory)(tempDir);
209
+ const newBase64 = newBuffer.toString("base64");
211
210
  let updatedHtml;
212
211
  if (oldFormatMatch) {
213
212
  // Old format (1.53.x): window.playwrightReportBase64 = "..."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/playwright-utils",
3
- "version": "0.35.1",
3
+ "version": "0.36.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -29,7 +29,6 @@
29
29
  "@types/console-log-level": "^1.4.5",
30
30
  "@types/node": "^20.14.9",
31
31
  "@types/serve-handler": "^6.1.4",
32
- "@types/adm-zip": "^0.5.7",
33
32
  "@types/pg": "^8.11.6",
34
33
  "playwright-core": "1.53.2",
35
34
  "serve-handler": "^6.1.6",
@@ -38,15 +37,14 @@
38
37
  "dependencies": {
39
38
  "@babel/code-frame": "^7.24.7",
40
39
  "pg": "^8.13.1",
41
- "adm-zip": "^0.5.16",
42
40
  "async-retry": "^1.3.3",
43
41
  "authenticator": "^1.1.5",
44
42
  "console-log-level": "^1.4.1",
45
43
  "puppeteer-extra-plugin-recaptcha": "^3.6.8",
46
44
  "rimraf": "^6.0.1",
47
45
  "@empiricalrun/llm": "^0.25.1",
48
- "@empiricalrun/r2-uploader": "^0.6.0",
49
- "@empiricalrun/test-gen": "^0.78.4"
46
+ "@empiricalrun/r2-uploader": "^0.7.0",
47
+ "@empiricalrun/test-gen": "^0.78.5"
50
48
  },
51
49
  "scripts": {
52
50
  "dev": "tsc --build --watch",