@zip.js/zip.js 2.8.17 → 2.8.19

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
@@ -99,6 +99,7 @@ const MAX_DATE = new Date(2107, 11, 31);
99
99
  const MIN_DATE = new Date(1980, 0, 1);
100
100
 
101
101
  const UNDEFINED_VALUE = undefined;
102
+ const INFINITY_VALUE = Infinity;
102
103
  const UNDEFINED_TYPE = "undefined";
103
104
  const FUNCTION_TYPE = "function";
104
105
  const OBJECT_TYPE = "object";
@@ -1958,6 +1959,8 @@ class ChunkStream extends TransformStream {
1958
1959
  */
1959
1960
 
1960
1961
 
1962
+ const MODULE_WORKER_OPTIONS = { type: "module" };
1963
+
1961
1964
  let webWorkerSupported, webWorkerURI, webWorkerOptions;
1962
1965
  let transferStreamsSupported = true;
1963
1966
  let initModule$1 = () => { };
@@ -2170,11 +2173,8 @@ function watchClosedStream(writableSource) {
2170
2173
  return { writable, closed };
2171
2174
  }
2172
2175
 
2173
- function getWebWorker(url, baseURI, workerData, isModuleType = false, useBlobURI = true) {
2176
+ function getWebWorker(url, baseURI, workerData, isModuleType, useBlobURI = true) {
2174
2177
  let worker, resolvedURI, resolvedOptions;
2175
- if (isModuleType) {
2176
- resolvedOptions = { type: "module" };
2177
- }
2178
2178
  if (webWorkerURI === UNDEFINED_VALUE) {
2179
2179
  // deno-lint-ignore valid-typeof
2180
2180
  const isFunctionURI = typeof url == FUNCTION_TYPE;
@@ -2186,6 +2186,12 @@ function getWebWorker(url, baseURI, workerData, isModuleType = false, useBlobURI
2186
2186
  const isDataURI = resolvedURI.startsWith("data:");
2187
2187
  const isBlobURI = resolvedURI.startsWith("blob:");
2188
2188
  if (isDataURI || isBlobURI) {
2189
+ if (isModuleType === UNDEFINED_VALUE) {
2190
+ isModuleType = false;
2191
+ }
2192
+ if (isModuleType) {
2193
+ resolvedOptions = MODULE_WORKER_OPTIONS;
2194
+ }
2189
2195
  try {
2190
2196
  worker = new Worker(resolvedURI, resolvedOptions);
2191
2197
  } catch (error) {
@@ -2205,6 +2211,12 @@ function getWebWorker(url, baseURI, workerData, isModuleType = false, useBlobURI
2205
2211
  }
2206
2212
  }
2207
2213
  } else {
2214
+ if (isModuleType === UNDEFINED_VALUE) {
2215
+ isModuleType = true;
2216
+ }
2217
+ if (isModuleType) {
2218
+ resolvedOptions = MODULE_WORKER_OPTIONS;
2219
+ }
2208
2220
  try {
2209
2221
  resolvedURI = new URL(resolvedURI, baseURI);
2210
2222
  } catch {
@@ -2214,7 +2226,7 @@ function getWebWorker(url, baseURI, workerData, isModuleType = false, useBlobURI
2214
2226
  worker = new Worker(resolvedURI, resolvedOptions);
2215
2227
  } catch (error) {
2216
2228
  if (!isModuleType) {
2217
- return getWebWorker(url, baseURI, workerData, true, useBlobURI);
2229
+ return getWebWorker(url, baseURI, workerData, false, useBlobURI);
2218
2230
  } else {
2219
2231
  throw error;
2220
2232
  }
@@ -3155,8 +3167,8 @@ class GenericWriter {
3155
3167
  Object.assign(writer, {
3156
3168
  diskNumber: 0,
3157
3169
  diskOffset: 0,
3158
- availableSize: Infinity,
3159
- maxSize: Infinity
3170
+ availableSize: INFINITY_VALUE,
3171
+ maxSize: INFINITY_VALUE
3160
3172
  });
3161
3173
  }
3162
3174
  return writer;
@@ -4391,8 +4403,8 @@ class ZipWriter {
4391
4403
  constructor(writer, options = {}) {
4392
4404
  writer = new GenericWriter(writer);
4393
4405
  const addSplitZipSignature =
4394
- writer.availableSize !== UNDEFINED_VALUE && writer.availableSize > 0 && writer.availableSize !== Infinity &&
4395
- writer.maxSize !== UNDEFINED_VALUE && writer.maxSize > 0 && writer.maxSize !== Infinity;
4406
+ writer.availableSize !== UNDEFINED_VALUE && writer.availableSize > 0 && writer.availableSize !== INFINITY_VALUE &&
4407
+ writer.maxSize !== UNDEFINED_VALUE && writer.maxSize > 0 && writer.maxSize !== INFINITY_VALUE;
4396
4408
  Object.assign(this, {
4397
4409
  writer,
4398
4410
  addSplitZipSignature,
@@ -4888,7 +4900,6 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
4888
4900
  let writingBufferedEntryData;
4889
4901
  let writingEntryData;
4890
4902
  let fileWriter;
4891
- let blobPromise;
4892
4903
  files.set(name, fileEntry);
4893
4904
  try {
4894
4905
  let lockPreviousFileEntry;
@@ -4897,7 +4908,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
4897
4908
  requestLockCurrentFileEntry();
4898
4909
  }
4899
4910
  if ((options.bufferedWrite || zipWriter.writerLocked || (zipWriter.bufferedWrites && keepOrder) || !dataDescriptor) && !usdz) {
4900
- fileWriter = new TransformStream();
4911
+ fileWriter = new TransformStream(UNDEFINED_VALUE, UNDEFINED_VALUE, { highWaterMark: INFINITY_VALUE });
4901
4912
  fileWriter.size = 0;
4902
4913
  bufferedWrite = true;
4903
4914
  zipWriter.bufferedWrites++;
@@ -4928,20 +4939,20 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
4928
4939
  await skipDiskIfNeeded(writable);
4929
4940
  }
4930
4941
  const { diskNumber } = writer;
4931
- writingEntryData = true;
4932
4942
  fileEntry.diskNumberStart = diskNumber;
4933
- if (bufferedWrite) {
4934
- blobPromise = new Response(fileWriter.readable).blob();
4935
- } else {
4943
+ if (!bufferedWrite) {
4944
+ writingEntryData = true;
4936
4945
  await writeData(fileWriter, localHeaderArray);
4937
4946
  }
4938
4947
  fileEntry = await createFileEntry(reader, fileWriter, fileEntry, entryInfo, zipWriter.config, options);
4939
4948
  const { zip64 } = fileEntry;
4940
- writingEntryData = false;
4949
+ if (!bufferedWrite) {
4950
+ writingEntryData = false;
4951
+ }
4941
4952
  files.set(name, fileEntry);
4942
4953
  fileEntry.filename = name;
4943
4954
  if (bufferedWrite) {
4944
- const [blob] = await Promise.all([blobPromise, fileWriter.writable.getWriter().close(), lockPreviousFileEntry]);
4955
+ await Promise.all([fileWriter.writable.getWriter().close(), lockPreviousFileEntry]);
4945
4956
  await requestLockWriter();
4946
4957
  writingBufferedEntryData = true;
4947
4958
  fileEntry.diskNumberStart = writer.diskNumber;
@@ -4952,7 +4963,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
4952
4963
  updateLocalHeader(fileEntry, localHeaderView, options);
4953
4964
  await skipDiskIfNeeded(writable);
4954
4965
  await writeData(writer, localHeaderArray);
4955
- await blob.stream().pipeTo(writable, { preventClose: true, preventAbort: true, signal });
4966
+ await fileWriter.readable.pipeTo(writable, { preventClose: true, preventAbort: true, signal });
4956
4967
  writer.size += fileWriter.size;
4957
4968
  writingBufferedEntryData = false;
4958
4969
  } else {
@@ -4967,7 +4978,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
4967
4978
  zipWriter.offset += fileEntry.size;
4968
4979
  return fileEntry;
4969
4980
  } catch (error) {
4970
- if ((bufferedWrite && writingBufferedEntryData) || (!bufferedWrite && writingEntryData)) {
4981
+ if (writingBufferedEntryData || writingEntryData) {
4971
4982
  zipWriter.hasCorruptedEntries = true;
4972
4983
  if (error) {
4973
4984
  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
  *