@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-core.js CHANGED
@@ -493,7 +493,7 @@
493
493
  // Every table MUST stay a PACKED_SMI array: build with array literals (not `new Array(n)`,
494
494
  // which is HOLEY) and store the signed int32 XOR result (no `>>> 0`). An unsigned or holey
495
495
  // table becomes a V8 FixedDoubleArray whose every hot-loop lookup unboxes a double (~1.6x
496
- // slower). Signedness is irrelevant to the result — the reads mask/shift it and the final
496
+ // slower). Signedness is irrelevant to the result: the reads mask/shift it and the final
497
497
  // `~crc` normalizes it. Do NOT reintroduce `>>> 0` here or switch to `new Array(256)`.
498
498
  const T = [[], [], [], [], [], [], [], []];
499
499
  for (let n = 0; n < 256; n++) {
@@ -3477,7 +3477,7 @@
3477
3477
 
3478
3478
  /* global TextDecoder */
3479
3479
 
3480
- const CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
3480
+ 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("");
3481
3481
  const VALID_CP437 = CP437.length == 256;
3482
3482
 
3483
3483
  function decodeCP437(stringValue) {
@@ -4723,6 +4723,7 @@
4723
4723
  const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
4724
4724
  const WARNING_APPENDED_DATA = "appended data";
4725
4725
  const WARNING_PREPENDED_DATA = "prepended data";
4726
+ const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
4726
4727
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4727
4728
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4728
4729
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
@@ -4816,6 +4817,7 @@
4816
4817
  let diskNumber = getUint16$1(endOfDirectoryView, 6);
4817
4818
  let filesLength = getUint16$1(endOfDirectoryView, 10);
4818
4819
  let prependedDataLength = 0;
4820
+ let prependedCentralDirectory;
4819
4821
  let startOffset;
4820
4822
  let zip64EndOfDirectory;
4821
4823
  let zip64EndOfDirectoryVersion2;
@@ -4919,6 +4921,7 @@
4919
4921
  directoryDataOffset = expectedDirectoryDataOffset;
4920
4922
  if (directoryDataOffset > originalDirectoryDataOffset) {
4921
4923
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
4924
+ prependedCentralDirectory = storedPointsAtDirectory;
4922
4925
  }
4923
4926
  directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4924
4927
  directoryView = getDataView(directoryArray);
@@ -5146,6 +5149,9 @@
5146
5149
  if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5147
5150
  addWarning(warnings, WARNING_PREPENDED_DATA);
5148
5151
  }
5152
+ if (prependedCentralDirectory) {
5153
+ addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
5154
+ }
5149
5155
  if (extractPrependedData) {
5150
5156
  zipReader.prependedData = startOffset > splitZipSignatureLength ?
5151
5157
  await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
@@ -6206,6 +6212,7 @@
6206
6212
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6207
6213
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6208
6214
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6215
+ WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6209
6216
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
6210
6217
  WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
6211
6218
  WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
@@ -6654,6 +6661,13 @@
6654
6661
  const { comment } = metadataInfo;
6655
6662
  const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
6656
6663
  zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
6664
+ const previousFileEntry = zipWriter.lastFileEntry;
6665
+ const pendingFileEntry = {};
6666
+ let releaseLockFileEntry;
6667
+ if (metadataInfo.resolvedOptions.keepOrder) {
6668
+ pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
6669
+ }
6670
+ zipWriter.lastFileEntry = pendingFileEntry;
6657
6671
  let fileEntry;
6658
6672
  try {
6659
6673
  const { resolvedOptions } = metadataInfo;
@@ -6675,10 +6689,21 @@
6675
6689
  const headerInfo = getHeaderInfo(options);
6676
6690
  const dataDescriptorInfo = getDataDescriptorInfo(options);
6677
6691
  const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
6678
- fileEntry = await getFileEntry(zipWriter, name, reader, { headerInfo, dataDescriptorInfo, metadataSize }, options);
6692
+ fileEntry = await getFileEntry(zipWriter, name, reader, {
6693
+ headerInfo,
6694
+ dataDescriptorInfo,
6695
+ metadataSize,
6696
+ fileEntry: pendingFileEntry,
6697
+ previousFileEntry,
6698
+ releaseLockFileEntry
6699
+ }, options);
6679
6700
  } catch (error) {
6680
6701
  zipWriter.fileEntries.delete(name);
6681
6702
  throw error;
6703
+ } finally {
6704
+ if (releaseLockFileEntry) {
6705
+ releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
6706
+ }
6682
6707
  }
6683
6708
  Object.assign(fileEntry, {
6684
6709
  name,
@@ -7064,27 +7089,23 @@
7064
7089
  signal
7065
7090
  } = options;
7066
7091
  const {
7067
- headerInfo
7092
+ headerInfo,
7093
+ fileEntry: pendingFileEntry,
7094
+ previousFileEntry,
7095
+ releaseLockFileEntry
7068
7096
  } = entryInfo;
7069
7097
  const usdz = zipWriter.options[OPTION_USDZ];
7070
- const previousFileEntry = zipWriter.lastFileEntry;
7071
- let fileEntry = {};
7098
+ let fileEntry = pendingFileEntry;
7072
7099
  let bufferedWrite;
7073
7100
  let releaseLockWriter;
7074
- let releaseLockCurrentFileEntry;
7075
7101
  let writingBufferedEntryData;
7076
7102
  let writingEntryData;
7077
7103
  let writerSizeBeforeEntry;
7078
7104
  let flushedBufferedSize = 0;
7079
7105
  let fileWriter;
7106
+ const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
7080
7107
  fileEntries.set(name, fileEntry);
7081
- zipWriter.lastFileEntry = fileEntry;
7082
7108
  try {
7083
- let lockPreviousFileEntry;
7084
- if (keepOrder) {
7085
- lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
7086
- requestLockCurrentFileEntry();
7087
- }
7088
7109
  if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
7089
7110
  bufferedWrite = true;
7090
7111
  zipWriter.bufferedWrites++;
@@ -7097,6 +7118,7 @@
7097
7118
  await initStream(writer);
7098
7119
  } else {
7099
7120
  fileWriter = writer;
7121
+ await lockPreviousFileEntry;
7100
7122
  await requestLockWriter();
7101
7123
  }
7102
7124
  await initStream(fileWriter);
@@ -7109,7 +7131,6 @@
7109
7131
  }
7110
7132
  const { localHeaderArray } = headerInfo;
7111
7133
  if (!bufferedWrite) {
7112
- await lockPreviousFileEntry;
7113
7134
  await skipDiskIfNeeded();
7114
7135
  }
7115
7136
  const diskNumberStart = getDiskNumber(writer);
@@ -7174,8 +7195,8 @@
7174
7195
  if (bufferedWrite) {
7175
7196
  zipWriter.bufferedWrites--;
7176
7197
  }
7177
- if (releaseLockCurrentFileEntry) {
7178
- releaseLockCurrentFileEntry();
7198
+ if (releaseLockFileEntry) {
7199
+ releaseLockFileEntry(lockPreviousFileEntry);
7179
7200
  }
7180
7201
  if (releaseLockWriter) {
7181
7202
  releaseLockWriter();
@@ -7189,10 +7210,6 @@
7189
7210
  }
7190
7211
  }
7191
7212
 
7192
- function requestLockCurrentFileEntry() {
7193
- fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
7194
- }
7195
-
7196
7213
  async function requestLockWriter() {
7197
7214
  zipWriter.writerLocked = true;
7198
7215
  const { lockWriter } = zipWriter;
@@ -8512,7 +8529,7 @@
8512
8529
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8513
8530
  */
8514
8531
 
8515
- const VERSION = "2.8.60";
8532
+ const VERSION = "2.9.0";
8516
8533
 
8517
8534
  /*
8518
8535
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -9052,6 +9069,7 @@
9052
9069
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
9053
9070
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
9054
9071
  exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
9072
+ exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
9055
9073
  exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
9056
9074
  exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
9057
9075
  exports.WARNING_UNKNOWN_VERSION = WARNING_UNKNOWN_VERSION;