@zip.js/zip.js 2.18.2 → 2.19.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.
Files changed (44) hide show
  1. package/BENCHMARKS.md +122 -118
  2. package/deno.json +1 -1
  3. package/dist/zip-core-external.js +54 -81
  4. package/dist/zip-core-external.min.js +1 -1
  5. package/dist/zip-core.js +54 -81
  6. package/dist/zip-core.min.js +1 -1
  7. package/dist/zip-fs-core-external.js +54 -81
  8. package/dist/zip-fs-core-external.min.js +1 -1
  9. package/dist/zip-fs-core.js +54 -81
  10. package/dist/zip-fs-core.min.js +1 -1
  11. package/dist/zip-fs-external.js +54 -81
  12. package/dist/zip-fs-external.min.js +1 -1
  13. package/dist/zip-fs-native.js +56 -83
  14. package/dist/zip-fs-native.min.js +1 -1
  15. package/dist/zip-fs.js +55 -82
  16. package/dist/zip-fs.min.js +1 -1
  17. package/dist/zip-legacy.js +56 -83
  18. package/dist/zip-legacy.min.js +1 -1
  19. package/dist/zip-native.js +56 -83
  20. package/dist/zip-native.min.js +1 -1
  21. package/dist/zip-web-worker-native.js +1 -1
  22. package/dist/zip-web-worker.js +1 -1
  23. package/dist/zip.js +55 -82
  24. package/dist/zip.min.js +1 -1
  25. package/index-native.cjs +56 -83
  26. package/index-native.min.js +1 -1
  27. package/index.cjs +55 -82
  28. package/index.d.cts +27 -18
  29. package/index.d.ts +27 -18
  30. package/index.min.js +1 -1
  31. package/lib/core/codec-pool.js +1 -2
  32. package/lib/core/codec-worker-web.js +11 -39
  33. package/lib/core/codec-worker.js +1 -2
  34. package/lib/core/configuration.js +1 -1
  35. package/lib/core/options.js +0 -2
  36. package/lib/core/streams/codec-stream.js +1 -1
  37. package/lib/core/version.js +1 -1
  38. package/lib/core/web-worker-base.js +2 -3
  39. package/lib/core/web-worker-inline-native.js +1 -1
  40. package/lib/core/web-worker-inline-wasm.js +1 -1
  41. package/lib/core/zip-reader.js +21 -23
  42. package/lib/core/zip-writer.js +18 -14
  43. package/package.json +1 -1
  44. package/worker-message-property-names.js +1 -1
@@ -176,7 +176,6 @@ const OPTION_CHECK_CRC32 = "checkCrc32";
176
176
  const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
177
177
  const OPTION_USE_WEB_WORKERS = "useWebWorkers";
178
178
  const OPTION_USE_COMPRESSION_STREAM = "useCompressionStream";
179
- const OPTION_TRANSFER_STREAMS = "transferStreams";
180
179
  const OPTION_PREVENT_CLOSE = "preventClose";
181
180
  const OPTION_ENCRYPTION_STRENGTH = "encryptionStrength";
182
181
  const OPTION_EXTENDED_TIMESTAMP = "extendedTimestamp";
