@alwaysmeticulous/downloading-helpers 2.221.0 → 2.221.2
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/dist/scripts/replays.js +35 -16
- package/dist/scripts/replays.js.map +1 -1
- package/package.json +5 -5
package/dist/scripts/replays.js
CHANGED
|
@@ -13,6 +13,14 @@ const p_limit_1 = __importDefault(require("p-limit"));
|
|
|
13
13
|
const download_file_1 = require("../file-downloads/download-file");
|
|
14
14
|
const local_data_utils_1 = require("../file-downloads/local-data.utils");
|
|
15
15
|
const MAX_DOWNLOAD_CONCURRENCY = 20;
|
|
16
|
+
const downloadAndUnzipIntoDirectory = async (archiveData, replayDir, directoryName) => {
|
|
17
|
+
if (!archiveData) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const targetDir = (0, path_1.join)(replayDir, directoryName);
|
|
21
|
+
await (0, promises_1.mkdir)(targetDir, { recursive: true });
|
|
22
|
+
await (0, download_file_1.downloadAndExtractFile)(archiveData.signedUrl, (0, path_1.join)(replayDir, archiveData.filePath), targetDir);
|
|
23
|
+
};
|
|
16
24
|
const getOrFetchReplay = async (client, replayId) => {
|
|
17
25
|
const logger = loglevel_1.default.getLogger(common_1.METICULOUS_LOGGER_NAME);
|
|
18
26
|
const replayFile = (0, path_1.join)((0, exports.getReplayDir)(replayId), `${replayId}.json`);
|
|
@@ -105,7 +113,7 @@ const downloadReplayV3Files = async (client, replayId, replayDir, downloadScope,
|
|
|
105
113
|
if (!downloadUrls) {
|
|
106
114
|
throw new Error("Error: Could not retrieve replay download URLs. This may be an invalid replay");
|
|
107
115
|
}
|
|
108
|
-
const { screenshots, diffs, snapshottedAssets, ...rest } = downloadUrls;
|
|
116
|
+
const { screenshots, diffs, snapshottedAssets, rawPerScreenshotCssCoverage, rawPerScreenshotJsCoverage, mappedPerScreenshotJsCoverage, ...rest } = downloadUrls;
|
|
109
117
|
const filePromises = Object.entries(rest)
|
|
110
118
|
.filter(([fileType]) => shouldDownloadFile(fileType, downloadScope))
|
|
111
119
|
.map(([fileType, data]) => {
|
|
@@ -155,26 +163,37 @@ const downloadReplayV3Files = async (client, replayId, replayDir, downloadScope,
|
|
|
155
163
|
});
|
|
156
164
|
})
|
|
157
165
|
: [];
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
166
|
+
const archivePromises = [
|
|
167
|
+
...(shouldDownloadFile("snapshottedAssets", downloadScope)
|
|
168
|
+
? [
|
|
169
|
+
() => downloadAndUnzipIntoDirectory(snapshottedAssets, replayDir, "snapshotted-assets"),
|
|
170
|
+
]
|
|
171
|
+
: []),
|
|
172
|
+
...(shouldDownloadFile("rawPerScreenshotCssCoverage", downloadScope) &&
|
|
173
|
+
rawPerScreenshotCssCoverage
|
|
174
|
+
? [
|
|
175
|
+
() => downloadAndUnzipIntoDirectory(rawPerScreenshotCssCoverage, replayDir, "raw-per-screenshot-css-coverage"),
|
|
176
|
+
]
|
|
177
|
+
: []),
|
|
178
|
+
...(shouldDownloadFile("rawPerScreenshotJsCoverage", downloadScope) &&
|
|
179
|
+
rawPerScreenshotJsCoverage
|
|
180
|
+
? [
|
|
181
|
+
() => downloadAndUnzipIntoDirectory(rawPerScreenshotJsCoverage, replayDir, "raw-per-screenshot-js-coverage"),
|
|
182
|
+
]
|
|
183
|
+
: []),
|
|
184
|
+
...(shouldDownloadFile("mappedPerScreenshotJsCoverage", downloadScope) &&
|
|
185
|
+
mappedPerScreenshotJsCoverage
|
|
186
|
+
? [
|
|
187
|
+
() => downloadAndUnzipIntoDirectory(mappedPerScreenshotJsCoverage, replayDir, "mapped-per-screenshot-js-coverage"),
|
|
188
|
+
]
|
|
189
|
+
: []),
|
|
190
|
+
];
|
|
172
191
|
const limited = (0, p_limit_1.default)(MAX_DOWNLOAD_CONCURRENCY);
|
|
173
192
|
await Promise.all([
|
|
174
193
|
...filePromises,
|
|
175
194
|
...screenshotPromises,
|
|
176
195
|
...diffsPromises,
|
|
177
|
-
...
|
|
196
|
+
...archivePromises,
|
|
178
197
|
].map((p) => limited(p)));
|
|
179
198
|
};
|
|
180
199
|
const getReplayDir = (replayId) => (0, path_1.join)((0, common_1.getMeticulousLocalDataDir)(), "replays", replayId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replays.js","sourceRoot":"","sources":["../../src/scripts/replays.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAyD;AACzD,+BAAqC;AACrC,qDAA8E;AAC9E,qDAGkC;AAElC,wDAA2B;AAC3B,sDAA6B;AAC7B,mEAGyC;AACzC,yEAI4C;AAE5C,MAAM,wBAAwB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"replays.js","sourceRoot":"","sources":["../../src/scripts/replays.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alwaysmeticulous/downloading-helpers",
|
|
3
|
-
"version": "2.221.
|
|
3
|
+
"version": "2.221.2",
|
|
4
4
|
"description": "Helper utilities for downloading files & scripts required to execute replays",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"test": "jest"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@alwaysmeticulous/api": "^2.221.
|
|
24
|
-
"@alwaysmeticulous/client": "^2.221.
|
|
25
|
-
"@alwaysmeticulous/common": "^2.221.
|
|
23
|
+
"@alwaysmeticulous/api": "^2.221.2",
|
|
24
|
+
"@alwaysmeticulous/client": "^2.221.2",
|
|
25
|
+
"@alwaysmeticulous/common": "^2.221.2",
|
|
26
26
|
"axios": "^1.7.9",
|
|
27
27
|
"axios-retry": "^4.5.0",
|
|
28
28
|
"extract-zip": "^2.0.1",
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"jest": {
|
|
56
56
|
"preset": "../../jest.config.js"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "826a711e5add334fbff715d5458d631fc46837af"
|
|
59
59
|
}
|