@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 = [[], [], [], [], [], [], [], []];
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) {
@@ -4725,6 +4725,7 @@
4725
4725
  const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
4726
4726
  const WARNING_APPENDED_DATA = "appended data";
4727
4727
  const WARNING_PREPENDED_DATA = "prepended data";
4728
+ const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
4728
4729
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4729
4730
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4730
4731
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
@@ -4818,6 +4819,7 @@
4818
4819
  let diskNumber = getUint16$1(endOfDirectoryView, 6);
4819
4820
  let filesLength = getUint16$1(endOfDirectoryView, 10);
4820
4821
  let prependedDataLength = 0;
4822
+ let prependedCentralDirectory;
4821
4823
  let startOffset;
4822
4824
  let zip64EndOfDirectory;
4823
4825
  let zip64EndOfDirectoryVersion2;
@@ -4921,6 +4923,7 @@
4921
4923
  directoryDataOffset = expectedDirectoryDataOffset;
4922
4924
  if (directoryDataOffset > originalDirectoryDataOffset) {
4923
4925
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
4926
+ prependedCentralDirectory = storedPointsAtDirectory;
4924
4927
  }
4925
4928
  directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4926
4929
  directoryView = getDataView(directoryArray);
@@ -5148,6 +5151,9 @@
5148
5151
  if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5149
5152
  addWarning(warnings, WARNING_PREPENDED_DATA);
5150
5153
  }
5154
+ if (prependedCentralDirectory) {
5155
+ addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
5156
+ }
5151
5157
  if (extractPrependedData) {
5152
5158
  zipReader.prependedData = startOffset > splitZipSignatureLength ?
5153
5159
  await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
@@ -6208,6 +6214,7 @@
6208
6214
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6209
6215
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6210
6216
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6217
+ WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6211
6218
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
6212
6219
  WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
6213
6220
  WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
@@ -6656,6 +6663,13 @@
6656
6663
  const { comment } = metadataInfo;
6657
6664
  const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
6658
6665
  zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
6666
+ const previousFileEntry = zipWriter.lastFileEntry;
6667
+ const pendingFileEntry = {};
6668
+ let releaseLockFileEntry;
6669
+ if (metadataInfo.resolvedOptions.keepOrder) {
6670
+ pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
6671
+ }
6672
+ zipWriter.lastFileEntry = pendingFileEntry;
6659
6673
  let fileEntry;
6660
6674
  try {
6661
6675
  const { resolvedOptions } = metadataInfo;
@@ -6677,10 +6691,21 @@
6677
6691
  const headerInfo = getHeaderInfo(options);
6678
6692
  const dataDescriptorInfo = getDataDescriptorInfo(options);
6679
6693
  const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
6680
- fileEntry = await getFileEntry(zipWriter, name, reader, { headerInfo, dataDescriptorInfo, metadataSize }, options);
6694
+ fileEntry = await getFileEntry(zipWriter, name, reader, {
6695
+ headerInfo,
6696
+ dataDescriptorInfo,
6697
+ metadataSize,
6698
+ fileEntry: pendingFileEntry,
6699
+ previousFileEntry,
6700
+ releaseLockFileEntry
6701
+ }, options);
6681
6702
  } catch (error) {
6682
6703
  zipWriter.fileEntries.delete(name);
6683
6704
  throw error;
6705
+ } finally {
6706
+ if (releaseLockFileEntry) {
6707
+ releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
6708
+ }
6684
6709
  }
6685
6710
  Object.assign(fileEntry, {
6686
6711
  name,
@@ -7066,27 +7091,23 @@
7066
7091
  signal
7067
7092
  } = options;
7068
7093
  const {
7069
- headerInfo
7094
+ headerInfo,
7095
+ fileEntry: pendingFileEntry,
7096
+ previousFileEntry,
7097
+ releaseLockFileEntry
7070
7098
  } = entryInfo;
7071
7099
  const usdz = zipWriter.options[OPTION_USDZ];
7072
- const previousFileEntry = zipWriter.lastFileEntry;
7073
- let fileEntry = {};
7100
+ let fileEntry = pendingFileEntry;
7074
7101
  let bufferedWrite;
7075
7102
  let releaseLockWriter;
7076
- let releaseLockCurrentFileEntry;
7077
7103
  let writingBufferedEntryData;
7078
7104
  let writingEntryData;
7079
7105
  let writerSizeBeforeEntry;
7080
7106
  let flushedBufferedSize = 0;
7081
7107
  let fileWriter;
7108
+ const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
7082
7109
  fileEntries.set(name, fileEntry);
7083
- zipWriter.lastFileEntry = fileEntry;
7084
7110
  try {
7085
- let lockPreviousFileEntry;
7086
- if (keepOrder) {
7087
- lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
7088
- requestLockCurrentFileEntry();
7089
- }
7090
7111
  if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
7091
7112
  bufferedWrite = true;
7092
7113
  zipWriter.bufferedWrites++;
@@ -7099,6 +7120,7 @@
7099
7120
  await initStream(writer);
7100
7121
  } else {
7101
7122
  fileWriter = writer;
7123
+ await lockPreviousFileEntry;
7102
7124
  await requestLockWriter();
7103
7125
  }
7104
7126
  await initStream(fileWriter);
@@ -7111,7 +7133,6 @@
7111
7133
  }
7112
7134
  const { localHeaderArray } = headerInfo;
7113
7135
  if (!bufferedWrite) {
7114
- await lockPreviousFileEntry;
7115
7136
  await skipDiskIfNeeded();
7116
7137
  }
7117
7138
  const diskNumberStart = getDiskNumber(writer);
@@ -7176,8 +7197,8 @@
7176
7197
  if (bufferedWrite) {
7177
7198
  zipWriter.bufferedWrites--;
7178
7199
  }
7179
- if (releaseLockCurrentFileEntry) {
7180
- releaseLockCurrentFileEntry();
7200
+ if (releaseLockFileEntry) {
7201
+ releaseLockFileEntry(lockPreviousFileEntry);
7181
7202
  }
7182
7203
  if (releaseLockWriter) {
7183
7204
  releaseLockWriter();
@@ -7191,10 +7212,6 @@
7191
7212
  }
7192
7213
  }
7193
7214
 
7194
- function requestLockCurrentFileEntry() {
7195
- fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
7196
- }
7197
-
7198
7215
  async function requestLockWriter() {
7199
7216
  zipWriter.writerLocked = true;
7200
7217
  const { lockWriter } = zipWriter;
@@ -8514,7 +8531,7 @@
8514
8531
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8515
8532
  */
8516
8533
 
8517
- const VERSION = "2.8.60";
8534
+ const VERSION = "2.9.0";
8518
8535
 
8519
8536
  /*
8520
8537
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -9085,6 +9102,7 @@
9085
9102
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
9086
9103
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
9087
9104
  exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
9105
+ exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
9088
9106
  exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
9089
9107
  exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
9090
9108
  exports.WARNING_UNKNOWN_VERSION = WARNING_UNKNOWN_VERSION;