@zip.js/zip.js 2.8.60 → 2.8.61

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.js CHANGED
@@ -6660,6 +6660,13 @@
6660
6660
  const { comment } = metadataInfo;
6661
6661
  const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
6662
6662
  zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
6663
+ const previousFileEntry = zipWriter.lastFileEntry;
6664
+ const pendingFileEntry = {};
6665
+ let releaseLockFileEntry;
6666
+ if (metadataInfo.resolvedOptions.keepOrder) {
6667
+ pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
6668
+ }
6669
+ zipWriter.lastFileEntry = pendingFileEntry;
6663
6670
  let fileEntry;
6664
6671
  try {
6665
6672
  const { resolvedOptions } = metadataInfo;
@@ -6681,10 +6688,21 @@
6681
6688
  const headerInfo = getHeaderInfo(options);
6682
6689
  const dataDescriptorInfo = getDataDescriptorInfo(options);
6683
6690
  const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
6684
- fileEntry = await getFileEntry(zipWriter, name, reader, { headerInfo, dataDescriptorInfo, metadataSize }, options);
6691
+ fileEntry = await getFileEntry(zipWriter, name, reader, {
6692
+ headerInfo,
6693
+ dataDescriptorInfo,
6694
+ metadataSize,
6695
+ fileEntry: pendingFileEntry,
6696
+ previousFileEntry,
6697
+ releaseLockFileEntry
6698
+ }, options);
6685
6699
  } catch (error) {
6686
6700
  zipWriter.fileEntries.delete(name);
6687
6701
  throw error;
6702
+ } finally {
6703
+ if (releaseLockFileEntry) {
6704
+ releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
6705
+ }
6688
6706
  }
6689
6707
  Object.assign(fileEntry, {
6690
6708
  name,
@@ -7070,27 +7088,23 @@
7070
7088
  signal
7071
7089
  } = options;
7072
7090
  const {
7073
- headerInfo
7091
+ headerInfo,
7092
+ fileEntry: pendingFileEntry,
7093
+ previousFileEntry,
7094
+ releaseLockFileEntry
7074
7095
  } = entryInfo;
7075
7096
  const usdz = zipWriter.options[OPTION_USDZ];
7076
- const previousFileEntry = zipWriter.lastFileEntry;
7077
- let fileEntry = {};
7097
+ let fileEntry = pendingFileEntry;
7078
7098
  let bufferedWrite;
7079
7099
  let releaseLockWriter;
7080
- let releaseLockCurrentFileEntry;
7081
7100
  let writingBufferedEntryData;
7082
7101
  let writingEntryData;
7083
7102
  let writerSizeBeforeEntry;
7084
7103
  let flushedBufferedSize = 0;
7085
7104
  let fileWriter;
7105
+ const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
7086
7106
  fileEntries.set(name, fileEntry);
7087
- zipWriter.lastFileEntry = fileEntry;
7088
7107
  try {
7089
- let lockPreviousFileEntry;
7090
- if (keepOrder) {
7091
- lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
7092
- requestLockCurrentFileEntry();
7093
- }
7094
7108
  if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
7095
7109
  bufferedWrite = true;
7096
7110
  zipWriter.bufferedWrites++;
@@ -7103,6 +7117,7 @@
7103
7117
  await initStream(writer);
7104
7118
  } else {
7105
7119
  fileWriter = writer;
7120
+ await lockPreviousFileEntry;
7106
7121
  await requestLockWriter();
7107
7122
  }
7108
7123
  await initStream(fileWriter);
@@ -7115,7 +7130,6 @@
7115
7130
  }
7116
7131
  const { localHeaderArray } = headerInfo;
7117
7132
  if (!bufferedWrite) {
7118
- await lockPreviousFileEntry;
7119
7133
  await skipDiskIfNeeded();
7120
7134
  }
7121
7135
  const diskNumberStart = getDiskNumber(writer);
@@ -7180,8 +7194,8 @@
7180
7194
  if (bufferedWrite) {
7181
7195
  zipWriter.bufferedWrites--;
7182
7196
  }
7183
- if (releaseLockCurrentFileEntry) {
7184
- releaseLockCurrentFileEntry();
7197
+ if (releaseLockFileEntry) {
7198
+ releaseLockFileEntry(lockPreviousFileEntry);
7185
7199
  }
7186
7200
  if (releaseLockWriter) {
7187
7201
  releaseLockWriter();
@@ -7195,10 +7209,6 @@
7195
7209
  }
7196
7210
  }
7197
7211
 
7198
- function requestLockCurrentFileEntry() {
7199
- fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
7200
- }
7201
-
7202
7212
  async function requestLockWriter() {
7203
7213
  zipWriter.writerLocked = true;
7204
7214
  const { lockWriter } = zipWriter;
@@ -8518,7 +8528,7 @@
8518
8528
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8519
8529
  */
8520
8530
 
8521
- const VERSION = "2.8.60";
8531
+ const VERSION = "2.8.61";
8522
8532
 
8523
8533
  /*
8524
8534
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.