@zip.js/zip.js 2.8.17 → 2.8.18

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/index.cjs CHANGED
@@ -1958,6 +1958,8 @@ class ChunkStream extends TransformStream {
1958
1958
  */
1959
1959
 
1960
1960
 
1961
+ const MODULE_WORKER_OPTIONS = { type: "module" };
1962
+
1961
1963
  let webWorkerSupported, webWorkerURI, webWorkerOptions;
1962
1964
  let transferStreamsSupported = true;
1963
1965
  let initModule$1 = () => { };
@@ -2170,11 +2172,8 @@ function watchClosedStream(writableSource) {
2170
2172
  return { writable, closed };
2171
2173
  }
2172
2174
 
2173
- function getWebWorker(url, baseURI, workerData, isModuleType = false, useBlobURI = true) {
2175
+ function getWebWorker(url, baseURI, workerData, isModuleType, useBlobURI = true) {
2174
2176
  let worker, resolvedURI, resolvedOptions;
2175
- if (isModuleType) {
2176
- resolvedOptions = { type: "module" };
2177
- }
2178
2177
  if (webWorkerURI === UNDEFINED_VALUE) {
2179
2178
  // deno-lint-ignore valid-typeof
2180
2179
  const isFunctionURI = typeof url == FUNCTION_TYPE;
@@ -2186,6 +2185,12 @@ function getWebWorker(url, baseURI, workerData, isModuleType = false, useBlobURI
2186
2185
  const isDataURI = resolvedURI.startsWith("data:");
2187
2186
  const isBlobURI = resolvedURI.startsWith("blob:");
2188
2187
  if (isDataURI || isBlobURI) {
2188
+ if (isModuleType === UNDEFINED_VALUE) {
2189
+ isModuleType = false;
2190
+ }
2191
+ if (isModuleType) {
2192
+ resolvedOptions = MODULE_WORKER_OPTIONS;
2193
+ }
2189
2194
  try {
2190
2195
  worker = new Worker(resolvedURI, resolvedOptions);
2191
2196
  } catch (error) {
@@ -2205,6 +2210,12 @@ function getWebWorker(url, baseURI, workerData, isModuleType = false, useBlobURI
2205
2210
  }
2206
2211
  }
2207
2212
  } else {
2213
+ if (isModuleType === UNDEFINED_VALUE) {
2214
+ isModuleType = true;
2215
+ }
2216
+ if (isModuleType) {
2217
+ resolvedOptions = MODULE_WORKER_OPTIONS;
2218
+ }
2208
2219
  try {
2209
2220
  resolvedURI = new URL(resolvedURI, baseURI);
2210
2221
  } catch {
@@ -2214,7 +2225,7 @@ function getWebWorker(url, baseURI, workerData, isModuleType = false, useBlobURI
2214
2225
  worker = new Worker(resolvedURI, resolvedOptions);
2215
2226
  } catch (error) {
2216
2227
  if (!isModuleType) {
2217
- return getWebWorker(url, baseURI, workerData, true, useBlobURI);
2228
+ return getWebWorker(url, baseURI, workerData, false, useBlobURI);
2218
2229
  } else {
2219
2230
  throw error;
2220
2231
  }
@@ -4888,7 +4899,6 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
4888
4899
  let writingBufferedEntryData;
4889
4900
  let writingEntryData;
4890
4901
  let fileWriter;
4891
- let blobPromise;
4892
4902
  files.set(name, fileEntry);
4893
4903
  try {
4894
4904
  let lockPreviousFileEntry;
@@ -4897,7 +4907,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
4897
4907
  requestLockCurrentFileEntry();
4898
4908
  }
4899
4909
  if ((options.bufferedWrite || zipWriter.writerLocked || (zipWriter.bufferedWrites && keepOrder) || !dataDescriptor) && !usdz) {
4900
- fileWriter = new TransformStream();
4910
+ fileWriter = new TransformStream(undefined, undefined, { highWaterMark: Infinity });
4901
4911
  fileWriter.size = 0;
4902
4912
  bufferedWrite = true;
4903
4913
  zipWriter.bufferedWrites++;
@@ -4928,20 +4938,20 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
4928
4938
  await skipDiskIfNeeded(writable);
4929
4939
  }
4930
4940
  const { diskNumber } = writer;
4931
- writingEntryData = true;
4932
4941
  fileEntry.diskNumberStart = diskNumber;
4933
- if (bufferedWrite) {
4934
- blobPromise = new Response(fileWriter.readable).blob();
4935
- } else {
4942
+ if (!bufferedWrite) {
4943
+ writingEntryData = true;
4936
4944
  await writeData(fileWriter, localHeaderArray);
4937
4945
  }
4938
4946
  fileEntry = await createFileEntry(reader, fileWriter, fileEntry, entryInfo, zipWriter.config, options);
4939
4947
  const { zip64 } = fileEntry;
4940
- writingEntryData = false;
4948
+ if (!bufferedWrite) {
4949
+ writingEntryData = false;
4950
+ }
4941
4951
  files.set(name, fileEntry);
4942
4952
  fileEntry.filename = name;
4943
4953
  if (bufferedWrite) {
4944
- const [blob] = await Promise.all([blobPromise, fileWriter.writable.getWriter().close(), lockPreviousFileEntry]);
4954
+ await Promise.all([fileWriter.writable.getWriter().close(), lockPreviousFileEntry]);
4945
4955
  await requestLockWriter();
4946
4956
  writingBufferedEntryData = true;
4947
4957
  fileEntry.diskNumberStart = writer.diskNumber;
@@ -4952,7 +4962,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
4952
4962
  updateLocalHeader(fileEntry, localHeaderView, options);
4953
4963
  await skipDiskIfNeeded(writable);
4954
4964
  await writeData(writer, localHeaderArray);
4955
- await blob.stream().pipeTo(writable, { preventClose: true, preventAbort: true, signal });
4965
+ await fileWriter.readable.pipeTo(writable, { preventClose: true, preventAbort: true, signal });
4956
4966
  writer.size += fileWriter.size;
4957
4967
  writingBufferedEntryData = false;
4958
4968
  } else {
@@ -4967,7 +4977,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
4967
4977
  zipWriter.offset += fileEntry.size;
4968
4978
  return fileEntry;
4969
4979
  } catch (error) {
4970
- if ((bufferedWrite && writingBufferedEntryData) || (!bufferedWrite && writingEntryData)) {
4980
+ if (writingBufferedEntryData || writingEntryData) {
4971
4981
  zipWriter.hasCorruptedEntries = true;
4972
4982
  if (error) {
4973
4983
  try {
package/index.d.ts CHANGED
@@ -1438,6 +1438,13 @@ export interface ZipWriterConstructorOptions extends WorkerConfiguration {
1438
1438
  * @defaultValue false
1439
1439
  */
1440
1440
  bufferedWrite?: boolean;
1441
+ /**
1442
+ * An async factory function that returns a `TransformStream`-like object (`{ writable, readable }`) used as a temporary buffer when entries are written in parallel.
1443
+ *
1444
+ * When provided, this replaces the default in-memory `TransformStream` buffer, allowing data to be stored externally (e.g. filesystem, OPFS, network).
1445
+ * The `writable` side receives compressed entry data. The `readable` side is consumed when the entry is replayed into the final zip stream.
1446
+ */
1447
+ createTempStream?: () => Promise<{ writable: WritableStream; readable: ReadableStream }>;
1441
1448
  /**
1442
1449
  * `true` to keep the order of the entry physically in the zip file.
1443
1450
  *