@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.
@@ -4799,6 +4799,8 @@
4799
4799
  const WARNING_PREPENDED_DATA = "prepended data";
4800
4800
  const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
4801
4801
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4802
+ const WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = "mismatched central directory offset";
4803
+ const WARNING_MISSING_ZIP64_EXTRA_FIELD = "missing zip64 extra field";
4802
4804
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4803
4805
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
4804
4806
  const WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = "multiple end of central directory records";
@@ -4961,6 +4963,8 @@
4961
4963
  reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY);
4962
4964
  }
4963
4965
  directoryDataOffset = getDiskOffset$1(reader, diskNumber) + getBigUint64(endOfDirectoryView, 48) + prependedDataLength;
4966
+ } else if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || diskNumber == MAX_16_BITS) {
4967
+ throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
4964
4968
  }
4965
4969
  }
4966
4970
  let declaredDirectoryDataLength = directoryDataLength;
@@ -4983,25 +4987,44 @@
4983
4987
  if (directoryArray.length < 4) {
4984
4988
  throw new Error(ERR_BAD_FORMAT);
4985
4989
  }
4986
- const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
4990
+ let expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
4987
4991
  if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
4988
4992
  const storedPointsAtDirectory = getUint32$1(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE ||
4989
4993
  Boolean(directoryEncryptionInfo && directoryEncryptionInfo.compressedSize) ||
4990
4994
  detectEncryptedCentralDirectory(directoryView);
4991
4995
  let reconcile = !storedPointsAtDirectory;
4992
- if (!reconcile && expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
4993
- const expectedSignatureArray = await readUint8Array(reader, expectedDirectoryDataOffset, 4);
4994
- reconcile = getUint32$1(getDataView(expectedSignatureArray), 0) == CENTRAL_FILE_HEADER_SIGNATURE;
4996
+ if (expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
4997
+ const expectedPointsAtDirectory = await pointsAtDirectory(reader, expectedDirectoryDataOffset);
4998
+ if (storedPointsAtDirectory) {
4999
+ reconcile = expectedPointsAtDirectory;
5000
+ } else if (!expectedPointsAtDirectory) {
5001
+ const signatureRecordOffset = await findDigitalSignatureRecordOffset(reader, centralDirectoryEndOffset);
5002
+ const signedDirectoryDataOffset = signatureRecordOffset - directoryDataLength;
5003
+ if (signatureRecordOffset !== UNDEFINED_VALUE && signedDirectoryDataOffset >= 0 &&
5004
+ await pointsAtDirectory(reader, signedDirectoryDataOffset)) {
5005
+ expectedDirectoryDataOffset = signedDirectoryDataOffset;
5006
+ }
5007
+ }
4995
5008
  }
4996
5009
  if (reconcile) {
4997
5010
  const originalDirectoryDataOffset = directoryDataOffset;
4998
5011
  directoryDataOffset = expectedDirectoryDataOffset;
5012
+ directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
5013
+ directoryView = getDataView(directoryArray);
4999
5014
  if (directoryDataOffset > originalDirectoryDataOffset) {
5000
5015
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
5001
5016
  prependedCentralDirectory = storedPointsAtDirectory;
5017
+ } else {
5018
+ reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET);
5019
+ const offsetDelta = directoryDataOffset - originalDirectoryDataOffset;
5020
+ if (directoryArray.length >= CENTRAL_FILE_HEADER_LENGTH) {
5021
+ const localHeaderOffset = getUint32$1(directoryView, 42);
5022
+ if (!await startsWithSignature(reader, localHeaderOffset, LOCAL_FILE_HEADER_SIGNATURE) &&
5023
+ await startsWithSignature(reader, localHeaderOffset + offsetDelta, LOCAL_FILE_HEADER_SIGNATURE)) {
5024
+ prependedDataLength += offsetDelta;
5025
+ }
5026
+ }
5002
5027
  }
5003
- directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
5004
- directoryView = getDataView(directoryArray);
5005
5028
  }
5006
5029
  }
5007
5030
  }
@@ -5112,7 +5135,16 @@
5112
5135
  filename,
5113
5136
  comment
5114
5137
  });
5115
- const malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5138
+ let malformedExtraField;
5139
+ try {
5140
+ malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5141
+ } catch (error) {
5142
+ if (checkAmbiguity || error.message != ERR_EXTRAFIELD_ZIP64_NOT_FOUND) {
5143
+ throw error;
5144
+ }
5145
+ fileEntry.zip64ExtraFieldMissing = true;
5146
+ addWarning(warnings, WARNING_MISSING_ZIP64_EXTRA_FIELD, fileEntry.filename);
5147
+ }
5116
5148
  filename = fileEntry.filename;
