@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/deno.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zip-js/zip-js",
3
- "version": "2.8.60",
3
+ "version": "2.8.61",
4
4
  "exports": {
5
5
  ".": "./index.js",
6
6
  "./external": "./lib/zip-fs-external.js",
@@ -6685,6 +6685,13 @@ async function addFile(zipWriter, name, reader, options) {
6685
6685
  const { comment } = metadataInfo;
6686
6686
  const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
6687
6687
  zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
6688
+ const previousFileEntry = zipWriter.lastFileEntry;
6689
+ const pendingFileEntry = {};
6690
+ let releaseLockFileEntry;
6691
+ if (metadataInfo.resolvedOptions.keepOrder) {
6692
+ pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
6693
+ }
6694
+ zipWriter.lastFileEntry = pendingFileEntry;
6688
6695
  let fileEntry;
6689
6696
  try {
6690
6697
  const { resolvedOptions } = metadataInfo;
@@ -6706,10 +6713,21 @@ async function addFile(zipWriter, name, reader, options) {
6706
6713
  const headerInfo = getHeaderInfo(options);
6707
6714
  const dataDescriptorInfo = getDataDescriptorInfo(options);
6708
6715
  const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
6709
- fileEntry = await getFileEntry(zipWriter, name, reader, { headerInfo, dataDescriptorInfo, metadataSize }, options);
6716
+ fileEntry = await getFileEntry(zipWriter, name, reader, {
6717
+ headerInfo,
6718
+ dataDescriptorInfo,
6719
+ metadataSize,
6720
+ fileEntry: pendingFileEntry,
6721
+ previousFileEntry,
6722
+ releaseLockFileEntry
6723
+ }, options);
6710
6724
  } catch (error) {
6711
6725
  zipWriter.fileEntries.delete(name);
6712
6726
  throw error;
6727
+ } finally {
6728
+ if (releaseLockFileEntry) {
6729
+ releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
6730
+ }
6713
6731
  }
6714
6732
  Object.assign(fileEntry, {
6715
6733
  name,
@@ -7095,27 +7113,23 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
7095
7113
  signal
7096
7114
  } = options;
7097
7115
  const {
7098
- headerInfo
7116
+ headerInfo,
7117
+ fileEntry: pendingFileEntry,
7118
+ previousFileEntry,
7119
+ releaseLockFileEntry
7099
7120
  } = entryInfo;
7100
7121
  const usdz = zipWriter.options[OPTION_USDZ];
7101
- const previousFileEntry = zipWriter.lastFileEntry;
7102
- let fileEntry = {};
7122
+ let fileEntry = pendingFileEntry;
7103
7123
  let bufferedWrite;
7104
7124
  let releaseLockWriter;
7105
- let releaseLockCurrentFileEntry;
7106
7125
  let writingBufferedEntryData;
7107
7126
  let writingEntryData;
7108
7127
  let writerSizeBeforeEntry;
7109
7128
  let flushedBufferedSize = 0;
7110
7129
  let fileWriter;
7130
+ const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
7111
7131
  fileEntries.set(name, fileEntry);
7112
- zipWriter.lastFileEntry = fileEntry;
7113
7132
  try {
7114
- let lockPreviousFileEntry;
7115
- if (keepOrder) {
7116
- lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
7117
- requestLockCurrentFileEntry();
7118
- }
7119
7133
  if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
7120
7134
  bufferedWrite = true;
7121
7135
  zipWriter.bufferedWrites++;
@@ -7128,6 +7142,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
7128
7142
  await initStream(writer);
7129
7143
  } else {
7130
7144
  fileWriter = writer;
7145
+ await lockPreviousFileEntry;
7131
7146
  await requestLockWriter();
7132
7147
  }
7133
7148
  await initStream(fileWriter);
@@ -7140,7 +7155,6 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
7140
7155
  }
7141
7156
  const { localHeaderArray } = headerInfo;
7142
7157
  if (!bufferedWrite) {
7143
- await lockPreviousFileEntry;
7144
7158
  await skipDiskIfNeeded();
7145
7159
  }
7146
7160
  const diskNumberStart = getDiskNumber(writer);
@@ -7205,8 +7219,8 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
7205
7219
  if (bufferedWrite) {
7206
7220
  zipWriter.bufferedWrites--;
7207
7221
  }
7208
- if (releaseLockCurrentFileEntry) {
7209
- releaseLockCurrentFileEntry();
7222
+ if (releaseLockFileEntry) {
7223
+ releaseLockFileEntry(lockPreviousFileEntry);
7210
7224
  }
7211
7225
  if (releaseLockWriter) {
7212
7226
  releaseLockWriter();
@@ -7220,10 +7234,6 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
7220
7234
  }
7221
7235
  }
7222
7236
 
7223
- function requestLockCurrentFileEntry() {
7224
- fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
7225
- }
7226
-
7227
7237
  async function requestLockWriter() {
7228
7238
  zipWriter.writerLocked = true;
7229
7239
  const { lockWriter } = zipWriter;
@@ -8543,7 +8553,7 @@ function formatSupported(StreamClass, format) {
8543
8553
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8544
8554
  */
8545
8555
 
8546
- const VERSION = "2.8.60";
8556
+ const VERSION = "2.8.61";
8547
8557
 
8548
8558
  /*
8549
8559
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.