@alwaysmeticulous/downloading-helpers 2.280.0 → 2.282.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.
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="bc2ffa54-201f-57fe-8754-905957d1b76a")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const fs_1 = require("fs");
6
+ const os_1 = require("os");
7
+ const path_1 = require("path");
8
+ const vitest_1 = require("vitest");
9
+ const replay_log_text_files_1 = require("../replay-log-text-files");
10
+ (0, vitest_1.describe)("ensureReplayLogTextFiles", () => {
11
+ let replayDir;
12
+ (0, vitest_1.beforeEach)(() => {
13
+ replayDir = (0, fs_1.mkdtempSync)((0, path_1.join)((0, os_1.tmpdir)(), "met-ensure-log-txt-"));
14
+ });
15
+ (0, vitest_1.afterEach)(() => {
16
+ (0, fs_1.rmSync)(replayDir, { recursive: true, force: true });
17
+ });
18
+ const writeNdjson = (entries) => {
19
+ (0, fs_1.writeFileSync)((0, path_1.join)(replayDir, "logs.ndjson"), entries.map((e) => JSON.stringify(e)).join("\n"));
20
+ };
21
+ (0, vitest_1.it)("is a no-op when logs.ndjson is missing", async () => {
22
+ await (0, replay_log_text_files_1.ensureReplayLogTextFiles)(replayDir);
23
+ (0, vitest_1.expect)((0, fs_1.existsSync)((0, path_1.join)(replayDir, "logs.concise.txt"))).toBe(false);
24
+ (0, vitest_1.expect)((0, fs_1.existsSync)((0, path_1.join)(replayDir, "logs.deterministic.txt"))).toBe(false);
25
+ });
26
+ (0, vitest_1.it)("writes both text files when only logs.ndjson is present", async () => {
27
+ writeNdjson([
28
+ { type: "virtual-time-change", virtualTime: 100 },
29
+ {
30
+ type: "console",
31
+ source: "application",
32
+ stackTraceId: "abc",
33
+ message: "hello",
34
+ realTime: 5,
35
+ },
36
+ {
37
+ type: "console",
38
+ source: "browser",
39
+ stackTraceId: "def",
40
+ message: "[non-deterministic] timestamp=123",
41
+ realTime: 10,
42
+ },
43
+ ]);
44
+ await (0, replay_log_text_files_1.ensureReplayLogTextFiles)(replayDir);
45
+ const concise = (0, fs_1.readFileSync)((0, path_1.join)(replayDir, "logs.concise.txt"), "utf8");
46
+ const deterministic = (0, fs_1.readFileSync)((0, path_1.join)(replayDir, "logs.deterministic.txt"), "utf8");
47
+ // Concise keeps both messages (no [non-deterministic] filter).
48
+ (0, vitest_1.expect)(concise).toContain("[application]");
49
+ (0, vitest_1.expect)(concise).toContain("hello");
50
+ (0, vitest_1.expect)(concise).toContain("[non-deterministic] timestamp=123");
51
+ // Deterministic strips real-time and skips [non-deterministic] lines.
52
+ (0, vitest_1.expect)(deterministic).toContain("hello");
53
+ (0, vitest_1.expect)(deterministic).not.toContain("[non-deterministic]");
54
+ (0, vitest_1.expect)(deterministic).not.toMatch(/real:/);
55
+ });
56
+ (0, vitest_1.it)("is a no-op when both text files already exist (idempotent)", async () => {
57
+ writeNdjson([
58
+ {
59
+ type: "console",
60
+ source: "browser",
61
+ stackTraceId: "abc",
62
+ message: "fresh",
63
+ realTime: 1,
64
+ },
65
+ ]);
66
+ const conciseSentinel = "previously-rendered-concise";
67
+ const deterministicSentinel = "previously-rendered-deterministic";
68
+ (0, fs_1.writeFileSync)((0, path_1.join)(replayDir, "logs.concise.txt"), conciseSentinel);
69
+ (0, fs_1.writeFileSync)((0, path_1.join)(replayDir, "logs.deterministic.txt"), deterministicSentinel);
70
+ await (0, replay_log_text_files_1.ensureReplayLogTextFiles)(replayDir);
71
+ (0, vitest_1.expect)((0, fs_1.readFileSync)((0, path_1.join)(replayDir, "logs.concise.txt"), "utf8")).toBe(conciseSentinel);
72
+ (0, vitest_1.expect)((0, fs_1.readFileSync)((0, path_1.join)(replayDir, "logs.deterministic.txt"), "utf8")).toBe(deterministicSentinel);
73
+ });
74
+ (0, vitest_1.it)("regenerates both files when only one exists", async () => {
75
+ writeNdjson([
76
+ {
77
+ type: "console",
78
+ source: "browser",
79
+ stackTraceId: "abc",
80
+ message: "regenerate",
81
+ realTime: 1,
82
+ },
83
+ ]);
84
+ (0, fs_1.writeFileSync)((0, path_1.join)(replayDir, "logs.concise.txt"), "stale");
85
+ await (0, replay_log_text_files_1.ensureReplayLogTextFiles)(replayDir);
86
+ (0, vitest_1.expect)((0, fs_1.readFileSync)((0, path_1.join)(replayDir, "logs.concise.txt"), "utf8")).toContain("regenerate");
87
+ (0, vitest_1.expect)((0, fs_1.readFileSync)((0, path_1.join)(replayDir, "logs.deterministic.txt"), "utf8")).toContain("regenerate");
88
+ });
89
+ });
90
+ //# sourceMappingURL=replay-log-text-files.spec.js.map
91
+ //# debugId=bc2ffa54-201f-57fe-8754-905957d1b76a
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-log-text-files.spec.js","sources":["../../../src/file-downloads/__tests__/replay-log-text-files.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"bc2ffa54-201f-57fe-8754-905957d1b76a"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Idempotently writes `logs.concise.txt` and `logs.deterministic.txt` next to
3
+ * `logs.ndjson` in the given replay directory.
4
+ *
5
+ * - No-op if `logs.ndjson` is missing (older replays may not have it).
6
+ * - No-op if both text files already exist.
7
+ * - Errors during transformation are logged but not thrown — the .txt files
8
+ * are convenience artifacts; missing them shouldn't fail the download.
9
+ */
10
+ export declare const ensureReplayLogTextFiles: (replayDir: string) => Promise<void>;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="552e945d-1437-5627-a7ab-66a6ecd434ba")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.ensureReplayLogTextFiles = void 0;
6
+ const promises_1 = require("fs/promises");
7
+ const path_1 = require("path");
8
+ const common_1 = require("@alwaysmeticulous/common");
9
+ const LOGS_NDJSON = "logs.ndjson";
10
+ const LOGS_CONCISE = "logs.concise.txt";
11
+ const LOGS_DETERMINISTIC = "logs.deterministic.txt";
12
+ const fileExists = async (path) => {
13
+ return (0, promises_1.access)(path)
14
+ .then(() => true)
15
+ .catch(() => false);
16
+ };
17
+ /**
18
+ * Idempotently writes `logs.concise.txt` and `logs.deterministic.txt` next to
19
+ * `logs.ndjson` in the given replay directory.
20
+ *
21
+ * - No-op if `logs.ndjson` is missing (older replays may not have it).
22
+ * - No-op if both text files already exist.
23
+ * - Errors during transformation are logged but not thrown — the .txt files
24
+ * are convenience artifacts; missing them shouldn't fail the download.
25
+ */
26
+ const ensureReplayLogTextFiles = async (replayDir) => {
27
+ const logger = (0, common_1.initLogger)();
28
+ const ndjsonPath = (0, path_1.join)(replayDir, LOGS_NDJSON);
29
+ if (!(await fileExists(ndjsonPath))) {
30
+ return;
31
+ }
32
+ const concisePath = (0, path_1.join)(replayDir, LOGS_CONCISE);
33
+ const deterministicPath = (0, path_1.join)(replayDir, LOGS_DETERMINISTIC);
34
+ if ((await fileExists(concisePath)) &&
35
+ (await fileExists(deterministicPath))) {
36
+ return;
37
+ }
38
+ try {
39
+ const logs = (await (0, promises_1.readFile)(ndjsonPath, "utf8"))
40
+ .split("\n")
41
+ .filter((line) => line !== "")
42
+ .map((line) => JSON.parse(line));
43
+ await (0, promises_1.writeFile)(concisePath, formatConciseLogs(logs));
44
+ await (0, promises_1.writeFile)(deterministicPath, formatDeterministicLogs(logs));
45
+ }
46
+ catch (err) {
47
+ logger.error(`Error generating concise/deterministic log files in ${replayDir}`, err);
48
+ }
49
+ };
50
+ exports.ensureReplayLogTextFiles = ensureReplayLogTextFiles;
51
+ const formatConciseLogs = (logs) => {
52
+ let virtualTime = 0;
53
+ const lines = logs.map((log) => {
54
+ if (log.type === "virtual-time-change") {
55
+ virtualTime = log.virtualTime;
56
+ return "";
57
+ }
58
+ const commonPostfix = `${log.repetitionCount ? " [x" + log.repetitionCount + "]" : ""} ${log.message}`;
59
+ if (log.source === "application") {
60
+ return `[trace-id: ${log.stackTraceId}] [virtual: ${virtualTime}ms] [application]${commonPostfix}`;
61
+ }
62
+ return `[trace-id: ${log.stackTraceId}] [virtual: ${virtualTime}ms, real: ${log.realTime}ms]${commonPostfix}`;
63
+ });
64
+ return lines.join("\n");
65
+ };
66
+ const formatDeterministicLogs = (logs) => {
67
+ let virtualTime = 0;
68
+ const lines = logs.flatMap((log) => {
69
+ if (log.type === "virtual-time-change") {
70
+ virtualTime = log.virtualTime;
71
+ return [""];
72
+ }
73
+ if (log.message.includes("[non-deterministic]")) {
74
+ return [];
75
+ }
76
+ // Event ids are unstable so filter them out to minimize noise
77
+ const message = log.message.startsWith("Executing event")
78
+ ? log.message.replace(/"id": ?\d+/g, '"id": "<non-deterministic>"')
79
+ : log.message;
80
+ const commonPostfix = `${log.repetitionCount ? " [x" + log.repetitionCount + "]" : ""} ${message}`;
81
+ if (log.source === "application") {
82
+ return [`[virtual: ${virtualTime}ms] [application]${commonPostfix}`];
83
+ }
84
+ return [`[virtual: ${virtualTime}ms]${commonPostfix}`];
85
+ });
86
+ return lines.join("\n");
87
+ };
88
+ //# sourceMappingURL=replay-log-text-files.js.map
89
+ //# debugId=552e945d-1437-5627-a7ab-66a6ecd434ba
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-log-text-files.js","sources":["../../src/file-downloads/replay-log-text-files.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"552e945d-1437-5627-a7ab-66a6ecd434ba"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  export { sanitizeFilename } from "./file-downloads/local-data.utils";
2
2
  export { downloadAppContainerLogs } from "./file-downloads/app-container-logs";
