@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-core.js CHANGED
@@ -4779,6 +4779,8 @@
4779
4779
  const WARNING_PREPENDED_DATA = "prepended data";
4780
4780
  const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
4781
4781
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4782
+ const WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = "mismatched central directory offset";
4783
+ const WARNING_MISSING_ZIP64_EXTRA_FIELD = "missing zip64 extra field";
4782
4784
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4783
4785
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
4784
4786
  const WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = "multiple end of central directory records";
@@ -4941,6 +4943,8 @@
4941
4943
  reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY);
4942
4944
  }
4943
4945
  directoryDataOffset = getDiskOffset$1(reader, diskNumber) + getBigUint64(endOfDirectoryView, 48) + prependedDataLength;
4946
+ } else if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || diskNumber == MAX_16_BITS) {
4947
+ throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
4944
4948
  }
4945
4949
  }
4946
4950
  let declaredDirectoryDataLength = directoryDataLength;
@@ -4963,25 +4967,44 @@
4963
4967
  if (directoryArray.length < 4) {
4964
4968
  throw new Error(ERR_BAD_FORMAT);
4965
4969
  }
4966
- const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
4970
+ let expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
4967
4971
  if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
4968
4972
  const storedPointsAtDirectory = getUint32$1(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE ||
4969
4973
  Boolean(directoryEncryptionInfo && directoryEncryptionInfo.compressedSize) ||
4970
4974
  detectEncryptedCentralDirectory(directoryView);
4971
4975
  let reconcile = !storedPointsAtDirectory;
4972
- if (!reconcile && expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
4973
- const expectedSignatureArray = await readUint8Array(reader, expectedDirectoryDataOffset, 4);
4974
- reconcile = getUint32$1(getDataView(expectedSignatureArray), 0) == CENTRAL_FILE_HEADER_SIGNATURE;
4976
+ if (expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
4977
+ const expectedPointsAtDirectory = await pointsAtDirectory(reader, expectedDirectoryDataOffset);
4978
+ if (storedPointsAtDirectory) {
4979
+ reconcile = expectedPointsAtDirectory;
4980
+ } else if (!expectedPointsAtDirectory) {
4981
+ const signatureRecordOffset = await findDigitalSignatureRecordOffset(reader, centralDirectoryEndOffset);
4982
+ const signedDirectoryDataOffset = signatureRecordOffset - directoryDataLength;
4983
+ if (signatureRecordOffset !== UNDEFINED_VALUE && signedDirectoryDataOffset >= 0 &&
4984
+ await pointsAtDirectory(reader, signedDirectoryDataOffset)) {
4985
+ expectedDirectoryDataOffset = signedDirectoryDataOffset;
4986
+ }
4987
+ }
4975
4988
  }
4976
4989
  if (reconcile) {
4977
4990
  const originalDirectoryDataOffset = directoryDataOffset;
4978
4991
  directoryDataOffset = expectedDirectoryDataOffset;
4992
+ directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4993
+ directoryView = getDataView(directoryArray);
4979
4994
  if (directoryDataOffset > originalDirectoryDataOffset) {
4980
4995
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
4981
4996
  prependedCentralDirectory = storedPointsAtDirectory;
4997
+ } else {
4998
+ reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET);
4999
+ const offsetDelta = directoryDataOffset - originalDirectoryDataOffset;
5000
+ if (directoryArray.length >= CENTRAL_FILE_HEADER_LENGTH) {
5001
+ const localHeaderOffset = getUint32$1(directoryView, 42);
5002
+ if (!await startsWithSignature(reader, localHeaderOffset, LOCAL_FILE_HEADER_SIGNATURE) &&
5003
+ await startsWithSignature(reader, localHeaderOffset + offsetDelta, LOCAL_FILE_HEADER_SIGNATURE)) {
5004
+ prependedDataLength += offsetDelta;
5005
+ }
5006
+ }
4982
5007
  }
4983
- directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4984
- directoryView = getDataView(directoryArray);
4985
5008
  }
4986
5009
  }
4987
5010
  }
@@ -5092,7 +5115,16 @@
5092
5115
  filename,
5093
5116
  comment
5094
5117
  });
5095
- const malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5118
+ let malformedExtraField;
5119
+ try {
5120
+ malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5121
+ } catch (error) {
5122
+ if (checkAmbiguity || error.message != ERR_EXTRAFIELD_ZIP64_NOT_FOUND) {
5123
+ throw error;
5124
+ }
5125
+ fileEntry.zip64ExtraFieldMissing = true;
5126
+ addWarning(warnings, WARNING_MISSING_ZIP64_EXTRA_FIELD, fileEntry.filename);
5127
+ }
5096
5128
  filename = fileEntry.filename;
