@zip.js/zip.js 2.8.56 → 2.8.57

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.
@@ -4758,6 +4758,7 @@ const ERR_UNSAFE_FILENAME = "Unsafe filename";
4758
4758
  const ERR_INVALID_STRICTNESS = "Invalid strictness (must be 'strict', 'balanced' or 'tolerant')";
4759
4759
  const ERR_INVALID_FILENAME_VALIDATION = "Invalid filenameValidation (must be 'strict', 'balanced' or 'tolerant')";
4760
4760
  const ERR_INVALID_MAX_APPENDED_DATA_SIZE = "Invalid maxAppendedDataSize (must be a number greater than or equal to 0)";
4761
+ const ERR_UNSUPPORTED_UINT64 = "64-bit value exceeds Number.MAX_SAFE_INTEGER";
4761
4762
  const DRIVE_LETTER_REGEXP = /^[a-zA-Z]:/;
4762
4763
  const CHARSET_UTF8 = "utf-8";
4763
4764
  const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
@@ -4780,6 +4781,7 @@ const ZIP64_EXTRACTION = {
4780
4781
  bytes: 8
4781
4782
  }
4782
4783
  };
4784
+ const MAX_SAFE_UINT64 = BigInt(Number.MAX_SAFE_INTEGER);
4783
4785
  const MAX_END_OF_CENTRAL_DIR_PROBES = 64;
4784
4786
  const MAX_DEFLATE_EXPANSION_RATIO = 1032;
4785
4787
  const CENTRAL_DIRECTORY_UNREACHABLE = 0;
