@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.
@@ -6656,6 +6656,13 @@
6656
6656
  const { comment } = metadataInfo;
6657
6657
  const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
6658
6658
  zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
6659
+ const previousFileEntry = zipWriter.lastFileEntry;
6660
+ const pendingFileEntry = {};
6661
+ let releaseLockFileEntry;
6662
+ if (metadataInfo.resolvedOptions.keepOrder) {
6663
+ pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
6664
+ }
6665
+ zipWriter.lastFileEntry = pendingFileEntry;
6659
6666
  let fileEntry;
6660
6667
  try {
6661
6668
  const { resolvedOptions } = metadataInfo;
@@ -6677,10 +6684,21 @@
6677
6684
  const headerInfo = getHeaderInfo(options);
6678
6685
  const dataDescriptorInfo = getDataDescriptorInfo(options);
6679
6686
  const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
6680
- fileEntry = await getFileEntry(zipWriter, name, reader, { headerInfo, dataDescriptorInfo, metadataSize }, options);
6687
+ fileEntry = await getFileEntry(zipWriter, name, reader, {
6688
+ headerInfo,
6689
+ dataDescriptorInfo,
6690
+ metadataSize,
6691
+ fileEntry: pendingFileEntry,
6692
+ previousFileEntry,
6693
+ releaseLockFileEntry
6694
+ }, options);
6681
6695
  } catch (error) {
6682
6696
  zipWriter.fileEntries.delete(name);
6683
6697
  throw error;
6698
+ } finally {
6699
+ if (releaseLockFileEntry) {
6700
+ releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
6701
+ }
6684
6702
  }
6685
6703
  Object.assign(fileEntry, {
6686
6704
  name,
@@ -7066,27 +7084,23 @@
7066
7084
  signal
7067
7085
  } = options;
7068
7086
  const {
7069
- headerInfo
7087
+ headerInfo,
7088
+ fileEntry: pendingFileEntry,
7089
+ previousFileEntry,
7090
+ releaseLockFileEntry
7070
7091
  } = entryInfo;
7071
7092
  const usdz = zipWriter.options[OPTION_USDZ];
7072
- const previousFileEntry = zipWriter.lastFileEntry;
7073
- let fileEntry = {};
7093
+ let fileEntry = pendingFileEntry;
7074
7094
  let bufferedWrite;
7075
7095
  let releaseLockWriter;
7076
- let releaseLockCurrentFileEntry;
7077
7096
  let writingBufferedEntryData;
7078
7097
  let writingEntryData;
7079
7098
  let writerSizeBeforeEntry;
7080
7099
  let flushedBufferedSize = 0;
7081
7100
  let fileWriter;
7101
+ const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
7082
7102
  fileEntries.set(name, fileEntry);
7083
- zipWriter.lastFileEntry = fileEntry;
7084
7103
  try {
7085
- let lockPreviousFileEntry;
7086
- if (keepOrder) {
7087
- lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
7088
- requestLockCurrentFileEntry();
7089
- }
7090
7104
  if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
7091
7105
  bufferedWrite = true;
7092
7106
  zipWriter.bufferedWrites++;
@@ -7099,6 +7113,7 @@
7099
7113
  await initStream(writer);
7100
7114
  } else {
7101
7115
  fileWriter = writer;
7116
+ await lockPreviousFileEntry;
7102
7117
  await requestLockWriter();
7103
7118
  }
7104
7119
  await initStream(fileWriter);
@@ -7111,7 +7126,6 @@
7111
7126
  }
7112
7127
  const { localHeaderArray } = headerInfo;
7113
7128
  if (!bufferedWrite) {
7114
- await lockPreviousFileEntry;
7115
7129
  await skipDiskIfNeeded();
7116
7130
  }
7117
7131
  const diskNumberStart = getDiskNumber(writer);
@@ -7176,8 +7190,8 @@
7176
7190
  if (bufferedWrite) {
7177
7191
  zipWriter.bufferedWrites--;
7178
7192
  }
7179
- if (releaseLockCurrentFileEntry) {
7180
- releaseLockCurrentFileEntry();
7193
+ if (releaseLockFileEntry) {
7194
+ releaseLockFileEntry(lockPreviousFileEntry);
7181
7195
  }
7182
7196
  if (releaseLockWriter) {
7183
7197
  releaseLockWriter();
@@ -7191,10 +7205,6 @@
7191
7205
  }
7192
7206
  }
7193
7207
 
7194
- function requestLockCurrentFileEntry() {
7195
- fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
7196
- }
7197
-
7198
7208
  async function requestLockWriter() {
7199
7209
  zipWriter.writerLocked = true;
7200
7210
  const { lockWriter } = zipWriter;
@@ -8514,7 +8524,7 @@
8514
8524
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8515
8525
  */
8516
8526
 
8517
- const VERSION = "2.8.60";
8527
+ const VERSION = "2.8.61";
8518
8528
 
8519
8529
  /*
8520
8530
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.