@zip.js/zip.js 2.8.60 → 2.9.0

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.
@@ -495,7 +495,7 @@
495
495
  // Every table MUST stay a PACKED_SMI array: build with array literals (not `new Array(n)`,
496
496
  // which is HOLEY) and store the signed int32 XOR result (no `>>> 0`). An unsigned or holey
497
497
  // table becomes a V8 FixedDoubleArray whose every hot-loop lookup unboxes a double (~1.6x
498
- // slower). Signedness is irrelevant to the result — the reads mask/shift it and the final
498
+ // slower). Signedness is irrelevant to the result: the reads mask/shift it and the final
499
499
  // `~crc` normalizes it. Do NOT reintroduce `>>> 0` here or switch to `new Array(256)`.
500
500
  const T$1 = [[], [], [], [], [], [], [], []];
501
501
  for (let n = 0; n < 256; n++) {
@@ -3479,7 +3479,7 @@
3479
3479
 
3480
3480
  /* global TextDecoder */
3481
3481
 
3482
- const CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
3482
+ const CP437 = "\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\u00B6\u00A7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0".split("");
3483
3483
  const VALID_CP437 = CP437.length == 256;
3484
3484
 
3485
3485
  function decodeCP437(stringValue) {
@@ -4745,6 +4745,7 @@
4745
4745
  const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
4746
4746
  const WARNING_APPENDED_DATA = "appended data";
4747
4747
  const WARNING_PREPENDED_DATA = "prepended data";
4748
+ const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
4748
4749
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4749
4750
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4750
4751
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
@@ -4838,6 +4839,7 @@
4838
4839
  let diskNumber = getUint16$1(endOfDirectoryView, 6);
4839
4840
  let filesLength = getUint16$1(endOfDirectoryView, 10);
4840
4841
  let prependedDataLength = 0;
4842
+ let prependedCentralDirectory;
4841
4843
  let startOffset;
4842
4844
  let zip64EndOfDirectory;
4843
4845
  let zip64EndOfDirectoryVersion2;
@@ -4941,6 +4943,7 @@
4941
4943
  directoryDataOffset = expectedDirectoryDataOffset;
4942
4944
  if (directoryDataOffset > originalDirectoryDataOffset) {
4943
4945
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
4946
+ prependedCentralDirectory = storedPointsAtDirectory;
4944
4947
  }
4945
4948
  directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4946
4949
  directoryView = getDataView(directoryArray);
@@ -5168,6 +5171,9 @@
5168
5171
  if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5169
5172
  addWarning(warnings, WARNING_PREPENDED_DATA);
5170
5173
  }
5174
+ if (prependedCentralDirectory) {
5175
+ addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
5176
+ }
5171
5177
  if (extractPrependedData) {
5172
5178
  zipReader.prependedData = startOffset > splitZipSignatureLength ?
5173
5179
  await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
@@ -6228,6 +6234,7 @@
6228
6234
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6229
6235
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6230
6236
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6237
+ WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6231
6238
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
6232
6239
  WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
6233
6240
  WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
@@ -6676,6 +6683,13 @@
6676
6683
  const { comment } = metadataInfo;
6677
6684
  const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
6678
6685
  zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
6686
+ const previousFileEntry = zipWriter.lastFileEntry;
6687
+ const pendingFileEntry = {};
6688
+ let releaseLockFileEntry;
6689
+ if (metadataInfo.resolvedOptions.keepOrder) {
6690
+ pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
6691
+ }
6692
+ zipWriter.lastFileEntry = pendingFileEntry;
6679
6693
  let fileEntry;
6680
6694
  try {
6681
6695
  const { resolvedOptions } = metadataInfo;
@@ -6697,10 +6711,21 @@
6697
6711
  const headerInfo = getHeaderInfo(options);
6698
6712
  const dataDescriptorInfo = getDataDescriptorInfo(options);
6699
6713
  const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
6700
- fileEntry = await getFileEntry(zipWriter, name, reader, { headerInfo, dataDescriptorInfo, metadataSize }, options);
6714
+ fileEntry = await getFileEntry(zipWriter, name, reader, {
6715
+ headerInfo,
6716
+ dataDescriptorInfo,
6717
+ metadataSize,
6718
+ fileEntry: pendingFileEntry,
6719
+ previousFileEntry,
6720
+ releaseLockFileEntry
6721
+ }, options);
6701
6722
  } catch (error) {
6702
6723
  zipWriter.fileEntries.delete(name);
6703
6724
  throw error;
6725
+ } finally {
6726
+ if (releaseLockFileEntry) {
6727
+ releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
6728
+ }
6704
6729
  }
6705
6730
  Object.assign(fileEntry, {
6706
6731
  name,
@@ -7088,7 +7113,6 @@
7088
7113
  }
7089
7114
  const usdz = writerOptions[OPTION_USDZ];
7090
7115
  const files = new Map();
7091
- let layoutDependsOnWriteOrder = Boolean(usdz);
7092
7116
  const initialOffset = writerOptions[OPTION_OFFSET] === UNDEFINED_VALUE ? 0 : writerOptions[OPTION_OFFSET];
7093
7117
  let offset = initialOffset;
7094
7118
  let minimumEntrySize = INFINITY_VALUE;
@@ -7134,9 +7158,7 @@
7134
7158
  minimumEntrySize = Math.min(minimumEntrySize, entrySize);
7135
7159
  offset += entrySize;
7136
7160
  }
7137
- if (files.size && offset - minimumEntrySize >= MAX_32_BITS) {
7138
- layoutDependsOnWriteOrder = true;
7139
- }
7161
+ const layoutDependsOnWriteOrder = files.size > 1 && (usdz || offset - minimumEntrySize >= MAX_32_BITS);
7140
7162
  if (layoutDependsOnWriteOrder && !writeOrderGuaranteed) {
7141
7163
  throw new Error(ERR_UNDETERMINED_SIZE);
7142
7164
  }
@@ -7164,27 +7186,23 @@
7164
7186
  signal
7165
7187
  } = options;
7166
7188
  const {
7167
- headerInfo
7189
+ headerInfo,
7190
+ fileEntry: pendingFileEntry,
7191
+ previousFileEntry,
7192
+ releaseLockFileEntry
7168
7193
  } = entryInfo;
7169
7194
  const usdz = zipWriter.options[OPTION_USDZ];
7170
- const previousFileEntry = zipWriter.lastFileEntry;
7171
- let fileEntry = {};
7195
+ let fileEntry = pendingFileEntry;
7172
7196
  let bufferedWrite;
7173
7197
  let releaseLockWriter;
7174
- let releaseLockCurrentFileEntry;
7175
7198
  let writingBufferedEntryData;
7176
7199
  let writingEntryData;
7177
7200
  let writerSizeBeforeEntry;
7178
7201
  let flushedBufferedSize = 0;
7179
7202
  let fileWriter;
7203
+ const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
7180
7204
  fileEntries.set(name, fileEntry);
7181
- zipWriter.lastFileEntry = fileEntry;
7182
7205
  try {
7183
- let lockPreviousFileEntry;
7184
- if (keepOrder) {
7185
- lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
7186
- requestLockCurrentFileEntry();
7187
- }
7188
7206
  if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
7189
7207
  bufferedWrite = true;
7190
7208
  zipWriter.bufferedWrites++;
@@ -7197,6 +7215,7 @@
7197
7215
  await initStream(writer);
7198
7216
  } else {
7199
7217
  fileWriter = writer;
7218
+ await lockPreviousFileEntry;
7200
7219
  await requestLockWriter();
7201
7220
  }
7202
7221
  await initStream(fileWriter);
@@ -7209,7 +7228,6 @@
7209
7228
  }
