@vltpkg/cli-js 1.0.1 → 1.0.3
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/{access-SXQICNAN.js → access-5WETTBDZ.js} +9 -7
- package/{bugs-OOPMFRCI.js → bugs-KONFLIQQ.js} +19 -18
- package/{build-HDXI5OA7.js → build-S7G2DU7I.js} +12 -10
- package/{cache-RW4Y4XNQ.js → cache-Z4OIMLXQ.js} +23 -21
- package/{chunk-RXNA2XCX.js → chunk-4KCU2KZL.js} +8 -1
- package/{chunk-F2FKLPZD.js → chunk-5B23EKN4.js} +4 -4
- package/{chunk-4ZXA6RLP.js → chunk-5QJEOGEM.js} +3 -1
- package/{chunk-CCQYIYTA.js → chunk-5UPPEUG2.js} +11 -11
- package/chunk-BJBFEQRR.js +667 -0
- package/{chunk-MU7Y4R5E.js → chunk-DYCF76WI.js} +4 -4
- package/{chunk-EHEVBLDB.js → chunk-E737X73P.js} +38 -24
- package/{chunk-ICJRCXSG.js → chunk-FFOXTPQA.js} +12 -9
- package/chunk-G7UPIJAP.js +903 -0
- package/{chunk-CNSTFT7U.js → chunk-HAYXR3MW.js} +1 -1
- package/{chunk-U6DM3ROE.js → chunk-HNCE3YE5.js} +1649 -1569
- package/{chunk-2PLIV3N3.js → chunk-IITIX4ID.js} +740 -6
- package/chunk-LPIBYUMT.js +854 -0
- package/{chunk-E5YE7UTZ.js → chunk-LZGKX7JI.js} +114 -50
- package/{chunk-3SQ5Y324.js → chunk-NXEH3NQZ.js} +11 -13
- package/{chunk-MT76WHSM.js → chunk-OCJDISSI.js} +12 -6
- package/chunk-RNJSI3NZ.js +75 -0
- package/{chunk-FAG776ZD.js → chunk-T4GYDWUJ.js} +1 -1
- package/{chunk-VM2RMMY4.js → chunk-TMBNGWXK.js} +3 -3
- package/{chunk-EQ633HIM.js → chunk-UAAZW4N6.js} +4 -4
- package/{chunk-D5CP6O6G.js → chunk-UXIRAU5T.js} +4 -4
- package/{chunk-EFWPI6IY.js → chunk-VB3IWNHX.js} +1 -1
- package/chunk-VE6CCH33.js +3000 -0
- package/{chunk-UCD3RJYG.js → chunk-W2Q5EIMH.js} +8 -8
- package/{chunk-VZ7UNZHR.js → chunk-XQSBCMSC.js} +5 -5
- package/{reporter-2XBYWAVU.js → chunk-XU5SMHXP.js} +35 -10
- package/{ci-MTYU2K2A.js → ci-RZZE375O.js} +17 -16
- package/cli-package.json +1 -1
- package/{config-TVAXCTQO.js → config-LL3RLMZG.js} +9 -12
- package/{config-6NXV2BXW.js → config-MDFY3ORD.js} +15 -18
- package/{create-LXI5DCDW.js → create-GVSDTOGQ.js} +23 -23
- package/{deprecate-2AQBL5XT.js → deprecate-T4TQLGXQ.js} +16 -14
- package/{dist-tag-BFSYLRIH.js → dist-tag-GO46UQUN.js} +11 -9
- package/{docs-ADPJ4B4C.js → docs-FJME563T.js} +19 -18
- package/{exec-GMS54RAC.js → exec-M22KBPCK.js} +23 -23
- package/{exec-cache-R5LVZL5Z.js → exec-cache-3UNLDUAP.js} +22 -22
- package/{exec-local-TVCLZGIM.js → exec-local-YHVO5RLU.js} +20 -18
- package/{help-6CECUD6C.js → help-ZEWMLOJX.js} +3 -3
- package/{init-XXFLGYVP.js → init-4HPZY2KN.js} +12 -10
- package/{install-6KMXYSF5.js → install-2TZIP4PJ.js} +18 -17
- package/{list-RUO3SUKY.js → list-NFFXER43.js} +20 -18
- package/{login-6I2CGO7I.js → login-KV5YC5Z2.js} +9 -7
- package/{logout-JTU4BJKH.js → logout-I2VT3NAR.js} +9 -7
- package/{pack-NCWH2TUA.js → pack-47ZKFSHI.js} +16 -14
- package/package.json +6 -6
- package/{ping-4MEAC2WD.js → ping-Q7Y7QV63.js} +9 -7
- package/{pkg-ENSKG6G7.js → pkg-VTJS2ISJ.js} +13 -11
- package/{profile-62YHNFSO.js → profile-YXZYVEUX.js} +9 -7
- package/{publish-PPY724N2.js → publish-CBN67KN2.js} +21 -19
- package/{query-NLWXKOOT.js → query-U3QHF3ZE.js} +20 -18
- package/{registry-QGI44LG4.js → registry-CZPFR3OF.js} +3 -3
- package/registry-client-package.json +1 -1
- package/registry-client-src-revalidate.js +2080 -349
- package/{repo-BFRAXIVU.js → repo-4UIQRBI7.js} +19 -18
- package/{chunk-4RZDJQ5U.js → reporter-DKZTTACW.js} +5 -5
- package/{run-7O65747G.js → run-5DUYI6GL.js} +20 -18
- package/{run-exec-2OYWHL6K.js → run-exec-HPNBVAXH.js} +20 -18
- package/security-archive-src-update-expired.js +39 -4
- package/{setup-MMIDAIJI.js → setup-23W5FQVW.js} +24 -15
- package/{src-OK3KHDYR.js → src-2NB67FPG.js} +22 -23
- package/src-6OKPBJJT.js +59 -0
- package/src-M5RRGKUM.js +913 -0
- package/{token-VLVXUW54.js → token-SRCS5CRU.js} +9 -7
- package/{uninstall-TAG6QIAG.js → uninstall-JXHAFXZ2.js} +18 -17
- package/{unpublish-Y4L5J2IA.js → unpublish-GRYB5KQH.js} +12 -10
- package/{update-RYH4RKBS.js → update-GDLL4ER6.js} +17 -16
- package/{version-COHB32ON.js → version-JVG4CI4L.js} +13 -11
- package/{view-P7U4MF43.js → view-ABQLVL4L.js} +13 -15
- package/vlr.js +1 -1
- package/vlrx.js +1 -1
- package/vlt.js +1 -1
- package/vlx.js +1 -1
- package/vlxl.js +1 -1
- package/{whoami-47MVFMZC.js → whoami-RCCZ7BXI.js} +9 -7
- package/chunk-7NHXV6AH.js +0 -4488
- package/chunk-HB7CKTYO.js +0 -75
- package/chunk-PW6S6AIO.js +0 -716
- package/chunk-WXMYKCQW.js +0 -1640
- package/{chunk-Y7CQIZ7Y.js → chunk-FEIPJIEN.js} +3 -3
package/src-M5RRGKUM.js
ADDED
|
@@ -0,0 +1,913 @@
|
|
|
1
|
+
var global = globalThis;
|
|
2
|
+
import {Buffer} from "node:buffer";
|
|
3
|
+
import {setTimeout as _vlt_setTimeout,clearTimeout as _vlt_clearTimeout,setImmediate as _vlt_setImmediate,clearImmediate as _vlt_clearImmediate,setInterval as _vlt_setInterval,clearInterval as _vlt_clearInterval} from "node:timers";
|
|
4
|
+
globalThis.setTimeout = _vlt_setTimeout;
|
|
5
|
+
globalThis.clearTimeout = _vlt_clearTimeout;
|
|
6
|
+
globalThis.setImmediate = _vlt_setImmediate;
|
|
7
|
+
globalThis.clearImmediate = _vlt_clearImmediate;
|
|
8
|
+
globalThis.setInterval = _vlt_setInterval;
|
|
9
|
+
globalThis.clearInterval = _vlt_clearInterval;
|
|
10
|
+
import {createRequire as _vlt_createRequire} from "node:module";
|
|
11
|
+
var require = _vlt_createRequire(import.meta.filename);
|
|
12
|
+
import {
|
|
13
|
+
rimraf
|
|
14
|
+
} from "./chunk-BJBFEQRR.js";
|
|
15
|
+
import "./chunk-VE6CCH33.js";
|
|
16
|
+
import {
|
|
17
|
+
asError
|
|
18
|
+
} from "./chunk-IITIX4ID.js";
|
|
19
|
+
import {
|
|
20
|
+
error
|
|
21
|
+
} from "./chunk-WZWDS3W4.js";
|
|
22
|
+
import "./chunk-PZLD7RTK.js";
|
|
23
|
+
|
|
24
|
+
// ../../src/tar/src/unpack.ts
|
|
25
|
+
import { randomBytes } from "node:crypto";
|
|
26
|
+
import { lstat, mkdir, rename, writeFile } from "node:fs/promises";
|
|
27
|
+
import {
|
|
28
|
+
basename as basename2,
|
|
29
|
+
dirname,
|
|
30
|
+
isAbsolute,
|
|
31
|
+
relative,
|
|
32
|
+
resolve,
|
|
33
|
+
sep
|
|
34
|
+
} from "node:path";
|
|
35
|
+
|
|
36
|
+
// ../../node_modules/.vlt/~npm~tar@7.5.20/node_modules/tar/dist/esm/header.js
|
|
37
|
+
import { posix as pathModule } from "node:path";
|
|
38
|
+
|
|
39
|
+
// ../../node_modules/.vlt/~npm~tar@7.5.20/node_modules/tar/dist/esm/large-numbers.js
|
|
40
|
+
var encode = (num, buf) => {
|
|
41
|
+
if (!Number.isSafeInteger(num)) {
|
|
42
|
+
throw Error("cannot encode number outside of javascript safe integer range");
|
|
43
|
+
} else if (num < 0) {
|
|
44
|
+
encodeNegative(num, buf);
|
|
45
|
+
} else {
|
|
46
|
+
encodePositive(num, buf);
|
|
47
|
+
}
|
|
48
|
+
return buf;
|
|
49
|
+
};
|
|
50
|
+
var encodePositive = (num, buf) => {
|
|
51
|
+
buf[0] = 128;
|
|
52
|
+
for (var i = buf.length; i > 1; i--) {
|
|
53
|
+
buf[i - 1] = num & 255;
|
|
54
|
+
num = Math.floor(num / 256);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
var encodeNegative = (num, buf) => {
|
|
58
|
+
buf[0] = 255;
|
|
59
|
+
var flipped = false;
|
|
60
|
+
num = num * -1;
|
|
61
|
+
for (var i = buf.length; i > 1; i--) {
|
|
62
|
+
var byte = num & 255;
|
|
63
|
+
num = Math.floor(num / 256);
|
|
64
|
+
if (flipped) {
|
|
65
|
+
buf[i - 1] = onesComp(byte);
|
|
66
|
+
} else if (byte === 0) {
|
|
67
|
+
buf[i - 1] = 0;
|
|
68
|
+
} else {
|
|
69
|
+
flipped = true;
|
|
70
|
+
buf[i - 1] = twosComp(byte);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
var parse = (buf) => {
|
|
75
|
+
const pre = buf[0];
|
|
76
|
+
const value = pre === 128 ? pos(buf.subarray(1, buf.length)) : pre === 255 ? twos(buf) : null;
|
|
77
|
+
if (value === null) {
|
|
78
|
+
throw Error("invalid base256 encoding");
|
|
79
|
+
}
|
|
80
|
+
if (!Number.isSafeInteger(value)) {
|
|
81
|
+
throw Error("parsed number outside of javascript safe integer range");
|
|
82
|
+
}
|
|
83
|
+
return value;
|
|
84
|
+
};
|
|
85
|
+
var twos = (buf) => {
|
|
86
|
+
var len = buf.length;
|
|
87
|
+
var sum = 0;
|
|
88
|
+
var flipped = false;
|
|
89
|
+
for (var i = len - 1; i > -1; i--) {
|
|
90
|
+
var byte = Number(buf[i]);
|
|
91
|
+
var f;
|
|
92
|
+
if (flipped) {
|
|
93
|
+
f = onesComp(byte);
|
|
94
|
+
} else if (byte === 0) {
|
|
95
|
+
f = byte;
|
|
96
|
+
} else {
|
|
97
|
+
flipped = true;
|
|
98
|
+
f = twosComp(byte);
|
|
99
|
+
}
|
|
100
|
+
if (f !== 0) {
|
|
101
|
+
sum -= f * Math.pow(256, len - i - 1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return sum;
|
|
105
|
+
};
|
|
106
|
+
var pos = (buf) => {
|
|
107
|
+
var len = buf.length;
|
|
108
|
+
var sum = 0;
|
|
109
|
+
for (var i = len - 1; i > -1; i--) {
|
|
110
|
+
var byte = Number(buf[i]);
|
|
111
|
+
if (byte !== 0) {
|
|
112
|
+
sum += byte * Math.pow(256, len - i - 1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return sum;
|
|
116
|
+
};
|
|
117
|
+
var onesComp = (byte) => (255 ^ byte) & 255;
|
|
118
|
+
var twosComp = (byte) => (255 ^ byte) + 1 & 255;
|
|
119
|
+
|
|
120
|
+
// ../../node_modules/.vlt/~npm~tar@7.5.20/node_modules/tar/dist/esm/types.js
|
|
121
|
+
var isCode = (c) => name.has(c);
|
|
122
|
+
var normalFsTypes = /* @__PURE__ */ new Set([
|
|
123
|
+
"0",
|
|
124
|
+
"",
|
|
125
|
+
"1",
|
|
126
|
+
"2",
|
|
127
|
+
"3",
|
|
128
|
+
"4",
|
|
129
|
+
"5",
|
|
130
|
+
"6",
|
|
131
|
+
"7",
|
|
132
|
+
"D"
|
|
133
|
+
]);
|
|
134
|
+
var name = /* @__PURE__ */ new Map([
|
|
135
|
+
["0", "File"],
|
|
136
|
+
// same as File
|
|
137
|
+
["", "OldFile"],
|
|
138
|
+
["1", "Link"],
|
|
139
|
+
["2", "SymbolicLink"],
|
|
140
|
+
// Devices and FIFOs aren't fully supported
|
|
141
|
+
// they are parsed, but skipped when unpacking
|
|
142
|
+
["3", "CharacterDevice"],
|
|
143
|
+
["4", "BlockDevice"],
|
|
144
|
+
["5", "Directory"],
|
|
145
|
+
["6", "FIFO"],
|
|
146
|
+
// same as File
|
|
147
|
+
["7", "ContiguousFile"],
|
|
148
|
+
// pax headers
|
|
149
|
+
["g", "GlobalExtendedHeader"],
|
|
150
|
+
["x", "ExtendedHeader"],
|
|
151
|
+
// vendor-specific stuff
|
|
152
|
+
// skip
|
|
153
|
+
["A", "SolarisACL"],
|
|
154
|
+
// like 5, but with data, which should be skipped
|
|
155
|
+
["D", "GNUDumpDir"],
|
|
156
|
+
// metadata only, skip
|
|
157
|
+
["I", "Inode"],
|
|
158
|
+
// data = link path of next file
|
|
159
|
+
["K", "NextFileHasLongLinkpath"],
|
|
160
|
+
// data = path of next file
|
|
161
|
+
["L", "NextFileHasLongPath"],
|
|
162
|
+
// skip
|
|
163
|
+
["M", "ContinuationFile"],
|
|
164
|
+
// like L
|
|
165
|
+
["N", "OldGnuLongPath"],
|
|
166
|
+
// skip
|
|
167
|
+
["S", "SparseFile"],
|
|
168
|
+
// skip
|
|
169
|
+
["V", "TapeVolumeHeader"],
|
|
170
|
+
// like x
|
|
171
|
+
["X", "OldExtendedHeader"]
|
|
172
|
+
]);
|
|
173
|
+
var code = new Map(Array.from(name).map((kv) => [kv[1], kv[0]]));
|
|
174
|
+
|
|
175
|
+
// ../../node_modules/.vlt/~npm~tar@7.5.20/node_modules/tar/dist/esm/header.js
|
|
176
|
+
var notNegative = (n) => n === void 0 || n < 0 ? void 0 : n;
|
|
177
|
+
var Header = class {
|
|
178
|
+
cksumValid = false;
|
|
179
|
+
needPax = false;
|
|
180
|
+
nullBlock = false;
|
|
181
|
+
block;
|
|
182
|
+
path;
|
|
183
|
+
mode;
|
|
184
|
+
uid;
|
|
185
|
+
gid;
|
|
186
|
+
size;
|
|
187
|
+
cksum;
|
|
188
|
+
#type = "Unsupported";
|
|
189
|
+
linkpath;
|
|
190
|
+
uname;
|
|
191
|
+
gname;
|
|
192
|
+
devmaj = 0;
|
|
193
|
+
devmin = 0;
|
|
194
|
+
atime;
|
|
195
|
+
ctime;
|
|
196
|
+
mtime;
|
|
197
|
+
charset;
|
|
198
|
+
comment;
|
|
199
|
+
constructor(data, off = 0, ex, gex) {
|
|
200
|
+
if (Buffer.isBuffer(data)) {
|
|
201
|
+
this.decode(data, off || 0, ex, gex);
|
|
202
|
+
} else if (data) {
|
|
203
|
+
this.#slurp(data);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
decode(buf, off, ex, gex) {
|
|
207
|
+
if (!off) {
|
|
208
|
+
off = 0;
|
|
209
|
+
}
|
|
210
|
+
if (!buf || !(buf.length >= off + 512)) {
|
|
211
|
+
throw new Error("need 512 bytes for header");
|
|
212
|
+
}
|
|
213
|
+
const t = decString(buf, off + 156, 1);
|
|
214
|
+
const isNormalFS = normalFsTypes.has(t);
|
|
215
|
+
const exForFields = isNormalFS ? ex : void 0;
|
|
216
|
+
const gexForFields = isNormalFS ? gex : void 0;
|
|
217
|
+
this.path = exForFields?.path ?? decString(buf, off, 100);
|
|
218
|
+
this.mode = exForFields?.mode ?? gexForFields?.mode ?? decNumber(buf, off + 100, 8);
|
|
219
|
+
this.uid = exForFields?.uid ?? gexForFields?.uid ?? decNumber(buf, off + 108, 8);
|
|
220
|
+
this.gid = exForFields?.gid ?? gexForFields?.gid ?? decNumber(buf, off + 116, 8);
|
|
221
|
+
this.size = notNegative(exForFields?.size ?? gexForFields?.size ?? decNumber(buf, off + 124, 12));
|
|
222
|
+
this.mtime = exForFields?.mtime ?? gexForFields?.mtime ?? decDate(buf, off + 136, 12);
|
|
223
|
+
this.cksum = decNumber(buf, off + 148, 12);
|
|
224
|
+
if (gexForFields)
|
|
225
|
+
this.#slurp(gexForFields, true);
|
|
226
|
+
if (exForFields)
|
|
227
|
+
this.#slurp(exForFields);
|
|
228
|
+
if (isCode(t)) {
|
|
229
|
+
this.#type = t || "0";
|
|
230
|
+
}
|
|
231
|
+
if (this.#type === "0" && this.path.slice(-1) === "/") {
|
|
232
|
+
this.#type = "5";
|
|
233
|
+
}
|
|
234
|
+
if (this.#type === "5") {
|
|
235
|
+
this.size = 0;
|
|
236
|
+
}
|
|
237
|
+
this.linkpath = decString(buf, off + 157, 100);
|
|
238
|
+
if (buf.subarray(off + 257, off + 265).toString() === "ustar\x0000") {
|
|
239
|
+
this.uname = exForFields?.uname ?? gexForFields?.uname ?? decString(buf, off + 265, 32);
|
|
240
|
+
this.gname = exForFields?.gname ?? gexForFields?.gname ?? decString(buf, off + 297, 32);
|
|
241
|
+
this.devmaj = exForFields?.devmaj ?? gexForFields?.devmaj ?? decNumber(buf, off + 329, 8) ?? 0;
|
|
242
|
+
this.devmin = exForFields?.devmin ?? gexForFields?.devmin ?? decNumber(buf, off + 337, 8) ?? 0;
|
|
243
|
+
if (buf[off + 475] !== 0) {
|
|
244
|
+
const prefix = decString(buf, off + 345, 155);
|
|
245
|
+
this.path = prefix + "/" + this.path;
|
|
246
|
+
} else {
|
|
247
|
+
const prefix = decString(buf, off + 345, 130);
|
|
248
|
+
if (prefix) {
|
|
249
|
+
this.path = prefix + "/" + this.path;
|
|
250
|
+
}
|
|
251
|
+
this.atime = ex?.atime ?? gex?.atime ?? decDate(buf, off + 476, 12);
|
|
252
|
+
this.ctime = ex?.ctime ?? gex?.ctime ?? decDate(buf, off + 488, 12);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
let sum = 8 * 32;
|
|
256
|
+
for (let i = off; i < off + 148; i++) {
|
|
257
|
+
sum += buf[i];
|
|
258
|
+
}
|
|
259
|
+
for (let i = off + 156; i < off + 512; i++) {
|
|
260
|
+
sum += buf[i];
|
|
261
|
+
}
|
|
262
|
+
this.cksumValid = sum === this.cksum;
|
|
263
|
+
if (this.cksum === void 0 && sum === 8 * 32) {
|
|
264
|
+
this.nullBlock = true;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
#slurp(ex, gex = false) {
|
|
268
|
+
Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {
|
|
269
|
+
return !(v === null || v === void 0 || k === "size" && Number(v) < 0 || k === "path" && gex || k === "linkpath" && gex || k === "global");
|
|
270
|
+
})));
|
|
271
|
+
}
|
|
272
|
+
encode(buf, off = 0) {
|
|
273
|
+
if (!buf) {
|
|
274
|
+
buf = this.block = Buffer.alloc(512);
|
|
275
|
+
}
|
|
276
|
+
if (this.#type === "Unsupported") {
|
|
277
|
+
this.#type = "0";
|
|
278
|
+
}
|
|
279
|
+
if (!(buf.length >= off + 512)) {
|
|
280
|
+
throw new Error("need 512 bytes for header");
|
|
281
|
+
}
|
|
282
|
+
const prefixSize = this.ctime || this.atime ? 130 : 155;
|
|
283
|
+
const split = splitPrefix(this.path || "", prefixSize);
|
|
284
|
+
const path = split[0];
|
|
285
|
+
const prefix = split[1];
|
|
286
|
+
this.needPax = !!split[2];
|
|
287
|
+
this.needPax = encString(buf, off, 100, path) || this.needPax;
|
|
288
|
+
this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax;
|
|
289
|
+
this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax;
|
|
290
|
+
this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax;
|
|
291
|
+
this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax;
|
|
292
|
+
this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax;
|
|
293
|
+
buf[off + 156] = Number(this.#type.codePointAt(0));
|
|
294
|
+
this.needPax = encString(buf, off + 157, 100, this.linkpath) || this.needPax;
|
|
295
|
+
buf.write("ustar\x0000", off + 257, 8);
|
|
296
|
+
this.needPax = encString(buf, off + 265, 32, this.uname) || this.needPax;
|
|
297
|
+
this.needPax = encString(buf, off + 297, 32, this.gname) || this.needPax;
|
|
298
|
+
this.needPax = encNumber(buf, off + 329, 8, this.devmaj) || this.needPax;
|
|
299
|
+
this.needPax = encNumber(buf, off + 337, 8, this.devmin) || this.needPax;
|
|
300
|
+
this.needPax = encString(buf, off + 345, prefixSize, prefix) || this.needPax;
|
|
301
|
+
if (buf[off + 475] !== 0) {
|
|
302
|
+
this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax;
|
|
303
|
+
} else {
|
|
304
|
+
this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax;
|
|
305
|
+
this.needPax = encDate(buf, off + 476, 12, this.atime) || this.needPax;
|
|
306
|
+
this.needPax = encDate(buf, off + 488, 12, this.ctime) || this.needPax;
|
|
307
|
+
}
|
|
308
|
+
let sum = 8 * 32;
|
|
309
|
+
for (let i = off; i < off + 148; i++) {
|
|
310
|
+
sum += buf[i];
|
|
311
|
+
}
|
|
312
|
+
for (let i = off + 156; i < off + 512; i++) {
|
|
313
|
+
sum += buf[i];
|
|
314
|
+
}
|
|
315
|
+
this.cksum = sum;
|
|
316
|
+
encNumber(buf, off + 148, 8, this.cksum);
|
|
317
|
+
this.cksumValid = true;
|
|
318
|
+
return this.needPax;
|
|
319
|
+
}
|
|
320
|
+
get type() {
|
|
321
|
+
return this.#type === "Unsupported" ? this.#type : name.get(this.#type);
|
|
322
|
+
}
|
|
323
|
+
get typeKey() {
|
|
324
|
+
return this.#type;
|
|
325
|
+
}
|
|
326
|
+
set type(type) {
|
|
327
|
+
const c = String(code.get(type));
|
|
328
|
+
if (isCode(c) || c === "Unsupported") {
|
|
329
|
+
this.#type = c;
|
|
330
|
+
} else if (isCode(type)) {
|
|
331
|
+
this.#type = type;
|
|
332
|
+
} else {
|
|
333
|
+
throw new TypeError("invalid entry type: " + type);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
var splitPrefix = (p, prefixSize) => {
|
|
338
|
+
const pathSize = 100;
|
|
339
|
+
let pp = p;
|
|
340
|
+
let prefix = "";
|
|
341
|
+
let ret = void 0;
|
|
342
|
+
const root = pathModule.parse(p).root || ".";
|
|
343
|
+
if (Buffer.byteLength(pp) < pathSize) {
|
|
344
|
+
ret = [pp, prefix, false];
|
|
345
|
+
} else {
|
|
346
|
+
prefix = pathModule.dirname(pp);
|
|
347
|
+
pp = pathModule.basename(pp);
|
|
348
|
+
do {
|
|
349
|
+
if (Buffer.byteLength(pp) <= pathSize && Buffer.byteLength(prefix) <= prefixSize) {
|
|
350
|
+
ret = [pp, prefix, false];
|
|
351
|
+
} else if (Buffer.byteLength(pp) > pathSize && Buffer.byteLength(prefix) <= prefixSize) {
|
|
352
|
+
ret = [pp.slice(0, pathSize - 1), prefix, true];
|
|
353
|
+
} else {
|
|
354
|
+
pp = pathModule.join(pathModule.basename(prefix), pp);
|
|
355
|
+
prefix = pathModule.dirname(prefix);
|
|
356
|
+
}
|
|
357
|
+
} while (prefix !== root && ret === void 0);
|
|
358
|
+
if (!ret) {
|
|
359
|
+
ret = [p.slice(0, pathSize - 1), "", true];
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return ret;
|
|
363
|
+
};
|
|
364
|
+
var decString = (buf, off, size) => buf.subarray(off, off + size).toString("utf8").replace(/\0.*/, "");
|
|
365
|
+
var decDate = (buf, off, size) => numToDate(decNumber(buf, off, size));
|
|
366
|
+
var numToDate = (num) => num === void 0 ? void 0 : new Date(num * 1e3);
|
|
367
|
+
var decNumber = (buf, off, size) => Number(buf[off]) & 128 ? parse(buf.subarray(off, off + size)) : decSmallNumber(buf, off, size);
|
|
368
|
+
var nanUndef = (value) => isNaN(value) ? void 0 : value;
|
|
369
|
+
var decSmallNumber = (buf, off, size) => nanUndef(parseInt(buf.subarray(off, off + size).toString("utf8").replace(/\0.*$/, "").trim(), 8));
|
|
370
|
+
var MAXNUM = {
|
|
371
|
+
12: 8589934591,
|
|
372
|
+
8: 2097151
|
|
373
|
+
};
|
|
374
|
+
var encNumber = (buf, off, size, num) => num === void 0 ? false : num > MAXNUM[size] || num < 0 ? (encode(num, buf.subarray(off, off + size)), true) : (encSmallNumber(buf, off, size, num), false);
|
|
375
|
+
var encSmallNumber = (buf, off, size, num) => buf.write(octalString(num, size), off, size, "ascii");
|
|
376
|
+
var octalString = (num, size) => padOctal(Math.floor(num).toString(8), size);
|
|
377
|
+
var padOctal = (str, size) => (str.length === size - 1 ? str : new Array(size - str.length - 1).join("0") + str + " ") + "\0";
|
|
378
|
+
var encDate = (buf, off, size, date) => date === void 0 ? false : encNumber(buf, off, size, date.getTime() / 1e3);
|
|
379
|
+
var NULLS = new Array(156).join("\0");
|
|
380
|
+
var encString = (buf, off, size, str) => str === void 0 ? false : (buf.write(str + NULLS, off, size, "utf8"), str.length !== Buffer.byteLength(str) || str.length > size);
|
|
381
|
+
|
|
382
|
+
// ../../node_modules/.vlt/~npm~tar@7.5.20/node_modules/tar/dist/esm/pax.js
|
|
383
|
+
import { basename } from "node:path";
|
|
384
|
+
var Pax = class _Pax {
|
|
385
|
+
atime;
|
|
386
|
+
mtime;
|
|
387
|
+
ctime;
|
|
388
|
+
charset;
|
|
389
|
+
comment;
|
|
390
|
+
gid;
|
|
391
|
+
uid;
|
|
392
|
+
gname;
|
|
393
|
+
uname;
|
|
394
|
+
linkpath;
|
|
395
|
+
dev;
|
|
396
|
+
ino;
|
|
397
|
+
nlink;
|
|
398
|
+
path;
|
|
399
|
+
size;
|
|
400
|
+
mode;
|
|
401
|
+
global;
|
|
402
|
+
constructor(obj, global = false) {
|
|
403
|
+
this.atime = obj.atime;
|
|
404
|
+
this.charset = obj.charset;
|
|
405
|
+
this.comment = obj.comment;
|
|
406
|
+
this.ctime = obj.ctime;
|
|
407
|
+
this.dev = obj.dev;
|
|
408
|
+
this.gid = obj.gid;
|
|
409
|
+
this.global = global;
|
|
410
|
+
this.gname = obj.gname;
|
|
411
|
+
this.ino = obj.ino;
|
|
412
|
+
this.linkpath = obj.linkpath;
|
|
413
|
+
this.mtime = obj.mtime;
|
|
414
|
+
this.nlink = obj.nlink;
|
|
415
|
+
this.path = obj.path;
|
|
416
|
+
this.size = obj.size;
|
|
417
|
+
this.uid = obj.uid;
|
|
418
|
+
this.uname = obj.uname;
|
|
419
|
+
}
|
|
420
|
+
encode() {
|
|
421
|
+
const body = this.encodeBody();
|
|
422
|
+
if (body === "") {
|
|
423
|
+
return Buffer.allocUnsafe(0);
|
|
424
|
+
}
|
|
425
|
+
const bodyLen = Buffer.byteLength(body);
|
|
426
|
+
const bufLen = 512 * Math.ceil(1 + bodyLen / 512);
|
|
427
|
+
const buf = Buffer.allocUnsafe(bufLen);
|
|
428
|
+
for (let i = 0; i < 512; i++) {
|
|
429
|
+
buf[i] = 0;
|
|
430
|
+
}
|
|
431
|
+
new Header({
|
|
432
|
+
// XXX split the path
|
|
433
|
+
// then the path should be PaxHeader + basename, but less than 99,
|
|
434
|
+
// prepend with the dirname
|
|
435
|
+
/* c8 ignore start */
|
|
436
|
+
path: ("PaxHeader/" + basename(this.path ?? "")).slice(0, 99),
|
|
437
|
+
/* c8 ignore stop */
|
|
438
|
+
mode: this.mode || 420,
|
|
439
|
+
uid: this.uid,
|
|
440
|
+
gid: this.gid,
|
|
441
|
+
size: bodyLen,
|
|
442
|
+
mtime: this.mtime,
|
|
443
|
+
type: this.global ? "GlobalExtendedHeader" : "ExtendedHeader",
|
|
444
|
+
linkpath: "",
|
|
445
|
+
uname: this.uname || "",
|
|
446
|
+
gname: this.gname || "",
|
|
447
|
+
devmaj: 0,
|
|
448
|
+
devmin: 0,
|
|
449
|
+
atime: this.atime,
|
|
450
|
+
ctime: this.ctime
|
|
451
|
+
}).encode(buf);
|
|
452
|
+
buf.write(body, 512, bodyLen, "utf8");
|
|
453
|
+
for (let i = bodyLen + 512; i < buf.length; i++) {
|
|
454
|
+
buf[i] = 0;
|
|
455
|
+
}
|
|
456
|
+
return buf;
|
|
457
|
+
}
|
|
458
|
+
encodeBody() {
|
|
459
|
+
return this.encodeField("path") + this.encodeField("ctime") + this.encodeField("atime") + this.encodeField("dev") + this.encodeField("ino") + this.encodeField("nlink") + this.encodeField("charset") + this.encodeField("comment") + this.encodeField("gid") + this.encodeField("gname") + this.encodeField("linkpath") + this.encodeField("mtime") + this.encodeField("size") + this.encodeField("uid") + this.encodeField("uname");
|
|
460
|
+
}
|
|
461
|
+
encodeField(field) {
|
|
462
|
+
if (this[field] === void 0) {
|
|
463
|
+
return "";
|
|
464
|
+
}
|
|
465
|
+
const r = this[field];
|
|
466
|
+
const v = r instanceof Date ? r.getTime() / 1e3 : r;
|
|
467
|
+
const s = " " + (field === "dev" || field === "ino" || field === "nlink" ? "SCHILY." : "") + field + "=" + v + "\n";
|
|
468
|
+
const byteLen = Buffer.byteLength(s);
|
|
469
|
+
let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1;
|
|
470
|
+
if (byteLen + digits >= Math.pow(10, digits)) {
|
|
471
|
+
digits += 1;
|
|
472
|
+
}
|
|
473
|
+
const len = digits + byteLen;
|
|
474
|
+
return len + s;
|
|
475
|
+
}
|
|
476
|
+
static parse(str, ex, g = false) {
|
|
477
|
+
return new _Pax(merge(parseKV(str), ex), g);
|
|
478
|
+
}
|
|
479
|
+
};
|
|
480
|
+
var merge = (a, b) => b ? Object.assign({}, b, a) : a;
|
|
481
|
+
var parseKV = (str) => str.replace(/\n$/, "").split("\n").reduce(parseKVLine, /* @__PURE__ */ Object.create(null));
|
|
482
|
+
var parseKVLine = (set, line) => {
|
|
483
|
+
const n = parseInt(line, 10);
|
|
484
|
+
if (n !== Buffer.byteLength(line) + 1) {
|
|
485
|
+
return set;
|
|
486
|
+
}
|
|
487
|
+
line = line.slice((n + " ").length);
|
|
488
|
+
const kv = line.split("=");
|
|
489
|
+
const r = kv.shift();
|
|
490
|
+
if (!r) {
|
|
491
|
+
return set;
|
|
492
|
+
}
|
|
493
|
+
const k = r.replace(/^SCHILY\.(dev|ino|nlink)/, "$1");
|
|
494
|
+
const v = kv.join("=").replace(/\0.*/, "");
|
|
495
|
+
switch (k) {
|
|
496
|
+
case "path":
|
|
497
|
+
case "linkpath":
|
|
498
|
+
case "type":
|
|
499
|
+
case "charset":
|
|
500
|
+
case "comment":
|
|
501
|
+
case "gname":
|
|
502
|
+
case "uname":
|
|
503
|
+
set[k] = v;
|
|
504
|
+
break;
|
|
505
|
+
case "ctime":
|
|
506
|
+
case "atime":
|
|
507
|
+
case "mtime":
|
|
508
|
+
set[k] = new Date(Number(v) * 1e3);
|
|
509
|
+
break;
|
|
510
|
+
case "size":
|
|
511
|
+
const s = +v;
|
|
512
|
+
if (s >= 0)
|
|
513
|
+
set[k] = s;
|
|
514
|
+
break;
|
|
515
|
+
case "gid":
|
|
516
|
+
case "uid":
|
|
517
|
+
case "dev":
|
|
518
|
+
case "ino":
|
|
519
|
+
case "nlink":
|
|
520
|
+
case "mode":
|
|
521
|
+
set[k] = +v;
|
|
522
|
+
break;
|
|
523
|
+
}
|
|
524
|
+
return set;
|
|
525
|
+
};
|
|
526
|
+
|
|
527
|
+
// ../../src/tar/src/unpack.ts
|
|
528
|
+
import { unzip as unzipCB } from "node:zlib";
|
|
529
|
+
|
|
530
|
+
// ../../src/tar/src/find-tar-dir.ts
|
|
531
|
+
var findTarDir = (path, tarDir) => {
|
|
532
|
+
if (tarDir !== void 0) return tarDir;
|
|
533
|
+
if (!path) return void 0;
|
|
534
|
+
const i = path.indexOf("/", path.startsWith("./") ? 2 : 0);
|
|
535
|
+
if (i === -1) return void 0;
|
|
536
|
+
const chomp = path.substring(0, i);
|
|
537
|
+
if (chomp === "." || chomp === ".." || chomp === "" || chomp === "./." || chomp === "./.." || chomp === "./") {
|
|
538
|
+
return void 0;
|
|
539
|
+
}
|
|
540
|
+
return chomp + "/";
|
|
541
|
+
};
|
|
542
|
+
|
|
543
|
+
// ../../src/tar/src/unpack.ts
|
|
544
|
+
var unzip = async (input) => new Promise(
|
|
545
|
+
(res, rej) => (
|
|
546
|
+
/* c8 ignore start */
|
|
547
|
+
unzipCB(input, (er, result) => er ? rej(er) : res(result))
|
|
548
|
+
)
|
|
549
|
+
/* c8 ignore stop */
|
|
550
|
+
);
|
|
551
|
+
var exists = async (path) => {
|
|
552
|
+
try {
|
|
553
|
+
await lstat(path);
|
|
554
|
+
return true;
|
|
555
|
+
} catch {
|
|
556
|
+
return false;
|
|
557
|
+
}
|
|
558
|
+
};
|
|
559
|
+
var id = 1;
|
|
560
|
+
var tmp = randomBytes(6).toString("hex") + ".";
|
|
561
|
+
var tmpSuffix = () => tmp + String(id++);
|
|
562
|
+
var foldKeys = process.platform === "darwin" || process.platform === "win32";
|
|
563
|
+
var entryKey = (p) => foldKeys ? p.toLowerCase() : p;
|
|
564
|
+
var parseWriteLanes = (raw) => {
|
|
565
|
+
const n = Number(raw);
|
|
566
|
+
return Number.isFinite(n) && n >= 1 ? Math.floor(n) : 64;
|
|
567
|
+
};
|
|
568
|
+
var writeLaneLimit = parseWriteLanes(
|
|
569
|
+
process.env.VLT_TAR_WRITE_LANES
|
|
570
|
+
);
|
|
571
|
+
var writeLanesUsed = 0;
|
|
572
|
+
var writeLaneWaiters = [];
|
|
573
|
+
var writeLaneHead = 0;
|
|
574
|
+
var acquireWriteLane = async () => {
|
|
575
|
+
if (writeLanesUsed < writeLaneLimit) {
|
|
576
|
+
writeLanesUsed++;
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
await new Promise((res) => writeLaneWaiters.push(res));
|
|
580
|
+
};
|
|
581
|
+
var releaseWriteLane = () => {
|
|
582
|
+
const next = writeLaneWaiters[writeLaneHead];
|
|
583
|
+
if (next) {
|
|
584
|
+
writeLaneWaiters[writeLaneHead] = void 0;
|
|
585
|
+
writeLaneHead++;
|
|
586
|
+
if (writeLaneHead === writeLaneWaiters.length) {
|
|
587
|
+
writeLaneWaiters.length = 0;
|
|
588
|
+
writeLaneHead = 0;
|
|
589
|
+
}
|
|
590
|
+
next();
|
|
591
|
+
} else {
|
|
592
|
+
writeLanesUsed--;
|
|
593
|
+
}
|
|
594
|
+
};
|
|
595
|
+
var withWriteLane = async (fn) => {
|
|
596
|
+
await acquireWriteLane();
|
|
597
|
+
try {
|
|
598
|
+
return await fn();
|
|
599
|
+
} finally {
|
|
600
|
+
releaseWriteLane();
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
var rethrowFirst = (results) => {
|
|
604
|
+
for (const result of results) {
|
|
605
|
+
if (result.status === "rejected") throw result.reason;
|
|
606
|
+
}
|
|
607
|
+
};
|
|
608
|
+
var isClearlySafeRelPath = (sub) => {
|
|
609
|
+
const len = sub.length;
|
|
610
|
+
if (len === 0) return true;
|
|
611
|
+
if (sub.charCodeAt(0) === 47) return false;
|
|
612
|
+
if (len >= 2 && sub.charCodeAt(1) === 58) {
|
|
613
|
+
const c = sub.charCodeAt(0);
|
|
614
|
+
if (c >= 65 && c <= 90 || c >= 97 && c <= 122) {
|
|
615
|
+
return false;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
let i = 0;
|
|
619
|
+
while (i < len) {
|
|
620
|
+
let j = i;
|
|
621
|
+
while (j < len && sub.charCodeAt(j) !== 47) j++;
|
|
622
|
+
const slen = j - i;
|
|
623
|
+
if (slen === 1 && sub.charCodeAt(i) === 46) return false;
|
|
624
|
+
if (slen === 2 && sub.charCodeAt(i) === 46 && sub.charCodeAt(i + 1) === 46) {
|
|
625
|
+
return false;
|
|
626
|
+
}
|
|
627
|
+
i = j + 1;
|
|
628
|
+
}
|
|
629
|
+
return true;
|
|
630
|
+
};
|
|
631
|
+
var checkFs = (h, tarDir, target) => {
|
|
632
|
+
if (!h.path) return false;
|
|
633
|
+
if (!tarDir) return false;
|
|
634
|
+
h.path = h.path.replace(/[\\/]+/g, "/");
|
|
635
|
+
if (!h.path.startsWith(tarDir)) return false;
|
|
636
|
+
const sub = h.path.slice(tarDir.length);
|
|
637
|
+
if (isClearlySafeRelPath(sub)) return true;
|
|
638
|
+
const rel = relative(target, resolve(target, sub));
|
|
639
|
+
if (rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel)) {
|
|
640
|
+
return false;
|
|
641
|
+
}
|
|
642
|
+
return true;
|
|
643
|
+
};
|
|
644
|
+
var write = async (path, body, executable = false) => {
|
|
645
|
+
await writeFile(path, body, {
|
|
646
|
+
mode: executable ? 511 : 438
|
|
647
|
+
});
|
|
648
|
+
};
|
|
649
|
+
var unpack = async (tarData, target) => {
|
|
650
|
+
const isGzip = tarData[0] === 31 && tarData[1] === 139;
|
|
651
|
+
await unpackUnzipped(
|
|
652
|
+
isGzip ? await unzip(tarData) : tarData,
|
|
653
|
+
target
|
|
654
|
+
);
|
|
655
|
+
};
|
|
656
|
+
var unpackUnzipped = async (buffer, target) => {
|
|
657
|
+
const isGzip = buffer[0] === 31 && buffer[1] === 139;
|
|
658
|
+
if (isGzip) {
|
|
659
|
+
throw error("still gzipped after unzipping", {
|
|
660
|
+
found: isGzip,
|
|
661
|
+
wanted: false
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
if (buffer.length % 512 !== 0) {
|
|
665
|
+
throw error("Invalid tarball: length not divisible by 512", {
|
|
666
|
+
found: buffer.length
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
if (buffer.length < 1024) {
|
|
670
|
+
throw error(
|
|
671
|
+
"Invalid tarball: not terminated by 1024 null bytes",
|
|
672
|
+
{ found: buffer.length }
|
|
673
|
+
);
|
|
674
|
+
}
|
|
675
|
+
for (let i = buffer.length - 1024; i < buffer.length; i++) {
|
|
676
|
+
if (buffer[i] !== 0) {
|
|
677
|
+
throw error(
|
|
678
|
+
"Invalid tarball: not terminated by 1024 null bytes",
|
|
679
|
+
{ found: buffer.subarray(i, i + 10) }
|
|
680
|
+
);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
const tmp2 = dirname(target) + sep + "." + basename2(target) + "." + tmpSuffix();
|
|
684
|
+
const og = tmp2 + ".ORIGINAL";
|
|
685
|
+
let succeeded = false;
|
|
686
|
+
try {
|
|
687
|
+
const entries = /* @__PURE__ */ new Map();
|
|
688
|
+
let tarDir = void 0;
|
|
689
|
+
let offset = 0;
|
|
690
|
+
let h;
|
|
691
|
+
let ex = void 0;
|
|
692
|
+
let gex = void 0;
|
|
693
|
+
while (offset < buffer.length && !(h = new Header(buffer, offset, ex, gex)).nullBlock) {
|
|
694
|
+
offset += 512;
|
|
695
|
+
ex = void 0;
|
|
696
|
+
gex = void 0;
|
|
697
|
+
const size = h.size ?? 0;
|
|
698
|
+
const body = buffer.subarray(offset, offset + size);
|
|
699
|
+
if (!h.cksumValid) continue;
|
|
700
|
+
offset += 512 * Math.ceil(size / 512);
|
|
701
|
+
switch (h.type) {
|
|
702
|
+
case "File":
|
|
703
|
+
if (!tarDir) tarDir = findTarDir(h.path, tarDir);
|
|
704
|
+
if (!tarDir) continue;
|
|
705
|
+
if (!checkFs(h, tarDir, tmp2)) continue;
|
|
706
|
+
{
|
|
707
|
+
const dest = resolve(tmp2, h.path.substring(tarDir.length));
|
|
708
|
+
const key = entryKey(dest);
|
|
709
|
+
if (entries.get(key)?.dir === true) {
|
|
710
|
+
throw error("file/directory collision in tarball", {
|
|
711
|
+
path: dest
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
entries.set(key, {
|
|
715
|
+
path: dest,
|
|
716
|
+
body,
|
|
717
|
+
executable: 1 === ((h.mode ?? 1638) & 1),
|
|
718
|
+
dir: false
|
|
719
|
+
});
|
|
720
|
+
}
|
|
721
|
+
break;
|
|
722
|
+
case "Directory":
|
|
723
|
+
if (!tarDir) tarDir = findTarDir(h.path, tarDir);
|
|
724
|
+
if (!tarDir) continue;
|
|
725
|
+
if (!checkFs(h, tarDir, tmp2)) continue;
|
|
726
|
+
{
|
|
727
|
+
const dest = resolve(tmp2, h.path.substring(tarDir.length));
|
|
728
|
+
const key = entryKey(dest);
|
|
729
|
+
if (entries.get(key)?.dir === false) {
|
|
730
|
+
throw error("file/directory collision in tarball", {
|
|
731
|
+
path: dest
|
|
732
|
+
});
|
|
733
|
+
}
|
|
734
|
+
entries.set(key, {
|
|
735
|
+
path: dest,
|
|
736
|
+
dir: true
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
break;
|
|
740
|
+
case "GlobalExtendedHeader":
|
|
741
|
+
gex = Pax.parse(body.toString(), gex, true);
|
|
742
|
+
break;
|
|
743
|
+
case "ExtendedHeader":
|
|
744
|
+
case "OldExtendedHeader":
|
|
745
|
+
ex = Pax.parse(body.toString(), ex, false);
|
|
746
|
+
break;
|
|
747
|
+
case "NextFileHasLongPath":
|
|
748
|
+
case "OldGnuLongPath":
|
|
749
|
+
ex ??= /* @__PURE__ */ Object.create(null);
|
|
750
|
+
ex.path = body.toString().replace(/\0.*/, "");
|
|
751
|
+
break;
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
const dirs = /* @__PURE__ */ new Set();
|
|
755
|
+
const files = [];
|
|
756
|
+
for (const e of entries.values()) {
|
|
757
|
+
if (e.dir) dirs.add(e.path);
|
|
758
|
+
else {
|
|
759
|
+
dirs.add(dirname(e.path));
|
|
760
|
+
files.push(e);
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
rethrowFirst(
|
|
764
|
+
await Promise.allSettled(
|
|
765
|
+
[...dirs].map(
|
|
766
|
+
(d) => mkdir(d, { recursive: true, mode: 511 })
|
|
767
|
+
)
|
|
768
|
+
)
|
|
769
|
+
);
|
|
770
|
+
rethrowFirst(
|
|
771
|
+
await Promise.allSettled(
|
|
772
|
+
files.map(
|
|
773
|
+
(f) => withWriteLane(() => write(f.path, f.body, f.executable))
|
|
774
|
+
)
|
|
775
|
+
)
|
|
776
|
+
);
|
|
777
|
+
const targetExists = await exists(target);
|
|
778
|
+
if (targetExists) await rename(target, og);
|
|
779
|
+
await rename(tmp2, target);
|
|
780
|
+
if (targetExists) await rimraf(og);
|
|
781
|
+
succeeded = true;
|
|
782
|
+
} finally {
|
|
783
|
+
if (!succeeded) {
|
|
784
|
+
if (await exists(og)) {
|
|
785
|
+
await rimraf(target);
|
|
786
|
+
await rename(og, target);
|
|
787
|
+
}
|
|
788
|
+
await rimraf(tmp2);
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
};
|
|
792
|
+
|
|
793
|
+
// ../../src/tar/src/pool.ts
|
|
794
|
+
import os from "node:os";
|
|
795
|
+
|
|
796
|
+
// ../../src/tar/src/unpack-request.ts
|
|
797
|
+
var ID = 1;
|
|
798
|
+
var UnpackRequest = class {
|
|
799
|
+
id = ID++;
|
|
800
|
+
tarData;
|
|
801
|
+
target;
|
|
802
|
+
resolve;
|
|
803
|
+
reject;
|
|
804
|
+
promise = new Promise((res, rej) => {
|
|
805
|
+
this.resolve = res;
|
|
806
|
+
this.reject = rej;
|
|
807
|
+
});
|
|
808
|
+
constructor(tarData, target) {
|
|
809
|
+
this.tarData = tarData;
|
|
810
|
+
this.target = target;
|
|
811
|
+
}
|
|
812
|
+
};
|
|
813
|
+
|
|
814
|
+
// ../../src/tar/src/worker.ts
|
|
815
|
+
var isObj = (o) => !!o && typeof o === "object";
|
|
816
|
+
var isResponseOK = (o) => isObj(o) && typeof o.id === "number" && o.ok === true;
|
|
817
|
+
var Worker = class {
|
|
818
|
+
onMessage;
|
|
819
|
+
constructor(onMessage) {
|
|
820
|
+
this.onMessage = onMessage;
|
|
821
|
+
}
|
|
822
|
+
async process(req) {
|
|
823
|
+
const { target, tarData, id: id2 } = req;
|
|
824
|
+
try {
|
|
825
|
+
await unpack(tarData, target);
|
|
826
|
+
const m = { id: id2, ok: true };
|
|
827
|
+
this.onMessage(m);
|
|
828
|
+
} catch (error2) {
|
|
829
|
+
const m = { id: id2, error: error2 };
|
|
830
|
+
this.onMessage(m);
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
};
|
|
834
|
+
|
|
835
|
+
// ../../src/tar/src/pool.ts
|
|
836
|
+
var Pool = class {
|
|
837
|
+
/**
|
|
838
|
+
* Number of workers to emplly. Defaults to 1 less than the number of
|
|
839
|
+
* CPUs, or 1.
|
|
840
|
+
*/
|
|
841
|
+
/* c8 ignore next */
|
|
842
|
+
jobs = 8 * (Math.max(os.availableParallelism(), 2) - 1);
|
|
843
|
+
/**
|
|
844
|
+
* Set of currently active worker threads
|
|
845
|
+
*/
|
|
846
|
+
workers = /* @__PURE__ */ new Set();
|
|
847
|
+
/**
|
|
848
|
+
* Queue of requests awaiting an available worker
|
|
849
|
+
*/
|
|
850
|
+
queue = [];
|
|
851
|
+
/**
|
|
852
|
+
* Requests that have been assigned to a worker, but have not yet
|
|
853
|
+
* been confirmed completed.
|
|
854
|
+
*/
|
|
855
|
+
pending = /* @__PURE__ */ new Map();
|
|
856
|
+
// handle a message from the worker
|
|
857
|
+
#onMessage(w, m) {
|
|
858
|
+
const { id: id2 } = m;
|
|
859
|
+
const ur = this.pending.get(id2);
|
|
860
|
+
if (!ur) return;
|
|
861
|
+
if (isResponseOK(m)) {
|
|
862
|
+
ur.resolve();
|
|
863
|
+
} else {
|
|
864
|
+
ur.reject(
|
|
865
|
+
error(
|
|
866
|
+
asError(m.error, "failed without error message").message,
|
|
867
|
+
{
|
|
868
|
+
found: m,
|
|
869
|
+
cause: m.error
|
|
870
|
+
}
|
|
871
|
+
)
|
|
872
|
+
);
|
|
873
|
+
}
|
|
874
|
+
const next = this.queue.shift();
|
|
875
|
+
if (!next) {
|
|
876
|
+
this.workers.delete(w);
|
|
877
|
+
} else {
|
|
878
|
+
void w.process(next);
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
// create a new worker
|
|
882
|
+
#createWorker(req) {
|
|
883
|
+
const w = new Worker(
|
|
884
|
+
(m) => this.#onMessage(w, m)
|
|
885
|
+
);
|
|
886
|
+
this.workers.add(w);
|
|
887
|
+
void w.process(req);
|
|
888
|
+
}
|
|
889
|
+
/**
|
|
890
|
+
* Provide the tardata to be unpacked, and the location where it's to be
|
|
891
|
+
* placed. Will create a new worker up to the `jobs` value, and then start
|
|
892
|
+
* pushing in the queue for workers to pick up as they become available.
|
|
893
|
+
*
|
|
894
|
+
* Returned promise resolves when the provided tarball has been extracted.
|
|
895
|
+
*/
|
|
896
|
+
async unpack(tarData, target) {
|
|
897
|
+
const ur = new UnpackRequest(tarData, target);
|
|
898
|
+
this.pending.set(ur.id, ur);
|
|
899
|
+
if (this.workers.size < this.jobs) {
|
|
900
|
+
this.#createWorker(ur);
|
|
901
|
+
} else {
|
|
902
|
+
this.queue.push(ur);
|
|
903
|
+
}
|
|
904
|
+
return ur.promise;
|
|
905
|
+
}
|
|
906
|
+
};
|
|
907
|
+
export {
|
|
908
|
+
Pool,
|
|
909
|
+
UnpackRequest,
|
|
910
|
+
Worker,
|
|
911
|
+
isResponseOK,
|
|
912
|
+
unpack
|
|
913
|
+
};
|