@@ -294,7 +293,7 @@ function toNumber(value) {
294
293
  */
295
294
 
296
295
 
297
- const DEFAULT_CHUNK_SIZE$1 = 64 * 1024;
296
+ const DEFAULT_CHUNK_SIZE$1 = 256 * 1024;
298
297
  const MINIMUM_CHUNK_SIZE = 64;
299
298
  const MINIMUM_PROPERTY_VALUE = 1;
300
299
  const ERR_INVALID_MAX_WORKERS = "Invalid maxWorkers (must be an integer greater than 0)";
@@ -2423,7 +2422,7 @@ function mapInflateStreamError(readable, sourceErrors) {
2423
2422
  */
2424
2423
 
2425
2424
 
2426
- const DEFAULT_CHUNK_SIZE = 64 * 1024;
2425
+ const DEFAULT_CHUNK_SIZE = 256 * 1024;
2427
2426
  const MESSAGE_EVENT_TYPE = "message";
2428
2427
  const MESSAGE_START = "start";
2429
2428
  const MESSAGE_PULL = "pull";
@@ -2633,7 +2632,7 @@ function disableWebWorker(workerData) {
2633
2632
  class CodecWorker {
2634
2633
 
2635
2634
  constructor(workerData, { readable, writable }, workerOptions, onTaskFinished) {
2636
- const { options, config, streamOptions, useWebWorkers, transferStreams, workerURI } = workerOptions;
2635
+ const { options, config, streamOptions, useWebWorkers, workerURI } = workerOptions;
2637
2636
  let { createWorker } = workerOptions;
2638
2637
  const { signal } = streamOptions;
2639
2638
  if (createWorkerFailed) {
@@ -2650,7 +2649,6 @@ class CodecWorker {
2650
2649
  workerOptions,
2651
2650
  workerURI,
2652
2651
  createWorker,
2653
- transferStreams,
2654
2652
  terminate() {
2655
2653
  return new Promise(resolve => {
2656
2654
  const { worker, busy } = workerData;
@@ -2828,12 +2826,6 @@ const MESSAGE_ERROR_EVENT_TYPE = "messageerror";
2828
2826
  const ABORT_EVENT_TYPE = "abort";
2829
2827
 
2830
2828
  let webWorkerSource, webWorkerURI, webWorkerOptions;
2831
- let transferStreamsSupported = true;
2832
- try {
2833
- transferStreamsSupported = typeof structuredClone == FUNCTION_TYPE && structuredClone(new DOMException("", "AbortError")).code !== UNDEFINED_VALUE;
2834
- } catch {
2835
- // ignored
2836
- }
2837
2829
 
2838
2830
  setWebWorkerBackend(createWebWorkerInterface);
2839
2831
 
@@ -2920,14 +2912,11 @@ async function runWebWorker(workerData, config) {
2920
2912
  });
2921
2913
  const { readable, options } = workerData;
2922
2914
  const { writable, closed, abortPipe } = watchClosedStream(workerData.writable, workerData);
2923
- let streamsTransferred;
2924
2915
  try {
2925
- streamsTransferred = sendMessage({
2916
+ sendMessage({
2926
2917
  type: MESSAGE_START,
2927
2918
  options,
2928
- config,
2929
- readable,
2930
- writable
2919
+ config
2931
2920
  }, workerData);
2932
2921
  } catch (error) {
2933
2922
  abortPipe();
@@ -2939,12 +2928,10 @@ async function runWebWorker(workerData, config) {
2939
2928
  workerData.onTaskFinished();
2940
2929
  throw error;
2941
2930
  }
2942
- if (!streamsTransferred) {
2943
- Object.assign(workerData, {
2944
- reader: readable.getReader(),
2945
- writer: writable.getWriter()
2946
- });
2947
- }
2931
+ Object.assign(workerData, {
2932
+ reader: readable.getReader(),
2933
+ writer: writable.getWriter()
2934
+ });
2948
2935
  const { workerStartupTimeout } = config;
2949
2936
  if (!workerData.workerAlive && Number.isFinite(workerStartupTimeout) && workerStartupTimeout >= 0) {
2950
2937
  workerData.startupTimeout = setTimeout(() => onStartupTimeout(workerData), workerStartupTimeout);
@@ -2977,7 +2964,7 @@ async function runWebWorker(workerData, config) {
2977
2964
  }
2978
2965
 
2979
2966
  async function closeWritable() {
2980
- if (!streamsTransferred && !writable.locked) {
2967
+ if (!writable.locked) {
2981
2968
  try {
2982
2969
  await writable.getWriter().close();
2983
2970
  } catch {
@@ -3168,31 +3155,14 @@ function onWorkerError(event, workerData) {
3168
3155
  }
3169
3156
  }
3170
3157
 
3171
- function sendMessage(message, { worker, writer, transferStreams, workerAlive }) {
3158
+ function sendMessage(message, { worker, writer }) {
3172
3159
  try {
3173
- const { value, readable, writable } = message;
3174
- const transferables = [];
3160
+ const { value } = message;
3175
3161
  if (value) {
3176
3162
  message.value = toExactUint8Array(value);
3177
- transferables.push(message.value.buffer);
3178
- }
3179
- if (transferStreams && transferStreamsSupported && workerAlive) {
3180
- if (readable) {
3181
- transferables.push(readable);
3182
- }
3183
- if (writable) {
3184
- transferables.push(writable);
3185
- }
3186
- } else {
3187
- message.readable = message.writable = null;
3188
- }
3189
- if (transferables.length) {
3190
3163
  try {
3191
- worker.postMessage(message, transferables);
3192
- return true;
3164
+ worker.postMessage(message, [message.value.buffer]);
3193
3165
  } catch {
3194
- transferStreamsSupported = false;
3195
- message.readable = message.writable = null;
3196
3166
  worker.postMessage(message);
3197
3167
  }
3198
3168
  } else {
@@ -3341,7 +3311,7 @@ let indexWorker = 0;
3341
3311
 
3342
3312
  async function runWorker(stream, workerOptions) {
3343
3313
  const { options, config } = workerOptions;
3344
- const { transferStreams, useWebWorkers, useCompressionStream, compressed, checkCrc32, computeCrc32, encrypted, format, codecURI } = options;
3314
+ const { useWebWorkers, useCompressionStream, compressed, checkCrc32, computeCrc32, encrypted, format, codecURI } = options;
3345
3315
  const { workerURI, createWorker, maxWorkers } = config;
3346
3316
  if (format) {
3347
3317
  if (codecURI) {
@@ -3349,7 +3319,6 @@ async function runWorker(stream, workerOptions) {
3349
3319
  }
3350
3320
  await ensureCodecStreams(format, options.codecURI);
3351
3321
  }
3352
- workerOptions.transferStreams = !format && (transferStreams || (transferStreams === UNDEFINED_VALUE && config.transferStreams));
3353
3322
  const streamCopy = !compressed && !checkCrc32 && !computeCrc32 && !encrypted;
3354
3323
  const workerSupported = format === UNDEFINED_VALUE || Boolean(options.codecURI);
3355
3324
  workerOptions.useWebWorkers = !streamCopy && workerSupported && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
@@ -5151,17 +5120,6 @@ class ZipReader {
5151
5120
  if (filename === UNDEFINED_VALUE) {
5152
5121
  filename = decodeText(rawFilename, rawFilenameEncoding);
5153
5122
  }
5154
- if (normalizeFilename) {
5155
- const normalizedFilename = normalizeFilename(filename);
5156
- if (normalizedFilename !== UNDEFINED_VALUE) {
5157
- filename = normalizedFilename;
5158
- }
5159
- }
5160
- if (isUnsafeFilename(filename, filenameValidation)) {
5161
- const error = new Error(ERR_UNSAFE_FILENAME);
5162
- error.filename = filename;
5163
- throw error;
5164
- }
5165
5123
  let comment = decode(rawComment, rawCommentEncoding, TEXT_TYPE_COMMENT);
5166
5124
  if (comment === UNDEFINED_VALUE) {
5167
5125
  comment = decodeText(rawComment, rawCommentEncoding);
@@ -5189,7 +5147,20 @@ class ZipReader {
5189
5147
  filename,
5190
5148
  comment
5191
5149
  });
5192
- if (readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6)) {
5150
+ const malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
5151
+ filename = fileEntry.filename;
5152
+ if (normalizeFilename) {
5153
+ const normalizedFilename = normalizeFilename(filename);
5154
+ if (normalizedFilename !== UNDEFINED_VALUE) {
5155
+ filename = fileEntry.filename = normalizedFilename;
5156
+ }
5157
+ }
5158
+ if (isUnsafeFilename(filename, filenameValidation)) {
5159
+ const error = new Error(ERR_UNSAFE_FILENAME);
5160
+ error.filename = filename;
5161
+ throw error;
5162
+ }
5163
+ if (malformedExtraField) {
5193
5164
  addWarning(warnings, WARNING_MALFORMED_EXTRA_FIELD, filename);
5194
5165
  }
5195
5166
  fileEntry.offset += prependedDataLength;
@@ -5593,7 +5564,6 @@ let ZipEntry$1 = class ZipEntry {
5593
5564
  encrypted,
5594
5565
  useWebWorkers: getOptionValue$1(zipEntry, options, OPTION_USE_WEB_WORKERS),
5595
5566
  useCompressionStream,
5596
- transferStreams: getOptionValue$1(zipEntry, options, OPTION_TRANSFER_STREAMS),
5597
5567
  deflate64,
5598
5568
  format: registeredCodec ? registeredCodec.format : UNDEFINED_VALUE,
5599
5569
  codecURI: registeredCodec ? registeredCodec.codecURI : UNDEFINED_VALUE,
@@ -5823,19 +5793,17 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
5823
5793
  readExtraFieldNTFS(extraFieldNTFS, directory);
5824
5794
  directory.extraFieldNTFS = extraFieldNTFS;
5825
5795
  }
5826
- const extraFieldUnix = extraField.get(EXTRAFIELD_TYPE_UNIX);
5796
+ const extraFieldInfoZip = extraField.get(EXTRAFIELD_TYPE_INFOZIP);
5827
5797
  let unixIdsRead;
5798
+ if (extraFieldInfoZip) {
5799
+ unixIdsRead = readExtraFieldUnix(extraFieldInfoZip, directory, true);
5800
+ directory.extraFieldInfoZip = extraFieldInfoZip;
5801
+ }
5802
+ const extraFieldUnix = extraField.get(EXTRAFIELD_TYPE_UNIX);
5828
5803
  if (extraFieldUnix) {
5829
- unixIdsRead = readExtraFieldUnix(extraFieldUnix, directory, false);
5804
+ readExtraFieldUnix(extraFieldUnix, unixIdsRead ? {} : directory, false);
5830
5805
  directory.extraFieldUnix = extraFieldUnix;
5831
5806
  }
5832
- if (!unixIdsRead) {
5833
- const extraFieldInfoZip = extraField.get(EXTRAFIELD_TYPE_INFOZIP);
5834
- if (extraFieldInfoZip) {
5835
- readExtraFieldUnix(extraFieldInfoZip, directory, true);
5836
- directory.extraFieldInfoZip = extraFieldInfoZip;
5837
- }
5838
- }
5839
5807
  const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
5840
5808
  if (extraFieldExtendedTimestamp) {
5841
5809
  readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
@@ -6722,6 +6690,7 @@ class ZipWriter {
6722
6690
  rawExtraFieldExtendedTimestamp: EMPTY_UINT8_ARRAY,
6723
6691
  rawExtraFieldNTFS: EMPTY_UINT8_ARRAY,
6724
6692
  rawExtraFieldUnix: EMPTY_UINT8_ARRAY,
6693
+ rawCentralExtraFieldUnix: EMPTY_UINT8_ARRAY,
6725
6694
  rawExtraField,
6726
6695
  rawCentralExtraField: EMPTY_UINT8_ARRAY,
6727
6696
  headerArray,
@@ -7290,7 +7259,6 @@ function resolveMetadata(zipWriter, name, options) {
7290
7259
  const ntfsTimestamp = getOptionValue(zipWriter, options, OPTION_NTFS_TIMESTAMP);
7291
7260
  const keepOrder = getOptionValue(zipWriter, options, OPTION_KEEP_ORDER, true);
7292
7261
  const useWebWorkers = getOptionValue(zipWriter, options, OPTION_USE_WEB_WORKERS);
7293
- const transferStreams = getOptionValue(zipWriter, options, OPTION_TRANSFER_STREAMS);
7294
7262
  const bufferedWrite = getOptionValue(zipWriter, options, OPTION_BUFFERED_WRITE);
7295
7263
  const createTempStream = getFunctionOptionValue(zipWriter, options, OPTION_CREATE_TEMP_STREAM);
7296
7264
  const dataDescriptorSignature = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR_SIGNATURE, true);
@@ -7356,7 +7324,6 @@ function resolveMetadata(zipWriter, name, options) {
7356
7324
  ntfsTimestamp,
7357
7325
  keepOrder,
7358
7326
  useWebWorkers,
7359
- transferStreams,
7360
7327
  bufferedWrite,
7361
7328
  createTempStream,
7362
7329
  dataDescriptorSignature,
@@ -7415,7 +7382,7 @@ async function resolveSizes(zipWriter, reader, { resolvedOptions: metadata }, op
7415
7382
  if (reader) {
7416
7383
  reader = new GenericReader(reader);
7417
7384
  await initStream(reader);
7418
- if (!reader.readable && !reader.readUint8Array) {
7385
+ if (!reader.readUint8Array && !reader.readable) {
7419
7386
  throw new Error(ERR_INVALID_READER);
7420
7387
  }
7421
7388
  ({ size: contentSize } = reader);
@@ -7776,6 +7743,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
7776
7743
  extraFieldExtendedTimestampTime,
7777
7744
  rawExtraFieldNTFS,
7778
7745
  rawExtraFieldUnix,
7746
+ rawCentralExtraFieldUnix,
7779
7747
  rawExtraFieldAES,
7780
7748
  } = headerInfo;
7781
7749
  const { dataDescriptorArray } = dataDescriptorInfo;
@@ -7800,7 +7768,6 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
7800
7768
  rawExtraField,
7801
7769
  rawCentralExtraField,
7802
7770
  useWebWorkers,
7803
- transferStreams,
7804
7771
  onstart,
7805
7772
  onprogress,
7806
7773
  onend,
@@ -7842,6 +7809,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
7842
7809
  rawExtraFieldExtendedTimestamp,
7843
7810
  rawExtraFieldNTFS,
7844
7811
  rawExtraFieldUnix,
7812
+ rawCentralExtraFieldUnix,
7845
7813
  rawExtraFieldAES,
7846
7814
  rawExtraField,
7847
7815
  rawCentralExtraField,
@@ -7888,7 +7856,6 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
7888
7856
  encrypted: encrypted && !passThroughEncryption,
7889
7857
  useWebWorkers,
7890
7858
  useCompressionStream,
7891
- transferStreams,
7892
7859
  format,
7893
7860
  codecURI,
7894
7861
  compressionMethod
@@ -8066,6 +8033,7 @@ function getHeaderInfo(options) {
8066
8033
  rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = EMPTY_UINT8_ARRAY;
8067
8034
  }
8068
8035
  let rawExtraFieldUnix;
8036
+ let rawCentralExtraFieldUnix;
8069
8037
  try {
8070
8038
  const { uid, gid, unixExtraFieldType } = options;
8071
8039
  if (unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
@@ -8080,7 +8048,7 @@ function getHeaderInfo(options) {
8080
8048
  extraFieldUnix.writeBytes(uidBytes);
8081
8049
  extraFieldUnix.writeUint8(gidBytes.length);
8082
8050
  extraFieldUnix.writeBytes(gidBytes);
8083
- rawExtraFieldUnix = extraFieldUnix.array;
8051
+ rawExtraFieldUnix = rawCentralExtraFieldUnix = extraFieldUnix.array;
8084
8052
  } else if (unixExtraFieldType == UNIX_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
8085
8053
  const extraFieldUnix = createRecordWriter(8);
8086
8054
  extraFieldUnix.writeUint16(EXTRAFIELD_TYPE_UNIX);
@@ -8088,11 +8056,15 @@ function getHeaderInfo(options) {
8088
8056
  extraFieldUnix.writeUint16((uid === UNDEFINED_VALUE ? 0 : uid) & MAX_16_BITS);
8089
8057
  extraFieldUnix.writeUint16((gid === UNDEFINED_VALUE ? 0 : gid) & MAX_16_BITS);
8090
8058
  rawExtraFieldUnix = extraFieldUnix.array;
8059
+ const centralExtraFieldUnix = createRecordWriter(4);
8060
+ centralExtraFieldUnix.writeUint16(EXTRAFIELD_TYPE_UNIX);
8061
+ centralExtraFieldUnix.writeUint16(0);
8062
+ rawCentralExtraFieldUnix = centralExtraFieldUnix.array;
8091
8063
  } else {
8092
- rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
8064
+ rawExtraFieldUnix = rawCentralExtraFieldUnix = EMPTY_UINT8_ARRAY;
8093
8065
  }
8094
8066
  } catch {
8095
- rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
8067
+ rawExtraFieldUnix = rawCentralExtraFieldUnix = EMPTY_UINT8_ARRAY;
8096
8068
  }
8097
8069
  if (compressionMethod === UNDEFINED_VALUE) {
8098
8070
  compressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;
@@ -8184,6 +8156,7 @@ function getHeaderInfo(options) {
8184
8156
  rawExtraFieldExtendedTimestamp,
8185
8157
  rawExtraFieldNTFS,
8186
8158
  rawExtraFieldUnix,
8159
+ rawCentralExtraFieldUnix,
8187
8160
  rawExtraFieldAES,
8188
8161
  extraFieldLength
8189
8162
  };
@@ -8359,7 +8332,7 @@ function createDirectoryRecords(files) {
8359
8332
  rawExtraFieldAES,
8360
8333
  rawComment,
8361
8334
  rawExtraFieldNTFS,
8362
- rawExtraFieldUnix,
8335
+ rawCentralExtraFieldUnix,
8363
8336
  rawExtraField,
8364
8337
  rawCentralExtraField,
8365
8338
  extraFieldExtendedTimestampFlag,
@@ -8421,7 +8394,7 @@ function createDirectoryRecords(files) {
8421
8394
  rawExtraFieldZip64,
8422
8395
  rawExtraFieldAES,
8423
8396
  rawExtraFieldNTFS,
8424
- rawExtraFieldUnix,
8397
+ rawCentralExtraFieldUnix,
8425
8398
  rawExtraFieldTimestamp,
8426
8399
  rawExtraField,
8427
8400
  rawCentralExtraField);
@@ -8450,7 +8423,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
8450
8423
  rawExtraFieldAES,
8451
8424
  rawExtraFieldExtendedTimestamp,
8452
8425
  rawExtraFieldNTFS,
8453
- rawExtraFieldUnix,
8426
+ rawCentralExtraFieldUnix,
8454
8427
  rawExtraField,
8455
8428
  rawCentralExtraField,
8456
8429
  rawComment,
@@ -8467,7 +8440,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
8467
8440
  uncompressedSize,
8468
8441
  compressedSize
8469
8442
  } = fileEntry;
8470
- const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField, rawCentralExtraField);
8443
+ const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawCentralExtraFieldUnix, rawExtraField, rawCentralExtraField);
8471
8444
  const directoryRecordLength = CENTRAL_FILE_HEADER_LENGTH + getLength(rawFilename, rawComment) + extraFieldLength;
8472
8445
  if (exceedsAvailableSize(writer, offset + directoryRecordLength - directoryDiskOffset)) {
8473
8446
  await writeData(writer, directoryArray.slice(directoryDiskOffset, offset));
@@ -8503,7 +8476,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
8503
8476
  directoryRecord.writeBytes(rawExtraFieldAES);
8504
8477
  directoryRecord.writeBytes(rawExtraFieldExtendedTimestamp);
8505
8478
  directoryRecord.writeBytes(rawExtraFieldNTFS);
8506
- directoryRecord.writeBytes(rawExtraFieldUnix);
8479
+ directoryRecord.writeBytes(rawCentralExtraFieldUnix);
8507
8480
  directoryRecord.writeBytes(rawExtraField);
8508
8481
  directoryRecord.writeBytes(rawCentralExtraField);
8509
8482
  directoryRecord.writeBytes(rawComment);
@@ -9080,7 +9053,7 @@ function formatSupported(StreamClass, format) {
9080
9053
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
9081
9054
  */
9082
9055
 
9083
- const VERSION = "2.18.2";
9056
+ const VERSION = "2.19.0";
9084
9057
 
9085
9058
  /*
9086
9059
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.