@zip.js/zip.js 2.8.55 → 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.55",
3
+ "version": "2.8.57",
4
4
  "exports": {
5
5
  ".": "./index.js",
6
6
  "./external": "./lib/zip-fs-external.js",
@@ -226,6 +226,18 @@ function checkPasswordOption(password, rawPassword) {
226
226
  }
227
227
  }
228
228
 
229
+ function checkInteger(value, maxValue, errorMessage) {
230
+ if (!Number.isInteger(value) || value < 0 || value > maxValue) {
231
+ throw new Error(errorMessage);
232
+ }
233
+ }
234
+
235
+ function checkIntegerOption(value, maxValue, errorMessage) {
236
+ if (value !== UNDEFINED_VALUE) {
237
+ checkInteger(value, maxValue, errorMessage);
238
+ }
239
+ }
240
+
229
241
  function toNumber(value) {
230
242
  return typeof value == STRING_TYPE && value.trim() ? Number(value) : value;
231
243
  }
@@ -4726,6 +4738,7 @@ const ERR_UNSAFE_FILENAME = "Unsafe filename";
4726
4738
  const ERR_INVALID_STRICTNESS = "Invalid strictness (must be 'strict', 'balanced' or 'tolerant')";
4727
4739
  const ERR_INVALID_FILENAME_VALIDATION = "Invalid filenameValidation (must be 'strict', 'balanced' or 'tolerant')";
4728
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";
4729
4742
  const DRIVE_LETTER_REGEXP = /^[a-zA-Z]:/;
4730
4743
  const CHARSET_UTF8 = "utf-8";
4731
4744
  const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
@@ -4748,6 +4761,7 @@ const ZIP64_EXTRACTION = {
4748
4761
  bytes: 8
4749
4762
  }
4750
4763
  };
4764
+ const MAX_SAFE_UINT64 = BigInt(Number.MAX_SAFE_INTEGER);
4751
4765
  const MAX_END_OF_CENTRAL_DIR_PROBES = 64;
4752
4766
  const MAX_DEFLATE_EXPANSION_RATIO = 1032;
4753
4767
  const CENTRAL_DIRECTORY_UNREACHABLE = 0;
