@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.
package/dist/zip.js CHANGED
@@ -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++) {
@@ -3483,7 +3483,7 @@
3483
3483
 
3484
3484
  /* global TextDecoder */
3485
3485
 
3486
- const CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
3486
+ 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("");
3487
3487
  const VALID_CP437 = CP437.length == 256;
3488
3488
 
3489
3489
  function decodeCP437(stringValue) {
@@ -4729,6 +4729,7 @@
4729
4729
  const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
4730
4730
  const WARNING_APPENDED_DATA = "appended data";
4731
4731
  const WARNING_PREPENDED_DATA = "prepended data";
4732
+ const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
4732
4733
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4733
4734
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4734
4735
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
@@ -4822,6 +4823,7 @@
4822
4823
  let diskNumber = getUint16$1(endOfDirectoryView, 6);
4823
4824
  let filesLength = getUint16$1(endOfDirectoryView, 10);
4824
4825
  let prependedDataLength = 0;
4826
+ let prependedCentralDirectory;
4825
4827
  let startOffset;
4826
4828
  let zip64EndOfDirectory;
4827
4829
  let zip64EndOfDirectoryVersion2;
@@ -4925,6 +4927,7 @@
4925
4927
  directoryDataOffset = expectedDirectoryDataOffset;
4926
4928
  if (directoryDataOffset > originalDirectoryDataOffset) {
4927
4929
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
4930
+ prependedCentralDirectory = storedPointsAtDirectory;
4928
4931
  }
4929
4932
  directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4930
4933
  directoryView = getDataView(directoryArray);
@@ -5152,6 +5155,9 @@
5152
5155
  if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5153
5156
  addWarning(warnings, WARNING_PREPENDED_DATA);
5154
5157
  }
5158
+ if (prependedCentralDirectory) {
5159
+ addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
5160
+ }
5155
5161
  if (extractPrependedData) {
5156
5162
  zipReader.prependedData = startOffset > splitZipSignatureLength ?
5157
5163
  await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
@@ -6212,6 +6218,7 @@
6212
6218
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6213
6219
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6214
6220
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6221
+ WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6215
6222
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
6216
6223
  WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
6217
6224
  WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
@@ -6660,6 +6667,13 @@
6660
6667
  const { comment } = metadataInfo;
6661
6668
  const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
6662
6669
  zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
6670
+ const previousFileEntry = zipWriter.lastFileEntry;
6671
+ const pendingFileEntry = {};
6672
+ let releaseLockFileEntry;
6673
+ if (metadataInfo.resolvedOptions.keepOrder) {
6674
+ pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
6675
+ }
6676
+ zipWriter.lastFileEntry = pendingFileEntry;
6663
6677
  let fileEntry;
6664
6678
  try {
6665
6679
  const { resolvedOptions } = metadataInfo;
@@ -6681,10 +6695,21 @@
6681
6695
  const headerInfo = getHeaderInfo(options);
6682
6696
  const dataDescriptorInfo = getDataDescriptorInfo(options);
6683
6697
  const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
6684
- fileEntry = await getFileEntry(zipWriter, name, reader, { headerInfo, dataDescriptorInfo, metadataSize }, options);
6698
+ fileEntry = await getFileEntry(zipWriter, name, reader, {
6699
+ headerInfo,
6700
+ dataDescriptorInfo,
6701
+ metadataSize,
6702
+ fileEntry: pendingFileEntry,
6703
+ previousFileEntry,
6704
+ releaseLockFileEntry
6705
+ }, options);
6685
6706
  } catch (error) {
6686
6707
  zipWriter.fileEntries.delete(name);
6687
6708
  throw error;
6709
+ } finally {
6710
+ if (releaseLockFileEntry) {
6711
+ releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
6712
+ }
6688
6713
  }
6689
6714
  Object.assign(fileEntry, {
6690
6715
  name,
@@ -7070,27 +7095,23 @@
7070
7095
  signal
7071
7096
  } = options;
7072
7097
  const {
7073
- headerInfo
7098
+ headerInfo,
7099
+ fileEntry: pendingFileEntry,
7100
+ previousFileEntry,
7101
+ releaseLockFileEntry
7074
7102
  } = entryInfo;
7075
7103
  const usdz = zipWriter.options[OPTION_USDZ];
7076
- const previousFileEntry = zipWriter.lastFileEntry;
7077
- let fileEntry = {};
7104
+ let fileEntry = pendingFileEntry;
7078
7105
  let bufferedWrite;
7079
7106
  let releaseLockWriter;
7080
- let releaseLockCurrentFileEntry;
7081
7107
  let writingBufferedEntryData;
7082
7108
  let writingEntryData;
7083
7109
  let writerSizeBeforeEntry;
7084
7110
  let flushedBufferedSize = 0;
7085
7111
  let fileWriter;
7112
+ const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
7086
7113
  fileEntries.set(name, fileEntry);
7087
- zipWriter.lastFileEntry = fileEntry;
7088
7114
  try {
7089
- let lockPreviousFileEntry;
7090
- if (keepOrder) {
7091
- lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
7092
- requestLockCurrentFileEntry();
7093
- }
7094
7115
  if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
7095
7116
  bufferedWrite = true;
7096
7117
  zipWriter.bufferedWrites++;
@@ -7103,6 +7124,7 @@
7103
7124
  await initStream(writer);
7104
7125
  } else {
7105
7126
  fileWriter = writer;
7127
+ await lockPreviousFileEntry;
7106
7128
  await requestLockWriter();
7107
7129
  }
7108
7130
  await initStream(fileWriter);
@@ -7115,7 +7137,6 @@
7115
7137
  }
7116
7138
  const { localHeaderArray } = headerInfo;
7117
7139
  if (!bufferedWrite) {
7118
- await lockPreviousFileEntry;
7119
7140
  await skipDiskIfNeeded();
7120
7141
  }
7121
7142
  const diskNumberStart = getDiskNumber(writer);
@@ -7180,8 +7201,8 @@
7180
7201
  if (bufferedWrite) {
7181
7202
  zipWriter.bufferedWrites--;
7182
7203
  }
7183
- if (releaseLockCurrentFileEntry) {
7184
- releaseLockCurrentFileEntry();
7204
+ if (releaseLockFileEntry) {
7205
+ releaseLockFileEntry(lockPreviousFileEntry);
7185
7206
  }
7186
7207
  if (releaseLockWriter) {
7187
7208
  releaseLockWriter();
@@ -7195,10 +7216,6 @@
7195
7216
  }
7196
7217
  }
7197
7218
 
7198
- function requestLockCurrentFileEntry() {
7199
- fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
7200
- }
7201
-
7202
7219
  async function requestLockWriter() {
7203
7220
  zipWriter.writerLocked = true;
7204
7221
  const { lockWriter } = zipWriter;
@@ -8518,7 +8535,7 @@
8518
8535
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8519
8536
  */
8520
8537
 
8521
- const VERSION = "2.8.60";
8538
+ const VERSION = "2.9.0";
8522
8539
 
8523
8540
  /*
8524
8541
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -9502,6 +9519,7 @@
9502
9519
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
9503
9520
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
9504
9521
  exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
9522
+ exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
9505
9523
  exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
9506
9524
  exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
9507
9525
  exports.WARNING_UNKNOWN_VERSION = WARNING_UNKNOWN_VERSION;