@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.
@@ -4781,6 +4781,8 @@
4781
4781
  const WARNING_PREPENDED_DATA = "prepended data";
4782
4782
  const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
4783
4783
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4784
+ const WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = "mismatched central directory offset";
4785
+ const WARNING_MISSING_ZIP64_EXTRA_FIELD = "missing zip64 extra field";
4784
4786
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4785
4787
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
4786
4788
  const WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = "multiple end of central directory records";
@@ -4943,6 +4945,8 @@
4943
4945
  reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY);
4944
4946
  }
4945
4947
  directoryDataOffset = getDiskOffset$1(reader, diskNumber) + getBigUint64(endOfDirectoryView, 48) + prependedDataLength;
4948
+ } else if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || diskNumber == MAX_16_BITS) {
4949
+ throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
4946
4950
  }
4947
4951
  }
4948
4952
  let declaredDirectoryDataLength = directoryDataLength;
@@ -4965,25 +4969,44 @@
4965
4969
  if (directoryArray.length < 4) {
4966
4970
  throw new Error(ERR_BAD_FORMAT);
4967
4971
  }
4968
- const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
4972
+ let expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
4969
4973
  if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
4970
4974
  const storedPointsAtDirectory = getUint32$1(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE ||
4971
4975
  Boolean(directoryEncryptionInfo && directoryEncryptionInfo.compressedSize) ||
4972
4976
  detectEncryptedCentralDirectory(directoryView);
4973
4977
  let reconcile = !storedPointsAtDirectory;
4974
- if (!reconcile && expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
4975
- const expectedSignatureArray = await readUint8Array(reader, expectedDirectoryDataOffset, 4);
4976
- reconcile = getUint32$1(getDataView(expectedSignatureArray), 0) == CENTRAL_FILE_HEADER_SIGNATURE;
4978
+ if (expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
4979
+ const expectedPointsAtDirectory = await pointsAtDirectory(reader, expectedDirectoryDataOffset);
4980
+ if (storedPointsAtDirectory) {
4981
+ reconcile = expectedPointsAtDirectory;
4982
+ } else if (!expectedPointsAtDirectory) {
4983
+ const signatureRecordOffset = await findDigitalSignatureRecordOffset(reader, centralDirectoryEndOffset);
4984
+ const signedDirectoryDataOffset = signatureRecordOffset - directoryDataLength;
4985
+ if (signatureRecordOffset !== UNDEFINED_VALUE && signedDirectoryDataOffset >= 0 &&
4986
+ await pointsAtDirectory(reader, signedDirectoryDataOffset)) {
4987
+ expectedDirectoryDataOffset = signedDirectoryDataOffset;
4988
+ }
4989
+ }
4977
4990
  }
4978
4991
  if (reconcile) {
4979
4992
  const originalDirectoryDataOffset = directoryDataOffset;
4980
4993
  directoryDataOffset = expectedDirectoryDataOffset;
4994
+ directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4995
+ directoryView = getDataView(directoryArray);
4981
4996
  if (directoryDataOffset > originalDirectoryDataOffset) {
4982
4997
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
4983
4998
  prependedCentralDirectory = storedPointsAtDirectory;
4999
+ } else {
5000
+ reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET);
5001
+ const offsetDelta = directoryDataOffset - originalDirectoryDataOffset;
5002
+ if (directoryArray.length >= CENTRAL_FILE_HEADER_LENGTH) {
5003
+ const localHeaderOffset = getUint32$1(directoryView, 42);
5004
+ if (!await startsWithSignature(reader, localHeaderOffset, LOCAL_FILE_HEADER_SIGNATURE) &&
5005
+ await startsWithSignature(reader, localHeaderOffset + offsetDelta, LOCAL_FILE_HEADER_SIGNATURE)) {
5006
+ prependedDataLength += offsetDelta;
5007
+ }
5008
+ }
4984
5009
  }
4985
- directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4986
- directoryView = getDataView(directoryArray);
4987
5010
  }
4988
5011
  }
4989
5012
  }
@@ -5094,7 +5117,16 @@
5094
5117
  filename,
5095
5118
  comment
5096
5119
  });
5097
- const malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5120
+ let malformedExtraField;
5121
+ try {
5122
+ malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5123
+ } catch (error) {
5124
+ if (checkAmbiguity || error.message != ERR_EXTRAFIELD_ZIP64_NOT_FOUND) {
5125
+ throw error;
5126
+ }
5127
+ fileEntry.zip64ExtraFieldMissing = true;
5128
+ addWarning(warnings, WARNING_MISSING_ZIP64_EXTRA_FIELD, fileEntry.filename);
5129
+ }
5098
5130
  filename = fileEntry.filename;
5099
5131
  if (normalizeFilename) {
5100
5132
  const normalizedFilename = normalizeFilename(filename);
@@ -5136,11 +5168,12 @@
5136
5168
  const sticky = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_STICKY_MASK);
5137
5169
  const unixType = fileEntry.unixMode === UNDEFINED_VALUE ? unixExternalUpper : fileEntry.unixMode;
5138
5170
  const symlink = (unixType & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_SYMLINK;
5139
- const executable = !symlink && ((fileEntry.unixMode !== UNDEFINED_VALUE)
5140
- ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
5141
- : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
5142
5171
  const modeIsDir = fileEntry.unixMode !== UNDEFINED_VALUE && ((fileEntry.unixMode & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
5143
5172
  const upperIsDir = ((unixExternalUpper & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
5173
+ const directory = modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE);
5174
+ const executable = !symlink && !directory && ((fileEntry.unixMode !== UNDEFINED_VALUE)
5175
+ ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
5176
+ : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
5144
5177
  Object.assign(fileEntry, {
5145
5178
  setuid,
5146
5179
  setgid,
@@ -5148,7 +5181,7 @@
5148
5181
  symlink,
5149
5182
  unixExternalUpper,
5150
5183
  executable,
5151
- directory: modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE),
5184
+ directory,
5152
5185
  zipCrypto: fileEntry.encrypted && !fileEntry.extraFieldAES
5153
5186
  });
5154
5187
  const entry = new Entry(fileEntry);
@@ -5204,10 +5237,10 @@
5204
5237
  const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
5205
5238
  const splitZipSignatureLength = (checkAmbiguity || extractPrependedData) && filesLength &&
5206
5239
  startOffset == SPLIT_ZIP_FILE_SIGNATURE_LENGTH && await startsWithSplitZipMarker(reader) ? SPLIT_ZIP_FILE_SIGNATURE_LENGTH : 0;
5207
- if (checkAmbiguity && (prependedDataLength || (filesLength && startOffset > splitZipSignatureLength))) {
5240
+ if (checkAmbiguity && (prependedDataLength > 0 || (filesLength && startOffset > splitZipSignatureLength))) {
5208
5241
  throwAmbiguousArchive(WARNING_PREPENDED_DATA);
5209
5242
  }
5210
- if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5243
+ if (prependedDataLength > 0 || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5211
5244
  addWarning(warnings, WARNING_PREPENDED_DATA);
5212
5245
  }
5213
5246
  if (prependedCentralDirectory) {
@@ -5367,6 +5400,9 @@
5367
5400
 
5368
5401
  async getData(writer, fileEntry, readRanges, options = {}) {
5369
5402
  const zipEntry = this;
5403
+ if (zipEntry.zip64ExtraFieldMissing) {
5404
+ throw new Error(ERR_EXTRAFIELD_ZIP64_NOT_FOUND);
5405
+ }
5370
5406
  const config = getConfiguration();
5371
5407
  const {
5372
5408
  reader,
@@ -5604,6 +5640,30 @@
5604
5640
  return wrappedFilesLength % (MAX_16_BITS + 1) ? 0 : wrappedFilesLength;
5605
5641
  }
5606
5642
 
5643
+ function pointsAtDirectory(reader, offset) {
5644
+ return startsWithSignature(reader, offset, CENTRAL_FILE_HEADER_SIGNATURE);
5645
+ }
5646
+
5647
+ async function startsWithSignature(reader, offset, signature) {
5648
+ if (offset < 0 || offset + 4 > reader.size) {
5649
+ return false;
5650
+ }
5651
+ const signatureArray = await readUint8Array(reader, offset, 4);
5652
+ return getUint32$1(getDataView(signatureArray), 0) == signature;
5653
+ }
5654
+
5655
+ async function findDigitalSignatureRecordOffset(reader, endOffset) {
5656
+ const startOffset = Math.max(0, endOffset - (6 + MAX_16_BITS));
5657
+ const tailArray = await readUint8Array(reader, startOffset, endOffset - startOffset);
5658
+ const tailView = getDataView(tailArray);
5659
+ for (let indexByte = tailArray.length - 6; indexByte >= 0; indexByte--) {
5660
+ if (getUint32$1(tailView, indexByte) == DIGITAL_SIGNATURE_RECORD_SIGNATURE &&
5661
+ indexByte + 6 + getUint16$1(tailView, indexByte + 4) == tailArray.length) {
5662
+ return startOffset + indexByte;
5663
+ }
5664
+ }
5665
+ }
5666
+
5607
5667
  function readDigitalSignature(signatureRecordArray) {
5608
5668
  if (signatureRecordArray.length >= 6) {
5609
5669
  const signatureRecordView = getDataView(signatureRecordArray);
@@ -5735,6 +5795,11 @@
5735
5795
  readExtraFieldUnixDates(extraFieldUnixType1, directory);
5736
5796
  directory.extraFieldUnixType1 = extraFieldUnixType1;
5737
5797
  }
5798
+ const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5799
+ if (extraFieldExtendedTimestamp) {
5800
+ readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
5801
+ directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
5802
+ }
5738
5803
  const extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
5739
5804
  if (extraFieldNTFS) {
5740
5805
  readExtraFieldNTFS(extraFieldNTFS, directory);
@@ -5751,11 +5816,6 @@
5751
5816
  readExtraFieldUnix(extraFieldUnix, unixIdsRead ? {} : directory, false);
5752
5817
  directory.extraFieldUnix = extraFieldUnix;
5753
5818
  }
5754
- const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5755
- if (extraFieldExtendedTimestamp) {
5756
- readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
5757
- directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
5758
- }
5759
5819
  const extraFieldUSDZ = extraField.get(EXTRAFIELD_TYPE_USDZ);
5760
5820
  if (extraFieldUSDZ) {
5761
5821
  directory.extraFieldUSDZ = extraFieldUSDZ;
@@ -6394,11 +6454,13 @@
6394
6454
  WARNING_COMPRESSED_PATCHED_DATA: WARNING_COMPRESSED_PATCHED_DATA,
6395
6455
  WARNING_DUPLICATE_FILENAME: WARNING_DUPLICATE_FILENAME,
6396
6456
  WARNING_MALFORMED_EXTRA_FIELD: WARNING_MALFORMED_EXTRA_FIELD,
6457
+ WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET: WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET,
6397
6458
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG: WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG,
6398
6459
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6399
6460
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6400
6461
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME: WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME,
6401
6462
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6463
+ WARNING_MISSING_ZIP64_EXTRA_FIELD: WARNING_MISSING_ZIP64_EXTRA_FIELD,
6402
6464
  WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY: WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY,
6403
6465
  WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6404
6466
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
@@ -6531,13 +6593,14 @@
6531
6593
  return watchPromiseError(this, prependZipEntries(this, reader));
6532
6594
  }
6533
6595
 
6534
- appendZip(reader) {
6535
- return watchPromiseError(this, this.appendZipEntries(reader));
6596
+ appendZip(reader, options = {}) {
6597
+ return watchPromiseError(this, this.appendZipEntries(reader, options));
6536
6598
  }
6537
6599
 
6538
- async appendZipEntries(reader) {
6600
+ async appendZipEntries(reader, options = {}) {
6539
6601
  const zipWriter = this;
6540
6602
  const { pendingAddFileCalls, filenames, fileEntries } = zipWriter;
6603
+ const filter = checkFunctionOption(options.filter);
6541
6604
  while (pendingAddFileCalls.size) {
6542
6605
  await Promise.allSettled(Array.from(pendingAddFileCalls));
6543
6606
  }
@@ -6556,10 +6619,16 @@
6556
6619
  const { ZipReader } = await Promise.resolve().then(function () { return zipReader; });
6557
6620
  const zipReader$1 = new ZipReader(reader);
6558
6621
  const entries = await zipReader$1.getEntries();
6622
+ const keptEntries = [];
6623
+ for (const entry of entries) {
6624
+ if (!filter || await filter(entry)) {
6625
+ keptEntries.push(entry);
6626
+ }
6627
+ }
6559
6628
  await zipReader$1.close();
6560
6629
  await initStream(zipWriter.writer);
6561
6630
  const { directoryOffset } = zipReader$1;
6562
- entries.forEach(({ filename }) => {
6631
+ keptEntries.forEach(({ filename }) => {
6563
6632
  if (filenames.has(filename)) {
6564
6633
  throw new Error(ERR_DUPLICATED_NAME);
6565
6634
  }
@@ -6580,8 +6649,8 @@
6580
6649
  zipWriter.offset += SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
6581
6650
  }
6582
6651
  }
6583
- const entryPositions = await copyZipData(zipWriter, reader, entries, directoryOffset);
6584
- entries.forEach(entry => {
6652
+ const entryPositions = await copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, Boolean(filter));
6653
+ keptEntries.forEach(entry => {
6585
6654
  const {
6586
6655
  version,
6587
6656
  rawLastModDate,
@@ -8494,26 +8563,42 @@
8494
8563
  return rawExtraField;
8495
8564
  }
8496
8565
 
8497
- async function copyZipData(zipWriter, reader, entries, directoryOffset) {
8566
+ async function copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, compact) {
8498
8567
  const { writer } = zipWriter;
8499
8568
  const entryPositions = new Map();
8500
- if (writer.closeDisk) {
8569
+ if (writer.closeDisk || compact) {
8501
8570
  const sortedEntries = Array.from(entries).sort((firstEntry, secondEntry) =>
8502
8571
  getSourceOffset(reader, firstEntry) - getSourceOffset(reader, secondEntry));
8503
- let copiedLength = 0;
8504
- for (const entry of sortedEntries) {
8505
- const sourceOffset = getSourceOffset(reader, entry);
8506
- await copyData(zipWriter, reader, copiedLength, sourceOffset - copiedLength);
8507
- if (exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
8508
- await writer.closeDisk();
8509
- }
8510
- entryPositions.set(entry, {
8511
- offset: getSegmentOffset(zipWriter, writer),
8512
- diskNumberStart: getDiskNumber(writer)
8513
- });
8514
- copiedLength = sourceOffset;
8572
+ const regionEnds = getRegionEnds(reader, sortedEntries, directoryOffset);
8573
+ const keptEntrySet = new Set(keptEntries);
8574
+ let copiedOffset = 0;
8575
+ let lastPosition;
8576
+ for (let indexEntry = 0; indexEntry < sortedEntries.length; indexEntry++) {
8577
+ const entry = sortedEntries[indexEntry];
8578
+ if (keptEntrySet.has(entry)) {
8579
+ const sourceOffset = getSourceOffset(reader, entry);
8580
+ if (sourceOffset < copiedOffset) {
8581
+ entryPositions.set(entry, lastPosition);
8582
+ } else {
8583
+ if (!compact) {
8584
+ await copyData(zipWriter, reader, copiedOffset, sourceOffset - copiedOffset);
8585
+ }
8586
+ if (writer.closeDisk && exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
8587
+ await writer.closeDisk();
8588
+ }
8589
+ lastPosition = {
8590
+ offset: getSegmentOffset(zipWriter, writer),
8591
+ diskNumberStart: getDiskNumber(writer)
8592
+ };
8593
+ entryPositions.set(entry, lastPosition);
8594
+ await copyData(zipWriter, reader, sourceOffset, regionEnds[indexEntry] - sourceOffset);
8595
+ copiedOffset = regionEnds[indexEntry];
8596
+ }
8597
+ }
8598
+ }
8599
+ if (!compact) {
8600
+ await copyData(zipWriter, reader, copiedOffset, directoryOffset - copiedOffset);
8515
8601
  }
8516
- await copyData(zipWriter, reader, copiedLength, directoryOffset - copiedLength);
8517
8602
  } else {
8518
8603
  const baseOffset = zipWriter.offset;
8519
8604
  await copyData(zipWriter, reader, 0, directoryOffset);
@@ -8525,6 +8610,20 @@
8525
8610
  return entryPositions;
8526
8611
  }
8527
8612
 
8613
+ function getRegionEnds(reader, sortedEntries, directoryOffset) {
8614
+ const regionEnds = new Array(sortedEntries.length);
8615
+ let regionEnd = directoryOffset;
8616
+ for (let indexEntry = sortedEntries.length - 1; indexEntry >= 0; indexEntry--) {
8617
+ const sourceOffset = getSourceOffset(reader, sortedEntries[indexEntry]);
8618
+ const nextEntry = sortedEntries[indexEntry + 1];
8619
+ if (nextEntry && getSourceOffset(reader, nextEntry) > sourceOffset) {
8620
+ regionEnd = getSourceOffset(reader, nextEntry);
8621
+ }
8622
+ regionEnds[indexEntry] = regionEnd;
8623
+ }
8624
+ return regionEnds;
8625
+ }
8626
+
8528
8627
  async function copyData(zipWriter, reader, offset, size) {
8529
8628
  if (size > 0) {
8530
8629
  const { writer } = zipWriter;
@@ -8902,7 +9001,7 @@
8902
9001
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8903
9002
  */
8904
9003
 
8905
- const VERSION = "2.19.0";
9004
+ const VERSION = "2.20.0";
8906
9005
 
8907
9006
  /*
8908
9007
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -9520,11 +9619,13 @@
9520
9619
  exports.WARNING_COMPRESSION_UNAVAILABLE = WARNING_COMPRESSION_UNAVAILABLE;
9521
9620
  exports.WARNING_DUPLICATE_FILENAME = WARNING_DUPLICATE_FILENAME;
9522
9621
  exports.WARNING_MALFORMED_EXTRA_FIELD = WARNING_MALFORMED_EXTRA_FIELD;
9622
+ exports.WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET;
9523
9623
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG;
9524
9624
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
9525
9625
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
9526
9626
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME = WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME;
9527
9627
  exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
9628
+ exports.WARNING_MISSING_ZIP64_EXTRA_FIELD = WARNING_MISSING_ZIP64_EXTRA_FIELD;
9528
9629
  exports.WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY;
9529
9630
  exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
9530
9631
  exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;