@zip.js/zip.js 2.8.47 → 2.8.48

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.
@@ -1876,6 +1876,8 @@
1876
1876
  */
1877
1877
 
1878
1878
 
1879
+ const HTTP_HEADER_CONTENT_TYPE = "Content-Type";
1880
+
1879
1881
  function toCompatibleReadable(readable) {
1880
1882
  if (readable instanceof ReadableStream) {
1881
1883
  return readable;
@@ -1896,6 +1898,29 @@
1896
1898
  });
1897
1899
  }
1898
1900
 
1901
+ function streamToBlob(readable, contentType) {
1902
+ readable = toCompatibleReadable(readable);
1903
+ if (responseSupportsGlobalReadable()) {
1904
+ const options = {};
1905
+ if (contentType) {
1906
+ options.headers = [[HTTP_HEADER_CONTENT_TYPE, contentType]];
1907
+ }
1908
+ return new Response(readable, options).blob();
1909
+ }
1910
+ const chunks = [];
1911
+ return readable
1912
+ .pipeTo(new WritableStream({
1913
+ write(chunk) {
1914
+ chunks.push(chunk);
1915
+ }
1916
+ }))
1917
+ .then(() => new Blob(chunks, contentType ? { type: contentType } : {}));
1918
+ }
1919
+
1920
+ function responseSupportsGlobalReadable() {
1921
+ return typeof Blob.prototype.stream != FUNCTION_TYPE || new Blob([]).stream() instanceof ReadableStream;
1922
+ }
1923
+
1899
1924
  function toCompatibleWritable(writable) {
1900
1925
  if (writable instanceof WritableStream) {
1901
1926
  return writable;
@@ -3235,7 +3260,6 @@
3235
3260
  const HTTP_HEADER_CONTENT_RANGE = "Content-Range";
3236
3261
  const HTTP_HEADER_ACCEPT_RANGES = "Accept-Ranges";
3237
3262
  const HTTP_HEADER_RANGE = "Range";
3238
- const HTTP_HEADER_CONTENT_TYPE = "Content-Type";
3239
3263
  const HTTP_HEADER_ETAG = "Etag";
3240
3264
  const HTTP_HEADER_LAST_MODIFIED = "Last-Modified";
3241
3265
  const HTTP_METHOD_HEAD = "HEAD";
@@ -3440,10 +3464,6 @@
3440
3464
  }
3441
3465
  }
3442
3466
 
3443
- function responseSupportsGlobalReadable() {
3444
- return typeof Blob.prototype.stream != FUNCTION_TYPE || new Blob([]).stream() instanceof ReadableStream;
3445
- }
3446
-
3447
3467
  class BlobWriter extends Stream {
3448
3468
 
3449
3469
  constructor(contentType) {
@@ -3455,22 +3475,7 @@
3455
3475
  return transformStream.writable;
3456
3476
  }
3457
3477
  });
3458
- if (responseSupportsGlobalReadable()) {
3459
- const headers = [];
3460
- if (contentType) {
3461
- headers.push([HTTP_HEADER_CONTENT_TYPE, contentType]);
3462
- }
3463
- writer.blob = new Response(transformStream.readable, { headers }).blob();
3464
- } else {
3465
- const chunks = [];
3466
- writer.blob = transformStream.readable
3467
- .pipeTo(new WritableStream({
3468
- write(chunk) {
3469
- chunks.push(chunk);
3470
- }
3471
- }))
3472
- .then(() => new Blob(chunks, { type: contentType }));
3473
- }
3478
+ writer.blob = streamToBlob(transformStream.readable, contentType);
3474
3479
  writer.blob.catch(() => { });
3475
3480
  }
3476
3481
 
@@ -4544,7 +4549,7 @@
4544
4549
  const { config } = zipReader;
4545
4550
  await initStream(reader);
4546
4551
  if (reader.size === UNDEFINED_VALUE || !reader.readUint8Array) {
4547
- reader = new BlobReader(await new Response(reader.readable).blob());
4552
+ reader = new BlobReader(await streamToBlob(reader.readable));
4548
4553
  await initStream(reader);
4549
4554
  }
4550
4555
  if (reader.size < END_OF_CENTRAL_DIR_LENGTH) {
@@ -4813,7 +4818,7 @@
4813
4818
  entry.arrayBuffer = async options => {
4814
4819
  const writer = new TransformStream();
4815
4820
  const [arrayBuffer] = await Promise.all([
4816
- new Response(writer.readable).arrayBuffer(),
4821
+ streamToBlob(writer.readable).then(blob => blob.arrayBuffer()),
4817
4822
  fileEntry.getData(writer, entry, zipReader.readRanges, options)]);
4818
4823
  return arrayBuffer;
4819
4824
  };
@@ -7621,7 +7626,7 @@
7621
7626
 
7622
7627
  async function spillToFile() {
7623
7628
  const directoryHandle = await getTempDirectory();
7624
- fileName = crypto.randomUUID();
7629
+ fileName = getRandomFileName$1();
7625
7630
  fileHandle = await directoryHandle.getFileHandle(fileName, { create: true });
7626
7631
  fileWriter = (await fileHandle.createWritable()).getWriter();
7627
7632
  spilled = true;
@@ -7702,6 +7707,13 @@
7702
7707
  };
7703
7708
  }
7704
7709
 
7710
+ function getRandomFileName$1() {
7711
+ if (crypto.randomUUID) {
7712
+ return crypto.randomUUID();
7713
+ }
7714
+ return Array.from(crypto.getRandomValues(new Uint8Array(16)), byteValue => byteValue.toString(16).padStart(2, "0")).join("");
7715
+ }
7716
+
7705
7717
  /*
7706
7718
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
7707
7719
 
@@ -7745,7 +7757,7 @@
7745
7757
 
7746
7758
  async function spillToBlob() {
7747
7759
  const transformStream = new TransformStream();
7748
- blobPromise = new Response(transformStream.readable).blob();
7760
+ blobPromise = streamToBlob(transformStream.readable);
7749
7761
  blobWriter = transformStream.writable.getWriter();
7750
7762
  spilled = true;
7751
7763
  for (const chunk of memoryChunks) {
@@ -7885,7 +7897,7 @@
7885
7897
 
7886
7898
  async function spillToFile() {
7887
7899
  const directoryHandle = await getTempDirectory();
7888
- fileName = crypto.randomUUID();
7900
+ fileName = getRandomFileName();
7889
7901
  const fileHandle = await directoryHandle.getFileHandle(fileName, { create: true });
7890
7902
  accessHandle = await fileHandle.createSyncAccessHandle();
7891
7903
  spilled = true;
@@ -7965,6 +7977,13 @@
7965
7977
  };
7966
7978
  }
7967
7979
 
7980
+ function getRandomFileName() {
7981
+ if (crypto.randomUUID) {
7982
+ return crypto.randomUUID();
7983
+ }
7984
+ return Array.from(crypto.getRandomValues(new Uint8Array(16)), byteValue => byteValue.toString(16).padStart(2, "0")).join("");
7985
+ }
7986
+
7968
7987
  /*
7969
7988
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
7970
7989
 
@@ -8178,7 +8197,7 @@
8178
8197
  await Promise.all([initStream(reader), initStream(writer, uncompressedSize)]);
8179
8198
  const { readable } = reader;
8180
8199
  zipEntry.uncompressedSize = reader.size;
8181
- await readable.pipeTo(writer.writable);
8200
+ await toCompatibleReadable(readable).pipeTo(toCompatibleWritable(writer.writable));
8182
8201
  return writer.getData ? writer.getData() : writer.writable;
8183
8202
  }
8184
8203
  }