@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.
@@ -4801,6 +4801,8 @@
4801
4801
  const WARNING_PREPENDED_DATA = "prepended data";
4802
4802
  const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
4803
4803
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4804
+ const WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = "mismatched central directory offset";
4805
+ const WARNING_MISSING_ZIP64_EXTRA_FIELD = "missing zip64 extra field";
4804
4806
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4805
4807
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
4806
4808
  const WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = "multiple end of central directory records";
@@ -4963,6 +4965,8 @@
4963
4965
  reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY);
4964
4966
  }
4965
4967
  directoryDataOffset = getDiskOffset$1(reader, diskNumber) + getBigUint64(endOfDirectoryView, 48) + prependedDataLength;
4968
+ } else if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || diskNumber == MAX_16_BITS) {
4969
+ throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
4966
4970
  }
4967
4971
  }
4968
4972
  let declaredDirectoryDataLength = directoryDataLength;
@@ -4985,25 +4989,44 @@
4985
4989
  if (directoryArray.length < 4) {
4986
4990
  throw new Error(ERR_BAD_FORMAT);
4987
4991
  }
4988
- const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
4992
+ let expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
4989
4993
  if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
4990
4994
  const storedPointsAtDirectory = getUint32$1(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE ||
4991
4995
  Boolean(directoryEncryptionInfo && directoryEncryptionInfo.compressedSize) ||
4992
4996
  detectEncryptedCentralDirectory(directoryView);
4993
4997
  let reconcile = !storedPointsAtDirectory;
4994
- if (!reconcile && expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
4995
- const expectedSignatureArray = await readUint8Array(reader, expectedDirectoryDataOffset, 4);
4996
- reconcile = getUint32$1(getDataView(expectedSignatureArray), 0) == CENTRAL_FILE_HEADER_SIGNATURE;
4998
+ if (expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
4999
+ const expectedPointsAtDirectory = await pointsAtDirectory(reader, expectedDirectoryDataOffset);
5000
+ if (storedPointsAtDirectory) {
5001
+ reconcile = expectedPointsAtDirectory;
5002
+ } else if (!expectedPointsAtDirectory) {
5003
+ const signatureRecordOffset = await findDigitalSignatureRecordOffset(reader, centralDirectoryEndOffset);
5004
+ const signedDirectoryDataOffset = signatureRecordOffset - directoryDataLength;
5005
+ if (signatureRecordOffset !== UNDEFINED_VALUE && signedDirectoryDataOffset >= 0 &&
5006
+ await pointsAtDirectory(reader, signedDirectoryDataOffset)) {
5007
+ expectedDirectoryDataOffset = signedDirectoryDataOffset;
5008
+ }
5009
+ }
4997
5010
  }
4998
5011
  if (reconcile) {
4999
5012
  const originalDirectoryDataOffset = directoryDataOffset;
5000
5013
  directoryDataOffset = expectedDirectoryDataOffset;
5014
+ directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
5015
+ directoryView = getDataView(directoryArray);
5001
5016
  if (directoryDataOffset > originalDirectoryDataOffset) {
5002
5017
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
5003
5018
  prependedCentralDirectory = storedPointsAtDirectory;
5019
+ } else {
5020
+ reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET);
5021
+ const offsetDelta = directoryDataOffset - originalDirectoryDataOffset;
5022
+ if (directoryArray.length >= CENTRAL_FILE_HEADER_LENGTH) {
5023
+ const localHeaderOffset = getUint32$1(directoryView, 42);
5024
+ if (!await startsWithSignature(reader, localHeaderOffset, LOCAL_FILE_HEADER_SIGNATURE) &&
5025
+ await startsWithSignature(reader, localHeaderOffset + offsetDelta, LOCAL_FILE_HEADER_SIGNATURE)) {
5026
+ prependedDataLength += offsetDelta;
5027
+ }
5028
+ }
5004
5029
  }
5005
- directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
5006
- directoryView = getDataView(directoryArray);
5007
5030
  }
5008
5031
  }
5009
5032
  }
@@ -5114,7 +5137,16 @@
5114
5137
  filename,
5115
5138
  comment
5116
5139
  });
5117
- const malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5140
+ let malformedExtraField;
5141
+ try {
5142
+ malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5143
+ } catch (error) {
5144
+ if (checkAmbiguity || error.message != ERR_EXTRAFIELD_ZIP64_NOT_FOUND) {
5145
+ throw error;
5146
+ }
5147
+ fileEntry.zip64ExtraFieldMissing = true;
5148
+ addWarning(warnings, WARNING_MISSING_ZIP64_EXTRA_FIELD, fileEntry.filename);
5149
+ }
5118
5150
  filename = fileEntry.filename;
