keycloakify 6.9.1 → 6.10.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.
@@ -1,83 +1,473 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
12
10
  };
13
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- var desc = Object.getOwnPropertyDescriptor(m, k);
16
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
- desc = { enumerable: true, get: function() { return m[k]; } };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
18
36
  }
19
- Object.defineProperty(o, k2, desc);
20
- }) : (function(o, m, k, k2) {
21
- if (k2 === undefined) k2 = k;
22
- o[k2] = m[k];
23
- }));
24
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
- Object.defineProperty(o, "default", { enumerable: true, value: v });
26
- }) : function(o, v) {
27
- o["default"] = v;
28
- });
29
- var __importStar = (this && this.__importStar) || function (mod) {
30
- if (mod && mod.__esModule) return mod;
31
- var result = {};
32
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
- __setModuleDefault(result, mod);
34
- return result;
37
+ };
38
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
39
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
40
+ var m = o[Symbol.asyncIterator], i;
41
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
42
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
43
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
44
+ };
45
+ var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
46
+ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
47
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
48
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
49
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
50
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
51
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
52
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
53
+ function fulfill(value) { resume("next", value); }
54
+ function reject(value) { resume("throw", value); }
55
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
56
+ };
57
+ var __importDefault = (this && this.__importDefault) || function (mod) {
58
+ return (mod && mod.__esModule) ? mod : { "default": mod };
35
59
  };
36
60
  Object.defineProperty(exports, "__esModule", { value: true });
37
61
  exports.downloadAndUnzip = void 0;
38
62
  var path_1 = require("path");
39
- var child_process_1 = require("child_process");
40
- var fs = __importStar(require("fs"));
63
+ var fs_1 = require("fs");
64
+ var promises_1 = require("fs/promises");
41
65
  var transformCodebase_1 = require("./transformCodebase");