@@ -4843,7 +4857,7 @@ class ZipReader {
4843
4857
  zip64EndOfDirectoryVersion2 = getBigUint64(endOfDirectoryView, 4) > ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12;
4844
4858
  if (zip64EndOfDirectoryVersion2) {
4845
4859
  const extensibleDataLength = Math.min(
4846
- Number(getBigUint64(endOfDirectoryView, 4)) - (ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12),
4860
+ getBigUint64(endOfDirectoryView, 4) - (ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12),
4847
4861
  reader.size - directoryDataOffset - ZIP64_END_OF_CENTRAL_DIR_LENGTH);
4848
4862
  if (extensibleDataLength > 0) {
4849
4863
  zip64EndOfDirectoryLength += extensibleDataLength;
@@ -5076,8 +5090,15 @@ class ZipReader {
5076
5090
  yield entry;
5077
5091
  }
5078
5092
  let offsetAfterSignature = offset;
5079
- const digitalSignature = readDigitalSignature(directoryArray.subarray(offset)) ||
5093
+ let digitalSignature = readDigitalSignature(directoryArray.subarray(offset)) ||
5080
5094
  (decryptedDirectory ? readDigitalSignature(dataAfterEncryptedDirectory) : UNDEFINED_VALUE);
5095
+ if (!digitalSignature && !decryptedDirectory) {
5096
+ const signatureRecordOffset = directoryDataOffset + offset;
5097
+ const signatureRecordLength = Math.min(centralDirectoryEndOffset - signatureRecordOffset, 6 + MAX_16_BITS);
5098
+ if (signatureRecordLength >= 6) {
5099
+ digitalSignature = readDigitalSignature(await readUint8Array(reader, signatureRecordOffset, signatureRecordLength));
5100
+ }
5101
+ }
5081
5102
  if (digitalSignature) {
5082
5103
  zipReader.digitalSignature = digitalSignature;
5083
5104
  offsetAfterSignature = offset + 6 + digitalSignature.length;
@@ -5417,8 +5438,8 @@ function getDirectoryEncryptionInfo(rawExtensibleData) {
5417
5438
  const hashDataLength = getUint16$1(extensibleDataView, 26);
5418
5439
  Object.assign(directoryEncryptionInfo, {
5419
5440
  compressionMethod: getUint16$1(extensibleDataView, 0),
5420
- compressedSize: Number(getBigUint64(extensibleDataView, 2)),
5421
- uncompressedSize: Number(getBigUint64(extensibleDataView, 10)),
5441
+ compressedSize: getBigUint64(extensibleDataView, 2),
5442
+ uncompressedSize: getBigUint64(extensibleDataView, 10),
5422
5443
  encryptionAlgorithm: getUint16$1(extensibleDataView, 18),
5423
5444
  bitLength: getUint16$1(extensibleDataView, 20),
5424
5445
  flags: getUint16$1(extensibleDataView, 22),
@@ -6053,7 +6074,11 @@ function getUint32$1(view, offset) {
6053
6074
  }
6054
6075
 
6055
6076
  function getBigUint64(view, offset) {
6056
- 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);
6057
6082
  }
6058
6083
 
6059
6084
  var zipReader = /*#__PURE__*/Object.freeze({
@@ -6082,6 +6107,7 @@ var zipReader = /*#__PURE__*/Object.freeze({
6082
6107
  ERR_UNSAFE_FILENAME: ERR_UNSAFE_FILENAME,
6083
6108
  ERR_UNSUPPORTED_COMPRESSION: ERR_UNSUPPORTED_COMPRESSION$1,
6084
6109
  ERR_UNSUPPORTED_ENCRYPTION: ERR_UNSUPPORTED_ENCRYPTION,
6110
+ ERR_UNSUPPORTED_UINT64: ERR_UNSUPPORTED_UINT64,
6085
6111
  ERR_WORKER_STARTUP_TIMEOUT: ERR_WORKER_STARTUP_TIMEOUT,
6086
6112
  ZipReader: ZipReader,
6087
6113
  ZipReaderStream: ZipReaderStream
@@ -6154,6 +6180,8 @@ const ERR_INVALID_SIGNATURE_DATA = "Signature data exceeds 64KB";
6154
6180
 
6155
6181
  const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
6156
6182
  const EXTRAFIELD_OFFSET_AES_VENDOR_VERSION = 4;
6183
+ const EXTRAFIELD_OFFSET_AES_COMPRESSION_METHOD = 9;
6184
+ const EXTRAFIELD_USDZ_MAX_LENGTH = 67;
6157
6185
  const VENDOR_VERSION_AE_1 = 1;
6158
6186
  const INFOZIP_EXTRA_FIELD_TYPE = "infozip";
6159
6187
  const UNIX_EXTRA_FIELD_TYPE = "unix";
@@ -6200,16 +6228,14 @@ class ZipWriter {
6200
6228
  await zipReader$1.close();
6201
6229
  await initStream(this.writer);
6202
6230
  const { directoryOffset } = zipReader$1;
6203
- let splitZipSignatureLength = 0;
6204
6231
  if (this.addSplitZipSignature) {
6205
6232
  delete this.addSplitZipSignature;
6206
6233
  if (!await startsWithSplitZipSignature(reader)) {
6207
6234
  await writeData(this.writer, getSplitZipSignatureArray());
6208
- splitZipSignatureLength = SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
6209
- this.offset += splitZipSignatureLength;
6235
+ this.offset += SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
6210
6236
  }
6211
6237
  }
6212
- const entryPositions = await copyZipData(this, reader, entries, directoryOffset, splitZipSignatureLength);
6238
+ const entryPositions = await copyZipData(this, reader, entries, directoryOffset);
6213
6239
  this.filenames = new Set(entries.map(entry => entry.filename));
6214
6240
  this.fileEntries = new Map(entries.map(entry => {
6215
6241
  const {
@@ -6222,7 +6248,7 @@ class ZipWriter {
6222
6248
  encrypted,
6223
6249
  uncompressedSize,
6224
6250
  compressedSize,
6225
- zip64
6251
+ extraFieldZip64
6226
6252
  } = entry;
6227
6253
  let {
6228
6254
  compressionMethod,
@@ -6239,13 +6265,13 @@ class ZipWriter {
6239
6265
  rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || EMPTY_UINT8_ARRAY;
6240
6266
  rawExtraFieldNTFS = rawExtraFieldNTFS || EMPTY_UINT8_ARRAY;
6241
6267
  rawExtraFieldUnix = rawExtraFieldUnix || EMPTY_UINT8_ARRAY;
6242
- rawExtraField = rawExtraField || EMPTY_UINT8_ARRAY;
6268
+ rawExtraField = removeExtraFieldZip64(rawExtraField || EMPTY_UINT8_ARRAY);
6243
6269
  if (entry.extraFieldAES) {
6244
6270
  compressionMethod = COMPRESSION_METHOD_AES;
6245
6271
  }
6246
6272
  const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
6247
- const zip64UncompressedSize = zip64 && uncompressedSize >= MAX_32_BITS;
6248
- 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;
6249
6275
  const bitFlagValue = (getBitFlag(level, languageEncodingFlag, dataDescriptor, encrypted, compressionMethod) & ~BITFLAG_LEVEL) | (level << 1);
6250
6276
  const {
6251
6277
  headerArray,
@@ -6451,7 +6477,8 @@ async function addFile(zipWriter, name, reader, options) {
6451
6477
  signature: options[PROPERTY_NAME_SIGNATURE],
6452
6478
  crc32: options.crc32 === UNDEFINED_VALUE ? options[PROPERTY_NAME_SIGNATURE] : options.crc32,
6453
6479
  offset: zipWriter.offset - diskOffset,
6454
- diskNumberStart: diskNumber
6480
+ diskNumberStart: diskNumber,
6481
+ [OPTION_USDZ]: zipWriter.options[OPTION_USDZ]
6455
6482
  });
6456
6483
  const headerInfo = getHeaderInfo(options);
6457
6484
  const dataDescriptorInfo = getDataDescriptorInfo(options);
@@ -6483,15 +6510,9 @@ function resolveAttributes(zipWriter, name, options) {
6483
6510
  let setuid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETUID);
6484
6511
  let setgid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETGID);
6485
6512
  let sticky = getOptionValue(zipWriter, options, PROPERTY_NAME_STICKY);
6486
- if (uid !== UNDEFINED_VALUE && (!Number.isInteger(uid) || uid < 0 || uid > MAX_32_BITS)) {
6487
- throw new Error(ERR_INVALID_UID);
6488
- }
6489
- if (gid !== UNDEFINED_VALUE && (!Number.isInteger(gid) || gid < 0 || gid > MAX_32_BITS)) {
6490
- throw new Error(ERR_INVALID_GID);
6491
- }
6492
- if (unixMode !== UNDEFINED_VALUE && (!Number.isInteger(unixMode) || unixMode < 0 || unixMode > MAX_16_BITS)) {
6493
- throw new Error(ERR_INVALID_UNIX_MODE);
6494
- }
6513
+ checkIntegerOption(uid, MAX_32_BITS, ERR_INVALID_UID);
6514
+ checkIntegerOption(gid, MAX_32_BITS, ERR_INVALID_GID);
6515
+ checkIntegerOption(unixMode, MAX_16_BITS, ERR_INVALID_UNIX_MODE);
6495
6516
  if (unixExtraFieldType !== UNDEFINED_VALUE && unixExtraFieldType !== INFOZIP_EXTRA_FIELD_TYPE && unixExtraFieldType !== UNIX_EXTRA_FIELD_TYPE) {
6496
6517
  throw new Error(ERR_INVALID_UNIX_EXTRA_FIELD_TYPE);
6497
6518
  }
@@ -6513,9 +6534,7 @@ function resolveAttributes(zipWriter, name, options) {
6513
6534
  msDosCompatible = true;
6514
6535
  versionMadeBy = (versionMadeBy & MAX_8_BITS);
6515
6536
  }
6516
- if (msdosAttributesRaw !== UNDEFINED_VALUE && (!Number.isInteger(msdosAttributesRaw) || msdosAttributesRaw < 0 || msdosAttributesRaw > MAX_8_BITS)) {
6517
- throw new Error(ERR_INVALID_MSDOS_ATTRIBUTES);
6518
- }
6537
+ checkIntegerOption(msdosAttributesRaw, MAX_8_BITS, ERR_INVALID_MSDOS_ATTRIBUTES);
6519
6538
  if (msdosAttributes && (typeof msdosAttributes !== OBJECT_TYPE || Array.isArray(msdosAttributes))) {
6520
6539
  throw new Error(ERR_INVALID_MSDOS_DATA);
6521
6540
  }
@@ -6655,9 +6674,7 @@ function resolveMetadata(zipWriter, name, options) {
6655
6674
  throw new Error(ERR_UNSUPPORTED_COMPRESSION);
6656
6675
  }
6657
6676
  let level = getNumberOptionValue(zipWriter, options, OPTION_LEVEL);
6658
- if (level !== UNDEFINED_VALUE && (!Number.isInteger(level) || level < 0 || level > MAX_LEVEL)) {
6659
- throw new Error(ERR_INVALID_LEVEL);
6660
- }
6677
+ checkIntegerOption(level, MAX_LEVEL, ERR_INVALID_LEVEL);
6661
6678
  if (zipWriter.options[OPTION_USDZ]) {
6662
6679
  if (password !== UNDEFINED_VALUE || rawPassword !== UNDEFINED_VALUE) {
6663
6680
  throw new Error(ERR_UNSUPPORTED_ENCRYPTION_USDZ);
@@ -6735,9 +6752,7 @@ function serializeExtraField(extraField) {
6735
6752
  let extraFieldSize = 0;
6736
6753
  let offset = 0;
6737
6754
  extraField.forEach((data, type) => {
6738
- if (!Number.isInteger(type) || type < 0 || type > MAX_16_BITS) {
6739
- throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
6740
- }
6755
+ checkInteger(type, MAX_16_BITS, ERR_INVALID_EXTRAFIELD_TYPE);
6741
6756
  if (!(data instanceof Uint8Array)) {
6742
6757
  throw new Error(ERR_INVALID_EXTRAFIELD_DATA_TYPE);
6743
6758
  }
@@ -6812,6 +6827,10 @@ function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options
6812
6827
  maximumCompressedSize = contentSize === UNDEFINED_VALUE ? getMaximumCompressedSize(uncompressedSize) + encryptionOverhead : contentSize;
6813
6828
  }
6814
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
+ }
6815
6834
  const zip64UncompressedSize = zip64Enabled || uncompressedSize >= MAX_32_BITS;
6816
6835
  const zip64CompressedSize = zip64Enabled || maximumCompressedSize >= MAX_32_BITS;
6817
6836
  if (zip64UncompressedSize || zip64CompressedSize) {
@@ -6826,6 +6845,7 @@ function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options
6826
6845
  maximumCompressedSize,
6827
6846
  resolvedOptions: {
6828
6847
  dataDescriptor,
6848
+ emptyEntry,
6829
6849
  zip64,
6830
6850
  zip64UncompressedSize,
6831
6851
  zip64CompressedSize,
@@ -6845,6 +6865,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
6845
6865
  const {
6846
6866
  keepOrder,
6847
6867
  dataDescriptor,
6868
+ emptyEntry,
6848
6869
  signal
6849
6870
  } = options;
6850
6871
  const {
@@ -6869,7 +6890,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
6869
6890
  lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
6870
6891
  requestLockCurrentFileEntry();
6871
6892
  }
6872
- if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || !dataDescriptor) {
6893
+ if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
6873
6894
  bufferedWrite = true;
6874
6895
  zipWriter.bufferedWrites++;
6875
6896
  if (options.createTempStream) {
@@ -7291,8 +7312,8 @@ function getHeaderInfo(options) {
7291
7312
  try {
7292
7313
  const { uid, gid, unixExtraFieldType } = options;
7293
7314
  if (unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
7294
- const uidBytes = packUnixId(uid);
7295
- const gidBytes = packUnixId(gid);
7315
+ const uidBytes = packUnixId(uid === UNDEFINED_VALUE ? 0 : uid);
7316
+ const gidBytes = packUnixId(gid === UNDEFINED_VALUE ? 0 : gid);
7296
7317
  const payloadLength = 3 + uidBytes.length + gidBytes.length;
7297
7318
  const extraFieldUnix = createRecordWriter(4 + payloadLength);
7298
7319
  extraFieldUnix.writeUint16(EXTRAFIELD_TYPE_INFOZIP);
@@ -7331,12 +7352,13 @@ function getHeaderInfo(options) {
7331
7352
  if (passThrough && crc32 !== UNDEFINED_VALUE) {
7332
7353
  rawExtraFieldAES[EXTRAFIELD_OFFSET_AES_VENDOR_VERSION] = VENDOR_VERSION_AE_1;
7333
7354
  }
7334
- rawExtraFieldAES[9] = compressionMethod;
7355
+ setUint16(getDataView(rawExtraFieldAES), EXTRAFIELD_OFFSET_AES_COMPRESSION_METHOD, compressionMethod);
7335
7356
  compressionMethod = COMPRESSION_METHOD_AES;
7336
7357
  }
7337
7358
  const localExtraFieldZip64Length = writeLocalExtraFieldZip64 ? getLength(rawLocalExtraFieldZip64) : 0;
7338
7359
  const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField, rawLocalExtraField);
7339
- if (extraFieldLength > MAX_16_BITS) {
7360
+ const maximumUsdzExtraFieldLength = options[OPTION_USDZ] ? EXTRAFIELD_USDZ_MAX_LENGTH : 0;
7361
+ if (extraFieldLength + maximumUsdzExtraFieldLength > MAX_16_BITS) {
7340
7362
  throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
7341
7363
  }
7342
7364
  const dosLastModDate = new Date(Math.ceil(Math.floor(lastModDate.getTime() / 1000) / 2) * 2000);
@@ -7422,18 +7444,14 @@ function appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {
7422
7444
  }
7423
7445
 
7424
7446
  function packUnixId(id) {
7425
- if (id === UNDEFINED_VALUE) {
7426
- return EMPTY_UINT8_ARRAY;
7427
- } else {
7428
- const dataArray = new Uint8Array(4);
7429
- const dataView = getDataView(dataArray);
7430
- dataView.setUint32(0, id, true);
7431
- let length = 4;
7432
- while (length > 1 && dataArray[length - 1] === 0) {
7433
- length--;
7434
- }
7435
- 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--;
7436
7453
  }
7454
+ return dataArray.subarray(0, length);
7437
7455
  }
7438
7456
 
7439
7457
  function normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes) {
@@ -7737,7 +7755,11 @@ async function writeDigitalSignatureRecord(zipWriter, directoryArray, options) {
7737
7755
  signatureRecord.writeUint32(DIGITAL_SIGNATURE_RECORD_SIGNATURE);
7738
7756
  signatureRecord.writeUint16(signatureDataLength);
7739
7757
  signatureRecord.writeBytes(signatureData);
7740
- await writeData(zipWriter.writer, signatureRecord.array);
7758
+ const { writer } = zipWriter;
7759
+ if (exceedsAvailableSize(writer, getLength(signatureRecord.array))) {
7760
+ await writer.closeDisk();
7761
+ }
7762
+ await writeData(writer, signatureRecord.array);
7741
7763
  return 6 + signatureDataLength;
7742
7764
  }
7743
7765
  return 0;
@@ -7848,7 +7870,22 @@ async function startsWithSplitZipSignature(reader) {
7848
7870
  return getUint32(getDataView(signatureArray), 0) == SPLIT_ZIP_FILE_SIGNATURE;
7849
7871
  }
7850
7872
 
7851
- async function copyZipData(zipWriter, reader, entries, directoryOffset, splitZipSignatureLength) {
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
+
7888
+ async function copyZipData(zipWriter, reader, entries, directoryOffset) {
7852
7889
  const { writer } = zipWriter;
7853
7890
  const entryPositions = new Map();
7854
7891
  if (writer.closeDisk) {
@@ -7869,9 +7906,10 @@ async function copyZipData(zipWriter, reader, entries, directoryOffset, splitZip
7869
7906
  }
7870
7907
  await copyData(zipWriter, reader, copiedLength, directoryOffset - copiedLength);
7871
7908
  } else {
7909
+ const baseOffset = zipWriter.offset;
7872
7910
  await copyData(zipWriter, reader, 0, directoryOffset);
7873
7911
  entries.forEach(entry => entryPositions.set(entry, {
7874
- offset: splitZipSignatureLength + getSourceOffset(reader, entry),
7912
+ offset: baseOffset + getSourceOffset(reader, entry),
7875
7913
  diskNumberStart: 0
7876
7914
  }));
7877
7915
  }
@@ -8961,4 +8999,4 @@ function terminateWorkersAndModule() {
8961
8999
 
8962
9000
  configureExternalAssets();
8963
9001
 
8964
- 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 };