5117
5149
  if (normalizeFilename) {
5118
5150
  const normalizedFilename = normalizeFilename(filename);
@@ -5154,11 +5186,12 @@
5154
5186
  const sticky = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_STICKY_MASK);
5155
5187
  const unixType = fileEntry.unixMode === UNDEFINED_VALUE ? unixExternalUpper : fileEntry.unixMode;
5156
5188
  const symlink = (unixType & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_SYMLINK;
5157
- const executable = !symlink && ((fileEntry.unixMode !== UNDEFINED_VALUE)
5158
- ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
5159
- : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
5160
5189
  const modeIsDir = fileEntry.unixMode !== UNDEFINED_VALUE && ((fileEntry.unixMode & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
5161
5190
  const upperIsDir = ((unixExternalUpper & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
5191
+ const directory = modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE);
5192
+ const executable = !symlink && !directory && ((fileEntry.unixMode !== UNDEFINED_VALUE)
5193
+ ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
5194
+ : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
5162
5195
  Object.assign(fileEntry, {
5163
5196
  setuid,
5164
5197
  setgid,
@@ -5166,7 +5199,7 @@
5166
5199
  symlink,
5167
5200
  unixExternalUpper,
5168
5201
  executable,
5169
- directory: modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE),
5202
+ directory,
5170
5203
  zipCrypto: fileEntry.encrypted && !fileEntry.extraFieldAES
5171
5204
  });
5172
5205
  const entry = new Entry(fileEntry);
@@ -5222,10 +5255,10 @@
5222
5255
  const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
5223
5256
  const splitZipSignatureLength = (checkAmbiguity || extractPrependedData) && filesLength &&
5224
5257
  startOffset == SPLIT_ZIP_FILE_SIGNATURE_LENGTH && await startsWithSplitZipMarker(reader) ? SPLIT_ZIP_FILE_SIGNATURE_LENGTH : 0;
5225
- if (checkAmbiguity && (prependedDataLength || (filesLength && startOffset > splitZipSignatureLength))) {
5258
+ if (checkAmbiguity && (prependedDataLength > 0 || (filesLength && startOffset > splitZipSignatureLength))) {
5226
5259
  throwAmbiguousArchive(WARNING_PREPENDED_DATA);
5227
5260
  }
5228
- if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5261
+ if (prependedDataLength > 0 || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5229
5262
  addWarning(warnings, WARNING_PREPENDED_DATA);
5230
5263
  }
5231
5264
  if (prependedCentralDirectory) {
@@ -5385,6 +5418,9 @@
5385
5418
 
5386
5419
  async getData(writer, fileEntry, readRanges, options = {}) {
5387
5420
  const zipEntry = this;
5421
+ if (zipEntry.zip64ExtraFieldMissing) {
5422
+ throw new Error(ERR_EXTRAFIELD_ZIP64_NOT_FOUND);
5423
+ }
5388
5424
  const config = getConfiguration();
5389
5425
  const {
5390
5426
  reader,
@@ -5622,6 +5658,30 @@
5622
5658
  return wrappedFilesLength % (MAX_16_BITS + 1) ? 0 : wrappedFilesLength;
5623
5659
  }
5624
5660
 
5661
+ function pointsAtDirectory(reader, offset) {
5662
+ return startsWithSignature(reader, offset, CENTRAL_FILE_HEADER_SIGNATURE);
5663
+ }
5664
+
5665
+ async function startsWithSignature(reader, offset, signature) {
5666
+ if (offset < 0 || offset + 4 > reader.size) {
5667
+ return false;
5668
+ }
5669
+ const signatureArray = await readUint8Array(reader, offset, 4);
5670
+ return getUint32$1(getDataView(signatureArray), 0) == signature;
5671
+ }
5672
+
5673
+ async function findDigitalSignatureRecordOffset(reader, endOffset) {
5674
+ const startOffset = Math.max(0, endOffset - (6 + MAX_16_BITS));
5675
+ const tailArray = await readUint8Array(reader, startOffset, endOffset - startOffset);
5676
+ const tailView = getDataView(tailArray);
5677
+ for (let indexByte = tailArray.length - 6; indexByte >= 0; indexByte--) {
5678
+ if (getUint32$1(tailView, indexByte) == DIGITAL_SIGNATURE_RECORD_SIGNATURE &&
5679
+ indexByte + 6 + getUint16$1(tailView, indexByte + 4) == tailArray.length) {
5680
+ return startOffset + indexByte;
5681
+ }
5682
+ }
5683
+ }
5684
+
5625
5685
  function readDigitalSignature(signatureRecordArray) {
5626
5686
  if (signatureRecordArray.length >= 6) {
5627
5687
  const signatureRecordView = getDataView(signatureRecordArray);
@@ -5753,6 +5813,11 @@
5753
5813
  readExtraFieldUnixDates(extraFieldUnixType1, directory);
5754
5814
  directory.extraFieldUnixType1 = extraFieldUnixType1;
5755
5815
  }
5816
+ const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5817
+ if (extraFieldExtendedTimestamp) {
5818
+ readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
5819
+ directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
5820
+ }
5756
5821
  const extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
5757
5822
  if (extraFieldNTFS) {
5758
5823
  readExtraFieldNTFS(extraFieldNTFS, directory);
@@ -5769,11 +5834,6 @@
5769
5834
  readExtraFieldUnix(extraFieldUnix, unixIdsRead ? {} : directory, false);
5770
5835
  directory.extraFieldUnix = extraFieldUnix;
5771
5836
  }
5772
- const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5773
- if (extraFieldExtendedTimestamp) {
5774
- readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
5775
- directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
5776
- }
5777
5837
  const extraFieldUSDZ = extraField.get(EXTRAFIELD_TYPE_USDZ);
5778
5838
  if (extraFieldUSDZ) {
5779
5839
  directory.extraFieldUSDZ = extraFieldUSDZ;
@@ -6412,11 +6472,13 @@
6412
6472
  WARNING_COMPRESSED_PATCHED_DATA: WARNING_COMPRESSED_PATCHED_DATA,
6413
6473
  WARNING_DUPLICATE_FILENAME: WARNING_DUPLICATE_FILENAME,
6414
6474
  WARNING_MALFORMED_EXTRA_FIELD: WARNING_MALFORMED_EXTRA_FIELD,
6475
+ WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET: WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET,
6415
6476
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG: WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG,
6416
6477
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6417
6478
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6418
6479
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME: WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME,
6419
6480
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6481
+ WARNING_MISSING_ZIP64_EXTRA_FIELD: WARNING_MISSING_ZIP64_EXTRA_FIELD,
6420
6482
  WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY: WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY,
6421
6483
  WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6422
6484
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
@@ -6549,13 +6611,14 @@
6549
6611
  return watchPromiseError(this, prependZipEntries(this, reader));
6550
6612
  }
6551
6613
 
6552
- appendZip(reader) {
6553
- return watchPromiseError(this, this.appendZipEntries(reader));
6614
+ appendZip(reader, options = {}) {
6615
+ return watchPromiseError(this, this.appendZipEntries(reader, options));
6554
6616
  }
6555
6617
 
6556
- async appendZipEntries(reader) {
6618
+ async appendZipEntries(reader, options = {}) {
6557
6619
  const zipWriter = this;
6558
6620
  const { pendingAddFileCalls, filenames, fileEntries } = zipWriter;
6621
+ const filter = checkFunctionOption(options.filter);
6559
6622
  while (pendingAddFileCalls.size) {
6560
6623
  await Promise.allSettled(Array.from(pendingAddFileCalls));
6561
6624
  }
@@ -6574,10 +6637,16 @@
6574
6637
  const { ZipReader } = await Promise.resolve().then(function () { return zipReader; });
6575
6638
  const zipReader$1 = new ZipReader(reader);
6576
6639
  const entries = await zipReader$1.getEntries();
6640
+ const keptEntries = [];
6641
+ for (const entry of entries) {
6642
+ if (!filter || await filter(entry)) {
6643
+ keptEntries.push(entry);
6644
+ }
6645
+ }
6577
6646
  await zipReader$1.close();
6578
6647
  await initStream(zipWriter.writer);
6579
6648
  const { directoryOffset } = zipReader$1;
6580
- entries.forEach(({ filename }) => {
6649
+ keptEntries.forEach(({ filename }) => {
6581
6650
  if (filenames.has(filename)) {
6582
6651
  throw new Error(ERR_DUPLICATED_NAME);
6583
6652
  }
@@ -6598,8 +6667,8 @@
6598
6667
  zipWriter.offset += SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
6599
6668
  }
6600
6669
  }
6601
- const entryPositions = await copyZipData(zipWriter, reader, entries, directoryOffset);
6602
- entries.forEach(entry => {
6670
+ const entryPositions = await copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, Boolean(filter));
6671
+ keptEntries.forEach(entry => {
6603
6672
  const {
6604
6673
  version,
6605
6674
  rawLastModDate,
@@ -8610,26 +8679,42 @@
8610
8679
  return rawExtraField;
8611
8680
  }
8612
8681
 
8613
- async function copyZipData(zipWriter, reader, entries, directoryOffset) {
8682
+ async function copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, compact) {
8614
8683
  const { writer } = zipWriter;
8615
8684
  const entryPositions = new Map();
8616
- if (writer.closeDisk) {
8685
+ if (writer.closeDisk || compact) {
8617
8686
  const sortedEntries = Array.from(entries).sort((firstEntry, secondEntry) =>
8618
8687
  getSourceOffset(reader, firstEntry) - getSourceOffset(reader, secondEntry));
8619
- let copiedLength = 0;
8620
- for (const entry of sortedEntries) {
8621
- const sourceOffset = getSourceOffset(reader, entry);
8622
- await copyData(zipWriter, reader, copiedLength, sourceOffset - copiedLength);
8623
- if (exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
8624
- await writer.closeDisk();
8625
- }
8626
- entryPositions.set(entry, {
8627
- offset: getSegmentOffset(zipWriter, writer),
8628
- diskNumberStart: getDiskNumber(writer)
8629
- });
8630
- copiedLength = sourceOffset;
8688
+ const regionEnds = getRegionEnds(reader, sortedEntries, directoryOffset);
8689
+ const keptEntrySet = new Set(keptEntries);
8690
+ let copiedOffset = 0;
8691
+ let lastPosition;
8692
+ for (let indexEntry = 0; indexEntry < sortedEntries.length; indexEntry++) {
8693
+ const entry = sortedEntries[indexEntry];
8694
+ if (keptEntrySet.has(entry)) {
8695
+ const sourceOffset = getSourceOffset(reader, entry);
8696
+ if (sourceOffset < copiedOffset) {
8697
+ entryPositions.set(entry, lastPosition);
8698
+ } else {
8699
+ if (!compact) {
8700
+ await copyData(zipWriter, reader, copiedOffset, sourceOffset - copiedOffset);
8701
+ }
8702
+ if (writer.closeDisk && exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
8703
+ await writer.closeDisk();
8704
+ }
8705
+ lastPosition = {
8706
+ offset: getSegmentOffset(zipWriter, writer),
8707
+ diskNumberStart: getDiskNumber(writer)
8708
+ };
8709
+ entryPositions.set(entry, lastPosition);
8710
+ await copyData(zipWriter, reader, sourceOffset, regionEnds[indexEntry] - sourceOffset);
8711
+ copiedOffset = regionEnds[indexEntry];
8712
+ }
8713
+ }
8714
+ }
8715
+ if (!compact) {
8716
+ await copyData(zipWriter, reader, copiedOffset, directoryOffset - copiedOffset);
8631
8717
  }
8632
- await copyData(zipWriter, reader, copiedLength, directoryOffset - copiedLength);
8633
8718
  } else {
8634
8719
  const baseOffset = zipWriter.offset;
8635
8720
  await copyData(zipWriter, reader, 0, directoryOffset);
@@ -8641,6 +8726,20 @@
8641
8726
  return entryPositions;
8642
8727
  }
8643
8728
 
8729
+ function getRegionEnds(reader, sortedEntries, directoryOffset) {
8730
+ const regionEnds = new Array(sortedEntries.length);
8731
+ let regionEnd = directoryOffset;
8732
+ for (let indexEntry = sortedEntries.length - 1; indexEntry >= 0; indexEntry--) {
8733
+ const sourceOffset = getSourceOffset(reader, sortedEntries[indexEntry]);
8734
+ const nextEntry = sortedEntries[indexEntry + 1];
8735
+ if (nextEntry && getSourceOffset(reader, nextEntry) > sourceOffset) {
8736
+ regionEnd = getSourceOffset(reader, nextEntry);
8737
+ }
8738
+ regionEnds[indexEntry] = regionEnd;
8739
+ }
8740
+ return regionEnds;
8741
+ }
8742
+
8644
8743
  async function copyData(zipWriter, reader, offset, size) {
8645
8744
  if (size > 0) {
8646
8745
  const { writer } = zipWriter;
@@ -9018,7 +9117,7 @@
9018
9117
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
9019
9118
  */
9020
9119
 
9021
- const VERSION = "2.19.0";
9120
+ const VERSION = "2.20.0";
9022
9121
 
9023
9122
  /*
9024
9123
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -11079,11 +11178,13 @@
11079
11178
  exports.WARNING_COMPRESSION_UNAVAILABLE = WARNING_COMPRESSION_UNAVAILABLE;
11080
11179
  exports.WARNING_DUPLICATE_FILENAME = WARNING_DUPLICATE_FILENAME;
11081
11180
  exports.WARNING_MALFORMED_EXTRA_FIELD = WARNING_MALFORMED_EXTRA_FIELD;
11181
+ exports.WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET;
11082
11182
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG;
11083
11183
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
11084
11184
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
11085
11185
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME = WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME;
11086
11186
  exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
11187
+ exports.WARNING_MISSING_ZIP64_EXTRA_FIELD = WARNING_MISSING_ZIP64_EXTRA_FIELD;
11087
11188
  exports.WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY;
11088
11189
  exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
11089
11190
  exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;