5119
5151
  if (normalizeFilename) {
5120
5152
  const normalizedFilename = normalizeFilename(filename);
@@ -5156,11 +5188,12 @@
5156
5188
  const sticky = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_STICKY_MASK);
5157
5189
  const unixType = fileEntry.unixMode === UNDEFINED_VALUE ? unixExternalUpper : fileEntry.unixMode;
5158
5190
  const symlink = (unixType & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_SYMLINK;
5159
- const executable = !symlink && ((fileEntry.unixMode !== UNDEFINED_VALUE)
5160
- ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
5161
- : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
5162
5191
  const modeIsDir = fileEntry.unixMode !== UNDEFINED_VALUE && ((fileEntry.unixMode & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
5163
5192
  const upperIsDir = ((unixExternalUpper & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
5193
+ const directory = modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE);
5194
+ const executable = !symlink && !directory && ((fileEntry.unixMode !== UNDEFINED_VALUE)
5195
+ ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
5196
+ : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
5164
5197
  Object.assign(fileEntry, {
5165
5198
  setuid,
5166
5199
  setgid,
@@ -5168,7 +5201,7 @@
5168
5201
  symlink,
5169
5202
  unixExternalUpper,
5170
5203
  executable,
5171
- directory: modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE),
5204
+ directory,
5172
5205
  zipCrypto: fileEntry.encrypted && !fileEntry.extraFieldAES
5173
5206
  });
5174
5207
  const entry = new Entry(fileEntry);
@@ -5224,10 +5257,10 @@
5224
5257
  const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
5225
5258
  const splitZipSignatureLength = (checkAmbiguity || extractPrependedData) && filesLength &&
5226
5259
  startOffset == SPLIT_ZIP_FILE_SIGNATURE_LENGTH && await startsWithSplitZipMarker(reader) ? SPLIT_ZIP_FILE_SIGNATURE_LENGTH : 0;
5227
- if (checkAmbiguity && (prependedDataLength || (filesLength && startOffset > splitZipSignatureLength))) {
5260
+ if (checkAmbiguity && (prependedDataLength > 0 || (filesLength && startOffset > splitZipSignatureLength))) {
5228
5261
  throwAmbiguousArchive(WARNING_PREPENDED_DATA);
5229
5262
  }
5230
- if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5263
+ if (prependedDataLength > 0 || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5231
5264
  addWarning(warnings, WARNING_PREPENDED_DATA);
5232
5265
  }
5233
5266
  if (prependedCentralDirectory) {
@@ -5387,6 +5420,9 @@
5387
5420
 
5388
5421
  async getData(writer, fileEntry, readRanges, options = {}) {
5389
5422
  const zipEntry = this;
5423
+ if (zipEntry.zip64ExtraFieldMissing) {
5424
+ throw new Error(ERR_EXTRAFIELD_ZIP64_NOT_FOUND);
5425
+ }
5390
5426
  const config = getConfiguration();
5391
5427
  const {
5392
5428
  reader,
@@ -5624,6 +5660,30 @@
5624
5660
  return wrappedFilesLength % (MAX_16_BITS + 1) ? 0 : wrappedFilesLength;
5625
5661
  }
5626
5662
 
5663
+ function pointsAtDirectory(reader, offset) {
5664
+ return startsWithSignature(reader, offset, CENTRAL_FILE_HEADER_SIGNATURE);
5665
+ }
5666
+
5667
+ async function startsWithSignature(reader, offset, signature) {
5668
+ if (offset < 0 || offset + 4 > reader.size) {
5669
+ return false;
5670
+ }
5671
+ const signatureArray = await readUint8Array(reader, offset, 4);
5672
+ return getUint32$1(getDataView(signatureArray), 0) == signature;
5673
+ }
5674
+
5675
+ async function findDigitalSignatureRecordOffset(reader, endOffset) {
5676
+ const startOffset = Math.max(0, endOffset - (6 + MAX_16_BITS));
5677
+ const tailArray = await readUint8Array(reader, startOffset, endOffset - startOffset);
5678
+ const tailView = getDataView(tailArray);
5679
+ for (let indexByte = tailArray.length - 6; indexByte >= 0; indexByte--) {
5680
+ if (getUint32$1(tailView, indexByte) == DIGITAL_SIGNATURE_RECORD_SIGNATURE &&
5681
+ indexByte + 6 + getUint16$1(tailView, indexByte + 4) == tailArray.length) {
5682
+ return startOffset + indexByte;
5683
+ }
5684
+ }
5685
+ }
5686
+
5627
5687
  function readDigitalSignature(signatureRecordArray) {
5628
5688
  if (signatureRecordArray.length >= 6) {
5629
5689
  const signatureRecordView = getDataView(signatureRecordArray);
@@ -5755,6 +5815,11 @@
5755
5815
  readExtraFieldUnixDates(extraFieldUnixType1, directory);
5756
5816
  directory.extraFieldUnixType1 = extraFieldUnixType1;
5757
5817
  }
5818
+ const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5819
+ if (extraFieldExtendedTimestamp) {
5820
+ readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
5821
+ directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
5822
+ }
5758
5823
  const extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
5759
5824
  if (extraFieldNTFS) {
5760
5825
  readExtraFieldNTFS(extraFieldNTFS, directory);
@@ -5771,11 +5836,6 @@
5771
5836
  readExtraFieldUnix(extraFieldUnix, unixIdsRead ? {} : directory, false);
5772
5837
  directory.extraFieldUnix = extraFieldUnix;
5773
5838
  }
5774
- const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5775
- if (extraFieldExtendedTimestamp) {
5776
- readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
5777
- directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
5778
- }
5779
5839
  const extraFieldUSDZ = extraField.get(EXTRAFIELD_TYPE_USDZ);
5780
5840
  if (extraFieldUSDZ) {
5781
5841
  directory.extraFieldUSDZ = extraFieldUSDZ;
@@ -6414,11 +6474,13 @@
6414
6474
  WARNING_COMPRESSED_PATCHED_DATA: WARNING_COMPRESSED_PATCHED_DATA,
6415
6475
  WARNING_DUPLICATE_FILENAME: WARNING_DUPLICATE_FILENAME,
6416
6476
  WARNING_MALFORMED_EXTRA_FIELD: WARNING_MALFORMED_EXTRA_FIELD,
6477
+ WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET: WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET,
6417
6478
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG: WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG,
6418
6479
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6419
6480
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6420
6481
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME: WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME,
6421
6482
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6483
+ WARNING_MISSING_ZIP64_EXTRA_FIELD: WARNING_MISSING_ZIP64_EXTRA_FIELD,
6422
6484
  WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY: WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY,
6423
6485
  WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6424
6486
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
@@ -6551,13 +6613,14 @@
6551
6613
  return watchPromiseError(this, prependZipEntries(this, reader));
6552
6614
  }
6553
6615
 
6554
- appendZip(reader) {
6555
- return watchPromiseError(this, this.appendZipEntries(reader));
6616
+ appendZip(reader, options = {}) {
6617
+ return watchPromiseError(this, this.appendZipEntries(reader, options));
6556
6618
  }
6557
6619
 
6558
- async appendZipEntries(reader) {
6620
+ async appendZipEntries(reader, options = {}) {
6559
6621
  const zipWriter = this;
6560
6622
  const { pendingAddFileCalls, filenames, fileEntries } = zipWriter;
6623
+ const filter = checkFunctionOption(options.filter);
6561
6624
  while (pendingAddFileCalls.size) {
6562
6625
  await Promise.allSettled(Array.from(pendingAddFileCalls));
6563
6626
  }
@@ -6576,10 +6639,16 @@
6576
6639
  const { ZipReader } = await Promise.resolve().then(function () { return zipReader; });
6577
6640
  const zipReader$1 = new ZipReader(reader);
6578
6641
  const entries = await zipReader$1.getEntries();
6642
+ const keptEntries = [];
6643
+ for (const entry of entries) {
6644
+ if (!filter || await filter(entry)) {
6645
+ keptEntries.push(entry);
6646
+ }
6647
+ }
6579
6648
  await zipReader$1.close();
6580
6649
  await initStream(zipWriter.writer);
6581
6650
  const { directoryOffset } = zipReader$1;
6582
- entries.forEach(({ filename }) => {
6651
+ keptEntries.forEach(({ filename }) => {
6583
6652
  if (filenames.has(filename)) {
6584
6653
  throw new Error(ERR_DUPLICATED_NAME);
6585
6654
  }
@@ -6600,8 +6669,8 @@
6600
6669
  zipWriter.offset += SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
6601
6670
  }
6602
6671
  }
6603
- const entryPositions = await copyZipData(zipWriter, reader, entries, directoryOffset);
6604
- entries.forEach(entry => {
6672
+ const entryPositions = await copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, Boolean(filter));
6673
+ keptEntries.forEach(entry => {
6605
6674
  const {
6606
6675
  version,
6607
6676
  rawLastModDate,
@@ -8612,26 +8681,42 @@
8612
8681
  return rawExtraField;
8613
8682
  }
8614
8683
 
8615
- async function copyZipData(zipWriter, reader, entries, directoryOffset) {
8684
+ async function copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, compact) {
8616
8685
  const { writer } = zipWriter;
8617
8686
  const entryPositions = new Map();
8618
- if (writer.closeDisk) {
8687
+ if (writer.closeDisk || compact) {
8619
8688
  const sortedEntries = Array.from(entries).sort((firstEntry, secondEntry) =>
8620
8689
  getSourceOffset(reader, firstEntry) - getSourceOffset(reader, secondEntry));
8621
- let copiedLength = 0;
8622
- for (const entry of sortedEntries) {
8623
- const sourceOffset = getSourceOffset(reader, entry);
8624
- await copyData(zipWriter, reader, copiedLength, sourceOffset - copiedLength);
8625
- if (exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
8626
- await writer.closeDisk();
8627
- }
8628
- entryPositions.set(entry, {
8629
- offset: getSegmentOffset(zipWriter, writer),
8630
- diskNumberStart: getDiskNumber(writer)
8631
- });
8632
- copiedLength = sourceOffset;
8690
+ const regionEnds = getRegionEnds(reader, sortedEntries, directoryOffset);
8691
+ const keptEntrySet = new Set(keptEntries);
8692
+ let copiedOffset = 0;
8693
+ let lastPosition;
8694
+ for (let indexEntry = 0; indexEntry < sortedEntries.length; indexEntry++) {
8695
+ const entry = sortedEntries[indexEntry];
8696
+ if (keptEntrySet.has(entry)) {
8697
+ const sourceOffset = getSourceOffset(reader, entry);
8698
+ if (sourceOffset < copiedOffset) {
8699
+ entryPositions.set(entry, lastPosition);
8700
+ } else {
8701
+ if (!compact) {
8702
+ await copyData(zipWriter, reader, copiedOffset, sourceOffset - copiedOffset);
8703
+ }
8704
+ if (writer.closeDisk && exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
8705
+ await writer.closeDisk();
8706
+ }
8707
+ lastPosition = {
8708
+ offset: getSegmentOffset(zipWriter, writer),
8709
+ diskNumberStart: getDiskNumber(writer)
8710
+ };
8711
+ entryPositions.set(entry, lastPosition);
8712
+ await copyData(zipWriter, reader, sourceOffset, regionEnds[indexEntry] - sourceOffset);
8713
+ copiedOffset = regionEnds[indexEntry];
8714
+ }
8715
+ }
8716
+ }
8717
+ if (!compact) {
8718
+ await copyData(zipWriter, reader, copiedOffset, directoryOffset - copiedOffset);
8633
8719
  }
8634
- await copyData(zipWriter, reader, copiedLength, directoryOffset - copiedLength);
8635
8720
  } else {
8636
8721
  const baseOffset = zipWriter.offset;
8637
8722
  await copyData(zipWriter, reader, 0, directoryOffset);
@@ -8643,6 +8728,20 @@
8643
8728
  return entryPositions;
8644
8729
  }
8645
8730
 
8731
+ function getRegionEnds(reader, sortedEntries, directoryOffset) {
8732
+ const regionEnds = new Array(sortedEntries.length);
8733
+ let regionEnd = directoryOffset;
8734
+ for (let indexEntry = sortedEntries.length - 1; indexEntry >= 0; indexEntry--) {
8735
+ const sourceOffset = getSourceOffset(reader, sortedEntries[indexEntry]);
8736
+ const nextEntry = sortedEntries[indexEntry + 1];
8737
+ if (nextEntry && getSourceOffset(reader, nextEntry) > sourceOffset) {
8738
+ regionEnd = getSourceOffset(reader, nextEntry);
8739
+ }
8740
+ regionEnds[indexEntry] = regionEnd;
8741
+ }
8742
+ return regionEnds;
8743
+ }
8744
+
8646
8745
  async function copyData(zipWriter, reader, offset, size) {
8647
8746
  if (size > 0) {
8648
8747
  const { writer } = zipWriter;
@@ -9020,7 +9119,7 @@
9020
9119
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
9021
9120
  */
9022
9121
 
9023
- const VERSION = "2.19.0";
9122
+ const VERSION = "2.20.0";
9024
9123
 
9025
9124
  /*
9026
9125
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -11214,11 +11313,13 @@
11214
11313
  exports.WARNING_COMPRESSION_UNAVAILABLE = WARNING_COMPRESSION_UNAVAILABLE;
11215
11314
  exports.WARNING_DUPLICATE_FILENAME = WARNING_DUPLICATE_FILENAME;
11216
11315
  exports.WARNING_MALFORMED_EXTRA_FIELD = WARNING_MALFORMED_EXTRA_FIELD;
11316
+ exports.WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET;
11217
11317
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG;
11218
11318
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
11219
11319
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
11220
11320
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME = WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME;
11221
11321
  exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
11322
+ exports.WARNING_MISSING_ZIP64_EXTRA_FIELD = WARNING_MISSING_ZIP64_EXTRA_FIELD;
11222
11323
  exports.WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY;
11223
11324
  exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
11224
11325
  exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;