7210
7229
  const { localHeaderArray } = headerInfo;
7211
7230
  if (!bufferedWrite) {
7212
- await lockPreviousFileEntry;
7213
7231
  await skipDiskIfNeeded();
7214
7232
  }
7215
7233
  const diskNumberStart = getDiskNumber(writer);
@@ -7274,8 +7292,8 @@
7274
7292
  if (bufferedWrite) {
7275
7293
  zipWriter.bufferedWrites--;
7276
7294
  }
7277
- if (releaseLockCurrentFileEntry) {
7278
- releaseLockCurrentFileEntry();
7295
+ if (releaseLockFileEntry) {
7296
+ releaseLockFileEntry(lockPreviousFileEntry);
7279
7297
  }
7280
7298
  if (releaseLockWriter) {
7281
7299
  releaseLockWriter();
@@ -7289,10 +7307,6 @@
7289
7307
  }
7290
7308
  }
7291
7309
 
7292
- function requestLockCurrentFileEntry() {
7293
- fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
7294
- }
7295
-
7296
7310
  async function requestLockWriter() {
7297
7311
  zipWriter.writerLocked = true;
7298
7312
  const { lockWriter } = zipWriter;
@@ -8612,7 +8626,7 @@
8612
8626
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8613
8627
  */
8614
8628
 
8615
- const VERSION = "2.8.60";
8629
+ const VERSION = "2.9.0";
8616
8630
 
8617
8631
  /*
8618
8632
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -9589,12 +9603,13 @@
9589
9603
  if (options.bufferedWrite === UNDEFINED_VALUE) {
9590
9604
  options.bufferedWrite = true;
9591
9605
  }
9592
- const writeOrderGuaranteed = !options.bufferedWrite ||
9593
- (options.keepOrder !== false && zipEntry.children.every(child => !child.children.length));
9594
- return getEntriesSize(options, zipEntry.getChildren({ recursive: true }).filter(child => !isImplicitDirectory(child)).map(child => {
9606
+ const entries = zipEntry.getChildren({ recursive: true }).filter(child => !isImplicitDirectory(child)).map(child => {
9595
9607
  const { name, entryOptions } = getChildEntryOptions(child, zipEntry, options);
9596
9608
  return { name, size: child.directory ? 0 : getDeterminedSize(child, isPassThrough(child, options)), options: entryOptions };
9597
- }), writeOrderGuaranteed, options.globalComment);
9609
+ });
9610
+ const writeOrderGuaranteed = !options.bufferedWrite ||
9611
+ (entries.every(entry => entry.options.keepOrder !== false) && zipEntry.children.every(child => !child.children.length));
9612
+ return getEntriesSize(options, entries, writeOrderGuaranteed, options.globalComment);
9598
9613
  }
9599
9614
 
9600
9615
  getChildByName(name) {
@@ -10608,6 +10623,7 @@
10608
10623
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
10609
10624
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
10610
10625
  exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
10626
+ exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
10611
10627
  exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
10612
10628
  exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
10613
10629
  exports.WARNING_UNKNOWN_VERSION = WARNING_UNKNOWN_VERSION;