@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.
package/deno.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zip-js/zip-js",
3
- "version": "2.8.56",
3
+ "version": "2.8.57",
4
4
  "exports": {
5
5
  ".": "./index.js",
6
6
  "./external": "./lib/zip-fs-external.js",
@@ -4738,6 +4738,7 @@ const ERR_UNSAFE_FILENAME = "Unsafe filename";
4738
4738
  const ERR_INVALID_STRICTNESS = "Invalid strictness (must be 'strict', 'balanced' or 'tolerant')";
4739
4739
  const ERR_INVALID_FILENAME_VALIDATION = "Invalid filenameValidation (must be 'strict', 'balanced' or 'tolerant')";
4740
4740
  const ERR_INVALID_MAX_APPENDED_DATA_SIZE = "Invalid maxAppendedDataSize (must be a number greater than or equal to 0)";
4741
+ const ERR_UNSUPPORTED_UINT64 = "64-bit value exceeds Number.MAX_SAFE_INTEGER";
4741
4742
  const DRIVE_LETTER_REGEXP = /^[a-zA-Z]:/;
4742
4743
  const CHARSET_UTF8 = "utf-8";
4743
4744
  const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
@@ -4760,6 +4761,7 @@ const ZIP64_EXTRACTION = {
4760
4761
  bytes: 8
4761
4762
  }
4762
4763
  };
4764
+ const MAX_SAFE_UINT64 = BigInt(Number.MAX_SAFE_INTEGER);
4763
4765
  const MAX_END_OF_CENTRAL_DIR_PROBES = 64;
4764
4766
  const MAX_DEFLATE_EXPANSION_RATIO = 1032;
4765
4767
  const CENTRAL_DIRECTORY_UNREACHABLE = 0;
@@ -4855,7 +4857,7 @@ class ZipReader {
4855
4857
  zip64EndOfDirectoryVersion2 = getBigUint64(endOfDirectoryView, 4) > ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12;
4856
4858
  if (zip64EndOfDirectoryVersion2) {
4857
4859
  const extensibleDataLength = Math.min(
4858
- Number(getBigUint64(endOfDirectoryView, 4)) - (ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12),
4860
+ getBigUint64(endOfDirectoryView, 4) - (ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12),
4859
4861
  reader.size - directoryDataOffset - ZIP64_END_OF_CENTRAL_DIR_LENGTH);
4860
4862
  if (extensibleDataLength > 0) {
4861
4863
  zip64EndOfDirectoryLength += extensibleDataLength;
@@ -5436,8 +5438,8 @@ function getDirectoryEncryptionInfo(rawExtensibleData) {
5436
5438
  const hashDataLength = getUint16$1(extensibleDataView, 26);
5437
5439
  Object.assign(directoryEncryptionInfo, {
5438
5440
  compressionMethod: getUint16$1(extensibleDataView, 0),
5439
- compressedSize: Number(getBigUint64(extensibleDataView, 2)),
5440
- uncompressedSize: Number(getBigUint64(extensibleDataView, 10)),
5441
+ compressedSize: getBigUint64(extensibleDataView, 2),
5442
+ uncompressedSize: getBigUint64(extensibleDataView, 10),
5441
5443
  encryptionAlgorithm: getUint16$1(extensibleDataView, 18),
5442
5444
  bitLength: getUint16$1(extensibleDataView, 20),
5443
5445
  flags: getUint16$1(extensibleDataView, 22),
@@ -6072,7 +6074,11 @@ function getUint32$1(view, offset) {
6072
6074
  }
6073
6075
 
6074
6076
  function getBigUint64(view, offset) {
6075
- return Number(view.getBigUint64(offset, true));
6077
+ const value = view.getBigUint64(offset, true);
6078
+ if (value > MAX_SAFE_UINT64) {
6079
+ throw new Error(ERR_UNSUPPORTED_UINT64);
6080
+ }
6081
+ return Number(value);
6076
6082
  }
6077
6083
 
6078
6084
  var zipReader = /*#__PURE__*/Object.freeze({
@@ -6101,6 +6107,7 @@ var zipReader = /*#__PURE__*/Object.freeze({
6101
6107
  ERR_UNSAFE_FILENAME: ERR_UNSAFE_FILENAME,
6102
6108
  ERR_UNSUPPORTED_COMPRESSION: ERR_UNSUPPORTED_COMPRESSION$1,
6103
6109
  ERR_UNSUPPORTED_ENCRYPTION: ERR_UNSUPPORTED_ENCRYPTION,
6110
+ ERR_UNSUPPORTED_UINT64: ERR_UNSUPPORTED_UINT64,
6104
6111
  ERR_WORKER_STARTUP_TIMEOUT: ERR_WORKER_STARTUP_TIMEOUT,
6105
6112
  ZipReader: ZipReader,
6106
6113
  ZipReaderStream: ZipReaderStream
@@ -6241,7 +6248,7 @@ class ZipWriter {
6241
6248
  encrypted,
6242
6249
  uncompressedSize,
6243
6250
  compressedSize,
6244
- zip64
6251
+ extraFieldZip64
6245
6252
  } = entry;
6246
6253
  let {
6247
6254
  compressionMethod,
@@ -6258,13 +6265,13 @@ class ZipWriter {
6258
6265
  rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || EMPTY_UINT8_ARRAY;
6259
6266
  rawExtraFieldNTFS = rawExtraFieldNTFS || EMPTY_UINT8_ARRAY;
6260
6267
  rawExtraFieldUnix = rawExtraFieldUnix || EMPTY_UINT8_ARRAY;
6261
- rawExtraField = rawExtraField || EMPTY_UINT8_ARRAY;
6268
+ rawExtraField = removeExtraFieldZip64(rawExtraField || EMPTY_UINT8_ARRAY);
6262
6269
  if (entry.extraFieldAES) {
6263
6270
  compressionMethod = COMPRESSION_METHOD_AES;
6264
6271
  }
6265
6272
  const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
6266
- const zip64UncompressedSize = zip64 && uncompressedSize >= MAX_32_BITS;
6267
- const zip64CompressedSize = zip64 && compressedSize >= MAX_32_BITS;
6273
+ const zip64UncompressedSize = Boolean(extraFieldZip64) && extraFieldZip64.uncompressedSize !== UNDEFINED_VALUE;
6274
+ const zip64CompressedSize = Boolean(extraFieldZip64) && extraFieldZip64.compressedSize !== UNDEFINED_VALUE;
6268
6275
  const bitFlagValue = (getBitFlag(level, languageEncodingFlag, dataDescriptor, encrypted, compressionMethod) & ~BITFLAG_LEVEL) | (level << 1);
6269
6276
  const {
6270
6277
  headerArray,
@@ -6820,6 +6827,10 @@ function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options
6820
6827
  maximumCompressedSize = contentSize === UNDEFINED_VALUE ? getMaximumCompressedSize(uncompressedSize) + encryptionOverhead : contentSize;
6821
6828
  }
6822
6829
  }
6830
+ const emptyEntry = !encryptedEntry && (!hasContent || (contentSize === 0 && !passThrough)) && !isCompressed(compressionMethod, level);
6831
+ if (emptyEntry && !zipCrypto && getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR) === UNDEFINED_VALUE) {
6832
+ dataDescriptor = false;
6833
+ }
6823
6834
  const zip64UncompressedSize = zip64Enabled || uncompressedSize >= MAX_32_BITS;
6824
6835
  const zip64CompressedSize = zip64Enabled || maximumCompressedSize >= MAX_32_BITS;
6825
6836
  if (zip64UncompressedSize || zip64CompressedSize) {
@@ -6834,6 +6845,7 @@ function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options
6834
6845
  maximumCompressedSize,
6835
6846
  resolvedOptions: {
6836
6847
  dataDescriptor,
6848
+ emptyEntry,
6837
6849
  zip64,
6838
6850
  zip64UncompressedSize,
6839
6851
  zip64CompressedSize,
@@ -6853,6 +6865,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
6853
6865
  const {
6854
6866
  keepOrder,
6855
6867
  dataDescriptor,
6868
+ emptyEntry,
6856
6869
  signal
6857
6870
  } = options;
6858
6871
  const {
@@ -6877,7 +6890,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
6877
6890
  lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
6878
6891
  requestLockCurrentFileEntry();
6879
6892
  }
6880
- if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || !dataDescriptor) {
6893
+ if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
6881
6894
  bufferedWrite = true;
6882
6895
  zipWriter.bufferedWrites++;
6883
6896
  if (options.createTempStream) {
@@ -7299,8 +7312,8 @@ function getHeaderInfo(options) {
7299
7312
  try {
7300
7313
  const { uid, gid, unixExtraFieldType } = options;
7301
7314
  if (unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
7302
- const uidBytes = packUnixId(uid);
7303
- const gidBytes = packUnixId(gid);
7315
+ const uidBytes = packUnixId(uid === UNDEFINED_VALUE ? 0 : uid);
7316
+ const gidBytes = packUnixId(gid === UNDEFINED_VALUE ? 0 : gid);
7304
7317
  const payloadLength = 3 + uidBytes.length + gidBytes.length;
7305
7318
  const extraFieldUnix = createRecordWriter(4 + payloadLength);
7306
7319
  extraFieldUnix.writeUint16(EXTRAFIELD_TYPE_INFOZIP);
@@ -7431,18 +7444,14 @@ function appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {
7431
7444
  }
7432
7445
 
7433
7446
  function packUnixId(id) {
7434
- if (id === UNDEFINED_VALUE) {
7435
- return EMPTY_UINT8_ARRAY;
7436
- } else {
7437
- const dataArray = new Uint8Array(4);
7438
- const dataView = getDataView(dataArray);
7439
- dataView.setUint32(0, id, true);
7440
- let length = 4;
7441
- while (length > 1 && dataArray[length - 1] === 0) {
7442
- length--;
7443
- }
7444
- return dataArray.subarray(0, length);
7447
+ const dataArray = new Uint8Array(4);
7448
+ const dataView = getDataView(dataArray);
7449
+ dataView.setUint32(0, id, true);
7450
+ let length = 4;
7451
+ while (length > 1 && dataArray[length - 1] === 0) {
7452
+ length--;
7445
7453
  }
7454
+ return dataArray.subarray(0, length);
7446
7455
  }
7447
7456
 
7448
7457
  function normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes) {
@@ -7861,6 +7870,21 @@ async function startsWithSplitZipSignature(reader) {
7861
7870
  return getUint32(getDataView(signatureArray), 0) == SPLIT_ZIP_FILE_SIGNATURE;
7862
7871
  }
7863
7872
 
7873
+ function removeExtraFieldZip64(rawExtraField) {
7874
+ const rawExtraFieldView = getDataView(rawExtraField);
7875
+ let offsetExtraField = 0;
7876
+ while (offsetExtraField + 4 <= getLength(rawExtraField)) {
7877
+ const size = 4 + getUint16(rawExtraFieldView, offsetExtraField + 2);
7878
+ if (getUint16(rawExtraFieldView, offsetExtraField) == EXTRAFIELD_TYPE_ZIP64) {
7879
+ return removeExtraFieldZip64(concat(
7880
+ rawExtraField.subarray(0, offsetExtraField),
7881
+ rawExtraField.subarray(Math.min(offsetExtraField + size, getLength(rawExtraField)))));
7882
+ }
7883
+ offsetExtraField += size;
7884
+ }
7885
+ return rawExtraField;
7886
+ }
7887
+
7864
7888
  async function copyZipData(zipWriter, reader, entries, directoryOffset) {
7865
7889
  const { writer } = zipWriter;
7866
7890
  const entryPositions = new Map();
@@ -8975,4 +8999,4 @@ function terminateWorkersAndModule() {
8975
8999
 
8976
9000
  configureExternalAssets();
8977
9001
 
8978
- export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, 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_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_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_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, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, getMimeType, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
9002
+ export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, 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_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_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_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, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, getMimeType, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };