@zip.js/zip.js 2.19.0 → 2.20.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-fs.js CHANGED
@@ -4809,6 +4809,8 @@
4809
4809
  const WARNING_PREPENDED_DATA = "prepended data";
4810
4810
  const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
4811
4811
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4812
+ const WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = "mismatched central directory offset";
4813
+ const WARNING_MISSING_ZIP64_EXTRA_FIELD = "missing zip64 extra field";
4812
4814
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4813
4815
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
4814
4816
  const WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = "multiple end of central directory records";
@@ -4971,6 +4973,8 @@
4971
4973
  reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY);
4972
4974
  }
4973
4975
  directoryDataOffset = getDiskOffset$1(reader, diskNumber) + getBigUint64(endOfDirectoryView, 48) + prependedDataLength;
4976
+ } else if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || diskNumber == MAX_16_BITS) {
4977
+ throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
4974
4978
  }
4975
4979
  }
4976
4980
  let declaredDirectoryDataLength = directoryDataLength;
@@ -4993,25 +4997,44 @@
4993
4997
  if (directoryArray.length < 4) {
4994
4998
  throw new Error(ERR_BAD_FORMAT);
4995
4999
  }
4996
- const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
5000
+ let expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
4997
5001
  if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
4998
5002
  const storedPointsAtDirectory = getUint32$1(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE ||
4999
5003
  Boolean(directoryEncryptionInfo && directoryEncryptionInfo.compressedSize) ||
5000
5004
  detectEncryptedCentralDirectory(directoryView);
5001
5005
  let reconcile = !storedPointsAtDirectory;
5002
- if (!reconcile && expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
5003
- const expectedSignatureArray = await readUint8Array(reader, expectedDirectoryDataOffset, 4);
5004
- reconcile = getUint32$1(getDataView(expectedSignatureArray), 0) == CENTRAL_FILE_HEADER_SIGNATURE;
5006
+ if (expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
5007
+ const expectedPointsAtDirectory = await pointsAtDirectory(reader, expectedDirectoryDataOffset);
5008
+ if (storedPointsAtDirectory) {
5009
+ reconcile = expectedPointsAtDirectory;
5010
+ } else if (!expectedPointsAtDirectory) {
5011
+ const signatureRecordOffset = await findDigitalSignatureRecordOffset(reader, centralDirectoryEndOffset);
5012
+ const signedDirectoryDataOffset = signatureRecordOffset - directoryDataLength;
5013
+ if (signatureRecordOffset !== UNDEFINED_VALUE && signedDirectoryDataOffset >= 0 &&
5014
+ await pointsAtDirectory(reader, signedDirectoryDataOffset)) {
5015
+ expectedDirectoryDataOffset = signedDirectoryDataOffset;
5016
+ }
5017
+ }
5005
5018
  }
5006
5019
  if (reconcile) {
5007
5020
  const originalDirectoryDataOffset = directoryDataOffset;
5008
5021
  directoryDataOffset = expectedDirectoryDataOffset;
5022
+ directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
5023
+ directoryView = getDataView(directoryArray);
5009
5024
  if (directoryDataOffset > originalDirectoryDataOffset) {
5010
5025
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
5011
5026
  prependedCentralDirectory = storedPointsAtDirectory;
5027
+ } else {
5028
+ reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET);
5029
+ const offsetDelta = directoryDataOffset - originalDirectoryDataOffset;
5030
+ if (directoryArray.length >= CENTRAL_FILE_HEADER_LENGTH) {
5031
+ const localHeaderOffset = getUint32$1(directoryView, 42);
5032
+ if (!await startsWithSignature(reader, localHeaderOffset, LOCAL_FILE_HEADER_SIGNATURE) &&
5033
+ await startsWithSignature(reader, localHeaderOffset + offsetDelta, LOCAL_FILE_HEADER_SIGNATURE)) {
5034
+ prependedDataLength += offsetDelta;
5035
+ }
5036
+ }
5012
5037
  }
5013
- directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
5014
- directoryView = getDataView(directoryArray);
5015
5038
  }
5016
5039
  }
5017
5040
  }
@@ -5122,7 +5145,16 @@
5122
5145
  filename,
5123
5146
  comment
5124
5147
  });
5125
- const malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5148
+ let malformedExtraField;
5149
+ try {
5150
+ malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5151
+ } catch (error) {
5152
+ if (checkAmbiguity || error.message != ERR_EXTRAFIELD_ZIP64_NOT_FOUND) {
5153
+ throw error;
5154
+ }
5155
+ fileEntry.zip64ExtraFieldMissing = true;
5156
+ addWarning(warnings, WARNING_MISSING_ZIP64_EXTRA_FIELD, fileEntry.filename);
5157
+ }
5126
5158
  filename = fileEntry.filename;
5127
5159
  if (normalizeFilename) {
5128
5160
  const normalizedFilename = normalizeFilename(filename);
@@ -5164,11 +5196,12 @@
5164
5196
  const sticky = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_STICKY_MASK);
5165
5197
  const unixType = fileEntry.unixMode === UNDEFINED_VALUE ? unixExternalUpper : fileEntry.unixMode;
5166
5198
  const symlink = (unixType & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_SYMLINK;
5167
- const executable = !symlink && ((fileEntry.unixMode !== UNDEFINED_VALUE)
5168
- ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
5169
- : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
5170
5199
  const modeIsDir = fileEntry.unixMode !== UNDEFINED_VALUE && ((fileEntry.unixMode & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
5171
5200
  const upperIsDir = ((unixExternalUpper & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
5201
+ const directory = modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE);
5202
+ const executable = !symlink && !directory && ((fileEntry.unixMode !== UNDEFINED_VALUE)
5203
+ ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
5204
+ : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
5172
5205
  Object.assign(fileEntry, {
5173
5206
  setuid,
5174
5207
  setgid,
@@ -5176,7 +5209,7 @@
5176
5209
  symlink,
5177
5210
  unixExternalUpper,
5178
5211
  executable,
5179
- directory: modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE),
5212
+ directory,
5180
5213
  zipCrypto: fileEntry.encrypted && !fileEntry.extraFieldAES
5181
5214
  });
5182
5215
  const entry = new Entry(fileEntry);
@@ -5232,10 +5265,10 @@
5232
5265
  const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
5233
5266
  const splitZipSignatureLength = (checkAmbiguity || extractPrependedData) && filesLength &&
5234
5267
  startOffset == SPLIT_ZIP_FILE_SIGNATURE_LENGTH && await startsWithSplitZipMarker(reader) ? SPLIT_ZIP_FILE_SIGNATURE_LENGTH : 0;
5235
- if (checkAmbiguity && (prependedDataLength || (filesLength && startOffset > splitZipSignatureLength))) {
5268
+ if (checkAmbiguity && (prependedDataLength > 0 || (filesLength && startOffset > splitZipSignatureLength))) {
5236
5269
  throwAmbiguousArchive(WARNING_PREPENDED_DATA);
5237
5270
  }
5238
- if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5271
+ if (prependedDataLength > 0 || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5239
5272
  addWarning(warnings, WARNING_PREPENDED_DATA);
5240
5273
  }
5241
5274
  if (prependedCentralDirectory) {
@@ -5395,6 +5428,9 @@
5395
5428
 
5396
5429
  async getData(writer, fileEntry, readRanges, options = {}) {
5397
5430
  const zipEntry = this;
5431
+ if (zipEntry.zip64ExtraFieldMissing) {
5432
+ throw new Error(ERR_EXTRAFIELD_ZIP64_NOT_FOUND);
5433
+ }
5398
5434
  const config = getConfiguration();
5399
5435
  const {
5400
5436
  reader,
@@ -5632,6 +5668,30 @@
5632
5668
  return wrappedFilesLength % (MAX_16_BITS + 1) ? 0 : wrappedFilesLength;
5633
5669
  }
5634
5670
 
5671
+ function pointsAtDirectory(reader, offset) {
5672
+ return startsWithSignature(reader, offset, CENTRAL_FILE_HEADER_SIGNATURE);
5673
+ }
5674
+
5675
+ async function startsWithSignature(reader, offset, signature) {
5676
+ if (offset < 0 || offset + 4 > reader.size) {
5677
+ return false;
5678
+ }
5679
+ const signatureArray = await readUint8Array(reader, offset, 4);
5680
+ return getUint32$1(getDataView(signatureArray), 0) == signature;
5681
+ }
5682
+
5683
+ async function findDigitalSignatureRecordOffset(reader, endOffset) {
5684
+ const startOffset = Math.max(0, endOffset - (6 + MAX_16_BITS));
5685
+ const tailArray = await readUint8Array(reader, startOffset, endOffset - startOffset);
5686
+ const tailView = getDataView(tailArray);
5687
+ for (let indexByte = tailArray.length - 6; indexByte >= 0; indexByte--) {
5688
+ if (getUint32$1(tailView, indexByte) == DIGITAL_SIGNATURE_RECORD_SIGNATURE &&
5689
+ indexByte + 6 + getUint16$1(tailView, indexByte + 4) == tailArray.length) {
5690
+ return startOffset + indexByte;
5691
+ }
5692
+ }
5693
+ }
5694
+
5635
5695
  function readDigitalSignature(signatureRecordArray) {
5636
5696
  if (signatureRecordArray.length >= 6) {
5637
5697
  const signatureRecordView = getDataView(signatureRecordArray);
@@ -5763,6 +5823,11 @@
5763
5823
  readExtraFieldUnixDates(extraFieldUnixType1, directory);
5764
5824
  directory.extraFieldUnixType1 = extraFieldUnixType1;
5765
5825
  }
5826
+ const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5827
+ if (extraFieldExtendedTimestamp) {
5828
+ readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
5829
+ directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
5830
+ }
5766
5831
  const extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
5767
5832
  if (extraFieldNTFS) {
5768
5833
  readExtraFieldNTFS(extraFieldNTFS, directory);
@@ -5779,11 +5844,6 @@
5779
5844
  readExtraFieldUnix(extraFieldUnix, unixIdsRead ? {} : directory, false);
5780
5845
  directory.extraFieldUnix = extraFieldUnix;
5781
5846
  }
5782
- const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5783
- if (extraFieldExtendedTimestamp) {
5784
- readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
5785
- directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
5786
- }
5787
5847
  const extraFieldUSDZ = extraField.get(EXTRAFIELD_TYPE_USDZ);
5788
5848
  if (extraFieldUSDZ) {
5789
5849
  directory.extraFieldUSDZ = extraFieldUSDZ;
@@ -6422,11 +6482,13 @@
6422
6482
  WARNING_COMPRESSED_PATCHED_DATA: WARNING_COMPRESSED_PATCHED_DATA,
6423
6483
  WARNING_DUPLICATE_FILENAME: WARNING_DUPLICATE_FILENAME,
6424
6484
  WARNING_MALFORMED_EXTRA_FIELD: WARNING_MALFORMED_EXTRA_FIELD,
6485
+ WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET: WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET,
6425
6486
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG: WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG,
6426
6487
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6427
6488
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6428
6489
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME: WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME,
6429
6490
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6491
+ WARNING_MISSING_ZIP64_EXTRA_FIELD: WARNING_MISSING_ZIP64_EXTRA_FIELD,
6430
6492
  WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY: WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY,
6431
6493
  WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6432
6494
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
@@ -6559,13 +6621,14 @@
6559
6621
  return watchPromiseError(this, prependZipEntries(this, reader));
6560
6622
  }
6561
6623
 
6562
- appendZip(reader) {
6563
- return watchPromiseError(this, this.appendZipEntries(reader));
6624
+ appendZip(reader, options = {}) {
6625
+ return watchPromiseError(this, this.appendZipEntries(reader, options));
6564
6626
  }
6565
6627
 
6566
- async appendZipEntries(reader) {
6628
+ async appendZipEntries(reader, options = {}) {
6567
6629
  const zipWriter = this;
6568
6630
  const { pendingAddFileCalls, filenames, fileEntries } = zipWriter;
6631
+ const filter = checkFunctionOption(options.filter);
6569
6632
  while (pendingAddFileCalls.size) {
6570
6633
  await Promise.allSettled(Array.from(pendingAddFileCalls));
6571
6634
  }
@@ -6584,10 +6647,16 @@
6584
6647
  const { ZipReader } = await Promise.resolve().then(function () { return zipReader; });
6585
6648
  const zipReader$1 = new ZipReader(reader);
6586
6649
  const entries = await zipReader$1.getEntries();
6650
+ const keptEntries = [];
6651
+ for (const entry of entries) {
6652
+ if (!filter || await filter(entry)) {
6653
+ keptEntries.push(entry);
6654
+ }
6655
+ }
6587
6656
  await zipReader$1.close();
6588
6657
  await initStream(zipWriter.writer);
6589
6658
  const { directoryOffset } = zipReader$1;
6590
- entries.forEach(({ filename }) => {
6659
+ keptEntries.forEach(({ filename }) => {
6591
6660
  if (filenames.has(filename)) {
6592
6661
  throw new Error(ERR_DUPLICATED_NAME);
6593
6662
  }
@@ -6608,8 +6677,8 @@
6608
6677
  zipWriter.offset += SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
6609
6678
  }
6610
6679
  }
6611
- const entryPositions = await copyZipData(zipWriter, reader, entries, directoryOffset);
6612
- entries.forEach(entry => {
6680
+ const entryPositions = await copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, Boolean(filter));
6681
+ keptEntries.forEach(entry => {
6613
6682
  const {
6614
6683
  version,
6615
6684
  rawLastModDate,
@@ -8620,26 +8689,42 @@
8620
8689
  return rawExtraField;
8621
8690
  }
8622
8691
 
8623
- async function copyZipData(zipWriter, reader, entries, directoryOffset) {
8692
+ async function copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, compact) {
8624
8693
  const { writer } = zipWriter;
8625
8694
  const entryPositions = new Map();
8626
- if (writer.closeDisk) {
8695
+ if (writer.closeDisk || compact) {
8627
8696
  const sortedEntries = Array.from(entries).sort((firstEntry, secondEntry) =>
8628
8697
  getSourceOffset(reader, firstEntry) - getSourceOffset(reader, secondEntry));
8629
- let copiedLength = 0;
8630
- for (const entry of sortedEntries) {
8631
- const sourceOffset = getSourceOffset(reader, entry);
8632
- await copyData(zipWriter, reader, copiedLength, sourceOffset - copiedLength);
8633
- if (exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
8634
- await writer.closeDisk();
8635
- }
8636
- entryPositions.set(entry, {
8637
- offset: getSegmentOffset(zipWriter, writer),
8638
- diskNumberStart: getDiskNumber(writer)
8639
- });
8640
- copiedLength = sourceOffset;
8698
+ const regionEnds = getRegionEnds(reader, sortedEntries, directoryOffset);
8699
+ const keptEntrySet = new Set(keptEntries);
8700
+ let copiedOffset = 0;
8701
+ let lastPosition;
8702
+ for (let indexEntry = 0; indexEntry < sortedEntries.length; indexEntry++) {
8703
+ const entry = sortedEntries[indexEntry];
8704
+ if (keptEntrySet.has(entry)) {
8705
+ const sourceOffset = getSourceOffset(reader, entry);
8706
+ if (sourceOffset < copiedOffset) {
8707
+ entryPositions.set(entry, lastPosition);
8708
+ } else {
8709
+ if (!compact) {
8710
+ await copyData(zipWriter, reader, copiedOffset, sourceOffset - copiedOffset);
8711
+ }
8712
+ if (writer.closeDisk && exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
8713
+ await writer.closeDisk();
8714
+ }
8715
+ lastPosition = {
8716
+ offset: getSegmentOffset(zipWriter, writer),
8717
+ diskNumberStart: getDiskNumber(writer)
8718
+ };
8719
+ entryPositions.set(entry, lastPosition);
8720
+ await copyData(zipWriter, reader, sourceOffset, regionEnds[indexEntry] - sourceOffset);
8721
+ copiedOffset = regionEnds[indexEntry];
8722
+ }
8723
+ }
8724
+ }
8725
+ if (!compact) {
8726
+ await copyData(zipWriter, reader, copiedOffset, directoryOffset - copiedOffset);
8641
8727
  }
8642
- await copyData(zipWriter, reader, copiedLength, directoryOffset - copiedLength);
8643
8728
  } else {
8644
8729
  const baseOffset = zipWriter.offset;
8645
8730
  await copyData(zipWriter, reader, 0, directoryOffset);
@@ -8651,6 +8736,20 @@
8651
8736
  return entryPositions;
8652
8737
  }
8653
8738
 
8739
+ function getRegionEnds(reader, sortedEntries, directoryOffset) {
8740
+ const regionEnds = new Array(sortedEntries.length);
8741
+ let regionEnd = directoryOffset;
8742
+ for (let indexEntry = sortedEntries.length - 1; indexEntry >= 0; indexEntry--) {
8743
+ const sourceOffset = getSourceOffset(reader, sortedEntries[indexEntry]);
8744
+ const nextEntry = sortedEntries[indexEntry + 1];
8745
+ if (nextEntry && getSourceOffset(reader, nextEntry) > sourceOffset) {
8746
+ regionEnd = getSourceOffset(reader, nextEntry);
8747
+ }
8748
+ regionEnds[indexEntry] = regionEnd;
8749
+ }
8750
+ return regionEnds;
8751
+ }
8752
+
8654
8753
  async function copyData(zipWriter, reader, offset, size) {
8655
8754
  if (size > 0) {
8656
8755
  const { writer } = zipWriter;
@@ -9028,7 +9127,7 @@
9028
9127
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
9029
9128
  */
9030
9129
 
9031
- const VERSION = "2.19.0";
9130
+ const VERSION = "2.20.0";
9032
9131
 
9033
9132
  /*
9034
9133
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -11768,11 +11867,13 @@
11768
11867
  exports.WARNING_COMPRESSION_UNAVAILABLE = WARNING_COMPRESSION_UNAVAILABLE;
11769
11868
  exports.WARNING_DUPLICATE_FILENAME = WARNING_DUPLICATE_FILENAME;
11770
11869
  exports.WARNING_MALFORMED_EXTRA_FIELD = WARNING_MALFORMED_EXTRA_FIELD;
11870
+ exports.WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET;
11771
11871
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG;
11772
11872
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
11773
11873
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
11774
11874
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME = WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME;
11775
11875
  exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
11876
+ exports.WARNING_MISSING_ZIP64_EXTRA_FIELD = WARNING_MISSING_ZIP64_EXTRA_FIELD;
11776
11877
  exports.WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY;
11777
11878
  exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
11778
11879
  exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;