5097
5129
  if (normalizeFilename) {
5098
5130
  const normalizedFilename = normalizeFilename(filename);
@@ -5134,11 +5166,12 @@
5134
5166
  const sticky = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_STICKY_MASK);
5135
5167
  const unixType = fileEntry.unixMode === UNDEFINED_VALUE ? unixExternalUpper : fileEntry.unixMode;
5136
5168
  const symlink = (unixType & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_SYMLINK;
5137
- const executable = !symlink && ((fileEntry.unixMode !== UNDEFINED_VALUE)
5138
- ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
5139
- : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
5140
5169
  const modeIsDir = fileEntry.unixMode !== UNDEFINED_VALUE && ((fileEntry.unixMode & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
5141
5170
  const upperIsDir = ((unixExternalUpper & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
5171
+ const directory = modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE);
5172
+ const executable = !symlink && !directory && ((fileEntry.unixMode !== UNDEFINED_VALUE)
5173
+ ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
5174
+ : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
5142
5175
  Object.assign(fileEntry, {
5143
5176
  setuid,
5144
5177
  setgid,
@@ -5146,7 +5179,7 @@
5146
5179
  symlink,
5147
5180
  unixExternalUpper,
5148
5181
  executable,
5149
- directory: modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE),
5182
+ directory,
5150
5183
  zipCrypto: fileEntry.encrypted && !fileEntry.extraFieldAES
5151
5184
  });
5152
5185
  const entry = new Entry(fileEntry);
@@ -5202,10 +5235,10 @@
5202
5235
  const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
5203
5236
  const splitZipSignatureLength = (checkAmbiguity || extractPrependedData) && filesLength &&
5204
5237
  startOffset == SPLIT_ZIP_FILE_SIGNATURE_LENGTH && await startsWithSplitZipMarker(reader) ? SPLIT_ZIP_FILE_SIGNATURE_LENGTH : 0;
5205
- if (checkAmbiguity && (prependedDataLength || (filesLength && startOffset > splitZipSignatureLength))) {
5238
+ if (checkAmbiguity && (prependedDataLength > 0 || (filesLength && startOffset > splitZipSignatureLength))) {
5206
5239
  throwAmbiguousArchive(WARNING_PREPENDED_DATA);
5207
5240
  }
5208
- if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5241
+ if (prependedDataLength > 0 || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5209
5242
  addWarning(warnings, WARNING_PREPENDED_DATA);
5210
5243
  }
5211
5244
  if (prependedCentralDirectory) {
@@ -5365,6 +5398,9 @@
5365
5398
 
5366
5399
  async getData(writer, fileEntry, readRanges, options = {}) {
5367
5400
  const zipEntry = this;
5401
+ if (zipEntry.zip64ExtraFieldMissing) {
5402
+ throw new Error(ERR_EXTRAFIELD_ZIP64_NOT_FOUND);
5403
+ }
5368
5404
  const config = getConfiguration();
5369
5405
  const {
5370
5406
  reader,
@@ -5602,6 +5638,30 @@
5602
5638
  return wrappedFilesLength % (MAX_16_BITS + 1) ? 0 : wrappedFilesLength;
5603
5639
  }
5604
5640
 
5641
+ function pointsAtDirectory(reader, offset) {
5642
+ return startsWithSignature(reader, offset, CENTRAL_FILE_HEADER_SIGNATURE);
5643
+ }
5644
+
5645
+ async function startsWithSignature(reader, offset, signature) {
5646
+ if (offset < 0 || offset + 4 > reader.size) {
5647
+ return false;
5648
+ }
5649
+ const signatureArray = await readUint8Array(reader, offset, 4);
5650
+ return getUint32$1(getDataView(signatureArray), 0) == signature;
5651
+ }
5652
+
5653
+ async function findDigitalSignatureRecordOffset(reader, endOffset) {
5654
+ const startOffset = Math.max(0, endOffset - (6 + MAX_16_BITS));
5655
+ const tailArray = await readUint8Array(reader, startOffset, endOffset - startOffset);
5656
+ const tailView = getDataView(tailArray);
5657
+ for (let indexByte = tailArray.length - 6; indexByte >= 0; indexByte--) {
5658
+ if (getUint32$1(tailView, indexByte) == DIGITAL_SIGNATURE_RECORD_SIGNATURE &&
5659
+ indexByte + 6 + getUint16$1(tailView, indexByte + 4) == tailArray.length) {
5660
+ return startOffset + indexByte;
5661
+ }
5662
+ }
5663
+ }
5664
+
5605
5665
  function readDigitalSignature(signatureRecordArray) {
5606
5666
  if (signatureRecordArray.length >= 6) {
5607
5667
  const signatureRecordView = getDataView(signatureRecordArray);
@@ -5733,6 +5793,11 @@
5733
5793
  readExtraFieldUnixDates(extraFieldUnixType1, directory);
5734
5794
  directory.extraFieldUnixType1 = extraFieldUnixType1;
5735
5795
  }
5796
+ const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5797
+ if (extraFieldExtendedTimestamp) {
5798
+ readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
5799
+ directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
5800
+ }
5736
5801
  const extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
5737
5802
  if (extraFieldNTFS) {
5738
5803
  readExtraFieldNTFS(extraFieldNTFS, directory);
@@ -5749,11 +5814,6 @@
5749
5814
  readExtraFieldUnix(extraFieldUnix, unixIdsRead ? {} : directory, false);
5750
5815
  directory.extraFieldUnix = extraFieldUnix;
5751
5816
  }
5752
- const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5753
- if (extraFieldExtendedTimestamp) {
5754
- readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
5755
- directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
5756
- }
5757
5817
  const extraFieldUSDZ = extraField.get(EXTRAFIELD_TYPE_USDZ);
5758
5818
  if (extraFieldUSDZ) {
5759
5819
  directory.extraFieldUSDZ = extraFieldUSDZ;
@@ -6392,11 +6452,13 @@
6392
6452
  WARNING_COMPRESSED_PATCHED_DATA: WARNING_COMPRESSED_PATCHED_DATA,
6393
6453
  WARNING_DUPLICATE_FILENAME: WARNING_DUPLICATE_FILENAME,
6394
6454
  WARNING_MALFORMED_EXTRA_FIELD: WARNING_MALFORMED_EXTRA_FIELD,
6455
+ WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET: WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET,
6395
6456
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG: WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG,
6396
6457
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6397
6458
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6398
6459
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME: WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME,
6399
6460
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6461
+ WARNING_MISSING_ZIP64_EXTRA_FIELD: WARNING_MISSING_ZIP64_EXTRA_FIELD,
6400
6462
  WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY: WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY,
6401
6463
  WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6402
6464
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
@@ -6529,13 +6591,14 @@
6529
6591
  return watchPromiseError(this, prependZipEntries(this, reader));
6530
6592
  }
6531
6593
 
6532
- appendZip(reader) {
6533
- return watchPromiseError(this, this.appendZipEntries(reader));
6594
+ appendZip(reader, options = {}) {
6595
+ return watchPromiseError(this, this.appendZipEntries(reader, options));
6534
6596
  }
6535
6597
 
6536
- async appendZipEntries(reader) {
6598
+ async appendZipEntries(reader, options = {}) {
6537
6599
  const zipWriter = this;
6538
6600
  const { pendingAddFileCalls, filenames, fileEntries } = zipWriter;
6601
+ const filter = checkFunctionOption(options.filter);
6539
6602
  while (pendingAddFileCalls.size) {
6540
6603
  await Promise.allSettled(Array.from(pendingAddFileCalls));
6541
6604
  }
@@ -6554,10 +6617,16 @@
6554
6617
  const { ZipReader } = await Promise.resolve().then(function () { return zipReader; });
6555
6618
  const zipReader$1 = new ZipReader(reader);
6556
6619
  const entries = await zipReader$1.getEntries();
6620
+ const keptEntries = [];
6621
+ for (const entry of entries) {
6622
+ if (!filter || await filter(entry)) {
6623
+ keptEntries.push(entry);
6624
+ }
6625
+ }
6557
6626
  await zipReader$1.close();
6558
6627
  await initStream(zipWriter.writer);
6559
6628
  const { directoryOffset } = zipReader$1;
6560
- entries.forEach(({ filename }) => {
6629
+ keptEntries.forEach(({ filename }) => {
6561
6630
  if (filenames.has(filename)) {
6562
6631
  throw new Error(ERR_DUPLICATED_NAME);
6563
6632
  }
@@ -6578,8 +6647,8 @@
6578
6647
  zipWriter.offset += SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
6579
6648
  }
6580
6649
  }
6581
- const entryPositions = await copyZipData(zipWriter, reader, entries, directoryOffset);
6582
- entries.forEach(entry => {
6650
+ const entryPositions = await copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, Boolean(filter));
6651
+ keptEntries.forEach(entry => {
6583
6652
  const {
6584
6653
  version,
6585
6654
  rawLastModDate,
@@ -8492,26 +8561,42 @@
8492
8561
  return rawExtraField;
8493
8562
  }
8494
8563
 
8495
- async function copyZipData(zipWriter, reader, entries, directoryOffset) {
8564
+ async function copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, compact) {
8496
8565
  const { writer } = zipWriter;
8497
8566
  const entryPositions = new Map();
8498
- if (writer.closeDisk) {
8567
+ if (writer.closeDisk || compact) {
8499
8568
  const sortedEntries = Array.from(entries).sort((firstEntry, secondEntry) =>
8500
8569
  getSourceOffset(reader, firstEntry) - getSourceOffset(reader, secondEntry));
8501
- let copiedLength = 0;
8502
- for (const entry of sortedEntries) {
8503
- const sourceOffset = getSourceOffset(reader, entry);
8504
- await copyData(zipWriter, reader, copiedLength, sourceOffset - copiedLength);
8505
- if (exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
8506
- await writer.closeDisk();
8507
- }
8508
- entryPositions.set(entry, {
8509
- offset: getSegmentOffset(zipWriter, writer),
8510
- diskNumberStart: getDiskNumber(writer)
8511
- });
8512
- copiedLength = sourceOffset;
8570
+ const regionEnds = getRegionEnds(reader, sortedEntries, directoryOffset);
8571
+ const keptEntrySet = new Set(keptEntries);
8572
+ let copiedOffset = 0;
8573
+ let lastPosition;
8574
+ for (let indexEntry = 0; indexEntry < sortedEntries.length; indexEntry++) {
8575
+ const entry = sortedEntries[indexEntry];
8576
+ if (keptEntrySet.has(entry)) {
8577
+ const sourceOffset = getSourceOffset(reader, entry);
8578
+ if (sourceOffset < copiedOffset) {
8579
+ entryPositions.set(entry, lastPosition);
8580
+ } else {
8581
+ if (!compact) {
8582
+ await copyData(zipWriter, reader, copiedOffset, sourceOffset - copiedOffset);
8583
+ }
8584
+ if (writer.closeDisk && exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
8585
+ await writer.closeDisk();
8586
+ }
8587
+ lastPosition = {
8588
+ offset: getSegmentOffset(zipWriter, writer),
8589
+ diskNumberStart: getDiskNumber(writer)
8590
+ };
8591
+ entryPositions.set(entry, lastPosition);
8592
+ await copyData(zipWriter, reader, sourceOffset, regionEnds[indexEntry] - sourceOffset);
8593
+ copiedOffset = regionEnds[indexEntry];
8594
+ }
8595
+ }
8596
+ }
8597
+ if (!compact) {
8598
+ await copyData(zipWriter, reader, copiedOffset, directoryOffset - copiedOffset);
8513
8599
  }
8514
- await copyData(zipWriter, reader, copiedLength, directoryOffset - copiedLength);
8515
8600
  } else {
8516
8601
  const baseOffset = zipWriter.offset;
8517
8602
  await copyData(zipWriter, reader, 0, directoryOffset);
@@ -8523,6 +8608,20 @@
8523
8608
  return entryPositions;
8524
8609
  }
8525
8610
 
8611
+ function getRegionEnds(reader, sortedEntries, directoryOffset) {
8612
+ const regionEnds = new Array(sortedEntries.length);
8613
+ let regionEnd = directoryOffset;
8614
+ for (let indexEntry = sortedEntries.length - 1; indexEntry >= 0; indexEntry--) {
8615
+ const sourceOffset = getSourceOffset(reader, sortedEntries[indexEntry]);
8616
+ const nextEntry = sortedEntries[indexEntry + 1];
8617
+ if (nextEntry && getSourceOffset(reader, nextEntry) > sourceOffset) {
8618
+ regionEnd = getSourceOffset(reader, nextEntry);
8619
+ }
8620
+ regionEnds[indexEntry] = regionEnd;
8621
+ }
8622
+ return regionEnds;
8623
+ }
8624
+
8526
8625
  async function copyData(zipWriter, reader, offset, size) {
8527
8626
  if (size > 0) {
8528
8627
  const { writer } = zipWriter;
@@ -8900,7 +8999,7 @@
8900
8999
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8901
9000
  */
8902
9001
 
8903
- const VERSION = "2.19.0";
9002
+ const VERSION = "2.20.0";
8904
9003
 
8905
9004
  /*
8906
9005
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -9449,11 +9548,13 @@
9449
9548
  exports.WARNING_COMPRESSION_UNAVAILABLE = WARNING_COMPRESSION_UNAVAILABLE;
9450
9549
  exports.WARNING_DUPLICATE_FILENAME = WARNING_DUPLICATE_FILENAME;
9451
9550
  exports.WARNING_MALFORMED_EXTRA_FIELD = WARNING_MALFORMED_EXTRA_FIELD;
9551
+ exports.WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET;
9452
9552
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG;
9453
9553
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
9454
9554
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
9455
9555
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME = WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME;
9456
9556
  exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
9557
+ exports.WARNING_MISSING_ZIP64_EXTRA_FIELD = WARNING_MISSING_ZIP64_EXTRA_FIELD;
9457
9558
  exports.WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY;
9458
9559
  exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
9459
9560
  exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;