@@ -4875,7 +4877,7 @@ class ZipReader {
4875
4877
  zip64EndOfDirectoryVersion2 = getBigUint64(endOfDirectoryView, 4) > ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12;
4876
4878
  if (zip64EndOfDirectoryVersion2) {
4877
4879
  const extensibleDataLength = Math.min(
4878
- Number(getBigUint64(endOfDirectoryView, 4)) - (ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12),
4880
+ getBigUint64(endOfDirectoryView, 4) - (ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12),
4879
4881
  reader.size - directoryDataOffset - ZIP64_END_OF_CENTRAL_DIR_LENGTH);
4880
4882
  if (extensibleDataLength > 0) {
4881
4883
  zip64EndOfDirectoryLength += extensibleDataLength;
@@ -5456,8 +5458,8 @@ function getDirectoryEncryptionInfo(rawExtensibleData) {
5456
5458
  const hashDataLength = getUint16$1(extensibleDataView, 26);
5457
5459
  Object.assign(directoryEncryptionInfo, {
5458
5460
  compressionMethod: getUint16$1(extensibleDataView, 0),
5459
- compressedSize: Number(getBigUint64(extensibleDataView, 2)),
5460
- uncompressedSize: Number(getBigUint64(extensibleDataView, 10)),
5461
+ compressedSize: getBigUint64(extensibleDataView, 2),
5462
+ uncompressedSize: getBigUint64(extensibleDataView, 10),
5461
5463
  encryptionAlgorithm: getUint16$1(extensibleDataView, 18),
5462
5464
  bitLength: getUint16$1(extensibleDataView, 20),
5463
5465
  flags: getUint16$1(extensibleDataView, 22),
@@ -6092,7 +6094,11 @@ function getUint32$1(view, offset) {
6092
6094
  }
6093
6095
 
6094
6096
  function getBigUint64(view, offset) {
6095
- return Number(view.getBigUint64(offset, true));
6097
+ const value = view.getBigUint64(offset, true);
6098
+ if (value > MAX_SAFE_UINT64) {
6099
+ throw new Error(ERR_UNSUPPORTED_UINT64);
6100
+ }
6101
+ return Number(value);
6096
6102
  }
6097
6103
 
6098
6104
  var zipReader = /*#__PURE__*/Object.freeze({
@@ -6121,6 +6127,7 @@ var zipReader = /*#__PURE__*/Object.freeze({
6121
6127
  ERR_UNSAFE_FILENAME: ERR_UNSAFE_FILENAME,
6122
6128
  ERR_UNSUPPORTED_COMPRESSION: ERR_UNSUPPORTED_COMPRESSION$1,
6123
6129
  ERR_UNSUPPORTED_ENCRYPTION: ERR_UNSUPPORTED_ENCRYPTION,
6130
+ ERR_UNSUPPORTED_UINT64: ERR_UNSUPPORTED_UINT64,
6124
6131
  ERR_WORKER_STARTUP_TIMEOUT: ERR_WORKER_STARTUP_TIMEOUT,
6125
6132
  ZipReader: ZipReader,
6126
6133
  ZipReaderStream: ZipReaderStream
@@ -6261,7 +6268,7 @@ class ZipWriter {
6261
6268
  encrypted,
6262
6269
  uncompressedSize,
6263
6270
  compressedSize,
6264
- zip64
6271
+ extraFieldZip64
6265
6272
  } = entry;
6266
6273
  let {
6267
6274
  compressionMethod,
@@ -6278,13 +6285,13 @@ class ZipWriter {
6278
6285
  rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || EMPTY_UINT8_ARRAY;
6279
6286
  rawExtraFieldNTFS = rawExtraFieldNTFS || EMPTY_UINT8_ARRAY;
6280
6287
  rawExtraFieldUnix = rawExtraFieldUnix || EMPTY_UINT8_ARRAY;
6281
- rawExtraField = rawExtraField || EMPTY_UINT8_ARRAY;
6288
+ rawExtraField = removeExtraFieldZip64(rawExtraField || EMPTY_UINT8_ARRAY);
6282
6289
  if (entry.extraFieldAES) {
6283
6290
  compressionMethod = COMPRESSION_METHOD_AES;
6284
6291
  }
6285
6292
  const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
6286
- const zip64UncompressedSize = zip64 && uncompressedSize >= MAX_32_BITS;
6287
- const zip64CompressedSize = zip64 && compressedSize >= MAX_32_BITS;
6293
+ const zip64UncompressedSize = Boolean(extraFieldZip64) && extraFieldZip64.uncompressedSize !== UNDEFINED_VALUE;
6294
+ const zip64CompressedSize = Boolean(extraFieldZip64) && extraFieldZip64.compressedSize !== UNDEFINED_VALUE;
6288
6295
  const bitFlagValue = (getBitFlag(level, languageEncodingFlag, dataDescriptor, encrypted, compressionMethod) & ~BITFLAG_LEVEL) | (level << 1);
6289
6296
  const {
6290
6297
  headerArray,
@@ -6840,6 +6847,10 @@ function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options
6840
6847
  maximumCompressedSize = contentSize === UNDEFINED_VALUE ? getMaximumCompressedSize(uncompressedSize) + encryptionOverhead : contentSize;
6841
6848
  }
6842
6849
  }
6850
+ const emptyEntry = !encryptedEntry && (!hasContent || (contentSize === 0 && !passThrough)) && !isCompressed(compressionMethod, level);
6851
+ if (emptyEntry && !zipCrypto && getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR) === UNDEFINED_VALUE) {
6852
+ dataDescriptor = false;
6853
+ }
6843
6854
  const zip64UncompressedSize = zip64Enabled || uncompressedSize >= MAX_32_BITS;
6844
6855
  const zip64CompressedSize = zip64Enabled || maximumCompressedSize >= MAX_32_BITS;
6845
6856
  if (zip64UncompressedSize || zip64CompressedSize) {
@@ -6854,6 +6865,7 @@ function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options
6854
6865
  maximumCompressedSize,
6855
6866
  resolvedOptions: {
6856
6867
  dataDescriptor,
6868
+ emptyEntry,
6857
6869
  zip64,
6858
6870
  zip64UncompressedSize,
6859
6871
  zip64CompressedSize,
@@ -6952,6 +6964,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
6952
6964
  const {
6953
6965
  keepOrder,
6954
6966
  dataDescriptor,
6967
+ emptyEntry,
6955
6968
  signal
6956
6969
  } = options;
6957
6970
  const {
@@ -6976,7 +6989,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
6976
6989
  lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
6977
6990
  requestLockCurrentFileEntry();
6978
6991
  }
6979
- if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || !dataDescriptor) {
6992
+ if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
6980
6993
  bufferedWrite = true;
6981
6994
  zipWriter.bufferedWrites++;
6982
6995
  if (options.createTempStream) {
@@ -7398,8 +7411,8 @@ function getHeaderInfo(options) {
7398
7411
  try {
7399
7412
  const { uid, gid, unixExtraFieldType } = options;
7400
7413
  if (unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE$1 && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
7401
- const uidBytes = packUnixId(uid);
7402
- const gidBytes = packUnixId(gid);
7414
+ const uidBytes = packUnixId(uid === UNDEFINED_VALUE ? 0 : uid);
7415
+ const gidBytes = packUnixId(gid === UNDEFINED_VALUE ? 0 : gid);
7403
7416
  const payloadLength = 3 + uidBytes.length + gidBytes.length;
7404
7417
  const extraFieldUnix = createRecordWriter(4 + payloadLength);
7405
7418
  extraFieldUnix.writeUint16(EXTRAFIELD_TYPE_INFOZIP);
@@ -7530,18 +7543,14 @@ function appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {
7530
7543
  }
7531
7544
 
7532
7545
  function packUnixId(id) {
7533
- if (id === UNDEFINED_VALUE) {
7534
- return EMPTY_UINT8_ARRAY;
7535
- } else {
7536
- const dataArray = new Uint8Array(4);
7537
- const dataView = getDataView(dataArray);
7538
- dataView.setUint32(0, id, true);
7539
- let length = 4;
7540
- while (length > 1 && dataArray[length - 1] === 0) {
7541
- length--;
7542
- }
7543
- return dataArray.subarray(0, length);
7546
+ const dataArray = new Uint8Array(4);
7547
+ const dataView = getDataView(dataArray);
7548
+ dataView.setUint32(0, id, true);
7549
+ let length = 4;
7550
+ while (length > 1 && dataArray[length - 1] === 0) {
7551
+ length--;
7544
7552
  }
7553
+ return dataArray.subarray(0, length);
7545
7554
  }
7546
7555
 
7547
7556
  function normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes) {
@@ -7960,6 +7969,21 @@ async function startsWithSplitZipSignature(reader) {
7960
7969
  return getUint32(getDataView(signatureArray), 0) == SPLIT_ZIP_FILE_SIGNATURE;
7961
7970
  }
7962
7971
 
7972
+ function removeExtraFieldZip64(rawExtraField) {
7973
+ const rawExtraFieldView = getDataView(rawExtraField);
7974
+ let offsetExtraField = 0;
7975
+ while (offsetExtraField + 4 <= getLength(rawExtraField)) {
7976
+ const size = 4 + getUint16(rawExtraFieldView, offsetExtraField + 2);
7977
+ if (getUint16(rawExtraFieldView, offsetExtraField) == EXTRAFIELD_TYPE_ZIP64) {
7978
+ return removeExtraFieldZip64(concat(
7979
+ rawExtraField.subarray(0, offsetExtraField),
7980
+ rawExtraField.subarray(Math.min(offsetExtraField + size, getLength(rawExtraField)))));
7981
+ }
7982
+ offsetExtraField += size;
7983
+ }
7984
+ return rawExtraField;
7985
+ }
7986
+
7963
7987
  async function copyZipData(zipWriter, reader, entries, directoryOffset) {
7964
7988
  const { writer } = zipWriter;
7965
7989
  const entryPositions = new Map();
@@ -9864,7 +9888,7 @@ function keepsContentType(writer, data) {
9864
9888
  } else if (writer.constructor == BlobWriter) {
9865
9889
  return data.type == contentType;
9866
9890
  } else if (writer.constructor == Data64URIWriter) {
9867
- return data.startsWith(writer.data);
9891
+ return data.startsWith("data:" + (contentType || "") + ";base64,");
9868
9892
  } else {
9869
9893
  return true;
9870
9894
  }
@@ -10432,4 +10456,4 @@ function decodeMimeTypes(data) {
10432
10456
  return mimeTypes;
10433
10457
  }
10434
10458
 
10435
- export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_ABORTED, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_DUPLICATED_NAME, ERR_ENCRYPTED, ERR_ENCRYPTED_CENTRAL_DIRECTORY, ERR_ENTRY_DATA_OUT_OF_BOUNDS, ERR_ENTRY_EXISTS, ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND, ERR_EOCDR_NOT_FOUND, ERR_EXTRAFIELD_ZIP64_NOT_FOUND, ERR_HTTP_RANGE, ERR_HTTP_RESOURCE_CHANGED, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_CODEC_DEFINITION, ERR_INVALID_CODEC_MODULE, ERR_INVALID_COMMENT, ERR_INVALID_COMMENT_TYPE, ERR_INVALID_COMPRESSED_DATA, ERR_INVALID_CRC32, ERR_INVALID_DATE, ERR_INVALID_ENCRYPTION_STRENGTH, ERR_INVALID_ENTRY_COMMENT, ERR_INVALID_ENTRY_COMMENT_TYPE, ERR_INVALID_ENTRY_NAME, ERR_INVALID_EXTRAFIELD, ERR_INVALID_EXTRAFIELD_DATA, ERR_INVALID_EXTRAFIELD_DATA_TYPE, ERR_INVALID_EXTRAFIELD_TYPE, ERR_INVALID_FILENAME_VALIDATION, ERR_INVALID_FUNCTION_OPTION, ERR_INVALID_GID, ERR_INVALID_LEVEL, ERR_INVALID_MAX_APPENDED_DATA_SIZE, ERR_INVALID_MAX_WORKERS, ERR_INVALID_MSDOS_ATTRIBUTES, ERR_INVALID_MSDOS_DATA, ERR_INVALID_PASSWORD, ERR_INVALID_PASSWORD_TYPE, ERR_INVALID_PASS_THROUGH, ERR_INVALID_READER_OPTIONS, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE, ERR_INVALID_SIGNATURE_DATA, ERR_INVALID_STRICTNESS, ERR_INVALID_UID, ERR_INVALID_UNCOMPRESSED_SIZE, ERR_INVALID_UNIX_EXTRA_FIELD_TYPE, ERR_INVALID_UNIX_ID_SIZE, ERR_INVALID_UNIX_MODE, ERR_INVALID_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_READABLE_CONSUMED, ERR_RESERVED_COMPRESSION_METHOD, ERR_SPLIT_ZIP_FILE, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION$1 as ERR_UNSUPPORTED_COMPRESSION, ERR_UNSUPPORTED_CONTEXT, ERR_UNSUPPORTED_CRYPTO_API, ERR_UNSUPPORTED_ENCRYPTION, ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH, ERR_UNSUPPORTED_ENCRYPTION_USDZ, ERR_UNSUPPORTED_FORMAT, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, Writer, ZipDirectoryEntry, ZipEntry, ZipFS, ZipFileEntry, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, fs, getMimeType, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
10459
+ export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_ABORTED, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_DUPLICATED_NAME, ERR_ENCRYPTED, ERR_ENCRYPTED_CENTRAL_DIRECTORY, ERR_ENTRY_DATA_OUT_OF_BOUNDS, ERR_ENTRY_EXISTS, ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND, ERR_EOCDR_NOT_FOUND, ERR_EXTRAFIELD_ZIP64_NOT_FOUND, ERR_HTTP_RANGE, ERR_HTTP_RESOURCE_CHANGED, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_CODEC_DEFINITION, ERR_INVALID_CODEC_MODULE, ERR_INVALID_COMMENT, ERR_INVALID_COMMENT_TYPE, ERR_INVALID_COMPRESSED_DATA, ERR_INVALID_CRC32, ERR_INVALID_DATE, ERR_INVALID_ENCRYPTION_STRENGTH, ERR_INVALID_ENTRY_COMMENT, ERR_INVALID_ENTRY_COMMENT_TYPE, ERR_INVALID_ENTRY_NAME, ERR_INVALID_EXTRAFIELD, ERR_INVALID_EXTRAFIELD_DATA, ERR_INVALID_EXTRAFIELD_DATA_TYPE, ERR_INVALID_EXTRAFIELD_TYPE, ERR_INVALID_FILENAME_VALIDATION, ERR_INVALID_FUNCTION_OPTION, ERR_INVALID_GID, ERR_INVALID_LEVEL, ERR_INVALID_MAX_APPENDED_DATA_SIZE, ERR_INVALID_MAX_WORKERS, ERR_INVALID_MSDOS_ATTRIBUTES, ERR_INVALID_MSDOS_DATA, ERR_INVALID_PASSWORD, ERR_INVALID_PASSWORD_TYPE, ERR_INVALID_PASS_THROUGH, ERR_INVALID_READER_OPTIONS, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE, ERR_INVALID_SIGNATURE_DATA, ERR_INVALID_STRICTNESS, ERR_INVALID_UID, ERR_INVALID_UNCOMPRESSED_SIZE, ERR_INVALID_UNIX_EXTRA_FIELD_TYPE, ERR_INVALID_UNIX_ID_SIZE, ERR_INVALID_UNIX_MODE, ERR_INVALID_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_READABLE_CONSUMED, ERR_RESERVED_COMPRESSION_METHOD, ERR_SPLIT_ZIP_FILE, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION$1 as ERR_UNSUPPORTED_COMPRESSION, ERR_UNSUPPORTED_CONTEXT, ERR_UNSUPPORTED_CRYPTO_API, ERR_UNSUPPORTED_ENCRYPTION, ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH, ERR_UNSUPPORTED_ENCRYPTION_USDZ, ERR_UNSUPPORTED_FORMAT, ERR_UNSUPPORTED_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, Writer, ZipDirectoryEntry, ZipEntry, ZipFS, ZipFileEntry, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, fs, getMimeType, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };