@zip.js/zip.js 2.6.51 → 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.
package/dist/zip-full.js CHANGED
@@ -7167,7 +7167,7 @@
7167
7167
  let diskSourceWriter, diskWritable, diskWriter;
7168
7168
  const writable = new WritableStream({
7169
7169
  async write(chunk) {
7170
- let { maxSize } = zipWriter;
7170
+ const { availableSize } = zipWriter;
7171
7171
  if (!diskWriter) {
7172
7172
  const { value, done } = await writerGenerator.next();
7173
7173
  if (done && !value) {
@@ -7178,24 +7178,21 @@
7178
7178
  if (diskSourceWriter.maxSize) {
7179
7179
  zipWriter.maxSize = diskSourceWriter.maxSize;
7180
7180
  }
7181
+ zipWriter.availableSize = zipWriter.maxSize;
7181
7182
  await initStream(diskSourceWriter);
7182
7183
  diskWritable = value.writable;
7183
7184
  diskWriter = diskWritable.getWriter();
7184
7185
  }
7185
7186
  await this.write(chunk);
7186
- } else if (diskSourceWriter.size + chunk.length >= maxSize) {
7187
- const chunkLength = maxSize - diskSourceWriter.size;
7188
- await writeChunk(chunk.slice(0, chunkLength));
7187
+ } else if (chunk.length >= availableSize) {
7188
+ await writeChunk(chunk.slice(0, availableSize));
7189
7189
  await closeDisk();
7190
7190
  zipWriter.diskOffset += diskSourceWriter.size;
7191
7191
  zipWriter.diskNumber++;
7192
7192
  diskWriter = null;
7193
- await this.write(chunk.slice(chunkLength));
7193
+ await this.write(chunk.slice(availableSize));
7194
7194
  } else {
7195
- if (chunk.length) {
7196
- await writeChunk(chunk);
7197
- }
7198
- zipWriter.availableSize = maxSize - diskSourceWriter.size;
7195
+ await writeChunk(chunk);
7199
7196
  }
7200
7197
  },
7201
7198
  async close() {
@@ -7210,10 +7207,14 @@
7210
7207
  });
7211
7208
 
7212
7209
  async function writeChunk(chunk) {
7213
- await diskWriter.ready;
7214
- await diskWriter.write(chunk);
7215
- diskSourceWriter.size += chunk.length;
7216
- zipWriter.size += chunk.length;
7210
+ const chunkLength = chunk.length;
7211
+ if (chunkLength) {
7212
+ await diskWriter.ready;
7213
+ await diskWriter.write(chunk);
7214
+ diskSourceWriter.size += chunkLength;
7215
+ zipWriter.size += chunkLength;
7216
+ zipWriter.availableSize -= chunkLength;
7217
+ }
7217
7218
  }
7218
7219
 
7219
7220
  async function closeDisk() {
@@ -8276,6 +8277,9 @@
8276
8277
  dataDescriptor,
8277
8278
  signal
8278
8279
  } = options;
8280
+ const {
8281
+ headerInfo
8282
+ } = entryInfo;
8279
8283
  const previousFileEntry = Array.from(files.values()).pop();
8280
8284
  let fileEntry = {};
8281
8285
  let bufferedWrite;
@@ -8301,7 +8305,7 @@
8301
8305
  initLockWriter();
8302
8306
  }
8303
8307
  await initStream(fileWriter);
8304
- const { writable, diskNumber } = writer;
8308
+ const { writable } = writer;
8305
8309
  let { diskOffset } = writer;
8306
8310
  if (zipWriter.addSplitZipSignature) {
8307
8311
  delete zipWriter.addSplitZipSignature;
@@ -8313,7 +8317,9 @@
8313
8317
  }
8314
8318
  if (!bufferedWrite) {
8315
8319
  await lockPreviousFileEntry;
8320
+ await skipDiskIfNeeded(writable);
8316
8321
  }
8322
+ const { diskNumber } = writer;
8317
8323
  writingEntryData = true;
8318
8324
  fileEntry.diskNumberStart = diskNumber;
8319
8325
  fileEntry = await createFileEntry(reader, fileWriter, fileEntry, entryInfo, zipWriter.config, options);
@@ -8329,6 +8335,7 @@
8329
8335
  if (!dataDescriptor) {
8330
8336
  blob = await writeMissingHeaderInfo(fileEntry, blob, writable, options);
8331
8337
  }
8338
+ await skipDiskIfNeeded(writable);
8332
8339
  fileEntry.diskNumberStart = writer.diskNumber;
8333
8340
  diskOffset = writer.diskOffset;
8334
8341
  await blob.stream().pipeTo(writable, { preventClose: true, signal });
@@ -8384,6 +8391,13 @@
8384
8391
  zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
8385
8392
  }
8386
8393
  }
8394
+
8395
+ async function skipDiskIfNeeded(writable) {
8396
+ if (headerInfo.localHeaderArray.length > writer.availableSize) {
8397
+ writer.availableSize = 0;
8398
+ await writeData(writable, new Uint8Array());
8399
+ }
8400
+ }
8387
8401
  }
8388
8402
 
8389
8403
  async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryInfo, config, options) {
@@ -8771,6 +8785,8 @@
8771
8785
  }
8772
8786
  const directoryArray = new Uint8Array(directoryDataLength);
8773
8787
  const directoryView = getDataView(directoryArray);
8788
+ await initStream(writer);
8789
+ let directoryDiskOffset = 0;
8774
8790
  for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
8775
8791
  const {
8776
8792
  offset: fileEntryOffset,
@@ -8823,7 +8839,13 @@
8823
8839
  arraySet(directoryArray, rawExtraFieldNTFS, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp));
8824
8840
  arraySet(directoryArray, rawExtraField, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS));
8825
8841
  arraySet(directoryArray, rawComment, offset + 46 + getLength(rawFilename) + extraFieldLength);
8826
- offset += 46 + getLength(rawFilename, rawComment) + extraFieldLength;
8842
+ const directoryEntryLength = 46 + getLength(rawFilename, rawComment) + extraFieldLength;
8843
+ if (offset - directoryDiskOffset > writer.availableSize) {
8844
+ writer.availableSize = 0;
8845
+ await writeData(writable, directoryArray.slice(directoryDiskOffset, offset));
8846
+ directoryDiskOffset = offset;
8847
+ }
8848
+ offset += directoryEntryLength;
8827
8849
  if (options.onprogress) {
8828
8850
  try {
8829
8851
  await options.onprogress(indexFileEntry + 1, files.size, new Entry(fileEntry));
@@ -8832,8 +8854,7 @@
8832
8854
  }
8833
8855
  }
8834
8856
  }
8835
- await initStream(writer);
8836
- await writeData(writable, directoryArray);
8857
+ await writeData(writable, directoryDiskOffset ? directoryArray.slice(directoryDiskOffset) : directoryArray);
8837
8858
  let lastDiskNumber = writer.diskNumber;
8838
8859
  const { availableSize } = writer;
8839
8860
  if (availableSize < END_OF_CENTRAL_DIR_LENGTH) {