@zip.js/zip.js 2.6.50 → 2.6.52

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.
@@ -8168,7 +8168,7 @@
8168
8168
  let diskSourceWriter, diskWritable, diskWriter;
8169
8169
  const writable = new WritableStream({
8170
8170
  async write(chunk) {
8171
- let { maxSize } = zipWriter;
8171
+ const { availableSize } = zipWriter;
8172
8172
  if (!diskWriter) {
8173
8173
  const { value, done } = await writerGenerator.next();
8174
8174
  if (done && !value) {
@@ -8179,24 +8179,21 @@
8179
8179
  if (diskSourceWriter.maxSize) {
8180
8180
  zipWriter.maxSize = diskSourceWriter.maxSize;
8181
8181
  }
8182
+ zipWriter.availableSize = zipWriter.maxSize;
8182
8183
  await initStream(diskSourceWriter);
8183
8184
  diskWritable = value.writable;
8184
8185
  diskWriter = diskWritable.getWriter();
8185
8186
  }
8186
8187
  await this.write(chunk);
8187
- } else if (diskSourceWriter.size + chunk.length >= maxSize) {
8188
- const chunkLength = maxSize - diskSourceWriter.size;
8189
- await writeChunk(chunk.slice(0, chunkLength));
8188
+ } else if (chunk.length >= availableSize) {
8189
+ await writeChunk(chunk.slice(0, availableSize));
8190
8190
  await closeDisk();
8191
8191
  zipWriter.diskOffset += diskSourceWriter.size;
8192
8192
  zipWriter.diskNumber++;
8193
8193
  diskWriter = null;
8194
- await this.write(chunk.slice(chunkLength));
8194
+ await this.write(chunk.slice(availableSize));
8195
8195
  } else {
8196
- if (chunk.length) {
8197
- await writeChunk(chunk);
8198
- }
8199
- zipWriter.availableSize = maxSize - diskSourceWriter.size;
8196
+ await writeChunk(chunk);
8200
8197
  }
8201
8198
  },
8202
8199
  async close() {
@@ -8211,10 +8208,14 @@
8211
8208
  });
8212
8209
 
8213
8210
  async function writeChunk(chunk) {
8214
- await diskWriter.ready;
8215
- await diskWriter.write(chunk);
8216
- diskSourceWriter.size += chunk.length;
8217
- zipWriter.size += chunk.length;
8211
+ const chunkLength = chunk.length;
8212
+ if (chunkLength) {
8213
+ await diskWriter.ready;
8214
+ await diskWriter.write(chunk);
8215
+ diskSourceWriter.size += chunkLength;
8216
+ zipWriter.size += chunkLength;
8217
+ zipWriter.availableSize -= chunkLength;
8218
+ }
8218
8219
  }
8219
8220
 
8220
8221
  async function closeDisk() {
@@ -9277,6 +9278,9 @@
9277
9278
  dataDescriptor,
9278
9279
  signal
9279
9280
  } = options;
9281
+ const {
9282
+ headerInfo
9283
+ } = entryInfo;
9280
9284
  const previousFileEntry = Array.from(files.values()).pop();
9281
9285
  let fileEntry = {};
9282
9286
  let bufferedWrite;
@@ -9302,7 +9306,7 @@
9302
9306
  initLockWriter();
9303
9307
  }
9304
9308
  await initStream(fileWriter);
9305
- const { writable, diskNumber } = writer;
9309
+ const { writable } = writer;
9306
9310
  let { diskOffset } = writer;
9307
9311
  if (zipWriter.addSplitZipSignature) {
9308
9312
  delete zipWriter.addSplitZipSignature;
@@ -9314,7 +9318,9 @@
9314
9318
  }
9315
9319
  if (!bufferedWrite) {
9316
9320
  await lockPreviousFileEntry;
9321
+ await skipDiskIfNeeded(writable);
9317
9322
  }
9323
+ const { diskNumber } = writer;
9318
9324
  writingEntryData = true;
9319
9325
  fileEntry.diskNumberStart = diskNumber;
9320
9326
  fileEntry = await createFileEntry(reader, fileWriter, fileEntry, entryInfo, zipWriter.config, options);
@@ -9330,6 +9336,7 @@
9330
9336
  if (!dataDescriptor) {
9331
9337
  blob = await writeMissingHeaderInfo(fileEntry, blob, writable, options);
9332
9338
  }
9339
+ await skipDiskIfNeeded(writable);
9333
9340
  fileEntry.diskNumberStart = writer.diskNumber;
9334
9341
  diskOffset = writer.diskOffset;
9335
9342
  await blob.stream().pipeTo(writable, { preventClose: true, signal });
@@ -9385,6 +9392,13 @@
9385
9392
  zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
9386
9393
  }
9387
9394
  }
9395
+
9396
+ async function skipDiskIfNeeded(writable) {
9397
+ if (headerInfo.localHeaderArray.length > writer.availableSize) {
9398
+ writer.availableSize = 0;
9399
+ await writeData(writable, new Uint8Array());
9400
+ }
9401
+ }
9388
9402
  }
9389
9403
 
9390
9404
  async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryInfo, config, options) {
@@ -9772,6 +9786,8 @@
9772
9786
  }
9773
9787
  const directoryArray = new Uint8Array(directoryDataLength);
9774
9788
  const directoryView = getDataView(directoryArray);
9789
+ await initStream(writer);
9790
+ let directoryDiskOffset = 0;
9775
9791
  for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
9776
9792
  const {
9777
9793
  offset: fileEntryOffset,
@@ -9824,7 +9840,13 @@
9824
9840
  arraySet(directoryArray, rawExtraFieldNTFS, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp));
9825
9841
  arraySet(directoryArray, rawExtraField, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS));
9826
9842
  arraySet(directoryArray, rawComment, offset + 46 + getLength(rawFilename) + extraFieldLength);
9827
- offset += 46 + getLength(rawFilename, rawComment) + extraFieldLength;
9843
+ const directoryEntryLength = 46 + getLength(rawFilename, rawComment) + extraFieldLength;
9844
+ if (offset - directoryDiskOffset > writer.availableSize) {
9845
+ writer.availableSize = 0;
9846
+ await writeData(writable, directoryArray.slice(directoryDiskOffset, offset));
9847
+ directoryDiskOffset = offset;
9848
+ }
9849
+ offset += directoryEntryLength;
9828
9850
  if (options.onprogress) {
9829
9851
  try {
9830
9852
  await options.onprogress(indexFileEntry + 1, files.size, new Entry(fileEntry));
@@ -9833,8 +9855,7 @@
9833
9855
  }
9834
9856
  }
9835
9857
  }
9836
- await initStream(writer);
9837
- await writeData(writable, directoryArray);
9858
+ await writeData(writable, directoryDiskOffset ? directoryArray.slice(directoryDiskOffset) : directoryArray);
9838
9859
  let lastDiskNumber = writer.diskNumber;
9839
9860
  const { availableSize } = writer;
9840
9861
  if (availableSize < END_OF_CENTRAL_DIR_LENGTH) {