3
- export { getOrFetchReplay, getOrFetchReplayArchive, DownloadScope } from "./scripts/replays";
3
+ export { getOrFetchReplay, getOrFetchReplayArchive, DownloadScope, ReplayFileType, ReplayArchiveOptions, } from "./scripts/replays";
4
4
  export { getOrFetchRecordedSession, getOrFetchRecordedSessionData, writeManifest, writeStructuredSessionData, type SessionsManifest, type WriteStructuredSessionOptions, } from "./file-downloads/sessions";
5
5
  export { getOrFetchTestRunData, type TestRunDownloadScope, DOWNLOAD_SCOPES as TEST_RUN_DOWNLOAD_SCOPES, } from "./file-downloads/test-runs";
6
6
  export { fetchAsset, checkIfAssetsOutdated } from "./scripts/replay-assets";
7
+ export { ensureReplayLogTextFiles } from "./file-downloads/replay-log-text-files";
7
8
  export { downloadFile, downloadAndExtractFile, streamDownloadAndExtractTar, streamDownloadAndExtractTarGz, type StreamDownloadAndExtractTarOptions, streamDownloadAndInflateTar, type StreamDownloadAndInflateTarOptions, } from "./file-downloads/download-file";
8
9
  export { getReplayDir } from "./scripts/replays";
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="61d07020-a64a-5120-81d8-52cc284046f4")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d33e44d5-607e-5d7a-9951-439743bd4917")}catch(e){}}();
3
3
 
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.getReplayDir = exports.streamDownloadAndInflateTar = exports.streamDownloadAndExtractTarGz = exports.streamDownloadAndExtractTar = exports.downloadAndExtractFile = exports.downloadFile = exports.checkIfAssetsOutdated = exports.fetchAsset = exports.TEST_RUN_DOWNLOAD_SCOPES = exports.getOrFetchTestRunData = exports.writeStructuredSessionData = exports.writeManifest = exports.getOrFetchRecordedSessionData = exports.getOrFetchRecordedSession = exports.getOrFetchReplayArchive = exports.getOrFetchReplay = exports.downloadAppContainerLogs = exports.sanitizeFilename = void 0;
5
+ exports.getReplayDir = exports.streamDownloadAndInflateTar = exports.streamDownloadAndExtractTarGz = exports.streamDownloadAndExtractTar = exports.downloadAndExtractFile = exports.downloadFile = exports.ensureReplayLogTextFiles = exports.checkIfAssetsOutdated = exports.fetchAsset = exports.TEST_RUN_DOWNLOAD_SCOPES = exports.getOrFetchTestRunData = exports.writeStructuredSessionData = exports.writeManifest = exports.getOrFetchRecordedSessionData = exports.getOrFetchRecordedSession = exports.getOrFetchReplayArchive = exports.getOrFetchReplay = exports.downloadAppContainerLogs = exports.sanitizeFilename = void 0;
6
6
  var local_data_utils_1 = require("./file-downloads/local-data.utils");
7
7
  Object.defineProperty(exports, "sanitizeFilename", { enumerable: true, get: function () { return local_data_utils_1.sanitizeFilename; } });
8
8
  var app_container_logs_1 = require("./file-downloads/app-container-logs");
@@ -21,6 +21,8 @@ Object.defineProperty(exports, "TEST_RUN_DOWNLOAD_SCOPES", { enumerable: true, g
21
21
  var replay_assets_1 = require("./scripts/replay-assets");
22
22
  Object.defineProperty(exports, "fetchAsset", { enumerable: true, get: function () { return replay_assets_1.fetchAsset; } });
23
23
  Object.defineProperty(exports, "checkIfAssetsOutdated", { enumerable: true, get: function () { return replay_assets_1.checkIfAssetsOutdated; } });
24
+ var replay_log_text_files_1 = require("./file-downloads/replay-log-text-files");
25
+ Object.defineProperty(exports, "ensureReplayLogTextFiles", { enumerable: true, get: function () { return replay_log_text_files_1.ensureReplayLogTextFiles; } });
24
26
  var download_file_1 = require("./file-downloads/download-file");
25
27
  Object.defineProperty(exports, "downloadFile", { enumerable: true, get: function () { return download_file_1.downloadFile; } });
26
28
  Object.defineProperty(exports, "downloadAndExtractFile", { enumerable: true, get: function () { return download_file_1.downloadAndExtractFile; } });
@@ -30,4 +32,4 @@ Object.defineProperty(exports, "streamDownloadAndInflateTar", { enumerable: true
30
32
  var replays_2 = require("./scripts/replays");
31
33
  Object.defineProperty(exports, "getReplayDir", { enumerable: true, get: function () { return replays_2.getReplayDir; } });
32
34
  //# sourceMappingURL=index.js.map
33
- //# debugId=61d07020-a64a-5120-81d8-52cc284046f4
35
+ //# debugId=d33e44d5-607e-5d7a-9951-439743bd4917
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAA,sEAAqE;AAA5D,oHAAA,gBAAgB,OAAA;AACzB,0EAA+E;AAAtE,8HAAA,wBAAwB,OAAA;AACjC,6CAA6F;AAApF,2GAAA,gBAAgB,OAAA;AAAE,kHAAA,uBAAuB,OAAA;AAClD,sDAOmC;AANjC,qHAAA,yBAAyB,OAAA;AACzB,yHAAA,6BAA6B,OAAA;AAC7B,yGAAA,aAAa,OAAA;AACb,sHAAA,0BAA0B,OAAA;AAI5B,wDAIoC;AAHlC,kHAAA,qBAAqB,OAAA;AAErB,qHAAA,eAAe,OAA4B;AAE7C,yDAA4E;AAAnE,2GAAA,UAAU,OAAA;AAAE,sHAAA,qBAAqB,OAAA;AAC1C,gEAQwC;AAPtC,6GAAA,YAAY,OAAA;AACZ,uHAAA,sBAAsB,OAAA;AACtB,4HAAA,2BAA2B,OAAA;AAC3B,8HAAA,6BAA6B,OAAA;AAE7B,4HAAA,2BAA2B,OAAA;AAG7B,6CAAiD;AAAxC,uGAAA,YAAY,OAAA","debugId":"61d07020-a64a-5120-81d8-52cc284046f4"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAA,sEAAqE;AAA5D,oHAAA,gBAAgB,OAAA;AACzB,0EAA+E;AAAtE,8HAAA,wBAAwB,OAAA;AACjC,6CAM2B;AALzB,2GAAA,gBAAgB,OAAA;AAChB,kHAAA,uBAAuB,OAAA;AAKzB,sDAOmC;AANjC,qHAAA,yBAAyB,OAAA;AACzB,yHAAA,6BAA6B,OAAA;AAC7B,yGAAA,aAAa,OAAA;AACb,sHAAA,0BAA0B,OAAA;AAI5B,wDAIoC;AAHlC,kHAAA,qBAAqB,OAAA;AAErB,qHAAA,eAAe,OAA4B;AAE7C,yDAA4E;AAAnE,2GAAA,UAAU,OAAA;AAAE,sHAAA,qBAAqB,OAAA;AAC1C,gFAAkF;AAAzE,iIAAA,wBAAwB,OAAA;AACjC,gEAQwC;AAPtC,6GAAA,YAAY,OAAA;AACZ,uHAAA,sBAAsB,OAAA;AACtB,4HAAA,2BAA2B,OAAA;AAC3B,8HAAA,6BAA6B,OAAA;AAE7B,4HAAA,2BAA2B,OAAA;AAG7B,6CAAiD;AAAxC,uGAAA,YAAY,OAAA","debugId":"d33e44d5-607e-5d7a-9951-439743bd4917"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="dfdd4cfe-a90d-539e-bc61-cc545c2c0917")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const fs_1 = require("fs");
6
+ const promises_1 = require("fs/promises");
7
+ const os_1 = require("os");
8
+ const path_1 = require("path");
9
+ const client_1 = require("@alwaysmeticulous/client");
10
+ const common_1 = require("@alwaysmeticulous/common");
11
+ const vitest_1 = require("vitest");
12
+ const download_file_1 = require("../../file-downloads/download-file");
13
+ const replays_1 = require("../replays");
14
+ // `vi.mock` calls are auto-hoisted above the imports above; the order matches
15
+ // the project's `import/order` rule.
16
+ vitest_1.vi.mock("@alwaysmeticulous/client", () => ({
17
+ getReplay: vitest_1.vi.fn(async () => ({ version: "v3" })),
18
+ getReplayV3DownloadUrls: vitest_1.vi.fn(async () => buildDownloadUrls()),
19
+ }));
20
+ vitest_1.vi.mock("../../file-downloads/download-file", () => ({
21
+ downloadFile: vitest_1.vi.fn(async () => undefined),
22
+ downloadAndExtractFile: vitest_1.vi.fn(async () => undefined),
23
+ }));
24
+ const REPLAY_ID = "replay-123";
25
+ // Minimal v3 download URL fixture covering the file types this PR cares about.
26
+ const buildDownloadUrls = () => ({
27
+ // Plain `rest` keys (downloaded via downloadAndExtractFile into <key>).
28
+ timeline: { signedUrl: "https://example/timeline", filePath: "timeline" },
29
+ metadata: { signedUrl: "https://example/metadata", filePath: "metadata" },
30
+ playbackData: {
31
+ signedUrl: "https://example/playbackData",
32
+ filePath: "playbackData",
33
+ },
34
+ rawCoverage: {
35
+ signedUrl: "https://example/rawCoverage",
36
+ filePath: "rawCoverage",
37
+ },
38
+ // Special-cased keys (each handled in its own branch).
39
+ screenshots: {},
40
+ diffs: {},
41
+ snapshottedAssets: null,
42
+ rawPerScreenshotCssCoverage: null,
43
+ rawPerScreenshotJsCoverage: null,
44
+ mappedPerScreenshotJsCoverage: null,
45
+ });
46
+ (0, vitest_1.describe)("getOrFetchReplayArchive — excludeFileTypes", () => {
47
+ let dataDir;
48
+ (0, vitest_1.beforeEach)(() => {
49
+ dataDir = (0, fs_1.mkdtempSync)((0, path_1.join)((0, os_1.tmpdir)(), "met-replays-spec-"));
50
+ vitest_1.vi.clearAllMocks();
51
+ client_1.getReplay.mockResolvedValue({ version: "v3" });
52
+ client_1.getReplayV3DownloadUrls.mockResolvedValue(buildDownloadUrls());
53
+ download_file_1.downloadFile.mockResolvedValue(undefined);
54
+ download_file_1.downloadAndExtractFile.mockResolvedValue(undefined);
55
+ });
56
+ (0, vitest_1.afterEach)(() => {
57
+ (0, fs_1.rmSync)(dataDir, { recursive: true, force: true });
58
+ });
59
+ const replayDir = () => (0, path_1.join)(dataDir, "replays", REPLAY_ID);
60
+ const markerPath = () => (0, path_1.join)(replayDir(), "previously-downloaded.txt");
61
+ const run = (excludeFileTypes) => (0, common_1.runWithLocalDataDir)(dataDir, () => (0, replays_1.getOrFetchReplayArchive)({}, REPLAY_ID, "everything", false, excludeFileTypes ? { excludeFileTypes } : {}));
62
+ (0, vitest_1.it)("writes the cache marker when no exclusions are set", async () => {
63
+ await run();
64
+ (0, vitest_1.expect)((0, fs_1.existsSync)(markerPath())).toBe(true);
65
+ (0, vitest_1.expect)((0, fs_1.readFileSync)(markerPath(), "utf8")).toBe("everything");
66
+ });
67
+ (0, vitest_1.it)("does NOT write the cache marker when exclusions are set", async () => {
68
+ await run(new Set(["playbackData", "rawCoverage"]));
69
+ (0, vitest_1.expect)((0, fs_1.existsSync)(markerPath())).toBe(false);
70
+ });
71
+ (0, vitest_1.it)("skips downloading excluded file types but still downloads the rest", async () => {
72
+ await run(new Set(["playbackData", "rawCoverage"]));
73
+ const downloadedKeys = download_file_1.downloadAndExtractFile.mock.calls.map((call) => call[0]);
74
+ (0, vitest_1.expect)(downloadedKeys).toEqual(vitest_1.expect.arrayContaining([
75
+ "https://example/timeline",
76
+ "https://example/metadata",
77
+ ]));
78
+ (0, vitest_1.expect)(downloadedKeys).not.toContain("https://example/playbackData");
79
+ (0, vitest_1.expect)(downloadedKeys).not.toContain("https://example/rawCoverage");
80
+ });
81
+ (0, vitest_1.it)("hits the cache short-circuit when the marker says 'everything' and no exclusions are set", async () => {
82
+ // Pre-seed the marker as if a prior unfiltered run completed.
83
+ await (0, promises_1.mkdir)(replayDir(), { recursive: true });
84
+ await (0, promises_1.writeFile)(markerPath(), "everything", "utf-8");
85
+ await run();
86
+ (0, vitest_1.expect)(client_1.getReplay).not.toHaveBeenCalled();
87
+ (0, vitest_1.expect)(client_1.getReplayV3DownloadUrls).not.toHaveBeenCalled();
88
+ (0, vitest_1.expect)(download_file_1.downloadAndExtractFile).not.toHaveBeenCalled();
89
+ });
90
+ (0, vitest_1.it)("bypasses the cache short-circuit when exclusions are set, even if the marker says 'everything'", async () => {
91
+ await (0, promises_1.mkdir)(replayDir(), { recursive: true });
92
+ await (0, promises_1.writeFile)(markerPath(), "everything", "utf-8");
93
+ await run(new Set(["playbackData"]));
94
+ // Short-circuit was bypassed: we re-fetched URLs and re-downloaded the
95
+ // non-excluded files.
96
+ (0, vitest_1.expect)(client_1.getReplayV3DownloadUrls).toHaveBeenCalledTimes(1);
97
+ const downloadedKeys = download_file_1.downloadAndExtractFile.mock.calls.map((call) => call[0]);
98
+ (0, vitest_1.expect)(downloadedKeys).toContain("https://example/timeline");
99
+ (0, vitest_1.expect)(downloadedKeys).not.toContain("https://example/playbackData");
100
+ // Marker is preserved (not overwritten) — we read but didn't rewrite it.
101
+ (0, vitest_1.expect)((0, fs_1.readFileSync)(markerPath(), "utf8")).toBe("everything");
102
+ });
103
+ });
104
+ //# sourceMappingURL=replays.spec.js.map
105
+ //# debugId=dfdd4cfe-a90d-539e-bc61-cc545c2c0917
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replays.spec.js","sources":["../../../src/scripts/__tests__/replays.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"dfdd4cfe-a90d-539e-bc61-cc545c2c0917"}
@@ -12,7 +12,28 @@ export declare const getOrFetchReplay: (client: MeticulousClient, replayId: stri
12
12
  */
13
13
  declare const DOWNLOAD_SCOPES: readonly ["everything", "screenshots-only", "timeline-only", "post-test-run-processing-files-only"];
14
14
  export type DownloadScope = (typeof DOWNLOAD_SCOPES)[number];
15
- export declare const getOrFetchReplayArchive: (client: MeticulousClient, replayId: string, downloadScope?: DownloadScope, formatJsonFiles?: boolean) => Promise<{
15
+ /**
16
+ * Known file-type keys returned by the v3 download-urls endpoint. The server
17
+ * is the source of truth and may include additional keys; this union covers
18
+ * the ones the SDK references explicitly plus the common excludable
19
+ * artifacts. Used to give callers compile-time safety on `excludeFileTypes`
20
+ * so a typo (e.g. `playbackdata`) is caught at the type level rather than
21
+ * silently failing at runtime.
22
+ */
23
+ export type ReplayFileType = "screenshots" | "diffs" | "snapshottedAssets" | "rawCoverage" | "rawPerScreenshotCssCoverage" | "rawPerScreenshotJsCoverage" | "mappedCoverage" | "mappedPerScreenshotJsCoverage" | "playbackData" | "timeline" | "metadata" | "accuracy" | "stackTraces" | "cookies" | "launchBrowserAndReplayParams" | "logs";
24
+ export interface ReplayArchiveOptions {
25
+ /**
26
+ * File-type keys to skip during download (e.g. `playbackData`, `rawCoverage`,
27
+ * `diffs`). Useful when the caller knows it will not need certain artifacts
28
+ * and wants to avoid the bandwidth/time cost of fetching them.
29
+ *
30
+ * When set, the cross-tool replay cache is bypassed: the cache short-circuit
31
+ * is skipped and the `previously-downloaded.txt` marker is not written, so
32
+ * subsequent unfiltered callers will re-download into the cache.
33
+ */
34
+ excludeFileTypes?: ReadonlySet<ReplayFileType>;
35
+ }
36
+ export declare const getOrFetchReplayArchive: (client: MeticulousClient, replayId: string, downloadScope?: DownloadScope, formatJsonFiles?: boolean, options?: ReplayArchiveOptions) => Promise<{
16
37
  fileName: string;
17
38
  }>;
18
39
  export declare const getReplayDir: (replayId: string) => string;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="bf4fde24-c061-523d-9306-9c5c79f3a710")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4d9da59a-0607-59a2-b98c-3d2bd95d2b99")}catch(e){}}();
3
3
 
4
4
  var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -61,8 +61,10 @@ const shouldDownloadFile = (fileType, downloadScope) => {
61
61
  return DOWNLOAD_SCOPE_TO_FILES_TO_DOWNLOAD[downloadScope].test(fileType);
62
62
  };
63
63
  const REPLAY_PREVIOUSLY_DOWNLOADED_FILE_NAME = "previously-downloaded.txt";
64
- const getOrFetchReplayArchive = async (client, replayId, downloadScope = "everything", formatJsonFiles = false) => {
64
+ const getOrFetchReplayArchive = async (client, replayId, downloadScope = "everything", formatJsonFiles = false, options = {}) => {
65
65
  const logger = (0, common_1.initLogger)();
66
+ const { excludeFileTypes } = options;
67
+ const hasExcludes = excludeFileTypes != null && excludeFileTypes.size > 0;
66
68
  const replayDir = (0, exports.getReplayDir)(replayId);
67
69
  await (0, promises_1.mkdir)(replayDir, { recursive: true });
68
70
  const releaseLock = await (0, local_data_utils_1.waitToAcquireLockOnDirectory)(replayDir);
@@ -72,17 +74,21 @@ const getOrFetchReplayArchive = async (client, replayId, downloadScope = "everyt
72
74
  // to avoid downloading the same thing twice. This is particularly important because
73
75
  // a concurrent process might be using the previously downloaded data, so we don't
74
76
  // want to overwrite it while it's being read.
77
+ //
78
+ // When `excludeFileTypes` is set we skip the cache short-circuit so that callers
79
+ // always get a fresh fetch with the requested exclusions applied.
75
80
  let previouslyDownloadedScope = undefined;
76
81
  if (await (0, local_data_utils_1.fileExists)(previouslyDownloadedFile)) {
77
82
  const fileContents = (await (0, promises_1.readFile)(previouslyDownloadedFile, "utf-8")).trim();
78
83
  if (DOWNLOAD_SCOPES.includes(fileContents)) {
79
84
  previouslyDownloadedScope = fileContents;
80
- if (previouslyDownloadedScope === downloadScope ||
81
- previouslyDownloadedScope === "everything") {
85
+ if (!hasExcludes &&
86
+ (previouslyDownloadedScope === downloadScope ||
87
+ previouslyDownloadedScope === "everything")) {
82
88
  logger.debug(`Replay archive already downloaded at ${replayDir}`);
83
89
  return { fileName: replayDir };
84
90
  }
85
- else {
91
+ else if (!hasExcludes) {
86
92
  // Instead of trying to reason about how to combine the two scopes, let's bump
87
93
  // to downloading everything which is guaranteed to be a superset.
88
94
  logger.debug(`Replay archive is partially downloaded at ${replayDir}, will now download everything`);
@@ -95,12 +101,20 @@ const getOrFetchReplayArchive = async (client, replayId, downloadScope = "everyt
95
101
  }
96
102
  const replay = await (0, client_1.getReplay)(client, replayId);
97
103
  if (replay.version === "v3") {
98
- await downloadReplayV3Files(client, replayId, replayDir, downloadScope, formatJsonFiles, previouslyDownloadedScope);
104
+ await downloadReplayV3Files(client, replayId, replayDir, downloadScope, formatJsonFiles, previouslyDownloadedScope,
105
+ // Widen to `ReadonlySet<string>` at the boundary: `ReplayFileType` is
106
+ // for caller-side typo safety, but internally we check against
107
+ // arbitrary keys returned by the server.
108
+ excludeFileTypes);
99
109
  }
100
110
  else {
101
111
  throw new Error(`Error: Unknown replay version "${replay.version}". This may be an invalid replay`);
102
112
  }
103
- await (0, promises_1.writeFile)(previouslyDownloadedFile, downloadScope, "utf-8");
113
+ // Don't write the cache marker when excludes are set; the cache directory
114
+ // would otherwise look complete to future unfiltered callers.
115
+ if (!hasExcludes) {
116
+ await (0, promises_1.writeFile)(previouslyDownloadedFile, downloadScope, "utf-8");
117
+ }
104
118
  logger.debug(`Extracted replay archive in ${replayDir}`);
105
119
  return { fileName: replayDir };
106
120
  }
@@ -109,14 +123,16 @@ const getOrFetchReplayArchive = async (client, replayId, downloadScope = "everyt
109
123
  }
110
124
  };
111
125
  exports.getOrFetchReplayArchive = getOrFetchReplayArchive;
112
- const downloadReplayV3Files = async (client, replayId, replayDir, downloadScope, formatJsonFiles, previouslyDownloadedScope) => {
126
+ const downloadReplayV3Files = async (client, replayId, replayDir, downloadScope, formatJsonFiles, previouslyDownloadedScope, excludeFileTypes) => {
113
127
  const downloadUrls = await (0, client_1.getReplayV3DownloadUrls)(client, replayId);
114
128
  if (!downloadUrls) {
115
129
  throw new Error("Error: Could not retrieve replay download URLs. This may be an invalid replay");
116
130
  }
131
+ const includes = (fileType) => shouldDownloadFile(fileType, downloadScope) &&
132
+ !(excludeFileTypes?.has(fileType) ?? false);
117
133
  const { screenshots, diffs, snapshottedAssets, rawPerScreenshotCssCoverage, rawPerScreenshotJsCoverage, mappedPerScreenshotJsCoverage, ...rest } = downloadUrls;
118
134
  const filePromises = Object.entries(rest)
119
- .filter(([fileType]) => shouldDownloadFile(fileType, downloadScope))
135
+ .filter(([fileType]) => includes(fileType))
120
136
  .map(([fileType, data]) => {
121
137
  const filePath = (0, path_1.join)(replayDir, fileType);
122
138
  return async () => {
@@ -128,10 +144,15 @@ const downloadReplayV3Files = async (client, replayId, replayDir, downloadScope,
128
144
  }
129
145
  };
130
146
  });
131
- if (shouldDownloadFile("screenshots", downloadScope)) {
147
+ if (includes("screenshots")) {
132
148
  await (0, promises_1.mkdir)((0, path_1.join)(replayDir, "screenshots"), { recursive: true });
133
149
  }
134
- const screenshotPromises = !shouldDownloadFile("screenshots", downloadScope) ||
150
+ // If `previouslyDownloadedScope === "screenshots-only"` we trust that the
151
+ // screenshots are already on disk from a prior unfiltered download (the
152
+ // marker is only ever written after an unfiltered run) and skip re-download.
153
+ // Safe even when `excludeFileTypes` is set: we're leaving existing files in
154
+ // place, not re-using stale data.
155
+ const screenshotPromises = !includes("screenshots") ||
135
156
  previouslyDownloadedScope === "screenshots-only"
136
157
  ? []
137
158
  : Object.values(screenshots).flatMap((data) => {
@@ -149,8 +170,10 @@ const downloadReplayV3Files = async (client, replayId, replayDir, downloadScope,
149
170
  ];
150
171
  });
151
172
  const diffsFolder = (0, path_1.join)(replayDir, "diffs");
152
- await Promise.all(Object.keys(diffs ?? {}).map((baseReplayId) => (0, promises_1.mkdir)((0, path_1.join)(diffsFolder, baseReplayId), { recursive: true })));
153
- const diffsPromises = shouldDownloadFile("diffs", downloadScope)
173
+ if (includes("diffs")) {
174
+ await Promise.all(Object.keys(diffs ?? {}).map((baseReplayId) => (0, promises_1.mkdir)((0, path_1.join)(diffsFolder, baseReplayId), { recursive: true })));
175
+ }
176
+ const diffsPromises = includes("diffs")
154
177
  ? Object.values(diffs ?? {}).flatMap((diffsForBase) => {
155
178
  return Object.values(diffsForBase).flatMap((urls) => {
156
179
  return [
@@ -165,24 +188,22 @@ const downloadReplayV3Files = async (client, replayId, replayDir, downloadScope,
165
188
  })
166
189
  : [];
167
190
  const archivePromises = [
168
- ...(shouldDownloadFile("snapshottedAssets", downloadScope)
191
+ ...(includes("snapshottedAssets")
169
192
  ? [
170
193
  () => downloadAndUnzipIntoDirectory(snapshottedAssets, replayDir, "snapshotted-assets"),
171
194
  ]
172
195
  : []),
173
- ...(shouldDownloadFile("rawPerScreenshotCssCoverage", downloadScope) &&
174
- rawPerScreenshotCssCoverage
196
+ ...(includes("rawPerScreenshotCssCoverage") && rawPerScreenshotCssCoverage
175
197
  ? [
176
198
  () => downloadAndUnzipIntoDirectory(rawPerScreenshotCssCoverage, replayDir, "raw-per-screenshot-css-coverage"),
177
199
  ]
178
200
  : []),
179
- ...(shouldDownloadFile("rawPerScreenshotJsCoverage", downloadScope) &&
180
- rawPerScreenshotJsCoverage
201
+ ...(includes("rawPerScreenshotJsCoverage") && rawPerScreenshotJsCoverage
181
202
  ? [
182
203
  () => downloadAndUnzipIntoDirectory(rawPerScreenshotJsCoverage, replayDir, "raw-per-screenshot-js-coverage"),
183
204
  ]
184
205
  : []),
185
- ...(shouldDownloadFile("mappedPerScreenshotJsCoverage", downloadScope) &&
206
+ ...(includes("mappedPerScreenshotJsCoverage") &&
186
207
  mappedPerScreenshotJsCoverage
187
208
  ? [
188
209
  () => downloadAndUnzipIntoDirectory(mappedPerScreenshotJsCoverage, replayDir, "mapped-per-screenshot-js-coverage"),
@@ -200,4 +221,4 @@ const downloadReplayV3Files = async (client, replayId, replayDir, downloadScope,
200
221
  const getReplayDir = (replayId) => (0, path_1.join)((0, common_1.getMeticulousLocalDataDir)(), "replays", replayId);
201
222
  exports.getReplayDir = getReplayDir;
202
223
  //# sourceMappingURL=replays.js.map
203
- //# debugId=bf4fde24-c061-523d-9306-9c5c79f3a710
224
+ //# debugId=4d9da59a-0607-59a2-b98c-3d2bd95d2b99
@@ -1 +1 @@
1
- {"version":3,"file":"replays.js","sources":["../../src/scripts/replays.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"bf4fde24-c061-523d-9306-9c5c79f3a710"}
1
+ {"version":3,"file":"replays.js","sources":["../../src/scripts/replays.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"4d9da59a-0607-59a2-b98c-3d2bd95d2b99"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/downloading-helpers",
3
- "version": "2.280.0",
3
+ "version": "2.282.0",
4
4
  "description": "Helper utilities for downloading files & scripts required to execute replays",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",
@@ -8,21 +8,7 @@
8
8
  "files": [
9
9
  "dist"
10
10
  ],
11
- "scripts": {
12
- "clean": "rimraf dist tsconfig.tsbuildinfo",
13
- "build": "tsc --build tsconfig.json",
14
- "dev": "tsc --build tsconfig.json --watch",
15
- "format": "prettier --write src",
16
- "lint": "eslint \"src/**/*.{js,ts,tsx}\" --cache",
17
- "lint:commit": "eslint --cache $(git diff --relative --name-only --diff-filter=ACMRTUXB master | grep -E \"(.js$|.ts$|.tsx$)\")",
18
- "lint:fix": "eslint \"src/**/*.{js,ts,tsx}\" --cache --fix",
19
- "depcheck": "depcheck --ignore-patterns=dist",
20
- "test": "vitest run --passWithNoTests"
21
- },
22
11
  "dependencies": {
23
- "@alwaysmeticulous/api": "2.280.0",
24
- "@alwaysmeticulous/client": "2.280.0",
25
- "@alwaysmeticulous/common": "2.280.0",
26
12
  "axios": "^1.7.9",
27
13
  "axios-retry": "^4.5.0",
28
14
  "cli-progress": "^3.12.0",
@@ -31,13 +17,16 @@
31
17
  "luxon": "^3.2.1",
32
18
  "p-limit": "^3.1.0",
33
19
  "proper-lockfile": "^4.1.2",
34
- "tar": "^7.5.8"
20
+ "tar": "^7.5.8",
21
+ "@alwaysmeticulous/api": "2.280.0",
22
+ "@alwaysmeticulous/client": "2.281.0",
23
+ "@alwaysmeticulous/common": "2.280.0"
35
24
  },
36
25
  "devDependencies": {
37
26
  "@types/cli-progress": "^3.11.6",
38
27
  "@types/luxon": "^3.2.0",
39
28
  "@types/proper-lockfile": "^4.1.2",
40
- "vitest": "catalog:"
29
+ "vitest": "^4.1.4"
41
30
  },
42
31
  "author": {
43
32
  "name": "The Meticulous Team",
@@ -56,5 +45,15 @@
56
45
  "bugs": {
57
46
  "url": "https://github.com/alwaysmeticulous/meticulous-sdk/issues"
58
47
  },
59
- "gitHead": "87ca975a232d16ea878caa5649a8b21221ebca02"
60
- }
48
+ "scripts": {
49
+ "clean": "rimraf dist tsconfig.tsbuildinfo",
50
+ "build": "tsc --build tsconfig.json",
51
+ "dev": "tsc --build tsconfig.json --watch",
52
+ "format": "prettier --write src",
53
+ "lint": "eslint \"src/**/*.{js,ts,tsx}\" --cache",
54
+ "lint:commit": "eslint --cache $(git diff --relative --name-only --diff-filter=ACMRTUXB master | grep -E \"(.js$|.ts$|.tsx$)\")",
55
+ "lint:fix": "eslint \"src/**/*.{js,ts,tsx}\" --cache --fix",
56
+ "depcheck": "depcheck --ignore-patterns=dist",
57
+ "test": "vitest run --passWithNoTests"
58
+ }
59
+ }