42
- var crypto = __importStar(require("crypto"));
43
- /** assert url ends with .zip */
44
- function downloadAndUnzip(params) {
45
- var _a, _b;
46
- var url = params.url, destDirPath = params.destDirPath, pathOfDirToExtractInArchive = params.pathOfDirToExtractInArchive, cacheDirPath = params.cacheDirPath;
47
- var extractDirPath = (0, path_1.join)(cacheDirPath, "_".concat(crypto.createHash("sha256").update(JSON.stringify({ url: url, pathOfDirToExtractInArchive: pathOfDirToExtractInArchive })).digest("hex").substring(0, 15)));
48
- fs.mkdirSync(cacheDirPath, { "recursive": true });
49
- var _c = (function () {
50
- var filePath = (0, path_1.join)(cacheDirPath, "isSuccessByExtractDirPath.json");
51
- function readIsSuccessByExtractDirPath() {
52
- if (!fs.existsSync(filePath)) {
53
- return {};
66
+ var crypto_1 = require("crypto");
67
+ var http_1 = __importDefault(require("http"));
68
+ var https_1 = __importDefault(require("https"));
69
+ var zlib_1 = require("zlib");
70
+ function hash(s) {
71
+ return (0, crypto_1.createHash)("sha256").update(s).digest("hex");
72
+ }
73
+ function maybeReadFile(path) {
74
+ return __awaiter(this, void 0, void 0, function () {
75
+ var error_1;
76
+ return __generator(this, function (_a) {
77
+ switch (_a.label) {
78
+ case 0:
79
+ _a.trys.push([0, 2, , 3]);
80
+ return [4 /*yield*/, (0, promises_1.readFile)(path, "utf-8")];
81
+ case 1: return [2 /*return*/, _a.sent()];
82
+ case 2:
83
+ error_1 = _a.sent();
84
+ if (error_1.code === "ENOENT")
85
+ return [2 /*return*/, undefined];
86
+ throw error_1;
87
+ case 3: return [2 /*return*/];
88
+ }
89
+ });
90
+ });
91
+ }
92
+ function maybeStat(path) {
93
+ return __awaiter(this, void 0, void 0, function () {
94
+ var error_2;
95
+ return __generator(this, function (_a) {
96
+ switch (_a.label) {
97
+ case 0:
98
+ _a.trys.push([0, 2, , 3]);
99
+ return [4 /*yield*/, (0, promises_1.stat)(path)];
100
+ case 1: return [2 /*return*/, _a.sent()];
101
+ case 2:
102
+ error_2 = _a.sent();
103
+ if (error_2.code === "ENOENT")
104
+ return [2 /*return*/, undefined];
105
+ throw error_2;
106
+ case 3: return [2 /*return*/];
107
+ }
108
+ });
109
+ });
110
+ }
111
+ /**
112
+ * Download a file from `url` to `dir`. Will try to avoid downloading existing
113
+ * files by using an `{hash(url)}.etag` file. If this file exists, we add an
114
+ * etag headear, so server can tell us if file changed and we should re-download
115
+ * or if our file is up-to-date.
116
+ *
117
+ * Warning, this method assumes that the target filename can be extracted from
118
+ * url, content-disposition headers are ignored.
119
+ *
120
+ * If the target directory does not exist, it will be created.
121
+ *
122
+ * If the target file exists and is out of date, it will be overwritten.
123
+ * If the target file exists and there is no etag file, the target file will
124
+ * be overwritten.
125
+ *
126
+ * @param url download url
127
+ * @param dir target directory
128
+ * @returns promise for the full path of the downloaded file
129
+ */
130
+ function download(url, dir) {
131
+ return __awaiter(this, void 0, void 0, function () {
132
+ var filename, filepath, exists, etagFilepath, etag, _a;
133
+ return __generator(this, function (_b) {
134
+ switch (_b.label) {
135
+ case 0: return [4 /*yield*/, (0, promises_1.mkdir)(dir, { recursive: true })];
136
+ case 1:
137
+ _b.sent();
138
+ filename = (0, path_1.basename)(url);
139
+ filepath = (0, path_1.join)(dir, filename);
140
+ return [4 /*yield*/, maybeStat(filepath)];
141
+ case 2:
142
+ exists = _b.sent();
143
+ etagFilepath = (0, path_1.join)(dir, "_" + hash(url).substring(0, 15) + ".etag");
144
+ if (!!exists) return [3 /*break*/, 3];
145
+ _a = undefined;
146
+ return [3 /*break*/, 5];
147
+ case 3: return [4 /*yield*/, maybeReadFile(etagFilepath)];
148
+ case 4:
149
+ _a = _b.sent();
150
+ _b.label = 5;
151
+ case 5:
152
+ etag = _a;
153
+ return [2 /*return*/, new Promise(function (resolve, reject) {
154
+ // use inner method to allow following redirects
155
+ function request(url1) {
156
+ var _this = this;
157
+ var headers = {};
158
+ if (etag)
159
+ headers["If-None-Match"] = etag;
160
+ (url1.protocol === "https:" ? https_1.default : http_1.default).get(url1, { headers: headers }, function (response) {
161
+ if (response.statusCode === 301 || response.statusCode === 302) {
162
+ // follow redirects
163
+ request(new URL(response.headers.location));
164
+ }
165
+ else if (response.statusCode === 304) {
166
+ // up-to-date, resolve now
167
+ resolve(filepath);
168
+ }
169
+ else if (response.statusCode !== 200) {
170
+ reject(new Error("Request to ".concat(url1, " returned status ").concat(response.statusCode, ".")));
171
+ }
172
+ else {
173
+ var fp_1 = (0, fs_1.createWriteStream)(filepath, { autoClose: true });
174
+ fp_1.on("err", function (e) {
175
+ fp_1.close();
176
+ (0, fs_1.unlinkSync)(filepath);
177
+ reject(e);
178
+ });
179
+ fp_1.on("finish", function () { return __awaiter(_this, void 0, void 0, function () {
180
+ var responseEtag;
181
+ return __generator(this, function (_a) {
182
+ switch (_a.label) {
183
+ case 0:
184
+ responseEtag = response.headers.etag;
185
+ if (!responseEtag) return [3 /*break*/, 2];
186
+ return [4 /*yield*/, (0, promises_1.writeFile)(etagFilepath, responseEtag, "utf-8")];
187
+ case 1:
188
+ _a.sent();
189
+ _a.label = 2;
190
+ case 2:
191
+ resolve(filepath);
192
+ return [2 /*return*/];
193
+ }
194
+ });
195
+ }); });
196
+ response.pipe(fp_1);
197
+ }
198
+ });
199
+ }
200
+ request(new URL(url));
201
+ })];
202
+ }
203
+ });
204
+ });
205
+ }
206
+ /**
207
+ * @typedef
208
+ * @type MultiError = Error & { cause: Error[] }
209
+ */
210
+ /**
211
+ * Extract the archive `zipFile` into the directory `dir`. If `archiveDir` is given,
212
+ * only that directory will be extracted, stripping the given path components.
213
+ *
214
+ * If dir does not exist, it will be created.
215
+ *
216
+ * If any archive file exists, it will be overwritten.
217
+ *
218
+ * Will unzip using all available nodejs worker threads.
219
+ *
220
+ * Will try to clean up extracted files on failure.
221
+ *
222
+ * If unpacking fails, will either throw an regular error, or
223
+ * possibly an `MultiError`, which contains a `cause` field with
224
+ * a number of root cause errors.
225
+ *
226
+ * Warning this method is not optimized for continuous reading of the zip
227
+ * archive, but is a trade-off between simplicity and allowing extraction
228
+ * of a single directory from the archive.
229
+ *
230
+ * @param zipFile the file to unzip
231
+ * @param dir the target directory
232
+ * @param archiveDir if given, unpack only files from this archive directory
233
+ * @throws {MultiError} error
234
+ * @returns Promise for a list of full file paths pointing to actually extracted files
235
+ */
236
+ function unzip(zipFile, dir, archiveDir) {
237
+ var e_1, _a;
238
+ return __awaiter(this, void 0, void 0, function () {
239
+ var promises, _loop_1, _b, _c, e_1_1, results, success, failure, e;
240
+ var _this = this;
241
+ return __generator(this, function (_d) {
242
+ switch (_d.label) {
243
+ case 0: return [4 /*yield*/, (0, promises_1.mkdir)(dir, { recursive: true })];
244
+ case 1:
245
+ _d.sent();
246
+ promises = [];
247
+ _d.label = 2;
248
+ case 2:
249
+ _d.trys.push([2, 7, 8, 13]);
250
+ _loop_1 = function () {
251
+ var record = _c.value;
252
+ var recordPath = record.path, createRecordReadStream = record.createReadStream;
253
+ var filePath = (0, path_1.join)(dir, recordPath);
254
+ var parent_1 = (0, path_1.dirname)(filePath);
255
+ if (archiveDir && !recordPath.startsWith(archiveDir))
256
+ return "continue";
257
+ promises.push(new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
258
+ var input, output;
259
+ return __generator(this, function (_a) {
260
+ switch (_a.label) {
261
+ case 0: return [4 /*yield*/, (0, promises_1.mkdir)(parent_1, { recursive: true })];
262
+ case 1:
263
+ _a.sent();
264
+ input = createRecordReadStream();
265
+ output = (0, fs_1.createWriteStream)(filePath);
266
+ output.on("error", function (e) { return reject(Object.assign(e, { filePath: filePath })); });
267
+ output.on("finish", function () { return resolve(filePath); });
268
+ input.pipe(output);
269
+ return [2 /*return*/];
270
+ }
271
+ });
272
+ }); }));
273
+ };
274
+ _b = __asyncValues(iterateZipArchive(zipFile));
275
+ _d.label = 3;
276
+ case 3: return [4 /*yield*/, _b.next()];
277
+ case 4:
278
+ if (!(_c = _d.sent(), !_c.done)) return [3 /*break*/, 6];
279
+ _loop_1();
280
+ _d.label = 5;
281
+ case 5: return [3 /*break*/, 3];
282
+ case 6: return [3 /*break*/, 13];
283
+ case 7:
284
+ e_1_1 = _d.sent();
285
+ e_1 = { error: e_1_1 };
286
+ return [3 /*break*/, 13];
287
+ case 8:
288
+ _d.trys.push([8, , 11, 12]);
289
+ if (!(_c && !_c.done && (_a = _b.return))) return [3 /*break*/, 10];
290
+ return [4 /*yield*/, _a.call(_b)];
291
+ case 9:
292
+ _d.sent();
293
+ _d.label = 10;
294
+ case 10: return [3 /*break*/, 12];
295
+ case 11:
296
+ if (e_1) throw e_1.error;
297
+ return [7 /*endfinally*/];
298
+ case 12: return [7 /*endfinally*/];
299
+ case 13: return [4 /*yield*/, Promise.allSettled(promises)];
300
+ case 14:
301
+ results = _d.sent();
302
+ success = results.filter(function (r) { return r.status === "fulfilled"; }).map(function (r) { return r.value; });
303
+ failure = results.filter(function (r) { return r.status === "rejected"; }).map(function (r) { return r.reason; });
304
+ if (!failure.length) return [3 /*break*/, 17];
305
+ return [4 /*yield*/, Promise.all(success.map(function (path) { return (0, promises_1.unlink)(path); }))];
306
+ case 15:
307
+ _d.sent();
308
+ return [4 /*yield*/, Promise.all(failure.map(function (e) { return e && e.path && (0, promises_1.unlink)(e.path); }))];
309
+ case 16:
310
+ _d.sent();
311
+ e = new Error("Failed to extract: " + failure.map(function (e) { return e.message; }).join(";"));
312
+ e.cause = failure;
313
+ throw e;
314
+ case 17: return [2 /*return*/, success];
315
+ }
316
+ });
317
+ });
318
+ }
319
+ /**
320
+ *
321
+ * @param file file to read
322
+ * @param start first byte to read
323
+ * @param end last byte to read
324
+ * @returns Promise of a buffer of read bytes
325
+ */
326
+ function readFileChunk(file, start, end) {
327
+ return __awaiter(this, void 0, void 0, function () {
328
+ var chunks;
329
+ return __generator(this, function (_a) {
330
+ chunks = [];
331
+ return [2 /*return*/, new Promise(function (resolve, reject) {
332
+ var stream = (0, fs_1.createReadStream)(file, { start: start, end: end });
333
+ stream.on("error", function (e) { return reject(e); });
334
+ stream.on("end", function () { return resolve(Buffer.concat(chunks)); });
335
+ stream.on("data", function (chunk) { return chunks.push(chunk); });
336
+ })];
337
+ });
338
+ });
339
+ }
340
+ /**
341
+ * Iterate over all records of a zipfile, and yield a ZipRecord.
342
+ * Use `record.createReadStream()` to actually read the file.
343
+ *
344
+ * Warning this method will only work with single-disk zip files.
345
+ * Warning this method may fail if the zip archive has an crazy amount
346
+ * of files and the central directory is not fully contained within the
347
+ * last 65k bytes of the zip file.
348
+ *
349
+ * @param zipFile
350
+ * @returns AsyncGenerator which will yield ZipRecords
351
+ */
352
+ function iterateZipArchive(zipFile) {
353
+ return __asyncGenerator(this, arguments, function iterateZipArchive_1() {
354
+ var size, chunkSize, chunk, unread, i, found, nFiles, directorySize, directoryOffset, _loop_2;
355
+ return __generator(this, function (_a) {
356
+ switch (_a.label) {
357
+ case 0: return [4 /*yield*/, __await((0, promises_1.stat)(zipFile))];
358
+ case 1:
359
+ size = (_a.sent()).size;
360
+ chunkSize = 65535 + 22 + 1;
361
+ return [4 /*yield*/, __await(readFileChunk(zipFile, size - chunkSize, size))];
362
+ case 2:
363
+ chunk = _a.sent();
364
+ unread = size - chunk.length;
365
+ i = chunk.length - 4;
366
+ found = false;
367
+ // Find central directory end header, reading backwards from the end
368
+ while (!found && i-- > 0)
369
+ if (chunk[i] === 0x50 && chunk.readUInt32LE(i) === 0x06054b50)
370
+ found = true;
371
+ if (!found)
372
+ throw new Error("Not a zip file");
373
+ // This method will fail on a multi-disk zip, so bail early.
374
+ if (chunk.readUInt16LE(i + 4) !== 0)
375
+ throw new Error("Multi-disk zip not supported");
376
+ nFiles = chunk.readUint16LE(i + 10);
377
+ directorySize = chunk.readUint32LE(i + 12);
378
+ directoryOffset = chunk.readUint32LE(i + 16);
379
+ if (directoryOffset === 4294967295)
380
+ throw new Error("zip64 not supported");
381
+ if (directoryOffset > size)
382
+ throw new Error("Central directory offset ".concat(directoryOffset, " is outside file"));
383
+ i = directoryOffset - unread;
384
+ if (!(i < 0)) return [3 /*break*/, 4];
385
+ return [4 /*yield*/, __await(readFileChunk(zipFile, directoryOffset, directoryOffset + directorySize))];
386
+ case 3:
387
+ chunk = _a.sent();
388
+ i = 0;
389
+ _a.label = 4;
390
+ case 4:
391
+ _loop_2 = function () {
392
+ var compressionMethod, compressedFileSize, filenameLength, extraLength, commentLength, start, end, filename, createRecordReadStream;
393
+ return __generator(this, function (_b) {
394
+ switch (_b.label) {
395
+ case 0:
396
+ // Check for marker bytes
397
+ if (chunk.readUInt32LE(i) !== 0x02014b50)
398
+ throw new Error("No central directory record at position " + (unread + i));
399
+ compressionMethod = { 8: "deflate" }[chunk.readUint16LE(i + 10)];
400
+ compressedFileSize = chunk.readUint32LE(i + 20);
401
+ filenameLength = chunk.readUint16LE(i + 28);
402
+ extraLength = chunk.readUint16LE(i + 30);
403
+ commentLength = chunk.readUint16LE(i + 32);
404
+ start = chunk.readUint32LE(i + 42) + 30 + filenameLength + extraLength;
405
+ end = start + compressedFileSize;
406
+ filename = chunk.slice(i + 46, i + 46 + filenameLength).toString("utf-8");
407
+ createRecordReadStream = function () {
408
+ var input = (0, fs_1.createReadStream)(zipFile, { start: start, end: end });
409
+ if (compressionMethod === "deflate") {
410
+ var inflate = (0, zlib_1.createInflateRaw)();
411
+ input.pipe(inflate);
412
+ return inflate;
413
+ }
414
+ return input;
415
+ };
416
+ if (!(end > start)) return [3 /*break*/, 3];
417
+ return [4 /*yield*/, __await({ path: filename, createReadStream: createRecordReadStream, compressionMethod: compressionMethod })];
418
+ case 1: return [4 /*yield*/, _b.sent()];
419
+ case 2:
420
+ _b.sent();
421
+ _b.label = 3;
422
+ case 3:
423
+ // advance pointer to next central directory entry
424
+ i += 46 + filenameLength + extraLength + commentLength;
425
+ return [2 /*return*/];
426
+ }
427
+ });
428
+ };
429
+ _a.label = 5;
430
+ case 5:
431
+ if (!(nFiles-- > 0)) return [3 /*break*/, 7];
432
+ return [5 /*yield**/, _loop_2()];
433
+ case 6:
434
+ _a.sent();
435
+ return [3 /*break*/, 5];
436
+ case 7: return [2 /*return*/];
437
+ }
438
+ });
439
+ });
440
+ }
441
+ function downloadAndUnzip(_a) {
442
+ var _b;
443
+ var url = _a.url, destDirPath = _a.destDirPath, pathOfDirToExtractInArchive = _a.pathOfDirToExtractInArchive, cacheDirPath = _a.cacheDirPath;
444
+ return __awaiter(this, void 0, void 0, function () {
445
+ var downloadHash, extractDirPath, zipFilepath, zipMtime, unzipMtime, srcDirPath;
446
+ return __generator(this, function (_c) {
447
+ switch (_c.label) {
448
+ case 0:
449
+ downloadHash = hash(JSON.stringify({ url: url, pathOfDirToExtractInArchive: pathOfDirToExtractInArchive })).substring(0, 15);
450
+ extractDirPath = (0, path_1.join)(cacheDirPath, "_".concat(downloadHash));
451
+ return [4 /*yield*/, download(url, cacheDirPath)];
452
+ case 1:
453
+ zipFilepath = _c.sent();
454
+ return [4 /*yield*/, (0, promises_1.stat)(zipFilepath)];
455
+ case 2:
456
+ zipMtime = (_c.sent()).mtimeMs;
457
+ return [4 /*yield*/, maybeStat(extractDirPath)];
458
+ case 3:
459
+ unzipMtime = (_b = (_c.sent())) === null || _b === void 0 ? void 0 : _b.mtimeMs;
460
+ if (!(!unzipMtime || zipMtime > unzipMtime)) return [3 /*break*/, 5];
461
+ return [4 /*yield*/, unzip(zipFilepath, extractDirPath, pathOfDirToExtractInArchive)];
462
+ case 4:
463
+ _c.sent();
464
+ _c.label = 5;
465
+ case 5:
466
+ srcDirPath = pathOfDirToExtractInArchive === undefined ? extractDirPath : (0, path_1.join)(extractDirPath, pathOfDirToExtractInArchive);
467
+ (0, transformCodebase_1.transformCodebase)({ srcDirPath: srcDirPath, destDirPath: destDirPath });
468
+ return [2 /*return*/];
54
469
  }
55
- return JSON.parse(fs.readFileSync(filePath).toString("utf8"));
56
- }
57
- function writeIsSuccessByExtractDirPath(isSuccessByExtractDirPath) {
58
- fs.writeFileSync(filePath, Buffer.from(JSON.stringify(isSuccessByExtractDirPath, null, 2), "utf8"));
59
- }
60
- return { readIsSuccessByExtractDirPath: readIsSuccessByExtractDirPath, writeIsSuccessByExtractDirPath: writeIsSuccessByExtractDirPath };
61
- })(), readIsSuccessByExtractDirPath = _c.readIsSuccessByExtractDirPath, writeIsSuccessByExtractDirPath = _c.writeIsSuccessByExtractDirPath;
62
- downloadAndUnzip: {
63
- var isSuccessByExtractDirPath = readIsSuccessByExtractDirPath();
64
- if (isSuccessByExtractDirPath[extractDirPath]) {
65
- break downloadAndUnzip;
66
- }
67
- writeIsSuccessByExtractDirPath(__assign(__assign({}, isSuccessByExtractDirPath), (_a = {}, _a[extractDirPath] = false, _a)));
68
- fs.rmSync(extractDirPath, { "recursive": true, "force": true });
69
- fs.mkdirSync(extractDirPath);
70
- var zipFileBasename = (0, path_1.basename)(url);
71
- (0, child_process_1.execSync)("curl -L ".concat(url, " -o ").concat(zipFileBasename, " ").concat(params.isSilent ? "-s" : ""), { "cwd": extractDirPath });
72
- (0, child_process_1.execSync)("unzip -o ".concat(zipFileBasename).concat(pathOfDirToExtractInArchive === undefined ? "" : " \"".concat(pathOfDirToExtractInArchive, "/**/*\"")), {
73
- "cwd": extractDirPath
74
470
  });
75
- fs.rmSync((0, path_1.join)(extractDirPath, zipFileBasename), { "recursive": true, "force": true });
76
- writeIsSuccessByExtractDirPath(__assign(__assign({}, isSuccessByExtractDirPath), (_b = {}, _b[extractDirPath] = true, _b)));
77
- }
78
- (0, transformCodebase_1.transformCodebase)({
79
- "srcDirPath": pathOfDirToExtractInArchive === undefined ? extractDirPath : (0, path_1.join)(extractDirPath, pathOfDirToExtractInArchive),
80
- destDirPath: destDirPath
81
471
  });
82
472
  }
83
473
  exports.downloadAndUnzip = downloadAndUnzip;
@@ -1 +1 @@
1
- {"version":3,"file":"downloadAndUnzip.js","sourceRoot":"","sources":["../../src/bin/tools/downloadAndUnzip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"downloadAndUnzip.js","sourceRoot":"","sources":["../../src/bin/tools/downloadAndUnzip.ts"],"names":[],"mappings":"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"}