@zip.js/zip.js 2.21.0 → 2.22.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/deno.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zip-js/zip-js",
3
- "version": "2.21.0",
3
+ "version": "2.22.0",
4
4
  "exports": {
5
5
  ".": "./index.js",
6
6
  "./external": "./lib/zip-fs-external.js",
@@ -216,6 +216,7 @@ const ERR_INVALID_FUNCTION_OPTION = "Invalid option (must be a function)";
216
216
  const ERR_INVALID_SIGNAL = "Invalid signal (must be an AbortSignal instance)";
217
217
  const ERR_INVALID_PASSWORD_TYPE = "Invalid password (password must be a string, rawPassword must be a Uint8Array)";
218
218
  const ERR_INVALID_PASS_THROUGH_VALUE = "Invalid passThrough option (must be a boolean or 'compressed')";
219
+ const ERR_INVALID_READER_OPTIONS = "Invalid readerOptions (must be an object)";
219
220
  const ERR_ABORTED = "The operation was aborted";
220
221
  const ABORT_ERROR_NAME = "AbortError";
221
222
 
@@ -226,6 +227,13 @@ function checkFunctionOption(value) {
226
227
  return value;
227
228
  }
228
229
 
230
+ function checkReaderOptionsObject(readerOptions) {
231
+ if (readerOptions && (typeof readerOptions != OBJECT_TYPE || Array.isArray(readerOptions))) {
232
+ throw new Error(ERR_INVALID_READER_OPTIONS);
233
+ }
234
+ return readerOptions;
235
+ }
236
+
229
237
  function checkSignalOption(signal) {
230
238
  if (signal && (typeof signal.addEventListener != FUNCTION_TYPE || typeof signal.aborted != BOOLEAN_TYPE)) {
231
239
  throw new Error(ERR_INVALID_SIGNAL);
@@ -321,7 +329,6 @@ const DEFAULT_CONFIGURATION = {
321
329
  workerStartupTimeout: 5000,
322
330
  useWebWorkers: true,
323
331
  useCompressionStream: true,
324
- transferStreams: true,
325
332
  CompressionStream: typeof CompressionStream != UNDEFINED_TYPE && CompressionStream,
326
333
  DecompressionStream: typeof DecompressionStream != UNDEFINED_TYPE && DecompressionStream
327
334
  };
@@ -335,8 +342,7 @@ const URI_PROPERTY_NAMES = [
335
342
  ];
336
343
  const BOOLEAN_PROPERTY_NAMES = [
337
344
  "useCompressionStream",
338
- "useWebWorkers",
339
- "transferStreams"
345
+ "useWebWorkers"
340
346
  ];
341
347
  const NUMBER_PROPERTY_NAMES = [
342
348
  "chunkSize",
@@ -4860,7 +4866,7 @@ class ZipReader {
4860
4866
  constructor(reader, options = {}) {
4861
4867
  Object.assign(this, {
4862
4868
  reader: new GenericReader(reader),
4863
- options,
4869
+ options: options || {},
4864
4870
  readRanges: { indexes: new Set(), sortedRanges: [], pendingRanges: [] },
4865
4871
  entriesMissingZip64ExtraField: new WeakSet()
4866
4872
  });
@@ -6880,6 +6886,7 @@ function watchPromiseError(zipWriter, promise) {
6880
6886
  async function appendZipEntries(zipWriter, reader, options = {}) {
6881
6887
  const { pendingAddFileCalls, filenames, fileEntries } = zipWriter;
6882
6888
  const filter = checkFunctionOption(options.filter);
6889
+ const readerOptions = checkReaderOptionsObject(options.readerOptions);
6883
6890
  while (pendingAddFileCalls.size) {
6884
6891
  await Promise.allSettled(Array.from(pendingAddFileCalls));
6885
6892
  }
@@ -6896,15 +6903,19 @@ async function appendZipEntries(zipWriter, reader, options = {}) {
6896
6903
  await initStream(reader);
6897
6904
  }
6898
6905
  const { ZipReader, getEntryDataDescriptorLength } = await Promise.resolve().then(function () { return zipReader; });
6899
- const zipReader$1 = new ZipReader(reader);
6900
- const entries = await zipReader$1.getEntries();
6906
+ const zipReader$1 = new ZipReader(reader, readerOptions);
6901
6907
  const keptEntries = [];
6902
- for (const entry of entries) {
6903
- if (!filter || await filter(entry)) {
6904
- keptEntries.push(entry);
6908
+ let entries;
6909
+ try {
6910
+ entries = await zipReader$1.getEntries();
6911
+ for (const entry of entries) {
6912
+ if (!filter || await filter(entry, getExistingEntry(fileEntries, entry.filename))) {
6913
+ keptEntries.push(entry);
6914
+ }
6905
6915
  }
6916
+ } finally {
6917
+ await zipReader$1.close();
6906
6918
  }
6907
- await zipReader$1.close();
6908
6919
  await initStream(zipWriter.writer);
6909
6920
  const { directoryOffset, entriesMissingZip64ExtraField } = zipReader$1;
6910
6921
  keptEntries.forEach(entry => {
@@ -6974,7 +6985,7 @@ async function appendZipEntries(zipWriter, reader, options = {}) {
6974
6985
  setUint32(headerView, HEADER_OFFSET_SIGNATURE, crc32);
6975
6986
  }
6976
6987
  const { offset, diskNumberStart } = entryPositions.get(entry);
6977
- Object.assign(entry, {
6988
+ fileEntries.set(entry.filename, Object.assign({}, entry, {
6978
6989
  zip64Enabled: true,
6979
6990
  zip64UncompressedSize,
6980
6991
  zip64CompressedSize,
@@ -6991,8 +7002,7 @@ async function appendZipEntries(zipWriter, reader, options = {}) {
6991
7002
  rawCentralExtraField: EMPTY_UINT8_ARRAY,
6992
7003
  headerArray,
6993
7004
  headerView
6994
- });
6995
- fileEntries.set(entry.filename, entry);
7005
+ }));
6996
7006
  });
6997
7007
  } catch (error) {
6998
7008
  appendedFilenames.forEach(filename => filenames.delete(filename));
@@ -7006,6 +7016,11 @@ async function appendZipEntries(zipWriter, reader, options = {}) {
7006
7016
  }
7007
7017
  }
7008
7018
 
7019
+ function getExistingEntry(fileEntries, filename) {
7020
+ const fileEntry = fileEntries.get(filename);
7021
+ return fileEntry ? new Entry(fileEntry) : UNDEFINED_VALUE;
7022
+ }
7023
+
7009
7024
  async function prependZipEntries(zipWriter, reader) {
7010
7025
  if (zipWriter.filenames.size) {
7011
7026
  throw new Error(ERR_ZIP_NOT_EMPTY);
@@ -9150,7 +9165,7 @@ function formatSupported(StreamClass, format) {
9150
9165
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
9151
9166
  */
9152
9167
 
9153
- const VERSION = "2.21.0";
9168
+ const VERSION = "2.22.0";
9154
9169
 
9155
9170
  /*
9156
9171
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -10155,4 +10170,4 @@ async function terminateWorkersAndModule() {
10155
10170
 
10156
10171
  configureExternalAssets();
10157
10172
 
10158
- export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_ABORTED, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_CODEC_OUT_OF_MEMORY, 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_HTTP_STATUS, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_BASE_URI, 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, 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_VALUE, ERR_INVALID_READER, ERR_INVALID_SIGNAL, 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_URI, 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_CRC32, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, 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_SPLIT_USDZ, ERR_UNSUPPORTED_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_WRITER_SIZE_NOT_WRITABLE, ERR_ZIP_CRYPTO_LAST_MOD_DATE, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, VERSION, WARNING_APPENDED_DATA, WARNING_CLAMPED_LAST_MODIFICATION_DATE, WARNING_COMPRESSED_PATCHED_DATA, WARNING_COMPRESSION_UNAVAILABLE, WARNING_DUPLICATE_FILENAME, WARNING_MALFORMED_EXTRA_FIELD, WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG, WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES, WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY, WARNING_MISSING_ZIP64_EXTRA_FIELD, WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY, WARNING_PREPENDED_CENTRAL_DIRECTORY, WARNING_PREPENDED_DATA, WARNING_TRAILING_CENTRAL_DIRECTORY_DATA, WARNING_UNKNOWN_VERSION, WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA, WARNING_UNSORTED_CENTRAL_DIRECTORY, WARNING_WRAPPED_ENTRIES_COUNT, Writer, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, getMimeType, getRegisteredCodecs, getSupportedCompressionMethods, isZipFile, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
10173
+ export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_ABORTED, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_CODEC_OUT_OF_MEMORY, 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_HTTP_STATUS, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_BASE_URI, 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, 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_VALUE, ERR_INVALID_READER, ERR_INVALID_READER_OPTIONS, ERR_INVALID_SIGNAL, 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_URI, 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_CRC32, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, 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_SPLIT_USDZ, ERR_UNSUPPORTED_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_WRITER_SIZE_NOT_WRITABLE, ERR_ZIP_CRYPTO_LAST_MOD_DATE, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, VERSION, WARNING_APPENDED_DATA, WARNING_CLAMPED_LAST_MODIFICATION_DATE, WARNING_COMPRESSED_PATCHED_DATA, WARNING_COMPRESSION_UNAVAILABLE, WARNING_DUPLICATE_FILENAME, WARNING_MALFORMED_EXTRA_FIELD, WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG, WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES, WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY, WARNING_MISSING_ZIP64_EXTRA_FIELD, WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY, WARNING_PREPENDED_CENTRAL_DIRECTORY, WARNING_PREPENDED_DATA, WARNING_TRAILING_CENTRAL_DIRECTORY_DATA, WARNING_UNKNOWN_VERSION, WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA, WARNING_UNSORTED_CENTRAL_DIRECTORY, WARNING_WRAPPED_ENTRIES_COUNT, Writer, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, getMimeType, getRegisteredCodecs, getSupportedCompressionMethods, isZipFile, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };