@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-fs.js CHANGED
@@ -2944,7 +2944,7 @@
2944
2944
  let diskSourceWriter, diskWritable, diskWriter;
2945
2945
  const writable = new WritableStream({
2946
2946
  async write(chunk) {
2947
- let { maxSize } = zipWriter;
2947
+ const { availableSize } = zipWriter;
2948
2948
  if (!diskWriter) {
2949
2949
  const { value, done } = await writerGenerator.next();
2950
2950
  if (done && !value) {
@@ -2955,24 +2955,21 @@
2955
2955
  if (diskSourceWriter.maxSize) {
2956
2956
  zipWriter.maxSize = diskSourceWriter.maxSize;
2957
2957
  }
2958
+ zipWriter.availableSize = zipWriter.maxSize;
2958
2959
  await initStream(diskSourceWriter);
2959
2960
  diskWritable = value.writable;
2960
2961
  diskWriter = diskWritable.getWriter();
2961
2962
  }
2962
2963
  await this.write(chunk);
2963
- } else if (diskSourceWriter.size + chunk.length >= maxSize) {
2964
- const chunkLength = maxSize - diskSourceWriter.size;
2965
- await writeChunk(chunk.slice(0, chunkLength));
2964
+ } else if (chunk.length >= availableSize) {
2965
+ await writeChunk(chunk.slice(0, availableSize));
2966
2966
  await closeDisk();
2967
2967
  zipWriter.diskOffset += diskSourceWriter.size;
2968
2968
  zipWriter.diskNumber++;
2969
2969
  diskWriter = null;
2970
- await this.write(chunk.slice(chunkLength));
2970
+ await this.write(chunk.slice(availableSize));
2971
2971
  } else {
2972
- if (chunk.length) {
2973
- await writeChunk(chunk);
2974
- }
2975
- zipWriter.availableSize = maxSize - diskSourceWriter.size;
2972
+ await writeChunk(chunk);
2976
2973
  }
2977
2974
  },
2978
2975
  async close() {
@@ -2987,10 +2984,14 @@
2987
2984
  });
2988
2985
 
2989
2986
  async function writeChunk(chunk) {
2990
- await diskWriter.ready;
2991
- await diskWriter.write(chunk);
2992
- diskSourceWriter.size += chunk.length;
2993
- zipWriter.size += chunk.length;
2987
+ const chunkLength = chunk.length;
2988
+ if (chunkLength) {
2989
+ await diskWriter.ready;
2990
+ await diskWriter.write(chunk);
2991
+ diskSourceWriter.size += chunkLength;
2992
+ zipWriter.size += chunkLength;
2993
+ zipWriter.availableSize -= chunkLength;
2994
+ }
2994
2995
  }
2995
2996
 
2996
2997
  async function closeDisk() {
@@ -4053,6 +4054,9 @@
4053
4054
  dataDescriptor,
4054
4055
  signal
4055
4056
  } = options;
4057
+ const {
4058
+ headerInfo
4059
+ } = entryInfo;
4056
4060
  const previousFileEntry = Array.from(files.values()).pop();
4057
4061
  let fileEntry = {};
4058
4062
  let bufferedWrite;
@@ -4078,7 +4082,7 @@
4078
4082
  initLockWriter();
4079
4083
  }
4080
4084
  await initStream(fileWriter);
4081
- const { writable, diskNumber } = writer;
4085
+ const { writable } = writer;
4082
4086
  let { diskOffset } = writer;
4083
4087
  if (zipWriter.addSplitZipSignature) {
4084
4088
  delete zipWriter.addSplitZipSignature;
@@ -4090,7 +4094,9 @@
4090
4094
  }
4091
4095
  if (!bufferedWrite) {
4092
4096
  await lockPreviousFileEntry;
4097
+ await skipDiskIfNeeded(writable);
4093
4098
  }
4099
+ const { diskNumber } = writer;
4094
4100
  writingEntryData = true;
4095
4101
  fileEntry.diskNumberStart = diskNumber;
4096
4102
  fileEntry = await createFileEntry(reader, fileWriter, fileEntry, entryInfo, zipWriter.config, options);
@@ -4106,6 +4112,7 @@
4106
4112
  if (!dataDescriptor) {
4107
4113
  blob = await writeMissingHeaderInfo(fileEntry, blob, writable, options);
4108
4114
  }
4115
+ await skipDiskIfNeeded(writable);
4109
4116
  fileEntry.diskNumberStart = writer.diskNumber;
4110
4117
  diskOffset = writer.diskOffset;
4111
4118
  await blob.stream().pipeTo(writable, { preventClose: true, signal });
@@ -4161,6 +4168,13 @@
4161
4168
  zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
4162
4169
  }
4163
4170
  }
4171
+
4172
+ async function skipDiskIfNeeded(writable) {
4173
+ if (headerInfo.localHeaderArray.length > writer.availableSize) {
4174
+ writer.availableSize = 0;
4175
+ await writeData(writable, new Uint8Array());
4176
+ }
4177
+ }
4164
4178
  }
4165
4179
 
4166
4180
  async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryInfo, config, options) {
@@ -4548,6 +4562,8 @@
4548
4562
  }
4549
4563
  const directoryArray = new Uint8Array(directoryDataLength);
4550
4564
  const directoryView = getDataView(directoryArray);
4565
+ await initStream(writer);
4566
+ let directoryDiskOffset = 0;
4551
4567
  for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
4552
4568
  const {
4553
4569
  offset: fileEntryOffset,
@@ -4600,7 +4616,13 @@
4600
4616
  arraySet(directoryArray, rawExtraFieldNTFS, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp));
4601
4617
  arraySet(directoryArray, rawExtraField, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS));
4602
4618
  arraySet(directoryArray, rawComment, offset + 46 + getLength(rawFilename) + extraFieldLength);
4603
- offset += 46 + getLength(rawFilename, rawComment) + extraFieldLength;
4619
+ const directoryEntryLength = 46 + getLength(rawFilename, rawComment) + extraFieldLength;
4620
+ if (offset - directoryDiskOffset > writer.availableSize) {
4621
+ writer.availableSize = 0;
4622
+ await writeData(writable, directoryArray.slice(directoryDiskOffset, offset));
4623
+ directoryDiskOffset = offset;
4624
+ }
4625
+ offset += directoryEntryLength;
4604
4626
  if (options.onprogress) {
4605
4627
  try {
4606
4628
  await options.onprogress(indexFileEntry + 1, files.size, new Entry(fileEntry));
@@ -4609,8 +4631,7 @@
4609
4631
  }
4610
4632
  }
4611
4633
  }
4612
- await initStream(writer);
4613
- await writeData(writable, directoryArray);
4634
+ await writeData(writable, directoryDiskOffset ? directoryArray.slice(directoryDiskOffset) : directoryArray);
4614
4635
  let lastDiskNumber = writer.diskNumber;
4615
4636
  const { availableSize } = writer;
4616
4637
  if (availableSize < END_OF_CENTRAL_DIR_LENGTH) {