@ttsc/playground 0.20.1 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -137,6 +137,8 @@ import {
137
137
 
138
138
  const names = collectExternalPackageNames(userSource);
139
139
  const installed = await installPlaygroundDependencies(names, {
140
+ maxTarballBytes: 16 * 1024 * 1024,
141
+ maxUnpackedBytes: 64 * 1024 * 1024,
140
142
  onProgress: (p) => console.log(p.phase, p.packageName),
141
143
  });
142
144
  // mount installed.compilerFiles into the wasm MemFS via service.installDependencies
@@ -148,6 +150,12 @@ When a direct source import is removed, solve the complete current root list wit
148
150
 
149
151
  `PlaygroundShell` wires this automatically on every keystroke, debounced 900 ms, with an abort signal on source change.
150
152
 
153
+ The installer verifies the strongest supported `dist.integrity` digest before decompression, or `dist.shasum` when integrity is absent. Historical and private registry metadata with neither field remains compatible but unauthenticated. Each tarball is streamed through independent compressed and expanded byte limits (16 MiB and 64 MiB by default), and every file must remain below one safe, consistent archive root (`package/` normally; DefinitelyTyped uses roots such as `node/`). Override the limits with `maxTarballBytes` and `maxUnpackedBytes` when a known package requires more.
154
+
155
+ Integrity proves that archive bytes match registry metadata; it does not establish that package code is safe. `createSandboxRequire` is a CommonJS resolver and evaluator, not an origin, process, or capability sandbox. The byte limits protect installation availability, not runtime behavior such as loops, timers, network access, or globals exposed by the host. Sites accepting untrusted code or packages must provide an isolated `executeBundle` policy appropriate to their environment.
156
+
157
+ The Execute lane's CommonJS resolver treats `package.json#exports` as the package boundary. It selects `require` and `default` conditions in manifest order, preserves Node's distinction between target selection and file loading, validates relative targets after wildcard substitution, and rejects mixed or numeric condition maps. A package mounted through an npm alias may still self-reference its real manifest `name` when it declares exports; packages without exports keep legacy direct-path resolution and do not gain self-reference behavior.
158
+
151
159
  ## Tailwind setup
152
160
 
153
161
  The bundled React components use Tailwind 4 utility classes. The host site must load Tailwind for them to render correctly.
@@ -4,6 +4,8 @@ exports.installPlaygroundDependencies = installPlaygroundDependencies;
4
4
  const BUILT_IN_PLAYGROUND_PACKAGES_1 = require("./BUILT_IN_PLAYGROUND_PACKAGES");
5
5
  const npmRegistry_1 = require("./internal/npmRegistry");
6
6
  const DEFAULT_MAX_PACKAGES = 48;
7
+ const DEFAULT_MAX_TARBALL_BYTES = 16 * 1024 * 1024;
8
+ const DEFAULT_MAX_UNPACKED_BYTES = 64 * 1024 * 1024;
7
9
  /**
8
10
  * Resolve, download, and unpack a set of npm packages directly inside the
9
11
  * browser, returning their files keyed for the wasm-side MemFS, Monaco's
@@ -42,6 +44,10 @@ async function installPlaygroundDependencies(packageNames, options = {}) {
42
44
  });
43
45
  }
44
46
  const maxPackages = options.maxPackages ?? DEFAULT_MAX_PACKAGES;
47
+ const maxTarballBytes = options.maxTarballBytes ?? DEFAULT_MAX_TARBALL_BYTES;
48
+ const maxUnpackedBytes = options.maxUnpackedBytes ?? DEFAULT_MAX_UNPACKED_BYTES;
49
+ (0, npmRegistry_1.validateNpmByteLimit)(maxTarballBytes, "compressed");
50
+ (0, npmRegistry_1.validateNpmByteLimit)(maxUnpackedBytes, "expanded");
45
51
  const queue = [];
46
52
  const queued = new Map();
47
53
  const done = new Map();
@@ -145,7 +151,14 @@ async function installPlaygroundDependencies(packageNames, options = {}) {
145
151
  continue;
146
152
  (0, npmRegistry_1.throwIfAborted)(options.signal);
147
153
  report("resolve", item, `Resolving ${item.name}`);
148
- const metadata = await (0, npmRegistry_1.fetchNpmMetadata)(fetchImpl, item.registryName ?? item.name, item.optional, options.signal);
154
+ let metadata;
155
+ try {
156
+ metadata = await (0, npmRegistry_1.fetchNpmMetadata)(fetchImpl, item.registryName ?? item.name, item.optional, options.signal);
157
+ }
158
+ catch (error) {
159
+ (0, npmRegistry_1.throwIfAborted)(options.signal);
160
+ throw error;
161
+ }
149
162
  (0, npmRegistry_1.throwIfAborted)(options.signal);
150
163
  if (!metadata) {
151
164
  const mounted = installedDependencies.get(item.name);
@@ -187,18 +200,25 @@ async function installPlaygroundDependencies(packageNames, options = {}) {
187
200
  const versionMetadata = metadata.versions[version];
188
201
  const tarball = versionMetadata?.dist?.tarball;
189
202
  if (!versionMetadata || !tarball) {
190
- if (item.optional) {
191
- done.set(item.name, "");
192
- report("skip", item, `Skipped optional ${item.name}`);
193
- continue;
194
- }
195
203
  throw new Error(`No tarball found for ${item.name}@${version}.`);
196
204
  }
197
- report("download", item, `Downloading ${item.name}@${version}`, version);
198
- const tgz = await (0, npmRegistry_1.downloadTarball)(fetchImpl, tarball, options.signal);
199
- (0, npmRegistry_1.throwIfAborted)(options.signal);
200
- report("extract", item, `Extracting ${item.name}@${version}`, version);
201
- const unpacked = await (0, npmRegistry_1.unpackNpmTarball)(tgz, options.signal);
205
+ let unpacked;
206
+ try {
207
+ report("download", item, `Downloading ${item.name}@${version}`, version);
208
+ const tgz = await (0, npmRegistry_1.downloadTarball)(fetchImpl, tarball, options.signal, maxTarballBytes);
209
+ (0, npmRegistry_1.throwIfAborted)(options.signal);
210
+ await (0, npmRegistry_1.verifyTarball)(tgz, versionMetadata.dist ?? {}, options.signal);
211
+ (0, npmRegistry_1.throwIfAborted)(options.signal);
212
+ report("extract", item, `Extracting ${item.name}@${version}`, version);
213
+ unpacked = await (0, npmRegistry_1.unpackNpmTarball)(tgz, options.signal, maxUnpackedBytes);
214
+ }
215
+ catch (error) {
216
+ (0, npmRegistry_1.throwIfAborted)(options.signal);
217
+ const message = error instanceof Error ? error.message : String(error);
218
+ throw new Error(`Failed to install ${item.name}@${version}: ${message}`, {
219
+ cause: error,
220
+ });
221
+ }
202
222
  (0, npmRegistry_1.throwIfAborted)(options.signal);
203
223
  const packageJson = {
204
224
  ...versionMetadata,
@@ -1 +1 @@
1
- {"version":3,"file":"installPlaygroundDependencies.js","sourceRoot":"","sources":["../../../src/npm/installPlaygroundDependencies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installPlaygroundDependencies.js","sourceRoot":"","sources":["../../../src/npm/installPlaygroundDependencies.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,8 @@ export interface INpmVersionMetadata {
18
18
  optional?: boolean;
19
19
  }>;
20
20
  dist?: {
21
+ integrity?: string;
22
+ shasum?: string;
21
23
  tarball?: string;
22
24
  };
23
25
  }
@@ -44,12 +46,21 @@ export interface IVersionRequest {
44
46
  requester: string;
45
47
  }
46
48
  export type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
49
+ declare const VALIDATED_NPM_BYTE_LIMIT: unique symbol;
50
+ type ValidatedNpmByteLimit = number & {
51
+ readonly [VALIDATED_NPM_BYTE_LIMIT]: true;
52
+ };
47
53
  export declare const DECLARATION_FILE_REGEXP: RegExp;
48
54
  export declare function throwIfAborted(signal: AbortSignal | undefined): void;
49
55
  export declare function fetchNpmMetadata(fetchImpl: FetchLike, packageName: string, optional: boolean, signal: AbortSignal | undefined): Promise<INpmMetadata | null>;
50
56
  export declare function selectVersion(metadata: INpmMetadata, ranges: readonly string[] | string): string;
51
- export declare function downloadTarball(fetchImpl: FetchLike, tarball: string, signal: AbortSignal | undefined): Promise<ArrayBuffer>;
52
- export declare function unpackNpmTarball(tgz: ArrayBuffer, signal: AbortSignal | undefined): Promise<IUnpackedPackage>;
57
+ export declare function downloadTarball(fetchImpl: FetchLike, tarball: string, signal: AbortSignal | undefined, maxBytes?: number): Promise<ArrayBuffer>;
58
+ /** Verify registry authentication metadata against the compressed bytes. */
59
+ export declare function verifyTarball(tgz: ArrayBuffer, dist: {
60
+ integrity?: string;
61
+ shasum?: string;
62
+ }, signal: AbortSignal | undefined): Promise<void>;
63
+ export declare function unpackNpmTarball(tgz: ArrayBuffer, signal: AbortSignal | undefined, maxBytes?: number): Promise<IUnpackedPackage>;
53
64
  export interface IMountedFiles {
54
65
  compilerFiles: Record<string, string>;
55
66
  editorLibs: Record<string, string>;
@@ -65,4 +76,6 @@ export declare function enqueuePackageDependencies(packageJson: {
65
76
  }>;
66
77
  }, enqueue: (item: IQueueItem) => void, requester: string): void;
67
78
  export declare function toTypesPackageName(packageName: string): string;
79
+ /** Validate one public npm archive byte budget before starting related work. */
80
+ export declare function validateNpmByteLimit(maxBytes: number, kind: "compressed" | "expanded"): ValidatedNpmByteLimit;
68
81
  export {};
@@ -5,10 +5,12 @@ exports.throwIfAborted = throwIfAborted;
5
5
  exports.fetchNpmMetadata = fetchNpmMetadata;
6
6
  exports.selectVersion = selectVersion;
7
7
  exports.downloadTarball = downloadTarball;
8
+ exports.verifyTarball = verifyTarball;
8
9
  exports.unpackNpmTarball = unpackNpmTarball;
9
10
  exports.mountPackageFiles = mountPackageFiles;
10
11
  exports.enqueuePackageDependencies = enqueuePackageDependencies;
11
12
  exports.toTypesPackageName = toTypesPackageName;
13
+ exports.validateNpmByteLimit = validateNpmByteLimit;
12
14
  const semver_1 = require("semver");
13
15
  const TEXT_FILE_REGEXP = /(^package\.json$|\.([cm]?js|jsx|[cm]?ts|tsx|json)$|\.d\.[cm]?ts$)/i;
14
16
  exports.DECLARATION_FILE_REGEXP = /\.d\.[cm]?ts$/i;
@@ -21,18 +23,26 @@ function throwIfAborted(signal) {
21
23
  throw new DOMException("The operation was aborted.", "AbortError");
22
24
  }
23
25
  async function fetchNpmMetadata(fetchImpl, packageName, optional, signal) {
24
- const response = await fetchImpl(`https://registry.npmjs.org/${encodeURIComponent(packageName)}`, {
26
+ throwIfAborted(signal);
27
+ const response = await fetchWithAbort(() => fetchImpl(`https://registry.npmjs.org/${encodeURIComponent(packageName)}`, {
25
28
  headers: {
26
29
  Accept: "application/vnd.npm.install-v1+json, application/json",
27
30
  },
28
31
  signal,
29
- });
30
- if (response.status === 404 && optional)
32
+ }), signal);
33
+ throwIfResponseAborted(response, signal);
34
+ if (response.status === 404 && optional) {
35
+ cancelResponseBody(response);
31
36
  return null;
37
+ }
32
38
  if (!response.ok) {
39
+ cancelResponseBody(response);
33
40
  throw new Error(`npm registry returned ${response.status} while resolving ${packageName}.`);
34
41
  }
35
- return (await response.json());
42
+ throwIfAborted(signal);
43
+ const metadata = (await abortable(() => response.json(), signal));
44
+ throwIfAborted(signal);
45
+ return metadata;
36
46
  }
37
47
  function selectVersion(metadata, ranges) {
38
48
  const versions = metadata.versions;
@@ -60,16 +70,54 @@ function selectVersion(metadata, ranges) {
60
70
  .map((range) => JSON.stringify(range))
61
71
  .join(", ")}.`);
62
72
  }
63
- async function downloadTarball(fetchImpl, tarball, signal) {
64
- const response = await fetchImpl(tarball, { signal });
73
+ async function downloadTarball(fetchImpl, tarball, signal, maxBytes = 16 * 1024 * 1024) {
74
+ throwIfAborted(signal);
75
+ const byteLimit = validateNpmByteLimit(maxBytes, "compressed");
76
+ const response = await fetchWithAbort(() => fetchImpl(tarball, { signal }), signal);
77
+ throwIfResponseAborted(response, signal);
65
78
  if (!response.ok) {
79
+ cancelResponseBody(response);
66
80
  throw new Error(`tarball download failed with HTTP ${response.status}.`);
67
81
  }
68
- return response.arrayBuffer();
82
+ const declaredLength = response.headers.get("content-length");
83
+ if (declaredLength !== null) {
84
+ const parsed = Number(declaredLength);
85
+ if (Number.isFinite(parsed) && parsed >= 0 && parsed > byteLimit) {
86
+ cancelResponseBody(response);
87
+ throw new Error(`tarball exceeds the ${formatByteLimit(byteLimit)} compressed byte limit.`);
88
+ }
89
+ }
90
+ return collectBoundedStream(response.body, byteLimit, "compressed", signal, () => response.arrayBuffer());
91
+ }
92
+ /** Verify registry authentication metadata against the compressed bytes. */
93
+ async function verifyTarball(tgz, dist, signal) {
94
+ throwIfAborted(signal);
95
+ if (dist.integrity !== undefined) {
96
+ const candidates = parseIntegrity(dist.integrity);
97
+ const strength = Math.max(...candidates.map(({ rank }) => rank));
98
+ const strongest = candidates.filter((candidate) => candidate.rank === strength);
99
+ const actual = new Uint8Array(await abortable(() => crypto.subtle.digest(strongest[0].webAlgorithm, tgz), signal));
100
+ throwIfAborted(signal);
101
+ if (!strongest.some(({ digest }) => equalBytes(actual, digest))) {
102
+ throw new Error(`tarball integrity mismatch (${strongest[0].algorithm}).`);
103
+ }
104
+ return;
105
+ }
106
+ if (dist.shasum !== undefined) {
107
+ if (!/^[a-fA-F0-9]{40}$/.test(dist.shasum)) {
108
+ throw new Error("tarball shasum is not a valid SHA-1 digest.");
109
+ }
110
+ const actual = new Uint8Array(await abortable(() => crypto.subtle.digest("SHA-1", tgz), signal));
111
+ throwIfAborted(signal);
112
+ if (!equalBytes(actual, decodeHex(dist.shasum))) {
113
+ throw new Error("tarball shasum mismatch (sha1).");
114
+ }
115
+ }
69
116
  }
70
- async function unpackNpmTarball(tgz, signal) {
117
+ async function unpackNpmTarball(tgz, signal, maxBytes = 64 * 1024 * 1024) {
71
118
  throwIfAborted(signal);
72
- const tar = await gunzip(tgz);
119
+ const byteLimit = validateNpmByteLimit(maxBytes, "expanded");
120
+ const tar = await gunzip(tgz, byteLimit, signal);
73
121
  throwIfAborted(signal);
74
122
  const decoder = new TextDecoder();
75
123
  const files = {};
@@ -77,22 +125,44 @@ async function unpackNpmTarball(tgz, signal) {
77
125
  let offset = 0;
78
126
  let longPath = null;
79
127
  let paxPath = null;
80
- while (offset + 512 <= tar.length) {
128
+ let terminated = false;
129
+ let archiveRoot = null;
130
+ const confine = (rawPath) => {
131
+ const confined = confineTarPath(rawPath, archiveRoot);
132
+ archiveRoot = confined.root;
133
+ return confined.relative;
134
+ };
135
+ while (offset < tar.length) {
81
136
  throwIfAborted(signal);
137
+ if (offset + 512 > tar.length) {
138
+ throw new Error("Truncated tar header.");
139
+ }
82
140
  const header = tar.subarray(offset, offset + 512);
83
141
  offset += 512;
84
- if (header.every((value) => value === 0))
142
+ if (header.every((value) => value === 0)) {
143
+ terminated = true;
85
144
  break;
145
+ }
86
146
  const type = String.fromCharCode(header[156] ?? 0);
87
147
  const size = parseOctal(header.subarray(124, 136));
148
+ if (size > tar.length - offset) {
149
+ throw new Error("Tar entry body extends beyond the archive.");
150
+ }
88
151
  const body = tar.subarray(offset, offset + size);
89
- offset += Math.ceil(size / 512) * 512;
152
+ const paddedSize = Math.ceil(size / 512) * 512;
153
+ if (!Number.isSafeInteger(paddedSize) || paddedSize > tar.length - offset) {
154
+ throw new Error("Tar entry padding extends beyond the archive.");
155
+ }
156
+ offset += paddedSize;
90
157
  if (type === "L") {
91
158
  longPath = trimNull(decoder.decode(body));
159
+ confine(longPath);
92
160
  continue;
93
161
  }
94
162
  if (type === "x") {
95
163
  paxPath = parsePaxPath(body);
164
+ if (paxPath !== null)
165
+ confine(paxPath);
96
166
  continue;
97
167
  }
98
168
  if (type !== "0" && type !== "\0") {
@@ -100,11 +170,11 @@ async function unpackNpmTarball(tgz, signal) {
100
170
  paxPath = null;
101
171
  continue;
102
172
  }
103
- const rawPath = paxPath ?? longPath ?? readTarString(header.subarray(0, 100), decoder);
173
+ const rawPath = paxPath ?? longPath ?? readTarHeaderPath(header, decoder);
104
174
  longPath = null;
105
175
  paxPath = null;
106
- const rel = stripTarRoot(rawPath);
107
- if (!rel || !TEXT_FILE_REGEXP.test(rel))
176
+ const rel = confine(rawPath);
177
+ if (!TEXT_FILE_REGEXP.test(rel))
108
178
  continue;
109
179
  const text = decoder.decode(body);
110
180
  files[rel] = text;
@@ -117,16 +187,18 @@ async function unpackNpmTarball(tgz, signal) {
117
187
  }
118
188
  }
119
189
  }
190
+ if (!terminated)
191
+ throw new Error("Tar archive has no end marker.");
120
192
  return { files, packageJson };
121
193
  }
122
- async function gunzip(input) {
194
+ async function gunzip(input, maxBytes, signal) {
123
195
  if (!("DecompressionStream" in globalThis)) {
124
196
  throw new Error("This browser cannot unpack npm tgz files because DecompressionStream is unavailable.");
125
197
  }
126
198
  const stream = new Blob([input])
127
199
  .stream()
128
200
  .pipeThrough(new DecompressionStream("gzip"));
129
- return new Uint8Array(await new Response(stream).arrayBuffer());
201
+ return new Uint8Array(await collectBoundedStream(stream, maxBytes, "expanded", signal, async () => new Response(stream).arrayBuffer()));
130
202
  }
131
203
  function mountPackageFiles(packageName, files) {
132
204
  const compilerFiles = {};
@@ -193,11 +265,19 @@ function readTarString(bytes, decoder) {
193
265
  }
194
266
  function trimNull(text) {
195
267
  const index = text.indexOf("\0");
196
- return (index < 0 ? text : text.slice(0, index)).trim();
268
+ return index < 0 ? text : text.slice(0, index);
197
269
  }
198
270
  function parseOctal(bytes) {
199
271
  const text = trimNull(new TextDecoder().decode(bytes)).trim();
200
- return text ? Number.parseInt(text, 8) : 0;
272
+ if (text.length === 0)
273
+ return 0;
274
+ if (!/^[0-7]+$/.test(text))
275
+ throw new Error("Invalid tar entry size.");
276
+ const value = Number.parseInt(text, 8);
277
+ if (!Number.isSafeInteger(value) || value < 0) {
278
+ throw new Error("Tar entry size is outside the safe integer range.");
279
+ }
280
+ return value;
201
281
  }
202
282
  function parsePaxPath(bytes) {
203
283
  const decoder = new TextDecoder();
@@ -227,13 +307,238 @@ function parsePaxPath(bytes) {
227
307
  }
228
308
  return path;
229
309
  }
230
- function stripTarRoot(path) {
231
- const normalized = path.replace(/\\/g, "/").replace(/^\/+/, "");
232
- if (!normalized)
233
- return "";
234
- if (normalized.startsWith("package/"))
235
- return normalized.slice("package/".length);
236
- const slash = normalized.indexOf("/");
237
- return slash < 0 ? normalized : normalized.slice(slash + 1);
310
+ function readTarHeaderPath(header, decoder) {
311
+ const name = readTarString(header.subarray(0, 100), decoder);
312
+ const prefix = readTarString(header.subarray(345, 500), decoder);
313
+ return prefix ? `${prefix}/${name}` : name;
314
+ }
315
+ /**
316
+ * Require an npm archive path below one safe, consistent top-level root.
317
+ *
318
+ * Npm normally emits `package/`, while current DefinitelyTyped tarballs use
319
+ * roots such as `node/` and `react/`. The root spelling does not enter the
320
+ * mounted key; consistency and safe remaining segments provide confinement.
321
+ */
322
+ function confineTarPath(rawPath, archiveRoot) {
323
+ if (rawPath.length === 0 ||
324
+ rawPath.includes("\\") ||
325
+ rawPath.startsWith("/") ||
326
+ /^[a-zA-Z]:/.test(rawPath)) {
327
+ throw new Error(`Invalid npm tar entry path ${JSON.stringify(rawPath)}.`);
328
+ }
329
+ const segments = rawPath.split("/");
330
+ if (segments.length < 2 ||
331
+ segments.some((segment, index) => segment.length === 0 ||
332
+ segment === "." ||
333
+ segment === ".." ||
334
+ (index > 0 && /^[a-zA-Z]:/.test(segment)))) {
335
+ throw new Error(`npm tar entry is outside a confined package root: ${JSON.stringify(rawPath)}.`);
336
+ }
337
+ const root = segments[0];
338
+ if (archiveRoot !== null && root !== archiveRoot) {
339
+ throw new Error(`npm tar archive mixes package roots ${JSON.stringify(archiveRoot)} and ${JSON.stringify(root)}.`);
340
+ }
341
+ return { relative: segments.slice(1).join("/"), root };
342
+ }
343
+ function parseIntegrity(integrity) {
344
+ const tokens = integrity.trim().split(/\s+/).filter(Boolean);
345
+ if (tokens.length === 0)
346
+ throw new Error("tarball integrity is empty.");
347
+ const candidates = [];
348
+ for (const token of tokens) {
349
+ const match = /^([A-Za-z0-9]+)-([A-Za-z0-9+/]+={0,2})(?:\?[!-~]+)?$/i.exec(token);
350
+ if (!match) {
351
+ throw new Error("tarball integrity contains malformed metadata.");
352
+ }
353
+ const algorithm = match[1].toLowerCase();
354
+ if (!["sha1", "sha256", "sha384", "sha512"].includes(algorithm)) {
355
+ decodeBase64(match[2]);
356
+ continue;
357
+ }
358
+ const expectedLength = algorithm === "sha512"
359
+ ? 64
360
+ : algorithm === "sha384"
361
+ ? 48
362
+ : algorithm === "sha256"
363
+ ? 32
364
+ : 20;
365
+ const digest = decodeBase64(match[2]);
366
+ if (digest.length !== expectedLength) {
367
+ throw new Error("tarball integrity contains a malformed digest.");
368
+ }
369
+ candidates.push({
370
+ algorithm,
371
+ digest,
372
+ rank: expectedLength,
373
+ webAlgorithm: algorithm.replace("sha", "SHA-"),
374
+ });
375
+ }
376
+ if (candidates.length === 0) {
377
+ throw new Error("tarball integrity has no supported digest algorithm.");
378
+ }
379
+ return candidates;
380
+ }
381
+ function decodeBase64(value) {
382
+ try {
383
+ const decoded = atob(value);
384
+ return Uint8Array.from(decoded, (character) => character.charCodeAt(0));
385
+ }
386
+ catch {
387
+ throw new Error("tarball integrity contains malformed base64.");
388
+ }
389
+ }
390
+ function decodeHex(value) {
391
+ return Uint8Array.from(value.match(/../g) ?? [], (byte) => Number.parseInt(byte, 16));
392
+ }
393
+ function equalBytes(left, right) {
394
+ if (left.length !== right.length)
395
+ return false;
396
+ let difference = 0;
397
+ for (let index = 0; index < left.length; ++index) {
398
+ difference |= left[index] ^ right[index];
399
+ }
400
+ return difference === 0;
401
+ }
402
+ async function collectBoundedStream(stream, maxBytes, kind, signal, fallback) {
403
+ if (stream === null) {
404
+ throwIfAborted(signal);
405
+ const bytes = await abortable(fallback, signal);
406
+ throwIfAborted(signal);
407
+ if (bytes.byteLength > maxBytes) {
408
+ throw new Error(`tarball exceeds the ${formatByteLimit(maxBytes)} ${kind} byte limit.`);
409
+ }
410
+ return bytes;
411
+ }
412
+ const reader = stream.getReader();
413
+ const chunks = [];
414
+ let length = 0;
415
+ let abort;
416
+ const aborted = signal === undefined
417
+ ? undefined
418
+ : new Promise((_resolve, reject) => {
419
+ abort = () => {
420
+ let error;
421
+ try {
422
+ throwIfAborted(signal);
423
+ return;
424
+ }
425
+ catch (caught) {
426
+ error = caught;
427
+ }
428
+ void reader.cancel(error).catch(() => undefined);
429
+ reject(error);
430
+ };
431
+ signal.addEventListener("abort", abort, { once: true });
432
+ });
433
+ try {
434
+ for (;;) {
435
+ throwIfAborted(signal);
436
+ const read = reader.read();
437
+ const next = aborted ? await Promise.race([read, aborted]) : await read;
438
+ throwIfAborted(signal);
439
+ if (next.done)
440
+ break;
441
+ if (next.value.byteLength > maxBytes - length) {
442
+ void reader.cancel().catch(() => undefined);
443
+ throw new Error(`tarball exceeds the ${formatByteLimit(maxBytes)} ${kind} byte limit.`);
444
+ }
445
+ chunks.push(next.value);
446
+ length += next.value.byteLength;
447
+ }
448
+ }
449
+ catch (error) {
450
+ void reader.cancel(error).catch(() => undefined);
451
+ throw error;
452
+ }
453
+ finally {
454
+ if (abort !== undefined)
455
+ signal?.removeEventListener("abort", abort);
456
+ }
457
+ const output = new Uint8Array(length);
458
+ let offset = 0;
459
+ for (const chunk of chunks) {
460
+ output.set(chunk, offset);
461
+ offset += chunk.byteLength;
462
+ }
463
+ return output.buffer;
464
+ }
465
+ function formatByteLimit(bytes) {
466
+ return `${bytes.toLocaleString("en-US")}-byte`;
467
+ }
468
+ /** Validate one public npm archive byte budget before starting related work. */
469
+ function validateNpmByteLimit(maxBytes, kind) {
470
+ if (!Number.isSafeInteger(maxBytes) || maxBytes <= 0) {
471
+ throw new Error(`${kind} byte limit must be a positive safe integer.`);
472
+ }
473
+ return maxBytes;
474
+ }
475
+ /**
476
+ * Reject promptly on abort even when an underlying browser task is not
477
+ * cancellable.
478
+ */
479
+ function abortable(start, signal, disposeLateValue) {
480
+ throwIfAborted(signal);
481
+ let task;
482
+ try {
483
+ task = start();
484
+ }
485
+ catch (error) {
486
+ throwIfAborted(signal);
487
+ throw error;
488
+ }
489
+ if (signal === undefined)
490
+ return task;
491
+ return new Promise((resolve, reject) => {
492
+ let aborted = false;
493
+ const abort = () => {
494
+ if (aborted)
495
+ return;
496
+ aborted = true;
497
+ signal.removeEventListener("abort", abort);
498
+ try {
499
+ throwIfAborted(signal);
500
+ }
501
+ catch (error) {
502
+ reject(error);
503
+ }
504
+ };
505
+ signal.addEventListener("abort", abort, { once: true });
506
+ void task
507
+ .then((value) => {
508
+ if (signal.aborted) {
509
+ try {
510
+ disposeLateValue?.(value);
511
+ }
512
+ catch {
513
+ // Disposal is best-effort and must not replace the abort reason.
514
+ }
515
+ abort();
516
+ return;
517
+ }
518
+ resolve(value);
519
+ }, reject)
520
+ .finally(() => {
521
+ signal.removeEventListener("abort", abort);
522
+ });
523
+ if (signal.aborted)
524
+ abort();
525
+ });
526
+ }
527
+ /** Cancel an unused response body without obscuring the deciding outcome. */
528
+ function cancelResponseBody(response) {
529
+ void response.body?.cancel().catch(() => undefined);
530
+ }
531
+ /** Preserve the abort reason across the response-to-caller handoff. */
532
+ function throwIfResponseAborted(response, signal) {
533
+ if (!signal?.aborted)
534
+ return;
535
+ cancelResponseBody(response);
536
+ throwIfAborted(signal);
537
+ }
538
+ /** Fetch one response and cancel any body that loses the abort race. */
539
+ async function fetchWithAbort(start, signal) {
540
+ const response = await abortable(start, signal, cancelResponseBody);
541
+ throwIfResponseAborted(response, signal);
542
+ return response;
238
543
  }
239
544
  //# sourceMappingURL=npmRegistry.js.map