@zip.js/zip.js 2.8.53 → 2.8.55

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 (48) hide show
  1. package/README.md +1 -1
  2. package/deno.json +2 -1
  3. package/dist/zip-core-external.js +737 -491
  4. package/dist/zip-core-external.min.js +1 -1
  5. package/dist/zip-core.js +745 -490
  6. package/dist/zip-core.min.js +1 -1
  7. package/dist/zip-fs-core-external.js +776 -525
  8. package/dist/zip-fs-core-external.min.js +1 -1
  9. package/dist/zip-fs-core.js +738 -510
  10. package/dist/zip-fs-core.min.js +1 -1
  11. package/dist/zip-fs-external.js +776 -525
  12. package/dist/zip-fs-external.min.js +1 -1
  13. package/dist/zip-fs-native.js +790 -525
  14. package/dist/zip-fs-native.min.js +1 -1
  15. package/dist/zip-fs.js +791 -526
  16. package/dist/zip-fs.min.js +1 -1
  17. package/dist/zip-legacy.js +746 -491
  18. package/dist/zip-legacy.min.js +1 -1
  19. package/dist/zip-native.js +746 -491
  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 +747 -492
  24. package/dist/zip.min.js +1 -1
  25. package/eslint.config.mjs +1 -0
  26. package/index-native.cjs +790 -525
  27. package/index-native.min.js +1 -1
  28. package/index.cjs +791 -526
  29. package/index.d.cts +422 -49
  30. package/index.d.ts +422 -49
  31. package/index.min.js +1 -1
  32. package/lib/core/configuration.js +62 -21
  33. package/lib/core/constants.js +13 -1
  34. package/lib/core/io.js +33 -27
  35. package/lib/core/options.js +44 -2
  36. package/lib/core/streams/aes-crypto-stream.js +12 -12
  37. package/lib/core/util/decode-text.js +11 -2
  38. package/lib/core/web-worker-base.js +3 -2
  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-fs.js +39 -32
  42. package/lib/core/zip-reader.js +100 -38
  43. package/lib/core/zip-writer.js +301 -177
  44. package/lib/core/zlib-streams-inline.js +1 -1
  45. package/lib/zip-core-base.js +6 -1
  46. package/lib/zip-core-reader.js +1 -0
  47. package/lib/zip-core-writer.js +5 -0
  48. package/package.json +8 -2
package/dist/zip.js CHANGED
@@ -45,6 +45,7 @@
45
45
 
46
46
  const LOCAL_FILE_HEADER_SIGNATURE = 0x04034b50;
47
47
  const SPLIT_ZIP_FILE_SIGNATURE = 0x08074b50;
48
+ const TEMPORARY_SPLIT_ZIP_FILE_SIGNATURE = 0x30304b50;
48
49
  const DATA_DESCRIPTOR_RECORD_SIGNATURE = SPLIT_ZIP_FILE_SIGNATURE;
49
50
  const ARCHIVE_EXTRA_DATA_SIGNATURE = 0x08064b50;
50
51
  const DIGITAL_SIGNATURE_RECORD_SIGNATURE = 0x05054b50;
@@ -61,6 +62,7 @@
61
62
  const DATA_DESCRIPTOR_RECORD_LENGTH = 12;
62
63
  const DATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH = 20;
63
64
  const DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH = 4;
65
+ const SPLIT_ZIP_FILE_SIGNATURE_LENGTH = 4;
64
66
 
65
67
  const EXTRAFIELD_TYPE_ZIP64 = 0x0001;
66
68
  const EXTRAFIELD_TYPE_AES = 0x9901;
@@ -83,6 +85,7 @@
83
85
  const BITFLAG_DATA_DESCRIPTOR = 0b1000;
84
86
  const BITFLAG_STRONG_ENCRYPTION = 0b1000000;
85
87
  const BITFLAG_LANG_ENCODING_FLAG = 0b100000000000;
88
+ const BITFLAG_MASKED_LOCAL_HEADERS = 0b10000000000000;
86
89
  const FILE_ATTR_MSDOS_DIR_MASK = 0b10000;
87
90
  const FILE_ATTR_MSDOS_READONLY_MASK = 0x01;
88
91
  const FILE_ATTR_MSDOS_HIDDEN_MASK = 0x02;
@@ -112,6 +115,8 @@
112
115
  const HEADER_OFFSET_SIGNATURE = 10;
113
116
  const HEADER_OFFSET_COMPRESSED_SIZE = 14;
114
117
  const HEADER_OFFSET_UNCOMPRESSED_SIZE = 18;
118
+ const HEADER_OFFSET_FILENAME_LENGTH = 22;
119
+ const HEADER_OFFSET_EXTRAFIELD_LENGTH = 24;
115
120
  const LOCAL_HEADER_COMMON_OFFSET = 4;
116
121
 
117
122
  const MAX_DATE = new Date(2107, 11, 31, 23, 59, 58);
@@ -124,9 +129,116 @@
124
129
  const OBJECT_TYPE = "object";
125
130
  const STRING_TYPE = "string";
126
131
  const NUMBER_TYPE = "number";
132
+ const BOOLEAN_TYPE = "boolean";
127
133
 
128
134
  const EMPTY_UINT8_ARRAY = new Uint8Array();
129
135
 
136
+ /*
137
+ Copyright (c) 2022 Gildas Lormeau. All rights reserved.
138
+
139
+ Redistribution and use in source and binary forms, with or without
140
+ modification, are permitted provided that the following conditions are met:
141
+
142
+ 1. Redistributions of source code must retain the above copyright notice,
143
+ this list of conditions and the following disclaimer.
144
+
145
+ 2. Redistributions in binary form must reproduce the above copyright
146
+ notice, this list of conditions and the following disclaimer in
147
+ the documentation and/or other materials provided with the distribution.
148
+
149
+ 3. The names of the authors may not be used to endorse or promote products
150
+ derived from this software without specific prior written permission.
151
+
152
+ THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
153
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
154
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
155
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
156
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
157
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
158
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
159
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
160
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
161
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
162
+ */
163
+
164
+
165
+ const OPTION_FILENAME_ENCODING = "filenameEncoding";
166
+ const OPTION_COMMENT_ENCODING = "commentEncoding";
167
+ const OPTION_DECODE_TEXT = "decodeText";
168
+ const OPTION_EXTRACT_PREPENDED_DATA = "extractPrependedData";
169
+ const OPTION_EXTRACT_APPENDED_DATA = "extractAppendedData";
170
+ const OPTION_PASSWORD = "password";
171
+ const OPTION_RAW_PASSWORD = "rawPassword";
172
+ const OPTION_PASS_THROUGH = "passThrough";
173
+ const OPTION_SIGNAL = "signal";
174
+ const OPTION_CHECK_PASSWORD_ONLY = "checkPasswordOnly";
175
+ const OPTION_CHECK_OVERLAPPING_ENTRY_ONLY = "checkOverlappingEntryOnly";
176
+ const OPTION_CHECK_OVERLAPPING_ENTRY = "checkOverlappingEntry";
177
+ const OPTION_CHECK_AMBIGUITY = "checkAmbiguity";
178
+ const OPTION_CHECK_LOCAL_DIRECTORY = "checkLocalDirectory";
179
+ const OPTION_CHECK_SIGNATURE = "checkSignature";
180
+ const OPTION_CHECK_CRC32 = "checkCrc32";
181
+ const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
182
+ const OPTION_USE_WEB_WORKERS = "useWebWorkers";
183
+ const OPTION_USE_COMPRESSION_STREAM = "useCompressionStream";
184
+ const OPTION_TRANSFER_STREAMS = "transferStreams";
185
+ const OPTION_PREVENT_CLOSE = "preventClose";
186
+ const OPTION_ENCRYPTION_STRENGTH = "encryptionStrength";
187
+ const OPTION_EXTENDED_TIMESTAMP = "extendedTimestamp";
188
+ const OPTION_NTFS_TIMESTAMP = "ntfsTimestamp";
189
+ const OPTION_KEEP_ORDER = "keepOrder";
190
+ const OPTION_LEVEL = "level";
191
+ const OPTION_BUFFERED_WRITE = "bufferedWrite";
192
+ const OPTION_CREATE_TEMP_STREAM = "createTempStream";
193
+ const OPTION_DATA_DESCRIPTOR_SIGNATURE = "dataDescriptorSignature";
194
+ const OPTION_USE_UNICODE_FILE_NAMES = "useUnicodeFileNames";
195
+ const OPTION_DATA_DESCRIPTOR = "dataDescriptor";
196
+ const OPTION_SUPPORT_ZIP64_SPLIT_FILE = "supportZip64SplitFile";
197
+ const OPTION_ENCODE_TEXT = "encodeText";
198
+ const OPTION_OFFSET = "offset";
199
+ const OPTION_USDZ = "usdz";
200
+ const OPTION_UNIX_EXTRA_FIELD_TYPE = "unixExtraFieldType";
201
+ const OPTION_LOCAL_EXTRA_FIELD = "localExtraField";
202
+ const OPTION_STRICTNESS = "strictness";
203
+ const OPTION_FILENAME_VALIDATION = "filenameValidation";
204
+ const OPTION_NORMALIZE_FILENAME = "normalizeFilename";
205
+ const OPTION_MAX_APPENDED_DATA_SIZE = "maxAppendedDataSize";
206
+ const OPTION_DECRYPT_CENTRAL_DIRECTORY = "decryptCentralDirectory";
207
+ const OPTION_SIGN_CENTRAL_DIRECTORY = "signCentralDirectory";
208
+ const TEXT_TYPE_FILENAME = "filename";
209
+ const TEXT_TYPE_COMMENT = "comment";
210
+ const STRICTNESS_STRICT = "strict";
211
+ const STRICTNESS_BALANCED = "balanced";
212
+ const STRICTNESS_TOLERANT = "tolerant";
213
+
214
+ const ERR_INVALID_FUNCTION_OPTION = "Invalid option (must be a function)";
215
+ const ERR_INVALID_SIGNAL = "Invalid signal (must be an AbortSignal instance)";
216
+ const ERR_INVALID_PASSWORD_TYPE = "Invalid password (password must be a string, rawPassword must be a Uint8Array)";
217
+
218
+ function checkFunctionOption(value) {
219
+ if (value && typeof value != FUNCTION_TYPE) {
220
+ throw new Error(ERR_INVALID_FUNCTION_OPTION);
221
+ }
222
+ return value;
223
+ }
224
+
225
+ function checkSignalOption(signal) {
226
+ if (signal && (typeof signal.addEventListener != FUNCTION_TYPE || typeof signal.aborted != BOOLEAN_TYPE)) {
227
+ throw new Error(ERR_INVALID_SIGNAL);
228
+ }
229
+ return signal || UNDEFINED_VALUE;
230
+ }
231
+
232
+ function checkPasswordOption(password, rawPassword) {
233
+ if ((password && typeof password != STRING_TYPE) || (rawPassword && !(rawPassword instanceof Uint8Array))) {
234
+ throw new Error(ERR_INVALID_PASSWORD_TYPE);
235
+ }
236
+ }
237
+
238
+ function toNumber(value) {
239
+ return typeof value == STRING_TYPE && value.trim() ? Number(value) : value;
240
+ }
241
+
130
242
  /*
131
243
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
132
244
 
@@ -156,7 +268,10 @@
156
268
  */
157
269
 
158
270
 
271
+ const DEFAULT_CHUNK_SIZE$1 = 64 * 1024;
159
272
  const MINIMUM_CHUNK_SIZE = 64;
273
+ const MINIMUM_PROPERTY_VALUE = 1;
274
+ const ERR_INVALID_MAX_WORKERS = "Invalid maxWorkers (must be an integer greater than 0)";
160
275
  let maxWorkers = 2;
161
276
  try {
162
277
  if (typeof navigator != UNDEFINED_TYPE && navigator.hardwareConcurrency) {
@@ -168,7 +283,7 @@
168
283
  const DEFAULT_CONFIGURATION = {
169
284
  workerURI: "./core/web-worker-wasm.js",
170
285
  wasmURI: "./core/streams/zlib-wasm/zlib-streams.wasm",
171
- chunkSize: 64 * 1024,
286
+ chunkSize: DEFAULT_CHUNK_SIZE$1,
172
287
  maxWorkers,
173
288
  terminateWorkerTimeout: 5000,
174
289
  workerStarvationTimeout: 5000,
@@ -180,24 +295,38 @@
180
295
  DecompressionStream: typeof DecompressionStream != UNDEFINED_TYPE && DecompressionStream
181
296
  };
182
297
 
183
- const CONFIGURABLE_PROPERTY_NAMES = [
298
+ const PROPERTY_NAME_MAX_WORKERS = "maxWorkers";
299
+
300
+ const STRING_PROPERTY_NAMES = [
184
301
  "baseURI",
185
302
  "wasmURI",
186
- "workerURI",
187
- "createWorker",
303
+ "workerURI"
304
+ ];
305
+ const BOOLEAN_PROPERTY_NAMES = [
306
+ "useCompressionStream",
307
+ "useWebWorkers",
308
+ "transferStreams"
309
+ ];
310
+ const NUMBER_PROPERTY_NAMES = [
188
311
  "chunkSize",
189
- "maxWorkers",
312
+ PROPERTY_NAME_MAX_WORKERS,
190
313
  "terminateWorkerTimeout",
191
314
  "workerStarvationTimeout",
192
- "workerStartupTimeout",
193
- "useCompressionStream",
194
- "useWebWorkers",
195
- "transferStreams",
315
+ "workerStartupTimeout"
316
+ ];
317
+ const FUNCTION_PROPERTY_NAMES = [
318
+ "createWorker",
196
319
  "CompressionStream",
197
320
  "DecompressionStream",
198
321
  "CompressionStreamFallback",
199
322
  "DecompressionStreamFallback"
200
323
  ];
324
+ const CONFIGURABLE_PROPERTY_NAMES = [
325
+ ...STRING_PROPERTY_NAMES,
326
+ ...BOOLEAN_PROPERTY_NAMES,
327
+ ...NUMBER_PROPERTY_NAMES,
328
+ ...FUNCTION_PROPERTY_NAMES
329
+ ];
201
330
 
202
331
  const config = { ...DEFAULT_CONFIGURATION };
203
332
 
@@ -206,20 +335,43 @@
206
335
  }
207
336
 
208
337
  function getChunkSize(config) {
209
- return Math.max(config.chunkSize, MINIMUM_CHUNK_SIZE);
338
+ return normalizeChunkSize(config.chunkSize);
339
+ }
340
+
341
+ function normalizeChunkSize(chunkSize) {
342
+ chunkSize = toNumber(chunkSize);
343
+ return Number.isInteger(chunkSize) && chunkSize >= MINIMUM_PROPERTY_VALUE ? Math.max(chunkSize, MINIMUM_CHUNK_SIZE) : DEFAULT_CHUNK_SIZE$1;
210
344
  }
211
345
 
212
346
  function configure(configuration) {
213
- configuration = normalizeConfiguration(configuration);
347
+ Object.assign(config, checkConfiguration(normalizeConfiguration(configuration)));
348
+ }
349
+
350
+ function checkConfiguration(configuration) {
351
+ const checkedConfiguration = {};
214
352
  for (const propertyName of CONFIGURABLE_PROPERTY_NAMES) {
215
353
  const propertyValue = configuration[propertyName];
216
354
  if (propertyValue !== UNDEFINED_VALUE) {
217
- config[propertyName] = propertyValue;
355
+ checkedConfiguration[propertyName] = checkPropertyValue(propertyName, propertyValue);
218
356
  }
219
357
  }
358
+ return checkedConfiguration;
359
+ }
360
+
361
+ function checkPropertyValue(propertyName, propertyValue) {
362
+ if (NUMBER_PROPERTY_NAMES.includes(propertyName)) {
363
+ propertyValue = toNumber(propertyValue);
364
+ if (propertyName == PROPERTY_NAME_MAX_WORKERS && (!Number.isInteger(propertyValue) || propertyValue < MINIMUM_PROPERTY_VALUE)) {
365
+ throw new Error(ERR_INVALID_MAX_WORKERS);
366
+ }
367
+ } else if (FUNCTION_PROPERTY_NAMES.includes(propertyName)) {
368
+ checkFunctionOption(propertyValue);
369
+ }
370
+ return propertyValue;
220
371
  }
221
372
 
222
373
  function normalizeConfiguration(configuration) {
374
+ configuration = configuration || {};
223
375
  const { CompressionStreamZlib, DecompressionStreamZlib } = configuration;
224
376
  if (CompressionStreamZlib === UNDEFINED_VALUE && DecompressionStreamZlib === UNDEFINED_VALUE) {
225
377
  return configuration;
@@ -235,14 +387,9 @@
235
387
  }
236
388
 
237
389
  function setDefaultConfiguration(configuration) {
238
- configuration = normalizeConfiguration(configuration);
239
- for (const propertyName of CONFIGURABLE_PROPERTY_NAMES) {
240
- const propertyValue = configuration[propertyName];
241
- if (propertyValue !== UNDEFINED_VALUE) {
242
- DEFAULT_CONFIGURATION[propertyName] = propertyValue;
243
- }
244
- }
245
- configure(configuration);
390
+ const checkedConfiguration = checkConfiguration(normalizeConfiguration(configuration));
391
+ Object.assign(DEFAULT_CONFIGURATION, checkedConfiguration);
392
+ Object.assign(config, checkedConfiguration);
246
393
  }
247
394
 
248
395
  function resetConfiguration() {
@@ -252,7 +399,7 @@
252
399
  Object.assign(config, DEFAULT_CONFIGURATION);
253
400
  }
254
401
 
255
- const t$1=new Uint8Array(288);t$1.fill(8,0,144),t$1.fill(9,144,256),t$1.fill(7,256,280),t$1.fill(8,280,288),new Uint8Array(30).fill(5);const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n$1=t=>t({workerURI:t=>{const n="text/javascript";let s='(t=>{"function"==typeof define&&define.amd?define(t):t()})(function(){"use strict";const{Array:t,Object:e,Number:n,Math:s,Error:r,Uint8Array:o,Uint16Array:c,Uint32Array:i,Int32Array:a,Map:f,DataView:l,Promise:w,TextEncoder:u,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:S,DecompressionStream:g}=self,v=void 0,b="undefined",k="function",z=new o,C=[[],[],[],[],[],[],[],[]];for(let t=0;256>t;t++){let e=t;for(let t=0;8>t;t++)e=1&e?e>>>1^3988292384:e>>>1;C[0][t]=e}for(let t=0;256>t;t++)for(let e=1;8>e;e++){const n=C[e-1][t];C[e][t]=n>>>8^C[0][255&n]}const[A,I,x,M,P,D,F,B]=C;class R{constructor(t){this.o=t||-1}append(t){let e=0|this.o;const n=0|t.length;let s=0;if(n>=8&&t.buffer){const r=new l(t.buffer,t.byteOffset,n),o=n-8;for(;o>=s;s+=8){const t=e^r.getInt32(s,!0),n=r.getInt32(s+4,!0);e=B[255&t]^F[t>>>8&255]^D[t>>>16&255]^P[t>>>24&255]^M[255&n]^x[n>>>8&255]^I[n>>>16&255]^A[n>>>24&255]}}for(;n>s;s++)e=e>>>8^A[255&(e^t[s])];this.o=e}get(){return~this.o}}class U extends d{constructor(){let t;const e=new R;super({transform(t,n){e.append(t),n.enqueue(t)},flush(){const n=new o(4);new l(n.buffer).setUint32(0,e.get()),t.value=n}}),t=this}}function W(t,e){const n=new o(t.length+e.length);return n.set(t),n.set(e,t.length),n}function _(t){return new l(t.buffer,t.byteOffset,t.byteLength)}const T={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=T.l(n);return 32===s?t.concat(e):T.h(e,s,0|n,t.slice(0,t.length-1))},bitLength(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+T.l(n)},m(t,e){if(32*t.length<e)return t;const n=(t=t.slice(0,s.ceil(e/32))).length;return e&=31,n>0&&e&&(t[n-1]=T.S(e,t[n-1]&2147483648>>e-1,1)),t},S:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,e,n,s){for(void 0===s&&(s=[]);e>=32;e-=32)s.push(n),n=0;if(0===e)return s.concat(t);for(let r=0;r<t.length;r++)s.push(n|t[r]>>>e),n=t[r]<<32-e;const r=t.length?t[t.length-1]:0,o=T.l(r);return s.push(T.S(e+o&31,e+o>32?n:s.pop(),1)),s}},V={bytes:{v(t){const e=T.bitLength(t)/8,n=new o(e);let s;for(let r=0;e>r;r++)3&r||(s=t[r/4]),n[r]=s>>>24,s<<=8;return n},C(t){const e=[];let n,s=0;for(n=0;n<t.length;n++)s=s<<8|t[n],3&~n||(e.push(s),s=0);return 3&n&&e.push(T.S(8*(3&n),s)),e}}},K=class{constructor(t){const e=this;e.blockSize=512,e.A=[1732584193,4023233417,2562383102,271733878,3285377520],e.I=[1518500249,1859775393,2400959708,3395469782],t?(e.M=t.M.slice(0),e.P=t.P.slice(0),e.D=t.D):e.reset()}reset(){const t=this;return t.M=t.A.slice(0),t.P=[],t.D=0,t}update(t){const e=this;"string"==typeof t&&(t=V.F.C(t));const n=e.P=T.concat(e.P,t),s=e.D,o=e.D=s+T.bitLength(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new i(n);let a=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);o>=t;t+=e.blockSize)e.B(c.subarray(16*a,16*(a+1))),a+=1;return n.splice(0,16*a),e}R(){const t=this;let e=t.P;const n=t.M;e=T.concat(e,[T.S(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.D/4294967296)),e.push(0|t.D);e.length;)t.B(e.splice(0,16));return t.reset(),n}U(t,e,n,s){return t>19?t>39?t>59?t>79?void 0:e^n^s:e&n|e&s|n&s:e^n^s:e&n|~e&s}W(t,e){return e<<t|e>>>32-t}B(e){const n=this,r=n.M,o=t(80);for(let t=0;16>t;t++)o[t]=e[t];let c=r[0],i=r[1],a=r[2],f=r[3],l=r[4];for(let t=0;79>=t;t++){16>t||(o[t]=n.W(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n.W(5,c)+n.U(t,i,a,f)+l+o[t]+n.I[s.floor(t/20)]|0;l=f,f=a,a=n.W(30,i),i=c,c=e}r[0]=r[0]+c|0,r[1]=r[1]+i|0,r[2]=r[2]+a|0,r[3]=r[3]+f|0,r[4]=r[4]+l|0}},E={importKey:t=>new E._(V.bytes.C(t)),T(t,e,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let c,i,a,f,w;const u=new ArrayBuffer(o),h=new l(u);let p=0;const d=T;for(e=V.bytes.C(e),w=1;(o||1)>p;w++){for(c=i=t.encrypt(d.concat(e,[w])),a=1;n>a;a++)for(i=t.encrypt(i),f=0;f<i.length;f++)c[f]^=i[f];for(a=0;(o||1)>p&&a<c.length;a++)h.setInt32(p,c[a]),p+=4}return u.slice(0,s/8)},_:class{constructor(t){const e=this,n=e.V=K,s=[[],[]];e.K=[new n,new n];const r=e.K[0].blockSize/32;t.length>r&&(t=(new n).update(t).R());for(let e=0;r>e;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e.K[0].update(s[0]),e.K[1].update(s[1]),e.L=new n(e.K[0])}reset(){const t=this;t.L=new t.V(t.K[0]),t.O=!1}update(t){this.O=!0,this.L.update(t)}digest(){const t=this,e=t.L.R(),n=new t.V(t.K[1]).update(e).R();return t.reset(),n}encrypt(t){if(this.O)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},L=typeof h!=b&&typeof h.getRandomValues==k,O="Invalid password",j="Invalid signature",H=j,N="zipjs-abort-check-password";function q(t){if(L)return h.getRandomValues(t);throw new r("Crypto API not supported")}const G=16,J={name:"PBKDF2"},Q=e.assign({hash:{name:"HMAC"}},J),X=e.assign({iterations:1e3,hash:{name:"SHA-1"}},J),Y=["deriveBits"],Z=[8,12,16],$=[16,24,32],tt=10,et=[0,0,0,0],nt=typeof h!=b,st=nt&&h.subtle,rt=nt&&typeof st!=b,ot=V.bytes,ct=class{constructor(t){const e=this;e.j=[[[],[],[],[],[]],[[],[],[],[],[]]],e.j[0][0][0]||e.H();const n=e.j[0][4],s=e.j[1],o=t.length;let c,i,a,f=1;if(4!==o&&6!==o&&8!==o)throw new r("invalid aes key size");for(e.I=[i=t.slice(0),a=[]],c=o;4*o+28>c;c++){let t=i[c-1];(c%o===0||8===o&&c%o===4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],c%o===0&&(t=t<<8^t>>>24^f<<24,f=f<<1^283*(f>>7))),i[c]=i[c-o]^t}for(let t=0;c;t++,c--){const e=i[3&t?c:c-4];a[t]=4>=c||4>t?e:s[0][n[e>>>24]]^s[1][n[e>>16&255]]^s[2][n[e>>8&255]]^s[3][n[255&e]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}H(){const t=this.j[0],e=this.j[1],n=t[4],s=e[4],r=[],o=[];let c,i,a,f;for(let t=0;256>t;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let l=c=0;!n[l];l^=i||1,c=o[c]||1){let o=c^c<<1^c<<2^c<<3^c<<4;o=o>>8^255&o^99,n[l]=o,s[o]=l,f=r[a=r[i=r[l]]];let w=16843009*f^65537*a^257*i^16843008*l,u=257*r[o]^16843008*o;for(let n=0;4>n;n++)t[n][l]=u=u<<24^u>>>8,e[n][o]=w=w<<24^w>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}N(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.I[e],s=n.length/4-2,o=[0,0,0,0],c=this.j[e],i=c[0],a=c[1],f=c[2],l=c[3],w=c[4];let u,h,p,d=t[0]^n[0],y=t[e?3:1]^n[1],m=t[2]^n[2],S=t[e?1:3]^n[3],g=4;for(let t=0;s>t;t++)u=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^l[255&S]^n[g],h=i[y>>>24]^a[m>>16&255]^f[S>>8&255]^l[255&d]^n[g+1],p=i[m>>>24]^a[S>>16&255]^f[d>>8&255]^l[255&y]^n[g+2],S=i[S>>>24]^a[d>>16&255]^f[y>>8&255]^l[255&m]^n[g+3],g+=4,d=u,y=h,m=p;for(let t=0;4>t;t++)o[e?3&-t:t]=w[d>>>24]<<24^w[y>>16&255]<<16^w[m>>8&255]<<8^w[255&S]^n[g++],u=d,d=y,y=m,m=S,S=u;return o}},it=class{constructor(t,e){this.G=t,this.J=e,this.X=e}reset(){this.X=this.J}update(t){return this.Y(this.G,t,this.X)}Z(t){if(255&~(t>>24))t+=1<<24;else{let e=t>>16&255,n=t>>8&255,s=255&t;255===e?(e=0,255===n?(n=0,255===s?s=0:++s):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=s}return t}$(t){0===(t[0]=this.Z(t[0]))&&(t[1]=this.Z(t[1]))}Y(t,e,n){let s;if(!(s=e.length))return[];const r=T.bitLength(e);for(let r=0;s>r;r+=4){this.$(n);const s=t.encrypt(n);e[r]^=s[0],e[r+1]^=s[1],e[r+2]^=s[2],e[r+3]^=s[3]}return T.m(e,r)}},at=E._;let ft=nt&&rt&&typeof st.importKey==k,lt=nt&&rt&&typeof st.deriveBits==k;class wt extends d{constructor({password:t,rawPassword:e,encryptionStrength:n,checkPasswordOnly:s,checkAuthenticationCode:c=!0}){super({start(){ht(this,t,e,n)},async transform(t,e){const n=this,{password:c,strength:i,et:a,ready:f}=n;c?(await(async(t,e,n,s)=>{const o=await dt(t,e,n,mt(s,0,Z[e])),c=mt(s,Z[e]);if(o[0]!=c[0]||o[1]!=c[1])throw new r(O)})(n,i,c,mt(t,0,Z[i]+2)),t=mt(t,Z[i]+2),s?e.error(new r(N)):a()):await f;const l=new o(t.length-tt-(t.length-tt)%G);e.enqueue(pt(n,t,l,0,tt,!0))},async flush(t){const{nt:e,st:n,pending:s,ready:o}=this;if(n&&e){await o;const i=mt(s,0,s.length-tt),a=mt(s,s.length-tt);let f=z;if(i.length){const t=gt(ot,i);n.update(t);const s=e.update(t);f=St(ot,s)}const l=mt(St(ot,n.digest()),0,tt);let w=s.length<tt?1:0;for(let t=0;tt>t;t++)w|=l[t]^a[t];if(w&&c)throw new r(H);t.enqueue(f)}}})}}class ut extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){super({start(){ht(this,t,e,n)},async transform(t,e){const n=this,{password:s,strength:r,et:c,ready:i}=n;let a=z;s?(a=await(async(t,e,n)=>{const s=q(new o(Z[e]));return W(s,await dt(t,e,n,s))})(n,r,s),c()):await i;const f=new o(a.length+t.length-t.length%G);f.set(a,0),e.enqueue(pt(n,t,f,a.length,0))},async flush(t){const{nt:e,st:n,pending:s,ready:r}=this;if(n&&e){await r;let o=z;if(s.length){const t=e.update(gt(ot,s));n.update(t),o=St(ot,t)}const c=St(ot,n.digest()).slice(0,tt);t.enqueue(W(o,c))}}})}}function ht(t,n,s,r){e.assign(t,{ready:new w(e=>t.et=e),password:yt(n,s),strength:r-1,pending:z})}function pt(t,e,n,s,r,c){const{nt:i,st:a,pending:f}=t;f.length&&(e=W(f,e));const l=e.length-r;let w;for(n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new o(e)).set(n,0)}return t})(n,s+(l-l%G)),w=0;l-G>=w;w+=G){const t=gt(ot,mt(e,w,w+G));c&&a.update(t);const r=i.update(t);c||a.update(r),n.set(St(ot,r),w+s)}return t.pending=mt(e,w),n}async function dt(n,s,r,c){n.password=null;const i=await(async(t,e,n,s,r)=>{if(!ft)return E.importKey(e);try{return await st.importKey("raw",e,n,!1,r)}catch{return ft=!1,E.importKey(e)}})(0,r,Q,0,Y),a=await(async(t,e,n)=>{if(!lt)return E.T(e,t.salt,X.iterations,n);try{return await st.deriveBits(t,e,n)}catch{return lt=!1,E.T(e,t.salt,X.iterations,n)}})(e.assign({salt:c},X),i,8*(2*$[s]+2)),f=new o(a),l=gt(ot,mt(f,0,$[s])),w=gt(ot,mt(f,$[s],2*$[s])),u=mt(f,2*$[s]);return e.assign(n,{keys:{key:l,ot:w,passwordVerification:u},nt:new it(new ct(l),t.from(et)),st:new at(w)}),u}function yt(t,e){return e===v?(t=>{if(typeof u==b){const e=new o((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new u).encode(t)})(t):e}function mt(t,e,n){return t.subarray(e,n)}function St(t,e){return t.v(e)}function gt(t,e){return t.C(e)}class vt extends d{constructor({password:t,rawPassword:e,passwordVerification:n,checkPasswordOnly:s}){super({start(){kt(this,t,e,n)},transform(t,e){const n=this;if(n.password||n.rawPassword){const e=zt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e[11]^n.passwordVerification))throw new r(O);t=t.subarray(12)}s?e.error(new r(N)):e.enqueue(zt(n,t))}})}}class bt extends d{constructor({password:t,rawPassword:e,passwordVerification:n}){super({start(){kt(this,t,e,n)},transform(t,e){const n=this;let s,r;if(n.password||n.rawPassword){n.password=n.rawPassword=null;const e=q(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(Ct(n,e),0),r=12}else s=new o(t.length),r=0;s.set(Ct(n,t),r),e.enqueue(s)}})}}function kt(t,n,s,r){e.assign(t,{password:n,rawPassword:s,passwordVerification:r}),((t,n,s)=>{const r=[305419896,591751049,878082192];if(e.assign(t,{keys:r,ct:new R(r[0]),it:new R(r[2])}),s)for(let e=0;e<s.length;e++)At(t,s[e]);else for(let e=0;e<n.length;e++)At(t,n.charCodeAt(e))})(t,n,s)}function zt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=It(t)^e[s],At(t,n[s]);return n}function Ct(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=It(t)^e[s],At(t,e[s]);return n}function At(t,e){let[,n]=t.keys;t.ct.append([e]);const r=~t.ct.get();n=Mt(s.imul(Mt(n+xt(r)),134775813)+1),t.it.append([n>>>24]);const o=~t.it.get();t.keys=[r,n,o]}function It(t){const e=2|t.keys[2];return xt(s.imul(e,1^e)>>>8)}function xt(t){return 255&t}function Mt(t){return 4294967295&t}const Pt=new f;function Dt(t){return Pt.get(t)}const Ft="Invalid uncompressed size",Bt=j,Rt="deflate-raw",Ut="gzip",Wt=[31,139,8];class _t extends d{constructor(t,{chunkSize:e,CompressionStreamFallback:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:c,zipCrypto:i,computeCrc32:a,level:f,deflate64:w,format:u,compressionMethod:h}=t,p=this;let d,y,m,S=super.readable;const g=u&&Dt(u),v=a&&r&&!w&&!g&&(!o||i)&&!(!c||!s);if(o&&!i||!a||v||(d=new U,S=jt(S,d)),r)if(g)S=Ht(S,Lt(g.CompressionStream,u,{level:f,chunkSize:e,compressionMethod:h}));else if(v)m=new Tt,S=Ht(S,new s(Ut)),S=jt(S,m);else try{S=Ot(S,c,{level:f,chunkSize:e},s,n)}catch(t){let e;try{e=new s(Ut)}catch{throw t}S=Ht(S,e),S=jt(S,new Tt)}o&&(i?S=jt(S,new bt(t)):(y=new ut(t),S=jt(S,y))),Et(p,S,()=>{o&&!i||!a||(p.crc32=v?m.crc32:new l(d.value.buffer).getUint32(0))})}}class Tt extends d{constructor(){let t,e=10,n=new o(0);super({transform(t,r){if(e){const n=s.min(e,t.length);if(e-=n,!(t=t.subarray(n)).length)return}const o=n.length+t.length;if(8>=o)return void(n=W(n,t));const c=o-8,i=s.min(c,n.length);r.enqueue(W(n.subarray(0,i),t.subarray(0,c-i))),n=W(n.subarray(i),t.subarray(c-i))},flush(){const e=_(n);t.crc32=e.getUint32(0,!0),t.uncompressedSize=e.getUint32(4,!0)}}),t=this}}class Vt extends d{constructor(t,{chunkSize:e,DecompressionStreamFallback:n,DecompressionStream:s}){super({});const{zipCrypto:c,encrypted:i,checkCrc32:a,crc32:f,compressed:u,useCompressionStream:h,deflate64:p,format:m,compressionMethod:S,rawBitFlag:g,outputSize:b}=t;let k,z,C=super.readable;if(i&&(c?C=jt(C,new vt(t)):(z=new wt(t),C=jt(C,z))),u){const t=m&&Dt(m);if(t)C=Ht(C,Lt(t.DecompressionStream,m,{chunkSize:e,compressionMethod:S,rawBitFlag:g,uncompressedSize:b}));else try{C=Ot(C,h,{chunkSize:e,deflate64:p},s,n)}catch(t){if(p||b===v)throw t;let e;try{e=new s(Ut)}catch{throw t}C=((t,e,n)=>{const s=new R;let c,i,a,f=0,l=!1;const u=new w((t,e)=>{i=t,a=e});u.catch(()=>{}),n||i();const h=new d({start(t){const e=new o(10);e.set(Wt),t.enqueue(e)},transform(t,e){e.enqueue(t)},async flush(t){l=!0,y();try{await u}finally{m()}const e=new o(8),r=_(e);r.setUint32(0,s.get(),!0),r.setUint32(4,n,!0),t.enqueue(e)},cancel(t){a(t)}}),p=new d({transform(t,e){s.append(t),f+=t.length,n>f?l&&y():i(),e.enqueue(t)},cancel(t){a(t)}});return t=jt(t,h),jt(t=Ht(t,e),p);function y(){m(),c=setTimeout(()=>a(new r(Ft)),5e3)}function m(){clearTimeout(c)}})(C,e,b)}C=(t=>{const e=t.getReader();return new y({async pull(t){let n;try{n=await e.read()}catch(t){if(t&&t.message)throw t;const e=new r("Invalid compressed data");throw e.cause=t,e}const{value:s,done:o}=n;o?t.close():t.enqueue(s)},cancel:t=>e.cancel(t)})})(C)}a&&(k=new U,C=jt(C,k)),Et(this,C,()=>{if(a){const t=new l(k.value.buffer);if(f!=t.getUint32(0,!1))throw new r(Bt)}})}}const Kt=new f;function Et(t,n,s){n=jt(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Lt(t,e,n){if(!t)throw new r("Compression method not supported");return new t(e,n)}function Ot(t,e,n,s,r){const o=e&&s?s:r||s,c=n.deflate64?"deflate64-raw":Rt;let i;try{i=new o(c,n)}catch(t){if(!e||!r||o==r)throw t;i=new r(c,n)}return Ht(t,i)}function jt(t,e){return(t=>{if(t instanceof y)return t;const e=t.getReader();return new y({async pull(t){const{value:n,done:s}=await e.read();s?t.close():t.enqueue(n)},cancel:t=>e.cancel(t)})})(t).pipeThrough(e)}function Ht(t,e){const n=e.writable.getWriter(),s=t.getReader();return(async()=>{try{for(;;){await n.ready;const t=await s.read();if(t.done){await n.close();break}await n.write(t.value)}}catch(t){await(async(t,e)=>{try{await t.abort(e)}catch{}})(n,t),await(async(t,e)=>{try{await t.cancel(e)}catch{}})(s,t)}})(),e.readable}const Nt="data",qt="close",Gt="deflate";class Jt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let c;o.startsWith(Gt)?c=_t:o.startsWith("inflate")&&(c=Vt),s.outputSize=0;let i=0;const a=new c(t,n),f=super.readable,l=new d({transform(t,e){t&&t.length&&(i+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:i})}}),w=new d({transform(e,n){if(e&&e.length&&(n.enqueue(e),s.outputSize+=e.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r(Ft)},flush(){const{crc32:t}=a;e.assign(s,{crc32:t,inputSize:i})}});e.defineProperty(s,"readable",{get:()=>f.pipeThrough(l).pipeThrough(a).pipeThrough(w)})}}class Qt extends d{constructor(t){const e=[];let s=0;function r(){const n=new o(t);let r=0;for(;t>r;){const s=e[0],o=t-r;s.length>o?(n.set(s.subarray(0,o),r),e[0]=s.subarray(o),r+=o):(n.set(s,r),r+=s.length,e.shift())}return s-=t,n}n.isFinite(t)&&t>=1||(t=65536),super({transform(n,o){for(e.push(n),s+=n.length;s>t;)o.enqueue(r())},flush(t){s&&t.enqueue(((t,e)=>{const n=new o(e);let s=0;for(const e of t)n.set(e,s),s+=e.length;return n})(e,s))}})}}let Xt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Xt=navigator.hardwareConcurrency)}catch{}const Yt=new f,Zt=new f;let $t,te,ee,ne,se,re,oe=0;async function ce(t){let e,o;try{const{options:c,config:i}=t;if(c.format)try{await(async(t,e)=>{!Pt.has(t)&&e&&((t,e)=>{const{CompressionStream:n,DecompressionStream:s}=e;if(typeof n!=k&&typeof s!=k)throw new r("Invalid codec module");Pt.set(t,{CompressionStream:n,DecompressionStream:s})})(t,await(import(e)))})(c.format,c.codecURI)}catch(t){throw t.codecImportFailed=!0,t}if(i.CompressionStream=self.CompressionStream,i.DecompressionStream=self.DecompressionStream,c.compressed&&!c.format)if(c.useCompressionStream){if(!((t,e)=>{if(!t)return!1;let n=Kt.get(t);n||(n=new f,Kt.set(t,n));let s=n.get(e);if(s===v){try{new t(e),s=!0}catch{s=!1}n.set(e,s)}return s})(c.codecType.startsWith(Gt)?i.CompressionStream:i.DecompressionStream,Rt))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{c.useCompressionStream=!0}!i.CompressionStreamFallback&&i.CompressionStreamZlib&&(i.CompressionStreamFallback=i.CompressionStreamZlib),!i.DecompressionStreamFallback&&i.DecompressionStreamZlib&&(i.DecompressionStreamFallback=i.DecompressionStreamZlib);const a={highWaterMark:1},l=t.readable||new y({async pull(t){const e=new w(t=>Yt.set(oe,t));ie({type:"pull",messageId:oe}),oe=(oe+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);o=t.writable||new m({async write(t){let e;const s=new w(t=>e=t);Zt.set(oe,e),ie({type:Nt,value:t,messageId:oe}),oe=(oe+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Jt(c,i),$t=new AbortController;const{signal:u}=$t;await l.pipeThrough(e).pipeThrough(new Qt((t=>s.max(t.chunkSize,64))(i))).pipeTo(o,{signal:u,preventClose:!0,preventAbort:!0}),await o.getWriter().close();const{crc32:h,inputSize:p,outputSize:d}=e;ie({type:qt,result:{crc32:h,inputSize:p,outputSize:d}})}catch(t){if(t.outputSize=e?e.outputSize:0,o&&!o.locked)try{await o.getWriter().close()}catch{}ae(t)}}function ie(t){const{value:e}=t;if(e)if(e.length)try{t.value=(n=e,n.byteOffset||n.byteLength!=n.buffer.byteLength?new o(n):n).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var n}function ae(t=new r("Unknown error")){const{message:e,stack:n,code:s,name:o,outputSize:c,cause:i,codecImportFailed:a}=t,f={message:e,stack:n,code:s,name:o,outputSize:c};i&&(f.cause={name:i.name,message:i.message}),a&&(f.codecImportFailed=!0),p({error:f})}function fe(t,e,n={}){if(!te){const t=new r("WASM module not loaded");throw t.cause=re,t}const c="number"==typeof n.level?n.level:-1,i="number"==typeof n.outBuffer?n.outBuffer:65536,a="number"==typeof n.inBufferSize?n.inBufferSize:65536;return new d({start(){try{let n;if(this.ft=ee(i),this.in=ee(a),this.inBufferSize=a,!this.ft||!this.in)throw new r("allocation failed");if(this.lt=new o(i),t?(this.wt=te.deflate_process,this.ut=te.deflate_last_consumed,this.ht=te.deflate_end,this.yt=te.deflate_new(),n="gzip"===e?te.deflate_init_gzip(this.yt,c):"deflate-raw"===e?te.deflate_init_raw(this.yt,c):te.deflate_init(this.yt,c)):"deflate64-raw"===e?(this.wt=te.inflate9_process,this.ut=te.inflate9_last_consumed,this.ht=te.inflate9_end,this.yt=te.inflate9_new(),n=te.inflate9_init_raw(this.yt)):(this.wt=te.inflate_process,this.ut=te.inflate_last_consumed,this.ht=te.inflate_end,this.yt=te.inflate_new(),n="deflate-raw"===e?te.inflate_init_raw(this.yt):"gzip"===e?te.inflate_init_gzip(this.yt):te.inflate_init(this.yt)),0!==n)throw new r("init failed:"+n)}catch(t){throw f(this),t}},transform(e,n){try{const c=e,a=new o(se.buffer),f=this.wt,l=this.ut,w=this.ft,u=this.lt;let h=0;for(;h<c.length;){const e=s.min(c.length-h,32768);if((!this.in||this.inBufferSize<e)&&(this.in&&ne&&(ne(this.in),this.in=0),this.in=ee(e),this.inBufferSize=e,!this.in))throw new r("allocation failed");a.set(c.subarray(h,h+e),this.in);const o=f(this.yt,this.in,e,w,i,0),p=16777215&o;if(p&&(u.set(a.subarray(w,w+p),0),n.enqueue(u.slice(0,p))),!t){const t=o>>24&255,e=128&t?t-256:t;if(0>e)throw new r("process error:"+e)}const d=l(this.yt);if(0===d)break;h+=d}}catch(t){f(this),n.error(t)}},flush(e){try{const n=new o(se.buffer),s=this.wt,c=this.ft,a=this.lt;for(;;){const o=s(this.yt,0,0,c,i,4),f=16777215&o,l=o>>24&255;if(!t){const t=128&l?l-256:l;if(0>t)throw new r("process error:"+t)}if(f&&(a.set(n.subarray(c,c+f),0),e.enqueue(a.slice(0,f))),1===l||0===f)break}}catch(t){e.error(t)}finally{const t=f(this);0!==t&&e.error(new r("end error:"+t))}},cancel(){f(this)}});function f(t){let e=0;return t.yt&&t.ht&&(e=t.ht(t.yt)),t.yt=0,t.in&&ne&&ne(t.in),t.in=0,t.ft&&ne&&ne(t.ft),t.ft=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&ce(t),e==Nt){const t=Yt.get(n);Yt.delete(n),t({value:s||new o,done:r})}if("ack"==e){const t=Zt.get(n);Zt.delete(n),t()}e==qt&&$t.abort()}catch(t){ae(t)}}),p({type:"ready"});class le{constructor(t="deflate",e){return fe(!0,t,e)}}class we{constructor(t="deflate",e){return fe(!1,t,e)}}le.St=!0,we.St=!0;let ue=!1;((t={})=>{const{init:e}=t,n=t.CompressionStreamFallback||t.CompressionStreamZlib,s=t.DecompressionStreamFallback||t.DecompressionStreamZlib;self.initModule=async t=>{e&&await e(t),n&&(t.CompressionStreamFallback=n),s&&(t.DecompressionStreamFallback=s)}})({CompressionStreamFallback:le,DecompressionStreamFallback:we,init:t=>(async(t,{baseURI:e})=>{if(!ue)try{await(async(t,e)=>{let n,s;try{try{s=new URL(t,e)}catch{}const r=await fetch(s);n=await r.arrayBuffer()}catch(e){if(!t.startsWith("data:application/wasm;base64,"))throw e;n=(t=>{const e=t.split(",")[1],n=atob(e),s=n.length,r=new o(s);for(let t=0;s>t;++t)r[t]=n.charCodeAt(t);return r.buffer})(t)}(t=>{if(te=t,({malloc:ee,free:ne,memory:se}=te),"function"!=typeof ee||"function"!=typeof ne||!se)throw te=ee=ne=se=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports)})(t,e),ue=!0}catch(t){throw(t=>{re=t})(t),t}})(t.wasmURI,t)})});\n';if("string"==typeof s&&(s=(new TextEncoder).encode(s)),t){const t=new Blob([s],{type:n});return URL.createObjectURL(t)}return "data:"+n+";base64,"+(t=>{let n="";const s=t.length;let r=0;for(;s>r+2;r+=3){const s=t[r]<<16|t[r+1]<<8|t[r+2];n+=e[s>>18&63]+e[s>>12&63]+e[s>>6&63]+e[63&s];}const o=s-r;if(1===o){const s=t[r]<<16;n+=e[s>>18&63]+e[s>>12&63]+"==";}else if(2===o){const s=t[r]<<16|t[r+1]<<8;n+=e[s>>18&63]+e[s>>12&63]+e[s>>6&63]+"=";}return n})(s)}});
402
+ const t$1=new Uint8Array(288);t$1.fill(8,0,144),t$1.fill(9,144,256),t$1.fill(7,256,280),t$1.fill(8,280,288),new Uint8Array(30).fill(5);const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n$1=t=>t({workerURI:t=>{const n="text/javascript";let s='(t=>{"function"==typeof define&&define.amd?define(t):t()})(function(){"use strict";const{Array:t,Object:e,Number:n,Math:s,Error:r,Uint8Array:o,Uint16Array:c,Uint32Array:i,Int32Array:a,Map:f,DataView:l,Promise:u,TextEncoder:w,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:S,DecompressionStream:g}=self,v=void 0,b="undefined",k="function",z=new o,C=[[],[],[],[],[],[],[],[]];for(let t=0;t<256;t++){let e=t;for(let t=0;t<8;t++)e=1&e?e>>>1^3988292384:e>>>1;C[0][t]=e}for(let t=0;t<256;t++)for(let e=1;e<8;e++){const n=C[e-1][t];C[e][t]=n>>>8^C[0][255&n]}const[I,A,x,M,P,D,F,B]=C;class R{constructor(t){this.o=t||-1}append(t){let e=0|this.o;const n=0|t.length;let s=0;if(n>=8&&t.buffer){const r=new l(t.buffer,t.byteOffset,n),o=n-8;for(;s<=o;s+=8){const t=e^r.getInt32(s,!0),n=r.getInt32(s+4,!0);e=B[255&t]^F[t>>>8&255]^D[t>>>16&255]^P[t>>>24&255]^M[255&n]^x[n>>>8&255]^A[n>>>16&255]^I[n>>>24&255]}}for(;s<n;s++)e=e>>>8^I[255&(e^t[s])];this.o=e}get(){return~this.o}}class U extends d{constructor(){let t;const e=new R;super({transform(t,n){e.append(t),n.enqueue(t)},flush(){const n=new o(4);new l(n.buffer).setUint32(0,e.get()),t.value=n}}),t=this}}function W(t,e){const n=new o(t.length+e.length);return n.set(t),n.set(e,t.length),n}function _(t){return new l(t.buffer,t.byteOffset,t.byteLength)}const T={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=T.l(n);return 32===s?t.concat(e):T.h(e,s,0|n,t.slice(0,t.length-1))},bitLength(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+T.l(n)},m(t,e){if(32*t.length<e)return t;const n=(t=t.slice(0,s.ceil(e/32))).length;return e&=31,n>0&&e&&(t[n-1]=T.S(e,t[n-1]&2147483648>>e-1,1)),t},S:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,e,n,s){for(void 0===s&&(s=[]);e>=32;e-=32)s.push(n),n=0;if(0===e)return s.concat(t);for(let r=0;r<t.length;r++)s.push(n|t[r]>>>e),n=t[r]<<32-e;const r=t.length?t[t.length-1]:0,o=T.l(r);return s.push(T.S(e+o&31,e+o>32?n:s.pop(),1)),s}},V={bytes:{v(t){const e=T.bitLength(t)/8,n=new o(e);let s;for(let r=0;r<e;r++)3&r||(s=t[r/4]),n[r]=s>>>24,s<<=8;return n},C(t){const e=[];let n,s=0;for(n=0;n<t.length;n++)s=s<<8|t[n],3&~n||(e.push(s),s=0);return 3&n&&e.push(T.S(8*(3&n),s)),e}}},K=class{constructor(t){const e=this;e.blockSize=512,e.I=[1732584193,4023233417,2562383102,271733878,3285377520],e.A=[1518500249,1859775393,2400959708,3395469782],t?(e.M=t.M.slice(0),e.P=t.P.slice(0),e.D=t.D):e.reset()}reset(){const t=this;return t.M=t.I.slice(0),t.P=[],t.D=0,t}update(t){const e=this;"string"==typeof t&&(t=V.F.C(t));const n=e.P=T.concat(e.P,t),s=e.D,o=e.D=s+T.bitLength(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new i(n);let a=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);t<=o;t+=e.blockSize)e.B(c.subarray(16*a,16*(a+1))),a+=1;return n.splice(0,16*a),e}R(){const t=this;let e=t.P;const n=t.M;e=T.concat(e,[T.S(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.D/4294967296)),e.push(0|t.D);e.length;)t.B(e.splice(0,16));return t.reset(),n}U(t,e,n,s){return t<=19?e&n|~e&s:t<=39?e^n^s:t<=59?e&n|e&s|n&s:t<=79?e^n^s:void 0}W(t,e){return e<<t|e>>>32-t}B(e){const n=this,r=n.M,o=t(80);for(let t=0;t<16;t++)o[t]=e[t];let c=r[0],i=r[1],a=r[2],f=r[3],l=r[4];for(let t=0;t<=79;t++){t>=16&&(o[t]=n.W(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n.W(5,c)+n.U(t,i,a,f)+l+o[t]+n.A[s.floor(t/20)]|0;l=f,f=a,a=n.W(30,i),i=c,c=e}r[0]=r[0]+c|0,r[1]=r[1]+i|0,r[2]=r[2]+a|0,r[3]=r[3]+f|0,r[4]=r[4]+l|0}},E={importKey:t=>new E._(V.bytes.C(t)),T(t,e,n,s){if(n=n||1e4,s<0||n<0)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let c,i,a,f,u;const w=new ArrayBuffer(o),h=new l(w);let p=0;const d=T;for(e=V.bytes.C(e),u=1;p<(o||1);u++){for(c=i=t.encrypt(d.concat(e,[u])),a=1;a<n;a++)for(i=t.encrypt(i),f=0;f<i.length;f++)c[f]^=i[f];for(a=0;p<(o||1)&&a<c.length;a++)h.setInt32(p,c[a]),p+=4}return w.slice(0,s/8)},_:class{constructor(t){const e=this,n=e.V=K,s=[[],[]];e.K=[new n,new n];const r=e.K[0].blockSize/32;t.length>r&&(t=(new n).update(t).R());for(let e=0;e<r;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e.K[0].update(s[0]),e.K[1].update(s[1]),e.L=new n(e.K[0])}reset(){const t=this;t.L=new t.V(t.K[0]),t.O=!1}update(t){this.O=!0,this.L.update(t)}digest(){const t=this,e=t.L.R(),n=new t.V(t.K[1]).update(e).R();return t.reset(),n}encrypt(t){if(this.O)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},L=typeof h!=b&&typeof h.getRandomValues==k,O="Invalid password",j="Invalid signature",H=j,N="zipjs-abort-check-password";function q(t){if(L)return h.getRandomValues(t);throw new r("Crypto API not supported")}const G=16,J={name:"PBKDF2"},Q=e.assign({hash:{name:"HMAC"}},J),X=e.assign({iterations:1e3,hash:{name:"SHA-1"}},J),Y=["deriveBits"],Z=[8,12,16],$=[16,24,32],tt=10,et=[0,0,0,0],nt=typeof h!=b,st=nt&&h.subtle,rt=nt&&typeof st!=b,ot=V.bytes,ct=class{constructor(t){const e=this;e.j=[[[],[],[],[],[]],[[],[],[],[],[]]],e.j[0][0][0]||e.H();const n=e.j[0][4],s=e.j[1],o=t.length;let c,i,a,f=1;if(4!==o&&6!==o&&8!==o)throw new r("invalid aes key size");for(e.A=[i=t.slice(0),a=[]],c=o;c<4*o+28;c++){let t=i[c-1];(c%o===0||8===o&&c%o===4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],c%o===0&&(t=t<<8^t>>>24^f<<24,f=f<<1^283*(f>>7))),i[c]=i[c-o]^t}for(let t=0;c;t++,c--){const e=i[3&t?c:c-4];a[t]=c<=4||t<4?e:s[0][n[e>>>24]]^s[1][n[e>>16&255]]^s[2][n[e>>8&255]]^s[3][n[255&e]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}H(){const t=this.j[0],e=this.j[1],n=t[4],s=e[4],r=[],o=[];let c,i,a,f;for(let t=0;t<256;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let l=c=0;!n[l];l^=i||1,c=o[c]||1){let o=c^c<<1^c<<2^c<<3^c<<4;o=o>>8^255&o^99,n[l]=o,s[o]=l,f=r[a=r[i=r[l]]];let u=16843009*f^65537*a^257*i^16843008*l,w=257*r[o]^16843008*o;for(let n=0;n<4;n++)t[n][l]=w=w<<24^w>>>8,e[n][o]=u=u<<24^u>>>8}for(let n=0;n<5;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}N(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.A[e],s=n.length/4-2,o=[0,0,0,0],c=this.j[e],i=c[0],a=c[1],f=c[2],l=c[3],u=c[4];let w,h,p,d=t[0]^n[0],y=t[e?3:1]^n[1],m=t[2]^n[2],S=t[e?1:3]^n[3],g=4;for(let t=0;t<s;t++)w=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^l[255&S]^n[g],h=i[y>>>24]^a[m>>16&255]^f[S>>8&255]^l[255&d]^n[g+1],p=i[m>>>24]^a[S>>16&255]^f[d>>8&255]^l[255&y]^n[g+2],S=i[S>>>24]^a[d>>16&255]^f[y>>8&255]^l[255&m]^n[g+3],g+=4,d=w,y=h,m=p;for(let t=0;t<4;t++)o[e?3&-t:t]=u[d>>>24]<<24^u[y>>16&255]<<16^u[m>>8&255]<<8^u[255&S]^n[g++],w=d,d=y,y=m,m=S,S=w;return o}},it=class{constructor(t,e){this.G=t,this.J=e,this.X=e}reset(){this.X=this.J}update(t){return this.Y(this.G,t,this.X)}Z(t){if(255&~(t>>24))t+=1<<24;else{let e=t>>16&255,n=t>>8&255,s=255&t;255===e?(e=0,255===n?(n=0,255===s?s=0:++s):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=s}return t}$(t){0===(t[0]=this.Z(t[0]))&&(t[1]=this.Z(t[1]))}Y(t,e,n){let s;if(!(s=e.length))return[];const r=T.bitLength(e);for(let r=0;r<s;r+=4){this.$(n);const s=t.encrypt(n);e[r]^=s[0],e[r+1]^=s[1],e[r+2]^=s[2],e[r+3]^=s[3]}return T.m(e,r)}},at=E._;let ft=nt&&rt&&typeof st.importKey==k,lt=nt&&rt&&typeof st.deriveBits==k;class ut extends d{constructor({password:t,rawPassword:e,encryptionStrength:n,checkPasswordOnly:s,checkAuthenticationCode:c=!0}){super({start(){ht(this,t,e,n)},async transform(t,e){const n=this,{password:c,strength:i,et:a,ready:f}=n;c?(await(async(t,e,n,s)=>{const o=await dt(t,e,n,mt(s,0,Z[e])),c=mt(s,Z[e]);if(o[0]!=c[0]||o[1]!=c[1])throw new r(O)})(n,i,c,mt(t,0,Z[i]+2)),t=mt(t,Z[i]+2),s?e.error(new r(N)):a()):await f;const l=new o(t.length-tt-(t.length-tt)%G);e.enqueue(pt(n,t,l,0,tt,!0))},async flush(t){const{nt:e,st:n,ot:s,ready:o}=this;if(n&&e){await o;const i=mt(s,0,s.length-tt),a=mt(s,s.length-tt);let f=z;if(i.length){const t=gt(ot,i);n.update(t);const s=e.update(t);f=St(ot,s)}const l=mt(St(ot,n.digest()),0,tt);let u=s.length<tt?1:0;for(let t=0;t<tt;t++)u|=l[t]^a[t];if(u&&c)throw new r(H);t.enqueue(f)}}})}}class wt extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){super({start(){ht(this,t,e,n)},async transform(t,e){const n=this,{password:s,strength:r,et:c,ready:i}=n;let a=z;s?(a=await(async(t,e,n)=>{const s=q(new o(Z[e]));return W(s,await dt(t,e,n,s))})(n,r,s),c()):await i;const f=new o(a.length+t.length-t.length%G);f.set(a,0),e.enqueue(pt(n,t,f,a.length,0))},async flush(t){const{nt:e,st:n,ot:s,ready:r}=this;if(n&&e){await r;let o=z;if(s.length){const t=e.update(gt(ot,s));n.update(t),o=St(ot,t)}const c=St(ot,n.digest()).slice(0,tt);t.enqueue(W(o,c))}}})}}function ht(t,n,s,r){e.assign(t,{ready:new u(e=>t.et=e),password:yt(n,s),strength:r-1,ot:z})}function pt(t,e,n,s,r,c){const{nt:i,st:a,ot:f}=t;f.length&&(e=W(f,e));const l=e.length-r;let u;for(n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new o(e)).set(n,0)}return t})(n,s+(l-l%G)),u=0;u<=l-G;u+=G){const t=gt(ot,mt(e,u,u+G));c&&a.update(t);const r=i.update(t);c||a.update(r),n.set(St(ot,r),u+s)}return t.ot=mt(e,u),n}async function dt(n,s,r,c){n.password=null;const i=await(async(t,e,n,s,r)=>{if(!ft)return E.importKey(e);try{return await st.importKey("raw",e,n,!1,r)}catch{return ft=!1,E.importKey(e)}})(0,r,Q,0,Y),a=await(async(t,e,n)=>{if(!lt)return E.T(e,t.salt,X.iterations,n);try{return await st.deriveBits(t,e,n)}catch{return lt=!1,E.T(e,t.salt,X.iterations,n)}})(e.assign({salt:c},X),i,8*(2*$[s]+2)),f=new o(a),l=gt(ot,mt(f,0,$[s])),u=gt(ot,mt(f,$[s],2*$[s])),w=mt(f,2*$[s]);return e.assign(n,{keys:{key:l,ct:u,passwordVerification:w},nt:new it(new ct(l),t.from(et)),st:new at(u)}),w}function yt(t,e){return e===v?(t=>{if(typeof w==b){const e=new o((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new w).encode(t)})(t):e}function mt(t,e,n){return t.subarray(e,n)}function St(t,e){return t.v(e)}function gt(t,e){return t.C(e)}class vt extends d{constructor({password:t,rawPassword:e,passwordVerification:n,checkPasswordOnly:s}){super({start(){kt(this,t,e,n)},transform(t,e){const n=this;if(n.password||n.rawPassword){const e=zt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e[11]^n.passwordVerification))throw new r(O);t=t.subarray(12)}s?e.error(new r(N)):e.enqueue(zt(n,t))}})}}class bt extends d{constructor({password:t,rawPassword:e,passwordVerification:n}){super({start(){kt(this,t,e,n)},transform(t,e){const n=this;let s,r;if(n.password||n.rawPassword){n.password=n.rawPassword=null;const e=q(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(Ct(n,e),0),r=12}else s=new o(t.length),r=0;s.set(Ct(n,t),r),e.enqueue(s)}})}}function kt(t,n,s,r){e.assign(t,{password:n,rawPassword:s,passwordVerification:r}),((t,n,s)=>{const r=[305419896,591751049,878082192];if(e.assign(t,{keys:r,it:new R(r[0]),ft:new R(r[2])}),s)for(let e=0;e<s.length;e++)It(t,s[e]);else for(let e=0;e<n.length;e++)It(t,n.charCodeAt(e))})(t,n,s)}function zt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=At(t)^e[s],It(t,n[s]);return n}function Ct(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=At(t)^e[s],It(t,e[s]);return n}function It(t,e){let[,n]=t.keys;t.it.append([e]);const r=~t.it.get();n=Mt(s.imul(Mt(n+xt(r)),134775813)+1),t.ft.append([n>>>24]);const o=~t.ft.get();t.keys=[r,n,o]}function At(t){const e=2|t.keys[2];return xt(s.imul(e,1^e)>>>8)}function xt(t){return 255&t}function Mt(t){return 4294967295&t}function Pt(t){if(t instanceof y)return t;const e=t.getReader();return new y({async pull(t){const{value:n,done:s}=await e.read();s?t.close():t.enqueue(n)},cancel:t=>e.cancel(t)})}const Dt=new f;function Ft(t){return Dt.get(t)}const Bt="Invalid uncompressed size",Rt=j,Ut="deflate-raw",Wt="gzip",_t=[31,139,8];class Tt extends d{constructor(t,{chunkSize:e,CompressionStreamFallback:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:c,zipCrypto:i,computeCrc32:a,level:f,deflate64:u,format:w,compressionMethod:h}=t,p=this;let d,y,m,S=super.readable;const g=w&&Ft(w),v=a&&r&&!u&&!g&&(!o||i)&&!(!c||!s);if(o&&!i||!a||v||(d=new U,S=Ht(S,d)),r)if(g)S=Nt(S,Ot(g.CompressionStream,w,{level:f,chunkSize:e,compressionMethod:h}));else if(v)m=new Vt,S=Nt(S,new s(Wt)),S=Ht(S,m);else try{S=jt(S,c,{level:f,chunkSize:e},s,n)}catch(t){let e;try{e=new s(Wt)}catch{throw t}S=Nt(S,e),S=Ht(S,new Vt)}o&&(i?S=Ht(S,new bt(t)):(y=new wt(t),S=Ht(S,y))),Lt(p,S,()=>{o&&!i||!a||(p.crc32=v?m.crc32:new l(d.value.buffer).getUint32(0))})}}class Vt extends d{constructor(){let t,e=10,n=new o(0);super({transform(t,r){if(e){const n=s.min(e,t.length);if(e-=n,!(t=t.subarray(n)).length)return}const o=n.length+t.length;if(o<=8)return void(n=W(n,t));const c=o-8,i=s.min(c,n.length);r.enqueue(W(n.subarray(0,i),t.subarray(0,c-i))),n=W(n.subarray(i),t.subarray(c-i))},flush(){const e=_(n);t.crc32=e.getUint32(0,!0),t.uncompressedSize=e.getUint32(4,!0)}}),t=this}}class Kt extends d{constructor(t,{chunkSize:e,DecompressionStreamFallback:n,DecompressionStream:s}){super({});const{zipCrypto:c,encrypted:i,checkCrc32:a,crc32:f,compressed:w,useCompressionStream:h,deflate64:p,format:m,compressionMethod:S,rawBitFlag:g,outputSize:b}=t;let k,z,C=super.readable;if(i&&(c?C=Ht(C,new vt(t)):(z=new ut(t),C=Ht(C,z))),w){const t=m&&Ft(m);if(t)C=Nt(C,Ot(t.DecompressionStream,m,{chunkSize:e,compressionMethod:S,rawBitFlag:g,uncompressedSize:b}));else try{C=jt(C,h,{chunkSize:e,deflate64:p},s,n)}catch(t){if(p||b===v)throw t;let e;try{e=new s(Wt)}catch{throw t}C=((t,e,n)=>{const s=new R;let c,i,a,f=0,l=!1;const w=new u((t,e)=>{i=t,a=e});w.catch(()=>{}),n||i();const h=new d({start(t){const e=new o(10);e.set(_t),t.enqueue(e)},transform(t,e){e.enqueue(t)},async flush(t){l=!0,y();try{await w}finally{m()}const e=new o(8),r=_(e);r.setUint32(0,s.get(),!0),r.setUint32(4,n,!0),t.enqueue(e)},cancel(t){a(t)}}),p=new d({transform(t,e){s.append(t),f+=t.length,f>=n?i():l&&y(),e.enqueue(t)},cancel(t){a(t)}});return t=Ht(t,h),Ht(t=Nt(t,e),p);function y(){m(),c=setTimeout(()=>a(new r(Bt)),5e3)}function m(){clearTimeout(c)}})(C,e,b)}C=(t=>{const e=t.getReader();return new y({async pull(t){let n;try{n=await e.read()}catch(t){if(t&&t.message)throw t;const e=new r("Invalid compressed data");throw e.cause=t,e}const{value:s,done:o}=n;o?t.close():t.enqueue(s)},cancel:t=>e.cancel(t)})})(C)}a&&(k=new U,C=Ht(C,k)),Lt(this,C,()=>{if(a){const t=new l(k.value.buffer);if(f!=t.getUint32(0,!1))throw new r(Rt)}})}}const Et=new f;function Lt(t,n,s){n=Ht(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Ot(t,e,n){if(!t)throw new r("Compression method not supported");return new t(e,n)}function jt(t,e,n,s,r){const o=e&&s?s:r||s,c=n.deflate64?"deflate64-raw":Ut;let i;try{i=new o(c,n)}catch(t){if(!e||!r||o==r)throw t;i=new r(c,n)}return Nt(t,i)}function Ht(t,e){return Pt(t).pipeThrough(e)}function Nt(t,e){const n=e.writable.getWriter(),s=t.getReader();return(async()=>{try{for(;;){await n.ready;const t=await s.read();if(t.done){await n.close();break}await n.write(t.value)}}catch(t){await(async(t,e)=>{try{await t.abort(e)}catch{}})(n,t),await(async(t,e)=>{try{await t.cancel(e)}catch{}})(s,t)}})(),e.readable}const qt="data",Gt="close",Jt="deflate";class Qt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let c;o.startsWith(Jt)?c=Tt:o.startsWith("inflate")&&(c=Kt),s.outputSize=0;let i=0;const a=new c(t,n),f=super.readable,l=new d({transform(t,e){t&&t.length&&(i+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:i})}}),u=new d({transform(e,n){if(e&&e.length&&(n.enqueue(e),s.outputSize+=e.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r(Bt)},flush(){const{crc32:t}=a;e.assign(s,{crc32:t,inputSize:i})}});e.defineProperty(s,"readable",{get:()=>f.pipeThrough(l).pipeThrough(a).pipeThrough(u)})}}class Xt extends d{constructor(t){const e=[];let s=0;function r(){const n=new o(t);let r=0;for(;r<t;){const s=e[0],o=t-r;s.length<=o?(n.set(s,r),r+=s.length,e.shift()):(n.set(s.subarray(0,o),r),e[0]=s.subarray(o),r+=o)}return s-=t,n}(!n.isFinite(t)||t<1)&&(t=65536),super({transform(n,o){for(e.push(n),s+=n.length;s>t;)o.enqueue(r())},flush(t){s&&t.enqueue(((t,e)=>{const n=new o(e);let s=0;for(const e of t)n.set(e,s),s+=e.length;return n})(e,s))}})}}let Yt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Yt=navigator.hardwareConcurrency)}catch{}const Zt=new f,$t=new f;let te,ee,ne,se,re,oe,ce=0;async function ie(t){let e,o;try{const{options:c,config:i}=t;if(c.format)try{await(async(t,e)=>{!Dt.has(t)&&e&&((t,e)=>{const{CompressionStream:n,DecompressionStream:s}=e;if(typeof n!=k&&typeof s!=k)throw new r("Invalid codec module");Dt.set(t,{CompressionStream:n,DecompressionStream:s})})(t,await(import(e)))})(c.format,c.codecURI)}catch(t){throw t.codecImportFailed=!0,t}if(i.CompressionStream=self.CompressionStream,i.DecompressionStream=self.DecompressionStream,c.compressed&&!c.format)if(c.useCompressionStream){if(!((t,e)=>{if(!t)return!1;let n=Et.get(t);n||(n=new f,Et.set(t,n));let s=n.get(e);if(s===v){try{new t(e),s=!0}catch{s=!1}n.set(e,s)}return s})(c.codecType.startsWith(Jt)?i.CompressionStream:i.DecompressionStream,Ut))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{c.useCompressionStream=!0}!i.CompressionStreamFallback&&i.CompressionStreamZlib&&(i.CompressionStreamFallback=i.CompressionStreamZlib),!i.DecompressionStreamFallback&&i.DecompressionStreamZlib&&(i.DecompressionStreamFallback=i.DecompressionStreamZlib);const a={highWaterMark:1},l=t.readable?Pt(t.readable):new y({async pull(t){const e=new u(t=>Zt.set(ce,t));ae({type:"pull",messageId:ce}),ce=(ce+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);o=t.writable?(t=>{if(t instanceof m)return t;const e=t.getWriter();return new m({write:t=>e.write(t),close:()=>e.close(),abort:t=>e.abort(t)})})(t.writable):new m({async write(t){let e;const s=new u(t=>e=t);$t.set(ce,e),ae({type:qt,value:t,messageId:ce}),ce=(ce+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Qt(c,i),te=new AbortController;const{signal:w}=te;await l.pipeThrough(e).pipeThrough(new Xt((t=>{return r="string"==typeof(e=r=t.chunkSize)&&e.trim()?n(e):e,n.isInteger(r)&&r>=1?s.max(r,64):65536;var e,r})(i))).pipeTo(o,{signal:w,preventClose:!0,preventAbort:!0}),await o.getWriter().close();const{crc32:h,inputSize:p,outputSize:d}=e;ae({type:Gt,result:{crc32:h,inputSize:p,outputSize:d}})}catch(t){if(t.outputSize=e?e.outputSize:0,o&&!o.locked)try{await o.getWriter().close()}catch{}fe(t)}}function ae(t){const{value:e}=t;if(e)if(e.length)try{t.value=(n=e,n.byteOffset||n.byteLength!=n.buffer.byteLength?new o(n):n).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var n}function fe(t=new r("Unknown error")){const{message:e,stack:n,code:s,name:o,outputSize:c,cause:i,codecImportFailed:a}=t,f={message:e,stack:n,code:s,name:o,outputSize:c};i&&(f.cause={name:i.name,message:i.message}),a&&(f.codecImportFailed=!0),p({error:f})}function le(t,e,n={}){if(!ee){const t=new r("WASM module not loaded");throw t.cause=oe,t}const c="number"==typeof n.level?n.level:-1,i="number"==typeof n.outBuffer?n.outBuffer:65536,a="number"==typeof n.inBufferSize?n.inBufferSize:65536;return new d({start(){try{let n;if(this.lt=ne(i),this.in=ne(a),this.inBufferSize=a,!this.lt||!this.in)throw new r("allocation failed");if(this.ut=new o(i),t?(this.wt=ee.deflate_process,this.ht=ee.deflate_last_consumed,this.yt=ee.deflate_end,this.St=ee.deflate_new(),n="gzip"===e?ee.deflate_init_gzip(this.St,c):"deflate-raw"===e?ee.deflate_init_raw(this.St,c):ee.deflate_init(this.St,c)):"deflate64-raw"===e?(this.wt=ee.inflate9_process,this.ht=ee.inflate9_last_consumed,this.yt=ee.inflate9_end,this.St=ee.inflate9_new(),n=ee.inflate9_init_raw(this.St)):(this.wt=ee.inflate_process,this.ht=ee.inflate_last_consumed,this.yt=ee.inflate_end,this.St=ee.inflate_new(),n="deflate-raw"===e?ee.inflate_init_raw(this.St):"gzip"===e?ee.inflate_init_gzip(this.St):ee.inflate_init(this.St)),0!==n)throw new r("init failed:"+n)}catch(t){throw f(this),t}},transform(e,n){try{const c=e,a=new o(re.buffer),f=this.wt,l=this.ht,u=this.lt,w=this.ut;let h=0;for(;h<c.length;){const e=s.min(c.length-h,32768);if((!this.in||this.inBufferSize<e)&&(this.in&&se&&(se(this.in),this.in=0),this.in=ne(e),this.inBufferSize=e,!this.in))throw new r("allocation failed");a.set(c.subarray(h,h+e),this.in);const o=f(this.St,this.in,e,u,i,0),p=16777215&o;if(p&&(w.set(a.subarray(u,u+p),0),n.enqueue(w.slice(0,p))),!t){const t=o>>24&255,e=128&t?t-256:t;if(e<0)throw new r("process error:"+e)}const d=l(this.St);if(0===d)break;h+=d}}catch(t){f(this),n.error(t)}},flush(e){try{const n=new o(re.buffer),s=this.wt,c=this.lt,a=this.ut;for(;;){const o=s(this.St,0,0,c,i,4),f=16777215&o,l=o>>24&255;if(!t){const t=128&l?l-256:l;if(t<0)throw new r("process error:"+t)}if(f&&(a.set(n.subarray(c,c+f),0),e.enqueue(a.slice(0,f))),1===l||0===f)break}}catch(t){e.error(t)}finally{const t=f(this);0!==t&&e.error(new r("end error:"+t))}},cancel(){f(this)}});function f(t){let e=0;return t.St&&t.yt&&(e=t.yt(t.St)),t.St=0,t.in&&se&&se(t.in),t.in=0,t.lt&&se&&se(t.lt),t.lt=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&ie(t),e==qt){const t=Zt.get(n);Zt.delete(n),t({value:s||new o,done:r})}if("ack"==e){const t=$t.get(n);$t.delete(n),t()}e==Gt&&te.abort()}catch(t){fe(t)}}),p({type:"ready"});class ue{constructor(t="deflate",e){return le(!0,t,e)}}class we{constructor(t="deflate",e){return le(!1,t,e)}}ue.gt=!0,we.gt=!0;let he=!1;((t={})=>{const{init:e}=t,n=t.CompressionStreamFallback||t.CompressionStreamZlib,s=t.DecompressionStreamFallback||t.DecompressionStreamZlib;self.initModule=async t=>{e&&await e(t),n&&(t.CompressionStreamFallback=n),s&&(t.DecompressionStreamFallback=s)}})({CompressionStreamFallback:ue,DecompressionStreamFallback:we,init:t=>(async(t,{baseURI:e})=>{if(!he)try{await(async(t,e)=>{let n,s;try{try{s=new URL(t,e)}catch{}const r=await fetch(s);n=await r.arrayBuffer()}catch(e){if(!t.startsWith("data:application/wasm;base64,"))throw e;n=(t=>{const e=t.split(",")[1],n=atob(e),s=n.length,r=new o(s);for(let t=0;t<s;++t)r[t]=n.charCodeAt(t);return r.buffer})(t)}(t=>{if(ee=t,({malloc:ne,free:se,memory:re}=ee),"function"!=typeof ne||"function"!=typeof se||!re)throw ee=ne=se=re=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports)})(t,e),he=!0}catch(t){throw(t=>{oe=t})(t),t}})(t.wasmURI,t)})});\n';if("string"==typeof s&&(s=(new TextEncoder).encode(s)),t){const t=new Blob([s],{type:n});return URL.createObjectURL(t)}return "data:"+n+";base64,"+(t=>{let n="";const s=t.length;let r=0;for(;r+2<s;r+=3){const s=t[r]<<16|t[r+1]<<8|t[r+2];n+=e[s>>18&63]+e[s>>12&63]+e[s>>6&63]+e[63&s];}const o=s-r;if(1===o){const s=t[r]<<16;n+=e[s>>18&63]+e[s>>12&63]+"==";}else if(2===o){const s=t[r]<<16|t[r+1]<<8;n+=e[s>>18&63]+e[s>>12&63]+e[s>>6&63]+"=";}return n})(s)}});
256
403
 
257
404
  /*
258
405
  Copyright (c) 2026 Gildas Lormeau. All rights reserved.
@@ -1400,13 +1547,13 @@
1400
1547
  const {
1401
1548
  ctr,
1402
1549
  hmac,
1403
- pending,
1550
+ pendingInput,
1404
1551
  ready
1405
1552
  } = this;
1406
1553
  if (hmac && ctr) {
1407
1554
  await ready;
1408
- const chunkToDecrypt = subarray(pending, 0, pending.length - AUTHENTICATION_CODE_LENGTH);
1409
- const originalAuthenticationCode = subarray(pending, pending.length - AUTHENTICATION_CODE_LENGTH);
1555
+ const chunkToDecrypt = subarray(pendingInput, 0, pendingInput.length - AUTHENTICATION_CODE_LENGTH);
1556
+ const originalAuthenticationCode = subarray(pendingInput, pendingInput.length - AUTHENTICATION_CODE_LENGTH);
1410
1557
  let decryptedChunkArray = EMPTY_UINT8_ARRAY;
1411
1558
  if (chunkToDecrypt.length) {
1412
1559
  const encryptedChunk = toBits(codecBytes, chunkToDecrypt);
@@ -1415,7 +1562,7 @@
1415
1562
  decryptedChunkArray = fromBits(codecBytes, decryptedChunk);
1416
1563
  }
1417
1564
  const authenticationCode = subarray(fromBits(codecBytes, hmac.digest()), 0, AUTHENTICATION_CODE_LENGTH);
1418
- let invalidAuthenticationCode = pending.length < AUTHENTICATION_CODE_LENGTH ? 1 : 0;
1565
+ let invalidAuthenticationCode = pendingInput.length < AUTHENTICATION_CODE_LENGTH ? 1 : 0;
1419
1566
  for (let indexByte = 0; indexByte < AUTHENTICATION_CODE_LENGTH; indexByte++) {
1420
1567
  invalidAuthenticationCode |= authenticationCode[indexByte] ^ originalAuthenticationCode[indexByte];
1421
1568
  }
@@ -1459,14 +1606,14 @@
1459
1606
  const {
1460
1607
  ctr,
1461
1608
  hmac,
1462
- pending,
1609
+ pendingInput,
1463
1610
  ready
1464
1611
  } = this;
1465
1612
  if (hmac && ctr) {
1466
1613
  await ready;
1467
1614
  let encryptedChunkArray = EMPTY_UINT8_ARRAY;
1468
- if (pending.length) {
1469
- const encryptedChunk = ctr.update(toBits(codecBytes, pending));
1615
+ if (pendingInput.length) {
1616
+ const encryptedChunk = ctr.update(toBits(codecBytes, pendingInput));
1470
1617
  hmac.update(encryptedChunk);
1471
1618
  encryptedChunkArray = fromBits(codecBytes, encryptedChunk);
1472
1619
  }
@@ -1483,7 +1630,7 @@
1483
1630
  ready: new Promise(resolve => aesCrypto.resolveReady = resolve),
1484
1631
  password: encodePassword(password, rawPassword),
1485
1632
  strength: encryptionStrength - 1,
1486
- pending: EMPTY_UINT8_ARRAY
1633
+ pendingInput: EMPTY_UINT8_ARRAY
1487
1634
  });
1488
1635
  }
1489
1636
 
@@ -1491,10 +1638,10 @@
1491
1638
  const {
1492
1639
  ctr,
1493
1640
  hmac,
1494
- pending
1641
+ pendingInput
1495
1642
  } = aesCrypto;
1496
- if (pending.length) {
1497
- input = concat(pending, input);
1643
+ if (pendingInput.length) {
1644
+ input = concat(pendingInput, input);
1498
1645
  }
1499
1646
  const inputLength = input.length - paddingEnd;
1500
1647
  output = expand(output, paddingStart + (inputLength - (inputLength % BLOCK_LENGTH)));
@@ -1510,7 +1657,7 @@
1510
1657
  }
1511
1658
  output.set(fromBits(codecBytes, outputChunk), offset + paddingStart);
1512
1659
  }
1513
- aesCrypto.pending = subarray(input, offset);
1660
+ aesCrypto.pendingInput = subarray(input, offset);
1514
1661
  return output;
1515
1662
  }
1516
1663
 
@@ -3287,6 +3434,96 @@
3287
3434
  resetWebWorkerSupport();
3288
3435
  }
3289
3436
 
3437
+ /*
3438
+ Copyright (c) 2022 Gildas Lormeau. All rights reserved.
3439
+
3440
+ Redistribution and use in source and binary forms, with or without
3441
+ modification, are permitted provided that the following conditions are met:
3442
+
3443
+ 1. Redistributions of source code must retain the above copyright notice,
3444
+ this list of conditions and the following disclaimer.
3445
+
3446
+ 2. Redistributions in binary form must reproduce the above copyright
3447
+ notice, this list of conditions and the following disclaimer in
3448
+ the documentation and/or other materials provided with the distribution.
3449
+
3450
+ 3. The names of the authors may not be used to endorse or promote products
3451
+ derived from this software without specific prior written permission.
3452
+
3453
+ THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
3454
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
3455
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
3456
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
3457
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
3458
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
3459
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
3460
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
3461
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3462
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3463
+ */
3464
+
3465
+ /* global TextDecoder */
3466
+
3467
+ const CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
3468
+ const VALID_CP437 = CP437.length == 256;
3469
+
3470
+ function decodeCP437(stringValue) {
3471
+ if (VALID_CP437) {
3472
+ let result = "";
3473
+ for (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
3474
+ result += CP437[stringValue[indexCharacter]];
3475
+ }
3476
+ return result;
3477
+ } else {
3478
+ return new TextDecoder().decode(stringValue);
3479
+ }
3480
+ }
3481
+
3482
+ /*
3483
+ Copyright (c) 2022 Gildas Lormeau. All rights reserved.
3484
+
3485
+ Redistribution and use in source and binary forms, with or without
3486
+ modification, are permitted provided that the following conditions are met:
3487
+
3488
+ 1. Redistributions of source code must retain the above copyright notice,
3489
+ this list of conditions and the following disclaimer.
3490
+
3491
+ 2. Redistributions in binary form must reproduce the above copyright
3492
+ notice, this list of conditions and the following disclaimer in
3493
+ the documentation and/or other materials provided with the distribution.
3494
+
3495
+ 3. The names of the authors may not be used to endorse or promote products
3496
+ derived from this software without specific prior written permission.
3497
+
3498
+ THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
3499
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
3500
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
3501
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
3502
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
3503
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
3504
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
3505
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
3506
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3507
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3508
+ */
3509
+
3510
+
3511
+ function decodeText(value, encoding) {
3512
+ return decode(value, encoding, true);
3513
+ }
3514
+
3515
+ function decodeTextRemovingBOM(value, encoding) {
3516
+ return decode(value, encoding, false);
3517
+ }
3518
+
3519
+ function decode(value, encoding, ignoreBOM) {
3520
+ if (encoding && encoding.trim().toLowerCase() == "cp437") {
3521
+ return decodeCP437(value);
3522
+ } else {
3523
+ return new TextDecoder(encoding, { ignoreBOM }).decode(value);
3524
+ }
3525
+ }
3526
+
3290
3527
  /*
3291
3528
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
3292
3529
 
@@ -3359,6 +3596,7 @@
3359
3596
  createReadable({ offset = 0, size, chunkSize = getChunkSize(getConfiguration()) } = {}) {
3360
3597
  const reader = this;
3361
3598
  let chunkOffset = 0;
3599
+ chunkSize = normalizeChunkSize(chunkSize);
3362
3600
  return new ReadableStream({
3363
3601
  async pull(controller) {
3364
3602
  const dataSize = size === UNDEFINED_VALUE ? chunkSize : Math.min(chunkSize, size - chunkOffset);
@@ -3366,7 +3604,7 @@
3366
3604
  if (data.length) {
3367
3605
  controller.enqueue(data);
3368
3606
  }
3369
- if ((chunkOffset + chunkSize >= size) || (size === UNDEFINED_VALUE && !data.length && dataSize)) {
3607
+ if ((chunkOffset + chunkSize >= size) || (!data.length && dataSize)) {
3370
3608
  controller.close();
3371
3609
  } else {
3372
3610
  chunkOffset += chunkSize;
@@ -3446,31 +3684,31 @@
3446
3684
  Object.assign(this, {
3447
3685
  contentType,
3448
3686
  data: "data:" + (contentType || "") + ";base64,",
3449
- pending: []
3687
+ pendingCharacters: ""
3450
3688
  });
3451
3689
  }
3452
3690
 
3453
3691
  writeUint8Array(array) {
3454
3692
  const writer = this;
3455
3693
  let indexArray;
3456
- let dataString = writer.pending;
3457
- const delta = writer.pending.length;
3458
- writer.pending = "";
3694
+ let dataString = writer.pendingCharacters;
3695
+ const delta = writer.pendingCharacters.length;
3696
+ writer.pendingCharacters = "";
3459
3697
  for (indexArray = 0; indexArray < (Math.floor((delta + array.length) / 3) * 3) - delta; indexArray++) {
3460
3698
  dataString += String.fromCharCode(array[indexArray]);
3461
3699
  }
3462
3700
  for (; indexArray < array.length; indexArray++) {
3463
- writer.pending += String.fromCharCode(array[indexArray]);
3701
+ writer.pendingCharacters += String.fromCharCode(array[indexArray]);
3464
3702
  }
3465
3703
  if (dataString.length > 2) {
3466
3704
  writer.data += btoa(dataString);
3467
3705
  } else {
3468
- writer.pending = dataString + writer.pending;
3706
+ writer.pendingCharacters = dataString + writer.pendingCharacters;
3469
3707
  }
3470
3708
  }
3471
3709
 
3472
3710
  getData() {
3473
- return this.data + btoa(this.pending);
3711
+ return this.data + btoa(this.pendingCharacters);
3474
3712
  }
3475
3713
  }
3476
3714
 
@@ -3500,7 +3738,7 @@
3500
3738
  constructor(blob) {
3501
3739
  super();
3502
3740
  Object.assign(this, {
3503
- blob,
3741
+ sourceBlob: blob,
3504
3742
  size: blob.size
3505
3743
  });
3506
3744
  if (!blobSliceProbe) {
@@ -3510,13 +3748,13 @@
3510
3748
 
3511
3749
  createReadable(options) {
3512
3750
  const reader = this;
3513
- const { blob, size } = reader;
3751
+ const { sourceBlob, size } = reader;
3514
3752
  const { offset = 0, size: readSize = size - offset } = options || {};
3515
3753
  if (!offset && readSize >= size) {
3516
- return toCompatibleReadable(blob.stream());
3754
+ return toCompatibleReadable(sourceBlob.stream());
3517
3755
  }
3518
3756
  if (blobSliceReliable) {
3519
- return toCompatibleReadable(blob.slice(offset, offset + readSize).stream());
3757
+ return toCompatibleReadable(sourceBlob.slice(offset, offset + readSize).stream());
3520
3758
  }
3521
3759
  return super.createReadable(options);
3522
3760
  }
@@ -3525,7 +3763,7 @@
3525
3763
  const reader = this;
3526
3764
  const offsetEnd = offset + length;
3527
3765
  const readsWholeBlob = !offset && offsetEnd >= reader.size;
3528
- const blob = readsWholeBlob ? reader.blob : reader.blob.slice(offset, offsetEnd);
3766
+ const blob = readsWholeBlob ? reader.sourceBlob : reader.sourceBlob.slice(offset, offsetEnd);
3529
3767
  let arrayBuffer = await blob.arrayBuffer();
3530
3768
  const sliceIgnoredByBuggyImplementation = arrayBuffer.byteLength > length;
3531
3769
  if (sliceIgnoredByBuggyImplementation) {
@@ -3547,12 +3785,12 @@
3547
3785
  }
3548
3786
  });
3549
3787
  writer.contentType = contentType;
3550
- writer.blob = streamToBlob(transformStream.readable, contentType);
3551
- writer.blob.catch(() => { });
3788
+ writer.blobPromise = streamToBlob(transformStream.readable, contentType);
3789
+ writer.blobPromise.catch(() => { });
3552
3790
  }
3553
3791
 
3554
3792
  getData() {
3555
- return this.blob;
3793
+ return this.blobPromise;
3556
3794
  }
3557
3795
  }
3558
3796
 
@@ -3566,7 +3804,7 @@
3566
3804
  class TextWriter extends BlobWriter {
3567
3805
 
3568
3806
  constructor(encoding) {
3569
- super(encoding);
3807
+ super();
3570
3808
  Object.assign(this, {
3571
3809
  encoding,
3572
3810
  utf8: !encoding || encoding.toLowerCase() == "utf-8"
@@ -3582,14 +3820,7 @@
3582
3820
  if (blob.text && utf8) {
3583
3821
  return blob.text();
3584
3822
  } else {
3585
- const reader = new FileReader();
3586
- return new Promise((resolve, reject) => {
3587
- Object.assign(reader, {
3588
- onload: ({ target }) => resolve(target.result),
3589
- onerror: () => reject(reader.error)
3590
- });
3591
- reader.readAsText(blob, encoding);
3592
- });
3823
+ return decodeTextRemovingBOM(new Uint8Array(await blob.arrayBuffer()), encoding);
3593
3824
  }
3594
3825
  }
3595
3826
  }
@@ -4257,85 +4488,13 @@
4257
4488
  return reader.readUint8Array(offset, size);
4258
4489
  }
4259
4490
 
4260
- /*
4261
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
4262
-
4263
- Redistribution and use in source and binary forms, with or without
4264
- modification, are permitted provided that the following conditions are met:
4265
-
4266
- 1. Redistributions of source code must retain the above copyright notice,
4267
- this list of conditions and the following disclaimer.
4268
-
4269
- 2. Redistributions in binary form must reproduce the above copyright
4270
- notice, this list of conditions and the following disclaimer in
4271
- the documentation and/or other materials provided with the distribution.
4272
-
4273
- 3. The names of the authors may not be used to endorse or promote products
4274
- derived from this software without specific prior written permission.
4275
-
4276
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
4277
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
4278
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
4279
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
4280
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4281
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
4282
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
4283
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
4284
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4285
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4286
- */
4287
-
4288
- /* global TextDecoder */
4289
-
4290
- const CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
4291
- const VALID_CP437 = CP437.length == 256;
4292
-
4293
- function decodeCP437(stringValue) {
4294
- if (VALID_CP437) {
4295
- let result = "";
4296
- for (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
4297
- result += CP437[stringValue[indexCharacter]];
4298
- }
4299
- return result;
4300
- } else {
4301
- return new TextDecoder().decode(stringValue);
4302
- }
4303
- }
4304
-
4305
- /*
4306
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
4307
-
4308
- Redistribution and use in source and binary forms, with or without
4309
- modification, are permitted provided that the following conditions are met:
4310
-
4311
- 1. Redistributions of source code must retain the above copyright notice,
4312
- this list of conditions and the following disclaimer.
4313
-
4314
- 2. Redistributions in binary form must reproduce the above copyright
4315
- notice, this list of conditions and the following disclaimer in
4316
- the documentation and/or other materials provided with the distribution.
4317
-
4318
- 3. The names of the authors may not be used to endorse or promote products
4319
- derived from this software without specific prior written permission.
4320
-
4321
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
4322
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
4323
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
4324
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
4325
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4326
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
4327
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
4328
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
4329
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4330
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4331
- */
4332
-
4333
-
4334
- function decodeText(value, encoding) {
4335
- if (encoding && encoding.trim().toLowerCase() == "cp437") {
4336
- return decodeCP437(value);
4491
+ function createReadable(reader, options) {
4492
+ if (reader.createReadable) {
4493
+ return reader.createReadable(options);
4494
+ } else if (reader.readUint8Array) {
4495
+ return Reader.prototype.createReadable.call(reader, options);
4337
4496
  } else {
4338
- return new TextDecoder(encoding, { ignoreBOM: true }).decode(value);
4497
+ return reader.readable;
4339
4498
  }
4340
4499
  }
4341
4500
 
@@ -4495,83 +4654,6 @@
4495
4654
 
4496
4655
  }
4497
4656
 
4498
- /*
4499
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
4500
-
4501
- Redistribution and use in source and binary forms, with or without
4502
- modification, are permitted provided that the following conditions are met:
4503
-
4504
- 1. Redistributions of source code must retain the above copyright notice,
4505
- this list of conditions and the following disclaimer.
4506
-
4507
- 2. Redistributions in binary form must reproduce the above copyright
4508
- notice, this list of conditions and the following disclaimer in
4509
- the documentation and/or other materials provided with the distribution.
4510
-
4511
- 3. The names of the authors may not be used to endorse or promote products
4512
- derived from this software without specific prior written permission.
4513
-
4514
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
4515
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
4516
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
4517
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
4518
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4519
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
4520
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
4521
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
4522
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4523
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4524
- */
4525
-
4526
- const OPTION_FILENAME_ENCODING = "filenameEncoding";
4527
- const OPTION_COMMENT_ENCODING = "commentEncoding";
4528
- const OPTION_DECODE_TEXT = "decodeText";
4529
- const OPTION_EXTRACT_PREPENDED_DATA = "extractPrependedData";
4530
- const OPTION_EXTRACT_APPENDED_DATA = "extractAppendedData";
4531
- const OPTION_PASSWORD = "password";
4532
- const OPTION_RAW_PASSWORD = "rawPassword";
4533
- const OPTION_PASS_THROUGH = "passThrough";
4534
- const OPTION_SIGNAL = "signal";
4535
- const OPTION_CHECK_PASSWORD_ONLY = "checkPasswordOnly";
4536
- const OPTION_CHECK_OVERLAPPING_ENTRY_ONLY = "checkOverlappingEntryOnly";
4537
- const OPTION_CHECK_OVERLAPPING_ENTRY = "checkOverlappingEntry";
4538
- const OPTION_CHECK_AMBIGUITY = "checkAmbiguity";
4539
- const OPTION_CHECK_LOCAL_DIRECTORY = "checkLocalDirectory";
4540
- const OPTION_CHECK_SIGNATURE = "checkSignature";
4541
- const OPTION_CHECK_CRC32 = "checkCrc32";
4542
- const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
4543
- const OPTION_USE_WEB_WORKERS = "useWebWorkers";
4544
- const OPTION_USE_COMPRESSION_STREAM = "useCompressionStream";
4545
- const OPTION_TRANSFER_STREAMS = "transferStreams";
4546
- const OPTION_PREVENT_CLOSE = "preventClose";
4547
- const OPTION_ENCRYPTION_STRENGTH = "encryptionStrength";
4548
- const OPTION_EXTENDED_TIMESTAMP = "extendedTimestamp";
4549
- const OPTION_NTFS_TIMESTAMP = "ntfsTimestamp";
4550
- const OPTION_KEEP_ORDER = "keepOrder";
4551
- const OPTION_LEVEL = "level";
4552
- const OPTION_BUFFERED_WRITE = "bufferedWrite";
4553
- const OPTION_CREATE_TEMP_STREAM = "createTempStream";
4554
- const OPTION_DATA_DESCRIPTOR_SIGNATURE = "dataDescriptorSignature";
4555
- const OPTION_USE_UNICODE_FILE_NAMES = "useUnicodeFileNames";
4556
- const OPTION_DATA_DESCRIPTOR = "dataDescriptor";
4557
- const OPTION_SUPPORT_ZIP64_SPLIT_FILE = "supportZip64SplitFile";
4558
- const OPTION_ENCODE_TEXT = "encodeText";
4559
- const OPTION_OFFSET = "offset";
4560
- const OPTION_USDZ = "usdz";
4561
- const OPTION_UNIX_EXTRA_FIELD_TYPE = "unixExtraFieldType";
4562
- const OPTION_LOCAL_EXTRA_FIELD = "localExtraField";
4563
- const OPTION_STRICTNESS = "strictness";
4564
- const OPTION_FILENAME_VALIDATION = "filenameValidation";
4565
- const OPTION_NORMALIZE_FILENAME = "normalizeFilename";
4566
- const OPTION_MAX_APPENDED_DATA_SIZE = "maxAppendedDataSize";
4567
- const OPTION_DECRYPT_CENTRAL_DIRECTORY = "decryptCentralDirectory";
4568
- const OPTION_SIGN_CENTRAL_DIRECTORY = "signCentralDirectory";
4569
- const TEXT_TYPE_FILENAME = "filename";
4570
- const TEXT_TYPE_COMMENT = "comment";
4571
- const STRICTNESS_STRICT = "strict";
4572
- const STRICTNESS_BALANCED = "balanced";
4573
- const STRICTNESS_TOLERANT = "tolerant";
4574
-
4575
4657
  /*
4576
4658
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
4577
4659
 
@@ -4612,6 +4694,7 @@
4612
4694
  const ERR_UNSUPPORTED_COMPRESSION$1 = "Compression method not supported";
4613
4695
  const ERR_SPLIT_ZIP_FILE = "Split zip file";
4614
4696
  const ERR_OVERLAPPING_ENTRY = "Overlapping entry found";
4697
+ const ERR_ENTRY_DATA_OUT_OF_BOUNDS = "Entry data out of bounds";
4615
4698
  const ERR_AMBIGUOUS_ARCHIVE = "Ambiguous archive";
4616
4699
  const ERR_ENCRYPTED_CENTRAL_DIRECTORY = "Encrypted central directory is not supported";
4617
4700
  const ERR_UNSAFE_FILENAME = "Unsafe filename";
@@ -4632,7 +4715,7 @@
4632
4715
  ];
4633
4716
  const ZIP64_EXTRACTION = {
4634
4717
  [MAX_16_BITS]: {
4635
- getValue: getUint32,
4718
+ getValue: getUint32$1,
4636
4719
  bytes: 4
4637
4720
  },
4638
4721
  [MAX_32_BITS]: {
@@ -4641,6 +4724,7 @@
4641
4724
  }
4642
4725
  };
4643
4726
  const MAX_END_OF_CENTRAL_DIR_PROBES = 64;
4727
+ const MAX_DEFLATE_EXPANSION_RATIO = 1032;
4644
4728
  const CENTRAL_DIRECTORY_UNREACHABLE = 0;
4645
4729
  const CENTRAL_DIRECTORY_PLAUSIBLE = 1;
4646
4730
  const CENTRAL_DIRECTORY_REACHABLE = 2;
@@ -4651,7 +4735,6 @@
4651
4735
  Object.assign(this, {
4652
4736
  reader: new GenericReader(reader),
4653
4737
  options,
4654
- config: getConfiguration(),
4655
4738
  readRanges: new Map()
4656
4739
  });
4657
4740
  }
@@ -4659,7 +4742,6 @@
4659
4742
  async* getEntriesGenerator(options = {}) {
4660
4743
  const zipReader = this;
4661
4744
  let { reader } = zipReader;
4662
- const { config } = zipReader;
4663
4745
  await initStream(reader);
4664
4746
  if (reader.size === UNDEFINED_VALUE || !reader.readUint8Array) {
4665
4747
  reader = new BlobReader(await streamToBlob(reader.readable));
@@ -4676,9 +4758,7 @@
4676
4758
  const normalizeFilename = getOptionValue$1(zipReader, options, OPTION_NORMALIZE_FILENAME);
4677
4759
  const { endOfDirectoryInfo, endOfDirectoryReachingEndCount } = await findEndOfCentralDirectory(reader, rejectAmbiguousEndOfDirectory, maxAppendedDataSize);
4678
4760
  if (!endOfDirectoryInfo) {
4679
- const signatureArray = await readUint8Array(reader, 0, 4);
4680
- const signatureView = getDataView(signatureArray);
4681
- if (getUint32(signatureView) == SPLIT_ZIP_FILE_SIGNATURE) {
4761
+ if (await startsWithSplitZipSignature$1(reader)) {
4682
4762
  throw new Error(ERR_SPLIT_ZIP_FILE);
4683
4763
  } else {
4684
4764
  throw new Error(ERR_EOCDR_NOT_FOUND);
@@ -4688,22 +4768,23 @@
4688
4768
  throwAmbiguousArchive("multiple end of central directory records");
4689
4769
  }
4690
4770
  const endOfDirectoryView = getDataView(endOfDirectoryInfo);
4691
- let directoryDataLength = getUint32(endOfDirectoryView, 12);
4692
- let directoryDataOffset = getUint32(endOfDirectoryView, 16);
4771
+ let directoryDataLength = getUint32$1(endOfDirectoryView, 12);
4772
+ let directoryDataOffset = getUint32$1(endOfDirectoryView, 16);
4693
4773
  const commentOffset = endOfDirectoryInfo.offset;
4694
- const commentLength = getUint16(endOfDirectoryView, 20);
4774
+ const commentLength = getUint16$1(endOfDirectoryView, 20);
4695
4775
  const appendedDataOffset = commentOffset + END_OF_CENTRAL_DIR_LENGTH + commentLength;
4696
4776
  if (reader.size - appendedDataOffset > maxAppendedDataSize) {
4697
4777
  throwAmbiguousArchive("appended data");
4698
4778
  }
4699
- let lastDiskNumber = getUint16(endOfDirectoryView, 4);
4779
+ let lastDiskNumber = getUint16$1(endOfDirectoryView, 4);
4700
4780
  const expectedLastDiskNumber = reader.lastDiskNumber || 0;
4701
- let diskNumber = getUint16(endOfDirectoryView, 6);
4702
- let filesLength = getUint16(endOfDirectoryView, 10);
4781
+ let diskNumber = getUint16$1(endOfDirectoryView, 6);
4782
+ let filesLength = getUint16$1(endOfDirectoryView, 10);
4703
4783
  let prependedDataLength = 0;
4704
4784
  let startOffset;
4705
4785
  let zip64EndOfDirectory;
4706
4786
  let zip64EndOfDirectoryVersion2;
4787
+ let zip64EndOfDirectoryLength = ZIP64_END_OF_CENTRAL_DIR_LENGTH;
4707
4788
  let directoryEncryptionInfo;
4708
4789
  const requiresZip64 = directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS || diskNumber == MAX_16_BITS;
4709
4790
  if (directoryDataOffset != MAX_32_BITS && diskNumber != MAX_16_BITS) {
@@ -4715,12 +4796,12 @@
4715
4796
  EMPTY_UINT8_ARRAY;
4716
4797
  const endOfDirectoryLocatorView = getDataView(endOfDirectoryLocatorArray);
4717
4798
  if (endOfDirectoryLocatorArray.length == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH &&
4718
- getUint32(endOfDirectoryLocatorView, 0) == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE) {
4719
- directoryDataOffset = getDiskOffset$1(reader, getUint32(endOfDirectoryLocatorView, 4)) + getBigUint64(endOfDirectoryLocatorView, 8);
4799
+ getUint32$1(endOfDirectoryLocatorView, 0) == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE) {
4800
+ directoryDataOffset = getDiskOffset$1(reader, getUint32$1(endOfDirectoryLocatorView, 4)) + getBigUint64(endOfDirectoryLocatorView, 8);
4720
4801
  let endOfDirectoryArray = await readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH);
4721
4802
  let endOfDirectoryView = getDataView(endOfDirectoryArray);
4722
4803
  const expectedDirectoryDataOffset = endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH - ZIP64_END_OF_CENTRAL_DIR_LENGTH;
4723
- if ((endOfDirectoryArray.length < ZIP64_END_OF_CENTRAL_DIR_LENGTH || getUint32(endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE) &&
4804
+ if ((endOfDirectoryArray.length < ZIP64_END_OF_CENTRAL_DIR_LENGTH || getUint32$1(endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE) &&
4724
4805
  directoryDataOffset != expectedDirectoryDataOffset && expectedDirectoryDataOffset >= 0) {
4725
4806
  const originalDirectoryDataOffset = directoryDataOffset;
4726
4807
  directoryDataOffset = expectedDirectoryDataOffset;
@@ -4730,7 +4811,7 @@
4730
4811
  endOfDirectoryArray = await readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH);
4731
4812
  endOfDirectoryView = getDataView(endOfDirectoryArray);
4732
4813
  }
4733
- if (endOfDirectoryArray.length < ZIP64_END_OF_CENTRAL_DIR_LENGTH || getUint32(endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE) {
4814
+ if (endOfDirectoryArray.length < ZIP64_END_OF_CENTRAL_DIR_LENGTH || getUint32$1(endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE) {
4734
4815
  throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
4735
4816
  }
4736
4817
  zip64EndOfDirectory = true;
@@ -4740,18 +4821,19 @@
4740
4821
  Number(getBigUint64(endOfDirectoryView, 4)) - (ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12),
4741
4822
  reader.size - directoryDataOffset - ZIP64_END_OF_CENTRAL_DIR_LENGTH);
4742
4823
  if (extensibleDataLength > 0) {
4824
+ zip64EndOfDirectoryLength += extensibleDataLength;
4743
4825
  const rawExtensibleData = await readUint8Array(reader, directoryDataOffset + ZIP64_END_OF_CENTRAL_DIR_LENGTH, extensibleDataLength);
4744
4826
  directoryEncryptionInfo = getDirectoryEncryptionInfo(rawExtensibleData);
4745
4827
  }
4746
4828
  }
4747
4829
  if (lastDiskNumber == MAX_16_BITS) {
4748
- lastDiskNumber = getUint32(endOfDirectoryView, 16);
4749
- } else if (checkAmbiguity && lastDiskNumber != getUint32(endOfDirectoryView, 16)) {
4830
+ lastDiskNumber = getUint32$1(endOfDirectoryView, 16);
4831
+ } else if (checkAmbiguity && lastDiskNumber != getUint32$1(endOfDirectoryView, 16)) {
4750
4832
  throwAmbiguousArchive("mismatched zip64 end of central directory record");
4751
4833
  }
4752
4834
  if (diskNumber == MAX_16_BITS) {
4753
- diskNumber = getUint32(endOfDirectoryView, 20);
4754
- } else if (checkAmbiguity && diskNumber != getUint32(endOfDirectoryView, 20)) {
4835
+ diskNumber = getUint32$1(endOfDirectoryView, 20);
4836
+ } else if (checkAmbiguity && diskNumber != getUint32$1(endOfDirectoryView, 20)) {
4755
4837
  throwAmbiguousArchive("mismatched zip64 end of central directory record");
4756
4838
  }
4757
4839
  if (filesLength == MAX_16_BITS) {
@@ -4769,7 +4851,7 @@
4769
4851
  }
4770
4852
  let declaredDirectoryDataLength = directoryDataLength;
4771
4853
  const centralDirectoryEndOffset = endOfDirectoryInfo.offset -
4772
- (zip64EndOfDirectory ? ZIP64_END_OF_CENTRAL_DIR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH : 0);
4854
+ (zip64EndOfDirectory ? zip64EndOfDirectoryLength + ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH : 0);
4773
4855
  if (directoryDataOffset >= reader.size) {
4774
4856
  prependedDataLength = reader.size - directoryDataOffset - directoryDataLength - END_OF_CENTRAL_DIR_LENGTH;
4775
4857
  directoryDataOffset = reader.size - directoryDataLength - END_OF_CENTRAL_DIR_LENGTH;
@@ -4789,11 +4871,13 @@
4789
4871
  }
4790
4872
  const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
4791
4873
  if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
4792
- const storedPointsAtDirectory = getUint32(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE;
4874
+ const storedPointsAtDirectory = getUint32$1(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE ||
4875
+ Boolean(directoryEncryptionInfo && directoryEncryptionInfo.compressedSize) ||
4876
+ detectEncryptedCentralDirectory(directoryView);
4793
4877
  let reconcile = !storedPointsAtDirectory;
4794
4878
  if (!reconcile && expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
4795
4879
  const expectedSignatureArray = await readUint8Array(reader, expectedDirectoryDataOffset, 4);
4796
- reconcile = getUint32(getDataView(expectedSignatureArray), 0) == CENTRAL_FILE_HEADER_SIGNATURE;
4880
+ reconcile = getUint32$1(getDataView(expectedSignatureArray), 0) == CENTRAL_FILE_HEADER_SIGNATURE;
4797
4881
  }
4798
4882
  if (reconcile) {
4799
4883
  const originalDirectoryDataOffset = directoryDataOffset;
@@ -4817,12 +4901,14 @@
4817
4901
  }
4818
4902
  zipReader.directoryOffset = directoryDataOffset;
4819
4903
  zipReader.directoryLength = declaredDirectoryDataLength;
4820
- const decryptCentralDirectory = getOptionValue$1(zipReader, options, OPTION_DECRYPT_CENTRAL_DIRECTORY);
4821
- let decryptedDirectory;
4904
+ const decryptCentralDirectory = getFunctionOptionValue$1(zipReader, options, OPTION_DECRYPT_CENTRAL_DIRECTORY);
4905
+ let decryptedDirectory, dataAfterEncryptedDirectory;
4822
4906
  if (decryptCentralDirectory && filesLength && directoryArray.length >= 4 &&
4823
- getUint32(directoryView, 0) != CENTRAL_FILE_HEADER_SIGNATURE &&
4907
+ getUint32$1(directoryView, 0) != CENTRAL_FILE_HEADER_SIGNATURE &&
4824
4908
  (zip64EndOfDirectoryVersion2 || detectEncryptedCentralDirectory(directoryView))) {
4825
- directoryArray = await decryptCentralDirectory(directoryArray, directoryEncryptionInfo);
4909
+ const encryptedDirectoryDataLength = getEncryptedDirectoryDataLength(directoryEncryptionInfo, declaredDirectoryDataLength, directoryArray.length);
4910
+ dataAfterEncryptedDirectory = directoryArray.subarray(encryptedDirectoryDataLength);
4911
+ directoryArray = await decryptCentralDirectory(directoryArray.subarray(0, encryptedDirectoryDataLength), directoryEncryptionInfo);
4826
4912
  directoryView = getDataView(directoryArray);
4827
4913
  declaredDirectoryDataLength = directoryArray.length;
4828
4914
  decryptedDirectory = true;
@@ -4833,8 +4919,8 @@
4833
4919
  const filenames = checkAmbiguity ? new Set() : UNDEFINED_VALUE;
4834
4920
  let duplicateFilename;
4835
4921
  for (let indexFile = 0; indexFile < filesLength; indexFile++) {
4836
- const fileEntry = new ZipEntry(reader, config, zipReader.options);
4837
- if (offset + CENTRAL_FILE_HEADER_LENGTH > directoryArray.length || getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE) {
4922
+ const fileEntry = new ZipEntry(reader, zipReader.options);
4923
+ if (offset + CENTRAL_FILE_HEADER_LENGTH > directoryArray.length || getUint32$1(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE) {
4838
4924
  if (indexFile == 0 && !decryptedDirectory && (zip64EndOfDirectoryVersion2 || detectEncryptedCentralDirectory(directoryView))) {
4839
4925
  throw new Error(ERR_ENCRYPTED_CENTRAL_DIRECTORY);
4840
4926
  }
@@ -4845,16 +4931,16 @@
4845
4931
  const filenameOffset = offset + CENTRAL_FILE_HEADER_LENGTH;
4846
4932
  const extraFieldOffset = filenameOffset + fileEntry.filenameLength;
4847
4933
  const commentOffset = extraFieldOffset + fileEntry.extraFieldLength;
4848
- const versionMadeBy = getUint16(directoryView, offset + 4);
4934
+ const versionMadeBy = getUint16$1(directoryView, offset + 4);
4849
4935
  const msDosCompatible = versionMadeBy >> 8 == 0;
4850
4936
  const unixCompatible = versionMadeBy >> 8 == 3;
4851
4937
  const rawFilename = directoryArray.subarray(filenameOffset, extraFieldOffset);
4852
- const commentLength = getUint16(directoryView, offset + 32);
4938
+ const commentLength = getUint16$1(directoryView, offset + 32);
4853
4939
  const endOffset = commentOffset + commentLength;
4854
4940
  const rawComment = directoryArray.subarray(commentOffset, endOffset);
4855
4941
  const filenameUTF8 = languageEncodingFlag;
4856
4942
  const commentUTF8 = languageEncodingFlag;
4857
- const externalFileAttributes = getUint32(directoryView, offset + 38);
4943
+ const externalFileAttributes = getUint32$1(directoryView, offset + 38);
4858
4944
  const msdosAttributesRaw = externalFileAttributes & MAX_8_BITS;
4859
4945
  const msdosAttributes = {
4860
4946
  readOnly: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_READONLY_MASK),
@@ -4863,8 +4949,8 @@
4863
4949
  directory: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_DIR_MASK),
4864
4950
  archive: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_ARCHIVE_MASK)
4865
4951
  };
4866
- const offsetFileEntry = getUint32(directoryView, offset + 42);
4867
- const decode = getOptionValue$1(zipReader, options, OPTION_DECODE_TEXT) || decodeText;
4952
+ const offsetFileEntry = getUint32$1(directoryView, offset + 42);
4953
+ const decode = getFunctionOptionValue$1(zipReader, options, OPTION_DECODE_TEXT) || decodeText;
4868
4954
  const rawFilenameEncoding = filenameUTF8 ? CHARSET_UTF8 : filenameEncoding || CHARSET_CP437;
4869
4955
  const rawCommentEncoding = commentUTF8 ? CHARSET_UTF8 : commentEncoding || CHARSET_CP437;
4870
4956
  let filename = decode(rawFilename, rawFilenameEncoding, TEXT_TYPE_FILENAME);
@@ -4888,6 +4974,7 @@
4888
4974
  }
4889
4975
  Object.assign(fileEntry, {
4890
4976
  index: indexFile,
4977
+ decryptedDirectory,
4891
4978
  versionMadeBy,
4892
4979
  msDosCompatible,
4893
4980
  zip64: false,
@@ -4895,8 +4982,8 @@
4895
4982
  uncompressedSize: 0,
4896
4983
  commentLength,
4897
4984
  offset: offsetFileEntry,
4898
- diskNumberStart: getUint16(directoryView, offset + 34),
4899
- internalFileAttributes: getUint16(directoryView, offset + 36),
4985
+ diskNumberStart: getUint16$1(directoryView, offset + 34),
4986
+ internalFileAttributes: getUint16$1(directoryView, offset + 36),
4900
4987
  externalFileAttributes,
4901
4988
  msdosAttributesRaw,
4902
4989
  msdosAttributes,
@@ -4964,12 +5051,11 @@
4964
5051
  yield entry;
4965
5052
  }
4966
5053
  let offsetAfterSignature = offset;
4967
- if (offset + 6 <= directoryArray.length && getUint32(directoryView, offset) == DIGITAL_SIGNATURE_RECORD_SIGNATURE) {
4968
- const signatureDataLength = getUint16(directoryView, offset + 4);
4969
- if (offset + 6 + signatureDataLength <= directoryArray.length) {
4970
- zipReader.digitalSignature = directoryArray.subarray(offset + 6, offset + 6 + signatureDataLength);
4971
- offsetAfterSignature = offset + 6 + signatureDataLength;
4972
- }
5054
+ const digitalSignature = readDigitalSignature(directoryArray.subarray(offset)) ||
5055
+ (decryptedDirectory ? readDigitalSignature(dataAfterEncryptedDirectory) : UNDEFINED_VALUE);
5056
+ if (digitalSignature) {
5057
+ zipReader.digitalSignature = digitalSignature;
5058
+ offsetAfterSignature = offset + 6 + digitalSignature.length;
4973
5059
  }
4974
5060
  if (checkAmbiguity && offset != declaredDirectoryDataLength && offsetAfterSignature != declaredDirectoryDataLength) {
4975
5061
  throwAmbiguousArchive("trailing central directory data");
@@ -4977,13 +5063,17 @@
4977
5063
  if (duplicateFilename) {
4978
5064
  throwAmbiguousArchive("duplicate filename");
4979
5065
  }
4980
- if (checkAmbiguity && (prependedDataLength || (filesLength && startOffset > 0))) {
4981
- throwAmbiguousArchive("prepended data");
4982
- }
4983
5066
  const extractPrependedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_PREPENDED_DATA);
4984
5067
  const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
5068
+ const splitZipSignatureLength = (checkAmbiguity || extractPrependedData) && filesLength &&
5069
+ startOffset == SPLIT_ZIP_FILE_SIGNATURE_LENGTH && await startsWithSplitZipMarker(reader) ? SPLIT_ZIP_FILE_SIGNATURE_LENGTH : 0;
5070
+ if (checkAmbiguity && (prependedDataLength || (filesLength && startOffset > splitZipSignatureLength))) {
5071
+ throwAmbiguousArchive("prepended data");
5072
+ }
4985
5073
  if (extractPrependedData) {
4986
- zipReader.prependedData = startOffset > 0 ? await readUint8Array(reader, 0, startOffset) : EMPTY_UINT8_ARRAY;
5074
+ zipReader.prependedData = startOffset > splitZipSignatureLength ?
5075
+ await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
5076
+ EMPTY_UINT8_ARRAY;
4987
5077
  }
4988
5078
  zipReader.comment = commentLength ? await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength) : EMPTY_UINT8_ARRAY;
4989
5079
  if (extractAppendedData) {
@@ -5050,16 +5140,16 @@
5050
5140
 
5051
5141
  class ZipEntry {
5052
5142
 
5053
- constructor(reader, config, options) {
5143
+ constructor(reader, options) {
5054
5144
  Object.assign(this, {
5055
5145
  reader,
5056
- config,
5057
5146
  options
5058
5147
  });
5059
5148
  }
5060
5149
 
5061
5150
  async getData(writer, fileEntry, readRanges, options = {}) {
5062
5151
  const zipEntry = this;
5152
+ const config = getConfiguration();
5063
5153
  const {
5064
5154
  reader,
5065
5155
  index,
@@ -5068,7 +5158,6 @@
5068
5158
  extraFieldAES,
5069
5159
  extraFieldZip64,
5070
5160
  compressionMethod,
5071
- config,
5072
5161
  bitFlag,
5073
5162
  rawBitFlag,
5074
5163
  crc32,
@@ -5086,6 +5175,7 @@
5086
5175
  let password = getOptionValue$1(zipEntry, options, OPTION_PASSWORD);
5087
5176
  let rawPassword = getOptionValue$1(zipEntry, options, OPTION_RAW_PASSWORD);
5088
5177
  const passThrough = getOptionValue$1(zipEntry, options, OPTION_PASS_THROUGH);
5178
+ checkPasswordOption(password, rawPassword);
5089
5179
  password = password && password.length && password;
5090
5180
  rawPassword = rawPassword && rawPassword.length && rawPassword;
5091
5181
  if (extraFieldAES) {
@@ -5093,7 +5183,7 @@
5093
5183
  throw new Error(ERR_UNSUPPORTED_COMPRESSION$1);
5094
5184
  }
5095
5185
  }
5096
- if (dataArray.length < HEADER_SIZE || getUint32(dataView, 0) != LOCAL_FILE_HEADER_SIGNATURE) {
5186
+ if (dataArray.length < HEADER_SIZE || getUint32$1(dataView, 0) != LOCAL_FILE_HEADER_SIGNATURE) {
5097
5187
  throw new Error(ERR_LOCAL_FILE_HEADER_NOT_FOUND);
5098
5188
  }
5099
5189
  readCommonHeader(localDirectory, dataView, 4);
@@ -5155,9 +5245,12 @@
5155
5245
  }
5156
5246
  }
5157
5247
  const dataOffset = localHeaderOffset + HEADER_SIZE + filenameLength + extraFieldLength;
5248
+ if (dataOffset + compressedSize > reader.size) {
5249
+ throw new Error(ERR_ENTRY_DATA_OUT_OF_BOUNDS);
5250
+ }
5158
5251
  const size = compressedSize;
5159
5252
  const readable = toCompatibleReadable(reader.createReadable({ offset: dataOffset, size }));
5160
- const signal = getOptionValue$1(zipEntry, options, OPTION_SIGNAL);
5253
+ const signal = checkSignalOption(getOptionValue$1(zipEntry, options, OPTION_SIGNAL));
5161
5254
  const checkPasswordOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_PASSWORD_ONLY);
5162
5255
  let checkOverlappingEntry = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY);
5163
5256
  const checkOverlappingEntryOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY_ONLY);
@@ -5165,6 +5258,8 @@
5165
5258
  checkOverlappingEntry = true;
5166
5259
  }
5167
5260
  const { onstart, onprogress, onend } = options;
5261
+ const compressed = compressionMethod != COMPRESSION_METHOD_STORE && !passThrough;
5262
+ const outputSize = passThrough ? compressedSize : uncompressedSize;
5168
5263
  const deflate64 = compressionMethod == COMPRESSION_METHOD_DEFLATE_64;
5169
5264
  let useCompressionStream = getOptionValue$1(zipEntry, options, OPTION_USE_COMPRESSION_STREAM);
5170
5265
  if (deflate64) {
@@ -5185,9 +5280,9 @@
5185
5280
  checkCrc32,
5186
5281
  checkAuthenticationCode: getOptionValue$1(zipEntry, options, OPTION_CHECK_AUTHENTICATION_CODE),
5187
5282
  passwordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) & MAX_8_BITS) : ((crc32 >>> 24) & MAX_8_BITS)),
5188
- outputSize: passThrough ? compressedSize : uncompressedSize,
5283
+ outputSize,
5189
5284
  crc32,
5190
- compressed: compressionMethod != 0 && !passThrough,
5285
+ compressed,
5191
5286
  encrypted,
5192
5287
  useWebWorkers: getOptionValue$1(zipEntry, options, OPTION_USE_WEB_WORKERS),
5193
5288
  useCompressionStream,
@@ -5224,11 +5319,11 @@
5224
5319
  writer = new WritableStream();
5225
5320
  }
5226
5321
  writer = new GenericWriter(writer);
5227
- await initStream(writer, passThrough ? compressedSize : uncompressedSize);
5322
+ await initStream(writer, getDecodableOutputSize(outputSize, compressedSize, compressed));
5228
5323
  ({ writable } = writer);
5229
- const { outputSize } = await runWorker({ readable, writable }, workerOptions);
5230
- writer.size += outputSize;
5231
- if (outputSize != (passThrough ? compressedSize : uncompressedSize)) {
5324
+ const { outputSize: writtenSize } = await runWorker({ readable, writable }, workerOptions);
5325
+ writer.size += writtenSize;
5326
+ if (writtenSize != outputSize) {
5232
5327
  throw new Error(ERR_INVALID_UNCOMPRESSED_SIZE);
5233
5328
  }
5234
5329
  }
@@ -5262,26 +5357,47 @@
5262
5357
  function detectEncryptedCentralDirectory(directoryView) {
5263
5358
  const maxOffset = Math.min(directoryView.byteLength, 1024) - 3;
5264
5359
  for (let offset = 0; offset < maxOffset; offset++) {
5265
- if (getUint32(directoryView, offset) == ARCHIVE_EXTRA_DATA_SIGNATURE) {
5360
+ if (getUint32$1(directoryView, offset) == ARCHIVE_EXTRA_DATA_SIGNATURE) {
5266
5361
  return true;
5267
5362
  }
5268
5363
  }
5269
5364
  return false;
5270
5365
  }
5271
5366
 
5367
+ function readDigitalSignature(signatureRecordArray) {
5368
+ if (signatureRecordArray.length >= 6) {
5369
+ const signatureRecordView = getDataView(signatureRecordArray);
5370
+ if (getUint32$1(signatureRecordView, 0) == DIGITAL_SIGNATURE_RECORD_SIGNATURE) {
5371
+ const signatureDataLength = getUint16$1(signatureRecordView, 4);
5372
+ if (6 + signatureDataLength <= signatureRecordArray.length) {
5373
+ return signatureRecordArray.subarray(6, 6 + signatureDataLength);
5374
+ }
5375
+ }
5376
+ }
5377
+ }
5378
+
5379
+ function getEncryptedDirectoryDataLength(directoryEncryptionInfo, declaredDirectoryDataLength, directoryDataLength) {
5380
+ const encryptedDirectoryDataLength = directoryEncryptionInfo && directoryEncryptionInfo.compressedSize ?
5381
+ directoryEncryptionInfo.compressedSize :
5382
+ declaredDirectoryDataLength;
5383
+ return encryptedDirectoryDataLength > 0 && encryptedDirectoryDataLength <= directoryDataLength ?
5384
+ encryptedDirectoryDataLength :
5385
+ directoryDataLength;
5386
+ }
5387
+
5272
5388
  function getDirectoryEncryptionInfo(rawExtensibleData) {
5273
5389
  const directoryEncryptionInfo = { rawExtensibleData };
5274
5390
  if (rawExtensibleData.length >= 28) {
5275
5391
  const extensibleDataView = getDataView(rawExtensibleData);
5276
- const hashDataLength = getUint16(extensibleDataView, 26);
5392
+ const hashDataLength = getUint16$1(extensibleDataView, 26);
5277
5393
  Object.assign(directoryEncryptionInfo, {
5278
- compressionMethod: getUint16(extensibleDataView, 0),
5394
+ compressionMethod: getUint16$1(extensibleDataView, 0),
5279
5395
  compressedSize: Number(getBigUint64(extensibleDataView, 2)),
5280
5396
  uncompressedSize: Number(getBigUint64(extensibleDataView, 10)),
5281
- encryptionAlgorithm: getUint16(extensibleDataView, 18),
5282
- bitLength: getUint16(extensibleDataView, 20),
5283
- flags: getUint16(extensibleDataView, 22),
5284
- hashAlgorithm: getUint16(extensibleDataView, 24),
5397
+ encryptionAlgorithm: getUint16$1(extensibleDataView, 18),
5398
+ bitLength: getUint16$1(extensibleDataView, 20),
5399
+ flags: getUint16$1(extensibleDataView, 22),
5400
+ hashAlgorithm: getUint16$1(extensibleDataView, 24),
5285
5401
  hashData: rawExtensibleData.subarray(28, 28 + hashDataLength)
5286
5402
  });
5287
5403
  }
@@ -5289,12 +5405,12 @@
5289
5405
  }
5290
5406
 
5291
5407
  function readCommonHeader(directory, dataView, offset) {
5292
- const rawBitFlag = directory.rawBitFlag = getUint16(dataView, offset + 2);
5408
+ const rawBitFlag = directory.rawBitFlag = getUint16$1(dataView, offset + 2);
5293
5409
  const encrypted = (rawBitFlag & BITFLAG_ENCRYPTED) == BITFLAG_ENCRYPTED;
5294
- const rawLastModDate = getUint32(dataView, offset + 6);
5410
+ const rawLastModDate = getUint32$1(dataView, offset + 6);
5295
5411
  Object.assign(directory, {
5296
5412
  encrypted,
5297
- version: getUint16(dataView, offset),
5413
+ version: getUint16$1(dataView, offset),
5298
5414
  bitFlag: {
5299
5415
  level: (rawBitFlag & BITFLAG_LEVEL) >> 1,
5300
5416
  dataDescriptor: (rawBitFlag & BITFLAG_DATA_DESCRIPTOR) == BITFLAG_DATA_DESCRIPTOR,
@@ -5302,8 +5418,8 @@
5302
5418
  },
5303
5419
  rawLastModDate,
5304
5420
  lastModDate: getDate(rawLastModDate),
5305
- filenameLength: getUint16(dataView, offset + 22),
5306
- extraFieldLength: getUint16(dataView, offset + 24)
5421
+ filenameLength: getUint16$1(dataView, offset + 22),
5422
+ extraFieldLength: getUint16$1(dataView, offset + 24)
5307
5423
  });
5308
5424
  }
5309
5425
 
@@ -5314,8 +5430,8 @@
5314
5430
  let offsetExtraField = 0;
5315
5431
  try {
5316
5432
  while (offsetExtraField < rawExtraField.length) {
5317
- const type = getUint16(rawExtraFieldView, offsetExtraField);
5318
- const size = getUint16(rawExtraFieldView, offsetExtraField + 2);
5433
+ const type = getUint16$1(rawExtraFieldView, offsetExtraField);
5434
+ const size = getUint16$1(rawExtraFieldView, offsetExtraField + 2);
5319
5435
  extraField.set(type, {
5320
5436
  type,
5321
5437
  data: rawExtraField.slice(offsetExtraField + 4, offsetExtraField + 4 + size)
@@ -5325,12 +5441,12 @@
5325
5441
  } catch {
5326
5442
  // ignored
5327
5443
  }
5328
- const compressionMethod = getUint16(dataView, offset + 4);
5444
+ const compressionMethod = getUint16$1(dataView, offset + 4);
5329
5445
  Object.assign(directory, {
5330
- signature: getUint32(dataView, offset + HEADER_OFFSET_SIGNATURE),
5331
- crc32: getUint32(dataView, offset + HEADER_OFFSET_SIGNATURE),
5332
- compressedSize: getUint32(dataView, offset + HEADER_OFFSET_COMPRESSED_SIZE),
5333
- uncompressedSize: getUint32(dataView, offset + HEADER_OFFSET_UNCOMPRESSED_SIZE)
5446
+ signature: getUint32$1(dataView, offset + HEADER_OFFSET_SIGNATURE),
5447
+ crc32: getUint32$1(dataView, offset + HEADER_OFFSET_SIGNATURE),
5448
+ compressedSize: getUint32$1(dataView, offset + HEADER_OFFSET_COMPRESSED_SIZE),
5449
+ uncompressedSize: getUint32$1(dataView, offset + HEADER_OFFSET_UNCOMPRESSED_SIZE)
5334
5450
  });
5335
5451
  const extraFieldZip64 = extraField.get(EXTRAFIELD_TYPE_ZIP64);
5336
5452
  if (extraFieldZip64) {
@@ -5419,11 +5535,11 @@
5419
5535
  computedCrc32.append(fileEntry[rawPropertyName]);
5420
5536
  const computedCrc32View = getDataView(new Uint8Array(4));
5421
5537
  computedCrc32View.setUint32(0, computedCrc32.get(), true);
5422
- const nameCrc32 = getUint32(extraFieldView, 1);
5538
+ const nameCrc32 = getUint32$1(extraFieldView, 1);
5423
5539
  Object.assign(extraFieldUnicode, {
5424
5540
  version: getUint8(extraFieldView, 0),
5425
5541
  [propertyName]: decodeText(extraFieldUnicode.data.subarray(5)),
5426
- valid: !fileEntry.bitFlag.languageEncodingFlag && nameCrc32 == getUint32(computedCrc32View, 0)
5542
+ valid: !fileEntry.bitFlag.languageEncodingFlag && nameCrc32 == getUint32$1(computedCrc32View, 0)
5427
5543
  });
5428
5544
  if (extraFieldUnicode.valid) {
5429
5545
  directory[propertyName] = extraFieldUnicode[propertyName];
@@ -5439,7 +5555,7 @@
5439
5555
  vendorId: getUint8(extraFieldView, 2),
5440
5556
  strength,
5441
5557
  originalCompressionMethod: compressionMethod,
5442
- compressionMethod: getUint16(extraFieldView, 5)
5558
+ compressionMethod: getUint16$1(extraFieldView, 5)
5443
5559
  });
5444
5560
  directory.compressionMethod = extraFieldAES.compressionMethod;
5445
5561
  if (extraFieldAES.vendorVersion != VENDOR_VERSION_AE_1$1) {
@@ -5453,8 +5569,8 @@
5453
5569
  let tag1Data;
5454
5570
  try {
5455
5571
  while (offsetExtraField < extraFieldNTFS.data.length && !tag1Data) {
5456
- const tagValue = getUint16(extraFieldView, offsetExtraField);
5457
- const attributeSize = getUint16(extraFieldView, offsetExtraField + 2);
5572
+ const tagValue = getUint16$1(extraFieldView, offsetExtraField);
5573
+ const attributeSize = getUint16$1(extraFieldView, offsetExtraField + 2);
5458
5574
  if (tagValue == EXTRAFIELD_TYPE_NTFS_TAG1) {
5459
5575
  tag1Data = extraFieldNTFS.data.slice(offsetExtraField + 4, offsetExtraField + 4 + attributeSize);
5460
5576
  }
@@ -5487,12 +5603,12 @@
5487
5603
  return;
5488
5604
  }
5489
5605
  const extraFieldView = getDataView(extraField.data);
5490
- const lastAccessDate = new Date((getUint32(extraFieldView, 0) | 0) * 1000);
5491
- const lastModDate = new Date((getUint32(extraFieldView, 4) | 0) * 1000);
5606
+ const lastAccessDate = new Date((getUint32$1(extraFieldView, 0) | 0) * 1000);
5607
+ const lastModDate = new Date((getUint32$1(extraFieldView, 4) | 0) * 1000);
5492
5608
  const extraFieldData = { lastAccessDate, lastModDate };
5493
5609
  if (extraField.data.length >= 12) {
5494
- extraFieldData.uid = getUint16(extraFieldView, 8);
5495
- extraFieldData.gid = getUint16(extraFieldView, 10);
5610
+ extraFieldData.uid = getUint16$1(extraFieldView, 8);
5611
+ extraFieldData.gid = getUint16$1(extraFieldView, 10);
5496
5612
  }
5497
5613
  Object.assign(extraField, extraFieldData);
5498
5614
  Object.assign(directory, extraFieldData);
@@ -5512,8 +5628,8 @@
5512
5628
  gid = unpackUnixId(extraField.data.subarray(offset, offset + gidSize));
5513
5629
  Object.assign(extraField, { version, uid, gid });
5514
5630
  } else if (extraField.data.length >= 4) {
5515
- uid = getUint16(view, 0);
5516
- gid = getUint16(view, 2);
5631
+ uid = getUint16$1(view, 0);
5632
+ gid = getUint16$1(view, 2);
5517
5633
  Object.assign(extraField, { uid, gid });
5518
5634
  }
5519
5635
  if (uid !== UNDEFINED_VALUE) {
@@ -5563,7 +5679,7 @@
5563
5679
  let offset = 1;
5564
5680
  timeProperties.forEach((propertyName, indexProperty) => {
5565
5681
  if (extraFieldExtendedTimestamp.data.length >= offset + 4) {
5566
- const time = getUint32(extraFieldView, offset);
5682
+ const time = getUint32$1(extraFieldView, offset);
5567
5683
  directory[propertyName] = extraFieldExtendedTimestamp[propertyName] = new Date((time | 0) * 1000);
5568
5684
  const rawPropertyName = timeRawProperties[indexProperty];
5569
5685
  extraFieldExtendedTimestamp[rawPropertyName] = time;
@@ -5597,7 +5713,7 @@
5597
5713
  const dataDescriptorArray = await readUint8Array(reader, dataOffset + compressedSize, dataDescriptorLength + DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH);
5598
5714
  const dataDescriptorView = getDataView(dataDescriptorArray);
5599
5715
  let signature = dataDescriptorArray.length == dataDescriptorLength + DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH &&
5600
- getUint32(dataDescriptorView, 0) == DATA_DESCRIPTOR_RECORD_SIGNATURE;
5716
+ getUint32$1(dataDescriptorView, 0) == DATA_DESCRIPTOR_RECORD_SIGNATURE;
5601
5717
  if (signature) {
5602
5718
  const signedDataDescriptor = readDataDescriptor(dataDescriptorView, DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH, extraFieldZip64);
5603
5719
  const matchCrc32 = (fileEntry.encrypted && !fileEntry.zipCrypto) || signedDataDescriptor.crc32 == crc32;
@@ -5631,15 +5747,15 @@
5631
5747
  }
5632
5748
 
5633
5749
  function readDataDescriptor(dataDescriptorView, offset, extraFieldZip64) {
5634
- const crc32 = getUint32(dataDescriptorView, offset);
5750
+ const crc32 = getUint32$1(dataDescriptorView, offset);
5635
5751
  let compressedSize;
5636
5752
  let uncompressedSize;
5637
5753
  if (extraFieldZip64) {
5638
5754
  compressedSize = getBigUint64(dataDescriptorView, offset + 4);
5639
5755
  uncompressedSize = getBigUint64(dataDescriptorView, offset + 12);
5640
5756
  } else {
5641
- compressedSize = getUint32(dataDescriptorView, offset + 4);
5642
- uncompressedSize = getUint32(dataDescriptorView, offset + 8);
5757
+ compressedSize = getUint32$1(dataDescriptorView, offset + 4);
5758
+ uncompressedSize = getUint32$1(dataDescriptorView, offset + 8);
5643
5759
  }
5644
5760
  return { crc32, compressedSize, uncompressedSize };
5645
5761
  }
@@ -5648,10 +5764,28 @@
5648
5764
  return reader.getDiskOffset ? reader.getDiskOffset(diskNumber) : 0;
5649
5765
  }
5650
5766
 
5767
+ async function startsWithSplitZipSignature$1(reader) {
5768
+ return await getFirstSignature(reader) == SPLIT_ZIP_FILE_SIGNATURE;
5769
+ }
5770
+
5771
+ async function startsWithSplitZipMarker(reader) {
5772
+ const signature = await getFirstSignature(reader);
5773
+ return signature == SPLIT_ZIP_FILE_SIGNATURE || signature == TEMPORARY_SPLIT_ZIP_FILE_SIGNATURE;
5774
+ }
5775
+
5776
+ async function getFirstSignature(reader) {
5777
+ const signatureArray = await readUint8Array(reader, 0, SPLIT_ZIP_FILE_SIGNATURE_LENGTH);
5778
+ return getUint32$1(getDataView(signatureArray));
5779
+ }
5780
+
5651
5781
  function isStrictnessValue(value) {
5652
5782
  return value === STRICTNESS_STRICT || value === STRICTNESS_BALANCED || value === STRICTNESS_TOLERANT;
5653
5783
  }
5654
5784
 
5785
+ function getDecodableOutputSize(outputSize, compressedSize, compressed) {
5786
+ return Math.min(outputSize, compressed ? compressedSize * MAX_DEFLATE_EXPANSION_RATIO : compressedSize);
5787
+ }
5788
+
5655
5789
  function getStrictness(options, inheritedOptions) {
5656
5790
  return resolveStrictness(options, resolveStrictness(inheritedOptions, STRICTNESS_BALANCED));
5657
5791
  }
@@ -5714,7 +5848,7 @@
5714
5848
 
5715
5849
  function getMaxAppendedDataSize(maxAppendedDataSize, strictness) {
5716
5850
  if (maxAppendedDataSize !== UNDEFINED_VALUE) {
5717
- const size = toNumber$1(maxAppendedDataSize);
5851
+ const size = toNumber(maxAppendedDataSize);
5718
5852
  if (typeof size != NUMBER_TYPE || Number.isNaN(size) || size < 0) {
5719
5853
  throw new Error(ERR_INVALID_MAX_APPENDED_DATA_SIZE);
5720
5854
  }
@@ -5737,7 +5871,7 @@
5737
5871
  let plausibleEndOfDirectoryInfo;
5738
5872
  let endOfDirectoryReachingEndCount = 0;
5739
5873
  for await (const [anchoredView, anchoredOffset, anchoredArray, indexByte, offset] of scanEndOfCentralDirectory(reader, anchoredLength)) {
5740
- const commentLength = getUint16(anchoredView, indexByte + 20);
5874
+ const commentLength = getUint16$1(anchoredView, indexByte + 20);
5741
5875
  if (offset + END_OF_CENTRAL_DIR_LENGTH + commentLength == size) {
5742
5876
  const reachability = await getCentralDirectoryReachability(reader, anchoredView, anchoredOffset, indexByte, offset, size, remoteProbeBudget);
5743
5877
  if (reachability == CENTRAL_DIRECTORY_REACHABLE) {
@@ -5788,7 +5922,7 @@
5788
5922
  const scanArray = await readUint8Array(reader, scanOffset, scanLength);
5789
5923
  const scanView = getDataView(scanArray);
5790
5924
  for (let indexByte = scanArray.length - END_OF_CENTRAL_DIR_LENGTH; indexByte >= 0; indexByte--) {
5791
- if (getUint32(scanView, indexByte) == END_OF_CENTRAL_DIR_SIGNATURE) {
5925
+ if (getUint32$1(scanView, indexByte) == END_OF_CENTRAL_DIR_SIGNATURE) {
5792
5926
  yield [scanView, scanOffset, scanArray, indexByte, scanOffset + indexByte];
5793
5927
  }
5794
5928
  }
@@ -5799,9 +5933,9 @@
5799
5933
  }
5800
5934
 
5801
5935
  async function getCentralDirectoryReachability(reader, view, anchoredOffset, indexByte, offset, size, remoteProbeBudget) {
5802
- const filesLength = getUint16(view, indexByte + 10);
5803
- const directoryDataLength = getUint32(view, indexByte + 12);
5804
- const directoryDataOffset = getUint32(view, indexByte + 16);
5936
+ const filesLength = getUint16$1(view, indexByte + 10);
5937
+ const directoryDataLength = getUint32$1(view, indexByte + 12);
5938
+ const directoryDataOffset = getUint32$1(view, indexByte + 16);
5805
5939
  if (filesLength == MAX_16_BITS || directoryDataLength == MAX_32_BITS || directoryDataOffset == MAX_32_BITS) {
5806
5940
  const locatorSignature = await readSignature(reader, view, anchoredOffset, offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, size, remoteProbeBudget);
5807
5941
  return locatorSignature == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE ? CENTRAL_DIRECTORY_REACHABLE : CENTRAL_DIRECTORY_UNREACHABLE;
@@ -5809,7 +5943,7 @@
5809
5943
  if (!filesLength && !directoryDataLength) {
5810
5944
  return CENTRAL_DIRECTORY_PLAUSIBLE;
5811
5945
  }
5812
- const directoryDiskNumber = getUint16(view, indexByte + 6);
5946
+ const directoryDiskNumber = getUint16$1(view, indexByte + 6);
5813
5947
  for (const centralDirectoryOffset of [offset - directoryDataLength, getDiskOffset$1(reader, directoryDiskNumber) + directoryDataOffset]) {
5814
5948
  if (await readSignature(reader, view, anchoredOffset, centralDirectoryOffset, size, remoteProbeBudget) == CENTRAL_FILE_HEADER_SIGNATURE) {
5815
5949
  return CENTRAL_DIRECTORY_REACHABLE;
@@ -5823,19 +5957,21 @@
5823
5957
  return UNDEFINED_VALUE;
5824
5958
  }
5825
5959
  if (signatureOffset >= anchoredOffset) {
5826
- return getUint32(view, signatureOffset - anchoredOffset);
5960
+ return getUint32$1(view, signatureOffset - anchoredOffset);
5827
5961
  }
5828
5962
  if (remoteProbeBudget.count > 0) {
5829
5963
  remoteProbeBudget.count--;
5830
5964
  const signatureArray = await readUint8Array(reader, signatureOffset, 4);
5831
- return getUint32(getDataView(signatureArray), 0);
5965
+ return getUint32$1(getDataView(signatureArray), 0);
5832
5966
  }
5833
5967
  return UNDEFINED_VALUE;
5834
5968
  }
5835
5969
 
5836
5970
  function validateLocalDirectory(zipEntry, localDirectory, rawLocalFilename, checkLocalFilename) {
5837
5971
  const { rawFilename } = zipEntry;
5838
- if (checkLocalFilename &&
5972
+ const maskedLocalDirectory = zipEntry.decryptedDirectory &&
5973
+ (localDirectory.rawBitFlag & BITFLAG_MASKED_LOCAL_HEADERS) == BITFLAG_MASKED_LOCAL_HEADERS;
5974
+ if (checkLocalFilename && !maskedLocalDirectory &&
5839
5975
  (rawLocalFilename.length != rawFilename.length ||
5840
5976
  rawLocalFilename.some((byteValue, indexByte) => byteValue != rawFilename[indexByte]))) {
5841
5977
  throwAmbiguousArchive("mismatched local file header (filename)");
@@ -5846,7 +5982,7 @@
5846
5982
  if (localDirectory.compressionMethod != zipEntry.compressionMethod) {
5847
5983
  throwAmbiguousArchive("mismatched local file header (compression method)");
5848
5984
  }
5849
- if (!localDirectory.bitFlag.dataDescriptor &&
5985
+ if (!localDirectory.bitFlag.dataDescriptor && !maskedLocalDirectory &&
5850
5986
  (localDirectory.crc32 || localDirectory.compressedSize || localDirectory.uncompressedSize) &&
5851
5987
  (localDirectory.crc32 != zipEntry.crc32 ||
5852
5988
  localDirectory.compressedSize != zipEntry.compressedSize ||
@@ -5865,10 +6001,11 @@
5865
6001
  return options[name] === UNDEFINED_VALUE ? zipReader.options[name] : options[name];
5866
6002
  }
5867
6003
 
5868
- function toNumber$1(value) {
5869
- return typeof value == STRING_TYPE && value.trim() ? Number(value) : value;
6004
+ function getFunctionOptionValue$1(zipReader, options, name) {
6005
+ return checkFunctionOption(getOptionValue$1(zipReader, options, name));
5870
6006
  }
5871
6007
 
6008
+
5872
6009
  function getDate(timeRaw) {
5873
6010
  const date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & MAX_16_BITS;
5874
6011
  return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);
@@ -5882,11 +6019,11 @@
5882
6019
  return view.getUint8(offset);
5883
6020
  }
5884
6021
 
5885
- function getUint16(view, offset) {
6022
+ function getUint16$1(view, offset) {
5886
6023
  return view.getUint16(offset, true);
5887
6024
  }
5888
6025
 
5889
- function getUint32(view, offset) {
6026
+ function getUint32$1(view, offset) {
5890
6027
  return view.getUint32(offset, true);
5891
6028
  }
5892
6029
 
@@ -5901,6 +6038,7 @@
5901
6038
  ERR_CENTRAL_DIRECTORY_NOT_FOUND: ERR_CENTRAL_DIRECTORY_NOT_FOUND,
5902
6039
  ERR_ENCRYPTED: ERR_ENCRYPTED,
5903
6040
  ERR_ENCRYPTED_CENTRAL_DIRECTORY: ERR_ENCRYPTED_CENTRAL_DIRECTORY,
6041
+ ERR_ENTRY_DATA_OUT_OF_BOUNDS: ERR_ENTRY_DATA_OUT_OF_BOUNDS,
5904
6042
  ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND: ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND,
5905
6043
  ERR_EOCDR_NOT_FOUND: ERR_EOCDR_NOT_FOUND,
5906
6044
  ERR_EXTRAFIELD_ZIP64_NOT_FOUND: ERR_EXTRAFIELD_ZIP64_NOT_FOUND,
@@ -5957,12 +6095,16 @@
5957
6095
  const ERR_INVALID_COMMENT = "Zip file comment exceeds 64KB";
5958
6096
  const ERR_INVALID_COMMENT_TYPE = "Invalid zip file comment (must be a Uint8Array)";
5959
6097
  const ERR_INVALID_ENTRY_COMMENT = "File entry comment exceeds 64KB";
6098
+ const ERR_INVALID_ENTRY_COMMENT_TYPE = "Invalid file entry comment (must be a string)";
6099
+ const ERR_INVALID_DATE = "Invalid date (must be a valid Date instance)";
5960
6100
  const ERR_INVALID_ENTRY_NAME = "File entry name exceeds 64KB";
5961
6101
  const ERR_INVALID_VERSION = "Version exceeds 65535";
5962
6102
  const ERR_INVALID_ENCRYPTION_STRENGTH = "The strength must equal 1, 2, or 3";
5963
6103
  const ERR_UNSUPPORTED_ENCRYPTION_USDZ = "Encryption is not supported in USDZ files";
5964
6104
  const ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH = "Encryption is not supported when the 'passThrough' option is set";
5965
- const ERR_INVALID_EXTRAFIELD_TYPE = "Extra field type exceeds 65535";
6105
+ const ERR_INVALID_EXTRAFIELD = "Invalid extra field (must be a Map)";
6106
+ const ERR_INVALID_EXTRAFIELD_TYPE = "Invalid extra field type (must be integer 0..65535)";
6107
+ const ERR_INVALID_EXTRAFIELD_DATA_TYPE = "Invalid extra field data (must be a Uint8Array)";
5966
6108
  const ERR_INVALID_EXTRAFIELD_DATA = "Extra field data exceeds 64KB";
5967
6109
  const ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
5968
6110
  const MIN_UNIX_TIME = -2147483648;
@@ -5971,6 +6113,7 @@
5971
6113
  const MAX_NTFS_TIME = BigInt("0x7fffffffffffffff");
5972
6114
  const ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported (set the 'zip64' option to 'true')";
5973
6115
  const ERR_UNDEFINED_UNCOMPRESSED_SIZE = "Undefined uncompressed size";
6116
+ const ERR_UNDEFINED_COMPRESSION_METHOD = "Undefined compression method";
5974
6117
  const ERR_UNDETERMINED_SIZE = "Undetermined size";
5975
6118
  const ERR_UNDEFINED_READER = "Undefined reader";
5976
6119
  const ERR_ZIP_NOT_EMPTY = "Zip file not empty";
@@ -5982,7 +6125,6 @@
5982
6125
  const ERR_INVALID_MSDOS_ATTRIBUTES = "Invalid msdosAttributesRaw (must be integer 0..255)";
5983
6126
  const ERR_INVALID_MSDOS_DATA = "Invalid msdosAttributes (must be an object with boolean flags)";
5984
6127
  const ERR_INVALID_LEVEL = "Invalid level (must be integer 0..9)";
5985
- const ERR_INVALID_PASSWORD_TYPE = "Invalid password (password must be a string, rawPassword must be a Uint8Array)";
5986
6128
  const ERR_INVALID_SIGNATURE_DATA = "Signature data exceeds 64KB";
5987
6129
 
5988
6130
  const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
@@ -6007,8 +6149,7 @@
6007
6149
  writer,
6008
6150
  addSplitZipSignature,
6009
6151
  options,
6010
- config: getConfiguration(),
6011
- files: new Map(),
6152
+ fileEntries: new Map(),
6012
6153
  filenames: new Set(),
6013
6154
  offset: options[OPTION_OFFSET] === UNDEFINED_VALUE ? writer.size || writer.writable.size || 0 : options[OPTION_OFFSET],
6014
6155
  initialOffset: options[OPTION_OFFSET] === UNDEFINED_VALUE ? 0 : options[OPTION_OFFSET] - (writer.size || writer.writable.size || 0),
@@ -6029,14 +6170,23 @@
6029
6170
  await initStream(reader);
6030
6171
  }
6031
6172
  const { ZipReader } = await Promise.resolve().then(function () { return zipReader; });
6032
- const zipReader$1 = new ZipReader(reader.readable);
6173
+ const zipReader$1 = new ZipReader(reader);
6033
6174
  const entries = await zipReader$1.getEntries();
6034
6175
  await zipReader$1.close();
6035
6176
  await initStream(this.writer);
6036
- await reader.readable.pipeTo(this.writer.writable, { preventClose: true, preventAbort: true });
6037
- this.writer.size = this.offset = reader.size;
6177
+ const { directoryOffset } = zipReader$1;
6178
+ let splitZipSignatureLength = 0;
6179
+ if (this.addSplitZipSignature) {
6180
+ delete this.addSplitZipSignature;
6181
+ if (!await startsWithSplitZipSignature(reader)) {
6182
+ await writeData(this.writer, getSplitZipSignatureArray());
6183
+ splitZipSignatureLength = SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
6184
+ this.offset += splitZipSignatureLength;
6185
+ }
6186
+ }
6187
+ const entryPositions = await copyZipData(this, reader, entries, directoryOffset, splitZipSignatureLength);
6038
6188
  this.filenames = new Set(entries.map(entry => entry.filename));
6039
- this.files = new Map(entries.map(entry => {
6189
+ this.fileEntries = new Map(entries.map(entry => {
6040
6190
  const {
6041
6191
  version,
6042
6192
  rawLastModDate,
@@ -6091,11 +6241,12 @@
6091
6241
  if (crc32 !== UNDEFINED_VALUE) {
6092
6242
  setUint32(headerView, HEADER_OFFSET_SIGNATURE, crc32);
6093
6243
  }
6244
+ const { offset, diskNumberStart } = entryPositions.get(entry);
6094
6245
  Object.assign(entry, {
6095
6246
  zip64UncompressedSize,
6096
6247
  zip64CompressedSize,
6097
- zip64Offset: zip64 && entry.offset >= MAX_32_BITS,
6098
- diskNumberStart: 0,
6248
+ offset,
6249
+ diskNumberStart,
6099
6250
  zip64DiskNumberStart: false,
6100
6251
  rawExtraFieldZip64,
6101
6252
  rawExtraFieldAES,
@@ -6115,11 +6266,8 @@
6115
6266
  async add(name = "", reader, options = {}) {
6116
6267
  const zipWriter = this;
6117
6268
  options = Object.assign({}, options);
6118
- const {
6119
- pendingAddFileCalls,
6120
- config
6121
- } = zipWriter;
6122
- if (workers < config.maxWorkers) {
6269
+ const { pendingAddFileCalls } = zipWriter;
6270
+ if (workers < getConfiguration().maxWorkers) {
6123
6271
  workers++;
6124
6272
  } else {
6125
6273
  await new Promise(resolve => pendingEntries.push(resolve));
@@ -6156,16 +6304,16 @@
6156
6304
  }
6157
6305
 
6158
6306
  remove(entry) {
6159
- const { filenames, files } = this;
6307
+ const { filenames, fileEntries } = this;
6160
6308
  // deno-lint-ignore valid-typeof
6161
6309
  if (typeof entry == STRING_TYPE) {
6162
- entry = files.get(entry);
6310
+ entry = fileEntries.get(entry);
6163
6311
  }
6164
6312
  if (entry && entry.filename !== UNDEFINED_VALUE) {
6165
6313
  const { filename } = entry;
6166
- if (filenames.has(filename) && files.has(filename)) {
6314
+ if (filenames.has(filename) && fileEntries.has(filename)) {
6167
6315
  filenames.delete(filename);
6168
- files.delete(filename);
6316
+ fileEntries.delete(filename);
6169
6317
  return true;
6170
6318
  }
6171
6319
  }
@@ -6262,12 +6410,12 @@
6262
6410
  const metadataInfo = resolveMetadata(zipWriter, name, options);
6263
6411
  const { comment } = metadataInfo;
6264
6412
  const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
6265
- zipWriter.files.set(name, UNDEFINED_VALUE);
6413
+ zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
6266
6414
  let fileEntry;
6267
6415
  try {
6268
6416
  const { resolvedOptions } = metadataInfo;
6269
6417
  if (resolvedOptions.level != 0 && resolvedOptions.compressionMethod === UNDEFINED_VALUE &&
6270
- !resolvedOptions.passThrough && !(await supportsDeflate(zipWriter.config))) {
6418
+ !resolvedOptions.passThrough && !(await supportsDeflate(getConfiguration()))) {
6271
6419
  resolvedOptions.level = 0;
6272
6420
  }
6273
6421
  const sizesInfo = await resolveSizes(zipWriter, reader, metadataInfo, options);
@@ -6285,7 +6433,7 @@
6285
6433
  const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
6286
6434
  fileEntry = await getFileEntry(zipWriter, name, reader, { headerInfo, dataDescriptorInfo, metadataSize }, options);
6287
6435
  } catch (error) {
6288
- zipWriter.files.delete(name);
6436
+ zipWriter.fileEntries.delete(name);
6289
6437
  throw error;
6290
6438
  }
6291
6439
  Object.assign(fileEntry, {
@@ -6329,9 +6477,9 @@
6329
6477
  if (unixExtraFieldType === UNDEFINED_VALUE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
6330
6478
  unixExtraFieldType = INFOZIP_EXTRA_FIELD_TYPE;
6331
6479
  }
6332
- let msdosAttributesRaw = getOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW);
6480
+ let msdosAttributesRaw = getNumberOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW);
6333
6481
  let msdosAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES);
6334
- const hasUnixMetadata = uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE || unixMode !== UNDEFINED_VALUE || unixExtraFieldType;
6482
+ const hasUnixMetadata = uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE || unixMode !== UNDEFINED_VALUE || unixExtraFieldType || executable;
6335
6483
  const hasMsDosProvided = msdosAttributesRaw !== UNDEFINED_VALUE || msdosAttributes !== UNDEFINED_VALUE;
6336
6484
  if (hasUnixMetadata) {
6337
6485
  msDosCompatible = false;
@@ -6340,10 +6488,10 @@
6340
6488
  msDosCompatible = true;
6341
6489
  versionMadeBy = (versionMadeBy & MAX_8_BITS);
6342
6490
  }
6343
- if (msdosAttributesRaw !== UNDEFINED_VALUE && (msdosAttributesRaw < 0 || msdosAttributesRaw > MAX_8_BITS)) {
6491
+ if (msdosAttributesRaw !== UNDEFINED_VALUE && (!Number.isInteger(msdosAttributesRaw) || msdosAttributesRaw < 0 || msdosAttributesRaw > MAX_8_BITS)) {
6344
6492
  throw new Error(ERR_INVALID_MSDOS_ATTRIBUTES);
6345
6493
  }
6346
- if (msdosAttributes && typeof msdosAttributes !== OBJECT_TYPE) {
6494
+ if (msdosAttributes && (typeof msdosAttributes !== OBJECT_TYPE || Array.isArray(msdosAttributes))) {
6347
6495
  throw new Error(ERR_INVALID_MSDOS_DATA);
6348
6496
  }
6349
6497
  if (versionMadeBy > MAX_16_BITS) {
@@ -6431,7 +6579,7 @@
6431
6579
  }
6432
6580
 
6433
6581
  function resolveMetadata(zipWriter, name, options) {
6434
- const encode = getOptionValue(zipWriter, options, OPTION_ENCODE_TEXT, encodeText);
6582
+ const encode = getFunctionOptionValue(zipWriter, options, OPTION_ENCODE_TEXT) || encodeText;
6435
6583
  let rawFilename = encode(name, TEXT_TYPE_FILENAME);
6436
6584
  if (rawFilename === UNDEFINED_VALUE) {
6437
6585
  rawFilename = encodeText(name);
@@ -6440,6 +6588,10 @@
6440
6588
  throw new Error(ERR_INVALID_ENTRY_NAME);
6441
6589
  }
6442
6590
  const comment = options[PROPERTY_NAME_COMMENT] || "";
6591
+ // deno-lint-ignore valid-typeof
6592
+ if (typeof comment != STRING_TYPE) {
6593
+ throw new Error(ERR_INVALID_ENTRY_COMMENT_TYPE);
6594
+ }
6443
6595
  let rawComment = encode(comment, TEXT_TYPE_COMMENT);
6444
6596
  if (rawComment === UNDEFINED_VALUE) {
6445
6597
  rawComment = encodeText(comment);
@@ -6451,16 +6603,14 @@
6451
6603
  if (version > MAX_16_BITS) {
6452
6604
  throw new Error(ERR_INVALID_VERSION);
6453
6605
  }
6454
- const lastModDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());
6455
- const lastAccessDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
6456
- const creationDate = getOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
6606
+ const lastModDate = getDateOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());
6607
+ const lastAccessDate = getDateOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
6608
+ const creationDate = getDateOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
6457
6609
  const internalFileAttributes = getAliasedOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, PROPERTY_NAME_DEPRECATED_INTERNAL_FILE_ATTRIBUTES, 0);
6458
6610
  const passThrough = getOptionValue(zipWriter, options, OPTION_PASS_THROUGH);
6459
6611
  const password = getOptionValue(zipWriter, options, OPTION_PASSWORD);
6460
6612
  const rawPassword = getOptionValue(zipWriter, options, OPTION_RAW_PASSWORD);
6461
- if ((password && typeof password != STRING_TYPE) || (rawPassword && !(rawPassword instanceof Uint8Array))) {
6462
- throw new Error(ERR_INVALID_PASSWORD_TYPE);
6463
- }
6613
+ checkPasswordOption(password, rawPassword);
6464
6614
  const encryptionStrength = getNumberOptionValue(zipWriter, options, OPTION_ENCRYPTION_STRENGTH, 3);
6465
6615
  const zipCrypto = getOptionValue(zipWriter, options, PROPERTY_NAME_ZIPCRYPTO);
6466
6616
  const extendedTimestamp = getOptionValue(zipWriter, options, OPTION_EXTENDED_TIMESTAMP, true);
@@ -6469,9 +6619,9 @@
6469
6619
  const useWebWorkers = getOptionValue(zipWriter, options, OPTION_USE_WEB_WORKERS);
6470
6620
  const transferStreams = getOptionValue(zipWriter, options, OPTION_TRANSFER_STREAMS);
6471
6621
  const bufferedWrite = getOptionValue(zipWriter, options, OPTION_BUFFERED_WRITE);
6472
- const createTempStream = getOptionValue(zipWriter, options, OPTION_CREATE_TEMP_STREAM);
6622
+ const createTempStream = getFunctionOptionValue(zipWriter, options, OPTION_CREATE_TEMP_STREAM);
6473
6623
  const dataDescriptorSignature = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR_SIGNATURE, true);
6474
- const signal = getOptionValue(zipWriter, options, OPTION_SIGNAL);
6624
+ const signal = checkSignalOption(getOptionValue(zipWriter, options, OPTION_SIGNAL));
6475
6625
  const useUnicodeFileNames = getOptionValue(zipWriter, options, OPTION_USE_UNICODE_FILE_NAMES, true);
6476
6626
  const compressionMethod = getOptionValue(zipWriter, options, PROPERTY_NAME_COMPRESSION_METHOD);
6477
6627
  const registeredCodec = passThrough || compressionMethod === UNDEFINED_VALUE ? UNDEFINED_VALUE : getRegisteredCodec(compressionMethod);
@@ -6491,6 +6641,9 @@
6491
6641
  level = 0;
6492
6642
  }
6493
6643
  }
6644
+ if (passThrough) {
6645
+ level = UNDEFINED_VALUE;
6646
+ }
6494
6647
  let useCompressionStream = getOptionValue(zipWriter, options, OPTION_USE_COMPRESSION_STREAM);
6495
6648
  let dataDescriptor = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR);
6496
6649
  if (bufferedWrite && dataDescriptor === UNDEFINED_VALUE) {
@@ -6551,18 +6704,26 @@
6551
6704
  if (!extraField) {
6552
6705
  return EMPTY_UINT8_ARRAY;
6553
6706
  }
6707
+ if (!(extraField instanceof Map)) {
6708
+ throw new Error(ERR_INVALID_EXTRAFIELD);
6709
+ }
6554
6710
  let extraFieldSize = 0;
6555
6711
  let offset = 0;
6556
- extraField.forEach(data => extraFieldSize += 4 + getLength(data));
6557
- const rawExtraField = new Uint8Array(extraFieldSize);
6558
- const rawExtraFieldView = getDataView(rawExtraField);
6559
6712
  extraField.forEach((data, type) => {
6560
- if (type > MAX_16_BITS) {
6713
+ if (!Number.isInteger(type) || type < 0 || type > MAX_16_BITS) {
6561
6714
  throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
6562
6715
  }
6716
+ if (!(data instanceof Uint8Array)) {
6717
+ throw new Error(ERR_INVALID_EXTRAFIELD_DATA_TYPE);
6718
+ }
6563
6719
  if (getLength(data) > MAX_16_BITS) {
6564
6720
  throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
6565
6721
  }
6722
+ extraFieldSize += 4 + getLength(data);
6723
+ });
6724
+ const rawExtraField = new Uint8Array(extraFieldSize);
6725
+ const rawExtraFieldView = getDataView(rawExtraField);
6726
+ extraField.forEach((data, type) => {
6566
6727
  setUint16(rawExtraFieldView, offset, type);
6567
6728
  setUint16(rawExtraFieldView, offset + 2, getLength(data));
6568
6729
  arraySet(rawExtraField, data, offset + 4);
@@ -6594,6 +6755,9 @@
6594
6755
  if (uncompressedSize === UNDEFINED_VALUE) {
6595
6756
  throw new Error(ERR_UNDEFINED_UNCOMPRESSED_SIZE);
6596
6757
  }
6758
+ if (compressionMethod === UNDEFINED_VALUE) {
6759
+ throw new Error(ERR_UNDEFINED_COMPRESSION_METHOD);
6760
+ }
6597
6761
  }
6598
6762
  const zip64Enabled = zip64 === true;
6599
6763
  const encrypted = getOptionValue(zipWriter, options, PROPERTY_NAME_ENCRYPTED);
@@ -6650,7 +6814,7 @@
6650
6814
 
6651
6815
  async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
6652
6816
  const {
6653
- files,
6817
+ fileEntries,
6654
6818
  writer
6655
6819
  } = zipWriter;
6656
6820
  const {
@@ -6672,12 +6836,12 @@
6672
6836
  let writerSizeBeforeEntry;
6673
6837
  let flushedBufferedSize = 0;
6674
6838
  let fileWriter;
6675
- files.set(name, fileEntry);
6839
+ fileEntries.set(name, fileEntry);
6676
6840
  zipWriter.lastFileEntry = fileEntry;
6677
6841
  try {
6678
6842
  let lockPreviousFileEntry;
6679
6843
  if (keepOrder) {
6680
- lockPreviousFileEntry = previousFileEntry && previousFileEntry.lock;
6844
+ lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
6681
6845
  requestLockCurrentFileEntry();
6682
6846
  }
6683
6847
  if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || !dataDescriptor) {
@@ -6698,11 +6862,8 @@
6698
6862
  const diskOffset = getDiskOffset(writer);
6699
6863
  if (zipWriter.addSplitZipSignature) {
6700
6864
  delete zipWriter.addSplitZipSignature;
6701
- const signatureArray = new Uint8Array(4);
6702
- const signatureArrayView = getDataView(signatureArray);
6703
- setUint32(signatureArrayView, 0, SPLIT_ZIP_FILE_SIGNATURE);
6704
- await writeData(writer, signatureArray);
6705
- zipWriter.offset += 4;
6865
+ await writeData(writer, getSplitZipSignatureArray());
6866
+ zipWriter.offset += SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
6706
6867
  }
6707
6868
  if (usdz && !bufferedWrite) {
6708
6869
  appendExtraFieldUSDZ(entryInfo, zipWriter.offset - diskOffset);
@@ -6720,11 +6881,11 @@
6720
6881
  writerSizeBeforeEntry = writer.size;
6721
6882
  await writeData(fileWriter, localHeaderArray);
6722
6883
  }
6723
- fileEntry = await createFileEntry(reader, fileWriter, fileEntry, entryInfo, zipWriter.config, options);
6884
+ fileEntry = await createFileEntry(reader, fileWriter, fileEntry, entryInfo, getConfiguration(), options);
6724
6885
  if (!bufferedWrite) {
6725
6886
  writingEntryData = false;
6726
6887
  }
6727
- files.set(name, fileEntry);
6888
+ fileEntries.set(name, fileEntry);
6728
6889
  fileEntry.filename = name;
6729
6890
  if (bufferedWrite) {
6730
6891
  await Promise.all([fileWriter.writable.getWriter().close(), lockPreviousFileEntry]);
@@ -6765,7 +6926,7 @@
6765
6926
  zipWriter.offset += flushedBufferedSize;
6766
6927
  }
6767
6928
  }
6768
- files.delete(name);
6929
+ fileEntries.delete(name);
6769
6930
  throw error;
6770
6931
  } finally {
6771
6932
  if (bufferedWrite) {
@@ -6787,7 +6948,7 @@
6787
6948
  }
6788
6949
 
6789
6950
  function requestLockCurrentFileEntry() {
6790
- fileEntry.lock = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
6951
+ fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
6791
6952
  }
6792
6953
 
6793
6954
  async function requestLockWriter() {
@@ -6807,7 +6968,7 @@
6807
6968
  }
6808
6969
  }
6809
6970
 
6810
- async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryInfo, config, options) {
6971
+ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry }, entryInfo, config, options) {
6811
6972
  const {
6812
6973
  headerInfo,
6813
6974
  dataDescriptorInfo,
@@ -6875,7 +7036,7 @@
6875
7036
  codecURI
6876
7037
  } = options;
6877
7038
  const fileEntry = {
6878
- lock,
7039
+ lockFileEntry,
6879
7040
  versionMadeBy,
6880
7041
  zip64,
6881
7042
  directory: Boolean(directory),
@@ -6917,7 +7078,7 @@
6917
7078
  }
6918
7079
  const { writable } = writer;
6919
7080
  if (reader) {
6920
- const readable = toCompatibleReadable(reader.createReadable ? reader.createReadable() : reader.readable);
7081
+ const readable = toCompatibleReadable(createReadable(reader));
6921
7082
  const size = reader.size;
6922
7083
  const workerOptions = {
6923
7084
  options: {
@@ -7029,14 +7190,14 @@
7029
7190
  if (zip64 && (zip64UncompressedSize || zip64CompressedSize)) {
7030
7191
  const length = 4 + 16;
7031
7192
  const extraFieldZip64 = createRecordWriter(length);
7032
- extraFieldZip64.uint16(EXTRAFIELD_TYPE_ZIP64);
7033
- extraFieldZip64.uint16(length - 4);
7193
+ extraFieldZip64.writeUint16(EXTRAFIELD_TYPE_ZIP64);
7194
+ extraFieldZip64.writeUint16(length - 4);
7034
7195
  rawLocalExtraFieldZip64 = extraFieldZip64.array;
7035
7196
  if (zip64ExtraFieldComplete) {
7036
- extraFieldZip64.uint64(uncompressedSize);
7197
+ extraFieldZip64.writeUint64(uncompressedSize);
7037
7198
  if (uncompressedFile) {
7038
7199
  const encryptionOverhead = encrypted ? (zipCrypto ? 12 : 16 + encryptionStrength * 4) : 0;
7039
- extraFieldZip64.uint64(passThrough ? 0 : uncompressedSize + encryptionOverhead);
7200
+ extraFieldZip64.writeUint64(passThrough ? 0 : uncompressedSize + encryptionOverhead);
7040
7201
  }
7041
7202
  }
7042
7203
  } else {
@@ -7045,8 +7206,8 @@
7045
7206
  let rawExtraFieldAES;
7046
7207
  if (encrypted && !zipCrypto) {
7047
7208
  const extraFieldAES = createRecordWriter(getLength(EXTRAFIELD_DATA_AES) + 2);
7048
- extraFieldAES.uint16(EXTRAFIELD_TYPE_AES);
7049
- extraFieldAES.bytes(EXTRAFIELD_DATA_AES);
7209
+ extraFieldAES.writeUint16(EXTRAFIELD_TYPE_AES);
7210
+ extraFieldAES.writeBytes(EXTRAFIELD_DATA_AES);
7050
7211
  rawExtraFieldAES = extraFieldAES.array;
7051
7212
  rawExtraFieldAES[8] = encryptionStrength;
7052
7213
  } else {
@@ -7062,15 +7223,15 @@
7062
7223
  const extraFieldTimestampLength = 9 + (lastAccessDate ? 4 : 0) + (creationDate ? 4 : 0);
7063
7224
  const extraFieldTimestamp = createRecordWriter(extraFieldTimestampLength);
7064
7225
  extraFieldExtendedTimestampFlag = 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0);
7065
- extraFieldTimestamp.uint16(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
7066
- extraFieldTimestamp.uint16(extraFieldTimestampLength - 4);
7067
- extraFieldTimestamp.uint8(extraFieldExtendedTimestampFlag);
7068
- extraFieldTimestamp.uint32(lastModTimeUnix);
7226
+ extraFieldTimestamp.writeUint16(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
7227
+ extraFieldTimestamp.writeUint16(extraFieldTimestampLength - 4);
7228
+ extraFieldTimestamp.writeUint8(extraFieldExtendedTimestampFlag);
7229
+ extraFieldTimestamp.writeUint32(lastModTimeUnix);
7069
7230
  if (lastAccessDate) {
7070
- extraFieldTimestamp.uint32(clampUnixTime(getTimeUnix(lastAccessDate)));
7231
+ extraFieldTimestamp.writeUint32(clampUnixTime(getTimeUnix(lastAccessDate)));
7071
7232
  }
7072
7233
  if (creationDate) {
7073
- extraFieldTimestamp.uint32(clampUnixTime(getTimeUnix(creationDate)));
7234
+ extraFieldTimestamp.writeUint32(clampUnixTime(getTimeUnix(creationDate)));
7074
7235
  }
7075
7236
  rawExtraFieldExtendedTimestamp = extraFieldTimestamp.array;
7076
7237
  } else {
@@ -7083,14 +7244,14 @@
7083
7244
  try {
7084
7245
  const lastModTimeNTFS = getTimeNTFS(lastModDate);
7085
7246
  const extraFieldNTFS = createRecordWriter(36);
7086
- extraFieldNTFS.uint16(EXTRAFIELD_TYPE_NTFS);
7087
- extraFieldNTFS.uint16(32);
7247
+ extraFieldNTFS.writeUint16(EXTRAFIELD_TYPE_NTFS);
7248
+ extraFieldNTFS.writeUint16(32);
7088
7249
  extraFieldNTFS.skip(4);
7089
- extraFieldNTFS.uint16(EXTRAFIELD_TYPE_NTFS_TAG1);
7090
- extraFieldNTFS.uint16(24);
7091
- extraFieldNTFS.uint64(lastModTimeNTFS);
7092
- extraFieldNTFS.uint64(lastAccessDate ? getTimeNTFS(lastAccessDate) : lastModTimeNTFS);
7093
- extraFieldNTFS.uint64(creationDate ? getTimeNTFS(creationDate) : lastModTimeNTFS);
7250
+ extraFieldNTFS.writeUint16(EXTRAFIELD_TYPE_NTFS_TAG1);
7251
+ extraFieldNTFS.writeUint16(24);
7252
+ extraFieldNTFS.writeUint64(lastModTimeNTFS);
7253
+ extraFieldNTFS.writeUint64(lastAccessDate ? getTimeNTFS(lastAccessDate) : lastModTimeNTFS);
7254
+ extraFieldNTFS.writeUint64(creationDate ? getTimeNTFS(creationDate) : lastModTimeNTFS);
7094
7255
  rawExtraFieldNTFS = extraFieldNTFS.array;
7095
7256
  } catch {
7096
7257
  rawExtraFieldNTFS = EMPTY_UINT8_ARRAY;
@@ -7109,20 +7270,20 @@
7109
7270
  const gidBytes = packUnixId(gid);
7110
7271
  const payloadLength = 3 + uidBytes.length + gidBytes.length;
7111
7272
  const extraFieldUnix = createRecordWriter(4 + payloadLength);
7112
- extraFieldUnix.uint16(EXTRAFIELD_TYPE_INFOZIP);
7113
- extraFieldUnix.uint16(payloadLength);
7114
- extraFieldUnix.uint8(1);
7115
- extraFieldUnix.uint8(uidBytes.length);
7116
- extraFieldUnix.bytes(uidBytes);
7117
- extraFieldUnix.uint8(gidBytes.length);
7118
- extraFieldUnix.bytes(gidBytes);
7273
+ extraFieldUnix.writeUint16(EXTRAFIELD_TYPE_INFOZIP);
7274
+ extraFieldUnix.writeUint16(payloadLength);
7275
+ extraFieldUnix.writeUint8(1);
7276
+ extraFieldUnix.writeUint8(uidBytes.length);
7277
+ extraFieldUnix.writeBytes(uidBytes);
7278
+ extraFieldUnix.writeUint8(gidBytes.length);
7279
+ extraFieldUnix.writeBytes(gidBytes);
7119
7280
  rawExtraFieldUnix = extraFieldUnix.array;
7120
7281
  } else if (unixExtraFieldType == UNIX_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
7121
7282
  const extraFieldUnix = createRecordWriter(8);
7122
- extraFieldUnix.uint16(EXTRAFIELD_TYPE_UNIX);
7123
- extraFieldUnix.uint16(4);
7124
- extraFieldUnix.uint16((uid === UNDEFINED_VALUE ? 0 : uid) & MAX_16_BITS);
7125
- extraFieldUnix.uint16((gid === UNDEFINED_VALUE ? 0 : gid) & MAX_16_BITS);
7283
+ extraFieldUnix.writeUint16(EXTRAFIELD_TYPE_UNIX);
7284
+ extraFieldUnix.writeUint16(4);
7285
+ extraFieldUnix.writeUint16((uid === UNDEFINED_VALUE ? 0 : uid) & MAX_16_BITS);
7286
+ extraFieldUnix.writeUint16((gid === UNDEFINED_VALUE ? 0 : gid) & MAX_16_BITS);
7126
7287
  rawExtraFieldUnix = extraFieldUnix.array;
7127
7288
  } else {
7128
7289
  rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
@@ -7172,18 +7333,18 @@
7172
7333
  const localHeader = createRecordWriter(HEADER_SIZE + getLength(rawFilename) + extraFieldLength);
7173
7334
  const localHeaderArray = localHeader.array;
7174
7335
  const localHeaderView = getDataView(localHeaderArray);
7175
- localHeader.uint32(LOCAL_FILE_HEADER_SIGNATURE);
7176
- localHeader.bytes(headerArray);
7177
- localHeader.bytes(rawFilename);
7336
+ localHeader.writeUint32(LOCAL_FILE_HEADER_SIGNATURE);
7337
+ localHeader.writeBytes(headerArray);
7338
+ localHeader.writeBytes(rawFilename);
7178
7339
  if (writeLocalExtraFieldZip64) {
7179
- localHeader.bytes(rawLocalExtraFieldZip64);
7180
- }
7181
- localHeader.bytes(rawExtraFieldAES);
7182
- localHeader.bytes(rawExtraFieldExtendedTimestamp);
7183
- localHeader.bytes(rawExtraFieldNTFS);
7184
- localHeader.bytes(rawExtraFieldUnix);
7185
- localHeader.bytes(rawExtraField);
7186
- localHeader.bytes(rawLocalExtraField);
7340
+ localHeader.writeBytes(rawLocalExtraFieldZip64);
7341
+ }
7342
+ localHeader.writeBytes(rawExtraFieldAES);
7343
+ localHeader.writeBytes(rawExtraFieldExtendedTimestamp);
7344
+ localHeader.writeBytes(rawExtraFieldNTFS);
7345
+ localHeader.writeBytes(rawExtraFieldUnix);
7346
+ localHeader.writeBytes(rawExtraField);
7347
+ localHeader.writeBytes(rawLocalExtraField);
7187
7348
  if (dataDescriptor) {
7188
7349
  if (!zip64CompressedSize) {
7189
7350
  setUint32(localHeaderView, HEADER_OFFSET_COMPRESSED_SIZE + LOCAL_HEADER_COMMON_OFFSET, 0);
@@ -7373,7 +7534,7 @@
7373
7534
 
7374
7535
 
7375
7536
  async function closeFile(zipWriter, comment, options) {
7376
- const directoryDataLength = createDirectoryRecords(zipWriter.files);
7537
+ const directoryDataLength = createDirectoryRecords(zipWriter.fileEntries);
7377
7538
  const { directoryStart, directoryArray } = await writeDirectoryRecords(zipWriter, directoryDataLength, options);
7378
7539
  const signatureLength = await writeDigitalSignatureRecord(zipWriter, directoryArray, options);
7379
7540
  await writeEndOfDirectoryRecord(zipWriter, comment, options, { directoryStart, directoryDataLength, signatureLength });
@@ -7403,19 +7564,19 @@
7403
7564
  if (zip64Offset || zip64DiskNumberStart || zip64UncompressedSize || zip64CompressedSize) {
7404
7565
  const length = 4 + (zip64UncompressedSize ? 8 : 0) + (zip64CompressedSize ? 8 : 0) + (zip64Offset ? 8 : 0) + (zip64DiskNumberStart ? 4 : 0);
7405
7566
  const extraFieldZip64 = createRecordWriter(length);
7406
- extraFieldZip64.uint16(EXTRAFIELD_TYPE_ZIP64);
7407
- extraFieldZip64.uint16(length - 4);
7567
+ extraFieldZip64.writeUint16(EXTRAFIELD_TYPE_ZIP64);
7568
+ extraFieldZip64.writeUint16(length - 4);
7408
7569
  if (zip64UncompressedSize) {
7409
- extraFieldZip64.uint64(uncompressedSize);
7570
+ extraFieldZip64.writeUint64(uncompressedSize);
7410
7571
  }
7411
7572
  if (zip64CompressedSize) {
7412
- extraFieldZip64.uint64(compressedSize);
7573
+ extraFieldZip64.writeUint64(compressedSize);
7413
7574
  }
7414
7575
  if (zip64Offset) {
7415
- extraFieldZip64.uint64(fileEntry.offset);
7576
+ extraFieldZip64.writeUint64(fileEntry.offset);
7416
7577
  }
7417
7578
  if (zip64DiskNumberStart) {
7418
- extraFieldZip64.uint32(fileEntry.diskNumberStart);
7579
+ extraFieldZip64.writeUint32(fileEntry.diskNumberStart);
7419
7580
  }
7420
7581
  rawExtraFieldZip64 = extraFieldZip64.array;
7421
7582
  } else {
@@ -7428,10 +7589,10 @@
7428
7589
  const lastModTimeUnix = getTimeUnix(lastModDate);
7429
7590
  if (extendedTimestamp && inUnixTimeRange(lastModTimeUnix)) {
7430
7591
  const extraFieldTimestamp = createRecordWriter(9);
7431
- extraFieldTimestamp.uint16(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
7432
- extraFieldTimestamp.uint16(5);
7433
- extraFieldTimestamp.uint8(extraFieldExtendedTimestampFlag);
7434
- extraFieldTimestamp.uint32(lastModTimeUnix);
7592
+ extraFieldTimestamp.writeUint16(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
7593
+ extraFieldTimestamp.writeUint16(5);
7594
+ extraFieldTimestamp.writeUint8(extraFieldExtendedTimestampFlag);
7595
+ extraFieldTimestamp.writeUint32(lastModTimeUnix);
7435
7596
  rawExtraFieldTimestamp = extraFieldTimestamp.array;
7436
7597
  } else {
7437
7598
  rawExtraFieldTimestamp = EMPTY_UINT8_ARRAY;
@@ -7453,14 +7614,14 @@
7453
7614
  }
7454
7615
 
7455
7616
  async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
7456
- const { files, writer } = zipWriter;
7617
+ const { fileEntries, writer } = zipWriter;
7457
7618
  const directoryArray = new Uint8Array(directoryDataLength);
7458
7619
  await initStream(writer);
7459
7620
  let offset = 0;
7460
7621
  let directoryDiskOffset = 0;
7461
7622
  let directoryStartDiskNumber = getDiskNumber(writer);
7462
7623
  let directoryStartDiskOffset = getDiskOffset(writer);
7463
- for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
7624
+ for (const [indexFileEntry, fileEntry] of Array.from(fileEntries.values()).entries()) {
7464
7625
  const {
7465
7626
  offset: fileEntryOffset,
7466
7627
  rawFilename,
@@ -7505,28 +7666,28 @@
7505
7666
  setUint16(headerView, HEADER_OFFSET_VERSION, VERSION_ZIP64);
7506
7667
  }
7507
7668
  const directoryRecord = createRecordWriter(directoryRecordLength);
7508
- directoryRecord.uint32(CENTRAL_FILE_HEADER_SIGNATURE);
7509
- directoryRecord.uint16(versionMadeBy);
7510
- directoryRecord.bytes(headerArray.subarray(0, HEADER_SIZE - 4 - 2));
7511
- directoryRecord.uint16(extraFieldLength);
7512
- directoryRecord.uint16(getLength(rawComment));
7513
- directoryRecord.uint16(zip64DiskNumberStart ? MAX_16_BITS : diskNumberStart);
7514
- directoryRecord.uint16(internalFileAttributes);
7515
- directoryRecord.uint32(externalFileAttributes);
7516
- directoryRecord.uint32(zip64Offset ? MAX_32_BITS : fileEntryOffset);
7517
- directoryRecord.bytes(rawFilename);
7518
- directoryRecord.bytes(rawExtraFieldZip64);
7519
- directoryRecord.bytes(rawExtraFieldAES);
7520
- directoryRecord.bytes(rawExtraFieldExtendedTimestamp);
7521
- directoryRecord.bytes(rawExtraFieldNTFS);
7522
- directoryRecord.bytes(rawExtraFieldUnix);
7523
- directoryRecord.bytes(rawExtraField);
7524
- directoryRecord.bytes(rawComment);
7669
+ directoryRecord.writeUint32(CENTRAL_FILE_HEADER_SIGNATURE);
7670
+ directoryRecord.writeUint16(versionMadeBy);
7671
+ directoryRecord.writeBytes(headerArray.subarray(0, HEADER_SIZE - 4 - 2));
7672
+ directoryRecord.writeUint16(extraFieldLength);
7673
+ directoryRecord.writeUint16(getLength(rawComment));
7674
+ directoryRecord.writeUint16(zip64DiskNumberStart ? MAX_16_BITS : diskNumberStart);
7675
+ directoryRecord.writeUint16(internalFileAttributes);
7676
+ directoryRecord.writeUint32(externalFileAttributes);
7677
+ directoryRecord.writeUint32(zip64Offset ? MAX_32_BITS : fileEntryOffset);
7678
+ directoryRecord.writeBytes(rawFilename);
7679
+ directoryRecord.writeBytes(rawExtraFieldZip64);
7680
+ directoryRecord.writeBytes(rawExtraFieldAES);
7681
+ directoryRecord.writeBytes(rawExtraFieldExtendedTimestamp);
7682
+ directoryRecord.writeBytes(rawExtraFieldNTFS);
7683
+ directoryRecord.writeBytes(rawExtraFieldUnix);
7684
+ directoryRecord.writeBytes(rawExtraField);
7685
+ directoryRecord.writeBytes(rawComment);
7525
7686
  arraySet(directoryArray, directoryRecord.array, offset);
7526
7687
  offset += directoryRecordLength;
7527
7688
  if (options.onprogress) {
7528
7689
  try {
7529
- await options.onprogress(indexFileEntry + 1, files.size, new Entry(fileEntry));
7690
+ await options.onprogress(indexFileEntry + 1, fileEntries.size, new Entry(fileEntry));
7530
7691
  } catch {
7531
7692
  // ignored
7532
7693
  }
@@ -7540,7 +7701,7 @@
7540
7701
  }
7541
7702
 
7542
7703
  async function writeDigitalSignatureRecord(zipWriter, directoryArray, options) {
7543
- const signCentralDirectory = getOptionValue(zipWriter, options, OPTION_SIGN_CENTRAL_DIRECTORY);
7704
+ const signCentralDirectory = getFunctionOptionValue(zipWriter, options, OPTION_SIGN_CENTRAL_DIRECTORY);
7544
7705
  if (signCentralDirectory) {
7545
7706
  const signatureData = await signCentralDirectory(directoryArray);
7546
7707
  const signatureDataLength = getLength(signatureData);
@@ -7548,9 +7709,9 @@
7548
7709
  throw new Error(ERR_INVALID_SIGNATURE_DATA);
7549
7710
  }
7550
7711
  const signatureRecord = createRecordWriter(6 + signatureDataLength);
7551
- signatureRecord.uint32(DIGITAL_SIGNATURE_RECORD_SIGNATURE);
7552
- signatureRecord.uint16(signatureDataLength);
7553
- signatureRecord.bytes(signatureData);
7712
+ signatureRecord.writeUint32(DIGITAL_SIGNATURE_RECORD_SIGNATURE);
7713
+ signatureRecord.writeUint16(signatureDataLength);
7714
+ signatureRecord.writeBytes(signatureData);
7554
7715
  await writeData(zipWriter.writer, signatureRecord.array);
7555
7716
  return 6 + signatureDataLength;
7556
7717
  }
@@ -7561,7 +7722,7 @@
7561
7722
  const { writer } = zipWriter;
7562
7723
  const { directoryStart, signatureLength } = cdInfo;
7563
7724
  let { directoryDataLength } = cdInfo;
7564
- let filesLength = zipWriter.files.size;
7725
+ let fileEntriesLength = zipWriter.fileEntries.size;
7565
7726
  let diskNumber = directoryStart.diskNumber;
7566
7727
  let directoryOffset = getSegmentOffset(zipWriter, directoryStart);
7567
7728
  let lastDiskNumber = getDiskNumber(writer);
@@ -7569,7 +7730,7 @@
7569
7730
  lastDiskNumber++;
7570
7731
  }
7571
7732
  let zip64 = getOptionValue(zipWriter, options, PROPERTY_NAME_ZIP64);
7572
- if (directoryOffset >= MAX_32_BITS || directoryDataLength >= MAX_32_BITS || filesLength >= MAX_16_BITS || lastDiskNumber >= MAX_16_BITS) {
7733
+ if (directoryOffset >= MAX_32_BITS || directoryDataLength >= MAX_32_BITS || fileEntriesLength >= MAX_16_BITS || lastDiskNumber >= MAX_16_BITS) {
7573
7734
  if (zip64 === false) {
7574
7735
  throw new Error(ERR_UNSUPPORTED_FORMAT);
7575
7736
  } else {
@@ -7586,37 +7747,37 @@
7586
7747
  }
7587
7748
  lastDiskNumber = getDiskNumber(writer);
7588
7749
  if (zip64) {
7589
- endOfdirectoryRecord.uint32(ZIP64_END_OF_CENTRAL_DIR_SIGNATURE);
7590
- endOfdirectoryRecord.uint64(44);
7591
- endOfdirectoryRecord.uint16(45);
7592
- endOfdirectoryRecord.uint16(45);
7593
- endOfdirectoryRecord.uint32(lastDiskNumber);
7594
- endOfdirectoryRecord.uint32(diskNumber);
7595
- endOfdirectoryRecord.uint64(filesLength);
7596
- endOfdirectoryRecord.uint64(filesLength);
7597
- endOfdirectoryRecord.uint64(directoryDataLength);
7598
- endOfdirectoryRecord.uint64(directoryOffset);
7599
- endOfdirectoryRecord.uint32(ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE);
7600
- endOfdirectoryRecord.uint32(lastDiskNumber);
7601
- endOfdirectoryRecord.uint64(BigInt(getSegmentOffset(zipWriter, writer)) + BigInt(directoryDataLength) + BigInt(signatureLength));
7602
- endOfdirectoryRecord.uint32(lastDiskNumber + 1);
7750
+ endOfdirectoryRecord.writeUint32(ZIP64_END_OF_CENTRAL_DIR_SIGNATURE);
7751
+ endOfdirectoryRecord.writeUint64(44);
7752
+ endOfdirectoryRecord.writeUint16(45);
7753
+ endOfdirectoryRecord.writeUint16(45);
7754
+ endOfdirectoryRecord.writeUint32(lastDiskNumber);
7755
+ endOfdirectoryRecord.writeUint32(diskNumber);
7756
+ endOfdirectoryRecord.writeUint64(fileEntriesLength);
7757
+ endOfdirectoryRecord.writeUint64(fileEntriesLength);
7758
+ endOfdirectoryRecord.writeUint64(directoryDataLength);
7759
+ endOfdirectoryRecord.writeUint64(directoryOffset);
7760
+ endOfdirectoryRecord.writeUint32(ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE);
7761
+ endOfdirectoryRecord.writeUint32(lastDiskNumber);
7762
+ endOfdirectoryRecord.writeUint64(BigInt(getSegmentOffset(zipWriter, writer)) + BigInt(directoryDataLength) + BigInt(signatureLength));
7763
+ endOfdirectoryRecord.writeUint32(lastDiskNumber + 1);
7603
7764
  const supportZip64SplitFile = getOptionValue(zipWriter, options, OPTION_SUPPORT_ZIP64_SPLIT_FILE, true);
7604
7765
  if (supportZip64SplitFile) {
7605
7766
  lastDiskNumber = MAX_16_BITS;
7606
7767
  diskNumber = MAX_16_BITS;
7607
7768
  }
7608
- filesLength = MAX_16_BITS;
7769
+ fileEntriesLength = MAX_16_BITS;
7609
7770
  directoryOffset = MAX_32_BITS;
7610
7771
  directoryDataLength = MAX_32_BITS;
7611
7772
  }
7612
- endOfdirectoryRecord.uint32(END_OF_CENTRAL_DIR_SIGNATURE);
7613
- endOfdirectoryRecord.uint16(lastDiskNumber);
7614
- endOfdirectoryRecord.uint16(diskNumber);
7615
- endOfdirectoryRecord.uint16(filesLength);
7616
- endOfdirectoryRecord.uint16(filesLength);
7617
- endOfdirectoryRecord.uint32(directoryDataLength);
7618
- endOfdirectoryRecord.uint32(directoryOffset);
7619
- endOfdirectoryRecord.uint16(commentLength);
7773
+ endOfdirectoryRecord.writeUint32(END_OF_CENTRAL_DIR_SIGNATURE);
7774
+ endOfdirectoryRecord.writeUint16(lastDiskNumber);
7775
+ endOfdirectoryRecord.writeUint16(diskNumber);
7776
+ endOfdirectoryRecord.writeUint16(fileEntriesLength);
7777
+ endOfdirectoryRecord.writeUint16(fileEntriesLength);
7778
+ endOfdirectoryRecord.writeUint32(directoryDataLength);
7779
+ endOfdirectoryRecord.writeUint32(directoryOffset);
7780
+ endOfdirectoryRecord.writeUint16(commentLength);
7620
7781
  await writeData(writer, endOfdirectoryRecord.array);
7621
7782
  if (commentLength) {
7622
7783
  await writeData(writer, comment);
@@ -7629,11 +7790,11 @@
7629
7790
  let offset = 0;
7630
7791
  return {
7631
7792
  array,
7632
- uint8: value => { setUint8(view, offset, value); offset += 1; },
7633
- uint16: value => { setUint16(view, offset, value); offset += 2; },
7634
- uint32: value => { setUint32(view, offset, value); offset += 4; },
7635
- uint64: value => { setBigUint64(view, offset, BigInt(value)); offset += 8; },
7636
- bytes: value => { arraySet(array, value, offset); offset += getLength(value); },
7793
+ writeUint8: value => { setUint8(view, offset, value); offset += 1; },
7794
+ writeUint16: value => { setUint16(view, offset, value); offset += 2; },
7795
+ writeUint32: value => { setUint32(view, offset, value); offset += 4; },
7796
+ writeUint64: value => { setBigUint64(view, offset, BigInt(value)); offset += 8; },
7797
+ writeBytes: value => { arraySet(array, value, offset); offset += getLength(value); },
7637
7798
  skip: count => offset += count
7638
7799
  };
7639
7800
  }
@@ -7657,6 +7818,71 @@
7657
7818
  return zipWriter.offset - diskOffset - (diskNumber ? zipWriter.initialOffset : 0);
7658
7819
  }
7659
7820
 
7821
+ async function startsWithSplitZipSignature(reader) {
7822
+ const signatureArray = await readUint8Array(reader, 0, SPLIT_ZIP_FILE_SIGNATURE_LENGTH);
7823
+ return getUint32(getDataView(signatureArray), 0) == SPLIT_ZIP_FILE_SIGNATURE;
7824
+ }
7825
+
7826
+ async function copyZipData(zipWriter, reader, entries, directoryOffset, splitZipSignatureLength) {
7827
+ const { writer } = zipWriter;
7828
+ const entryPositions = new Map();
7829
+ if (writer.closeDisk) {
7830
+ const sortedEntries = Array.from(entries).sort((firstEntry, secondEntry) =>
7831
+ getSourceOffset(reader, firstEntry) - getSourceOffset(reader, secondEntry));
7832
+ let copiedLength = 0;
7833
+ for (const entry of sortedEntries) {
7834
+ const sourceOffset = getSourceOffset(reader, entry);
7835
+ await copyData(zipWriter, reader, copiedLength, sourceOffset - copiedLength);
7836
+ if (exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
7837
+ await writer.closeDisk();
7838
+ }
7839
+ entryPositions.set(entry, {
7840
+ offset: getSegmentOffset(zipWriter, writer),
7841
+ diskNumberStart: getDiskNumber(writer)
7842
+ });
7843
+ copiedLength = sourceOffset;
7844
+ }
7845
+ await copyData(zipWriter, reader, copiedLength, directoryOffset - copiedLength);
7846
+ } else {
7847
+ await copyData(zipWriter, reader, 0, directoryOffset);
7848
+ entries.forEach(entry => entryPositions.set(entry, {
7849
+ offset: splitZipSignatureLength + getSourceOffset(reader, entry),
7850
+ diskNumberStart: 0
7851
+ }));
7852
+ }
7853
+ return entryPositions;
7854
+ }
7855
+
7856
+ async function copyData(zipWriter, reader, offset, size) {
7857
+ if (size > 0) {
7858
+ const { writer } = zipWriter;
7859
+ await createReadable(reader, { offset, size }).pipeTo(writer.writable, { preventClose: true, preventAbort: true });
7860
+ writer.size += size;
7861
+ zipWriter.offset += size;
7862
+ }
7863
+ }
7864
+
7865
+ async function getLocalHeaderLength(reader, offset) {
7866
+ const headerArray = await readUint8Array(reader, offset, HEADER_SIZE);
7867
+ if (getLength(headerArray) < HEADER_SIZE) {
7868
+ return HEADER_SIZE;
7869
+ }
7870
+ const headerView = getDataView(headerArray);
7871
+ return HEADER_SIZE +
7872
+ getUint16(headerView, HEADER_OFFSET_FILENAME_LENGTH + LOCAL_HEADER_COMMON_OFFSET) +
7873
+ getUint16(headerView, HEADER_OFFSET_EXTRAFIELD_LENGTH + LOCAL_HEADER_COMMON_OFFSET);
7874
+ }
7875
+
7876
+ function getSourceOffset(reader, { offset, diskNumberStart }) {
7877
+ return offset + (reader.getDiskOffset ? reader.getDiskOffset(diskNumberStart) : 0);
7878
+ }
7879
+
7880
+ function getSplitZipSignatureArray() {
7881
+ const signatureArray = new Uint8Array(SPLIT_ZIP_FILE_SIGNATURE_LENGTH);
7882
+ setUint32(getDataView(signatureArray), 0, SPLIT_ZIP_FILE_SIGNATURE);
7883
+ return signatureArray;
7884
+ }
7885
+
7660
7886
  async function writeData(writer, array) {
7661
7887
  const { writable } = writer;
7662
7888
  const streamWriter = writable.getWriter();
@@ -7708,6 +7934,21 @@
7708
7934
  return result === UNDEFINED_VALUE ? defaultValue : result;
7709
7935
  }
7710
7936
 
7937
+ function getDateOptionValue(zipWriter, options, name, defaultValue) {
7938
+ const date = getOptionValue(zipWriter, options, name, defaultValue);
7939
+ if (date === null) {
7940
+ return defaultValue;
7941
+ }
7942
+ if (date !== UNDEFINED_VALUE && (typeof date.getTime != FUNCTION_TYPE || Number.isNaN(date.getTime()))) {
7943
+ throw new Error(ERR_INVALID_DATE);
7944
+ }
7945
+ return date;
7946
+ }
7947
+
7948
+ function getFunctionOptionValue(zipWriter, options, name) {
7949
+ return checkFunctionOption(getOptionValue(zipWriter, options, name));
7950
+ }
7951
+
7711
7952
  function getAliasedOptionValue(zipWriter, options, name, deprecatedName, defaultValue) {
7712
7953
  const value = getAliasedValue(options, name, deprecatedName);
7713
7954
  const result = value === UNDEFINED_VALUE ? getAliasedValue(zipWriter.options, name, deprecatedName) : value;
@@ -7722,9 +7963,6 @@
7722
7963
  return toNumber(getOptionValue(zipWriter, options, name, defaultValue));
7723
7964
  }
7724
7965
 
7725
- function toNumber(value) {
7726
- return typeof value == STRING_TYPE && value.trim() ? Number(value) : value;
7727
- }
7728
7966
 
7729
7967
  function getMaximumCompressedSize(uncompressedSize) {
7730
7968
  return uncompressedSize + (5 * (Math.floor(uncompressedSize / 16383) + 1));
@@ -7736,6 +7974,14 @@
7736
7974
  : compressionMethod !== COMPRESSION_METHOD_STORE;
7737
7975
  }
7738
7976
 
7977
+ function getUint16(view, offset) {
7978
+ return view.getUint16(offset, true);
7979
+ }
7980
+
7981
+ function getUint32(view, offset) {
7982
+ return view.getUint32(offset, true);
7983
+ }
7984
+
7739
7985
  function setUint8(view, offset, value) {
7740
7986
  view.setUint8(offset, value);
7741
7987
  }
@@ -7779,9 +8025,9 @@
7779
8025
  const headerRecord = createRecordWriter(HEADER_SIZE - 4);
7780
8026
  const headerArray = headerRecord.array;
7781
8027
  const headerView = getDataView(headerArray);
7782
- headerRecord.uint16(version);
7783
- headerRecord.uint16(bitFlag);
7784
- headerRecord.uint16(compressionMethod);
8028
+ headerRecord.writeUint16(version);
8029
+ headerRecord.writeUint16(bitFlag);
8030
+ headerRecord.writeUint16(compressionMethod);
7785
8031
  if (rawLastModDate === UNDEFINED_VALUE) {
7786
8032
  const dateArray = new Uint32Array(1);
7787
8033
  const dateView = getDataView(dateArray);
@@ -7789,20 +8035,20 @@
7789
8035
  setUint16(dateView, 2, ((((lastModDate.getFullYear() - 1980) << 4) | (lastModDate.getMonth() + 1)) << 5) | lastModDate.getDate());
7790
8036
  rawLastModDate = dateArray[0];
7791
8037
  }
7792
- headerRecord.uint32(rawLastModDate);
8038
+ headerRecord.writeUint32(rawLastModDate);
7793
8039
  headerRecord.skip(4);
7794
8040
  if (zip64CompressedSize || compressedSize !== UNDEFINED_VALUE) {
7795
- headerRecord.uint32(zip64CompressedSize ? MAX_32_BITS : compressedSize);
8041
+ headerRecord.writeUint32(zip64CompressedSize ? MAX_32_BITS : compressedSize);
7796
8042
  } else {
7797
8043
  headerRecord.skip(4);
7798
8044
  }
7799
8045
  if (zip64UncompressedSize || uncompressedSize !== UNDEFINED_VALUE) {
7800
- headerRecord.uint32(zip64UncompressedSize ? MAX_32_BITS : uncompressedSize);
8046
+ headerRecord.writeUint32(zip64UncompressedSize ? MAX_32_BITS : uncompressedSize);
7801
8047
  } else {
7802
8048
  headerRecord.skip(4);
7803
8049
  }
7804
- headerRecord.uint16(getLength(rawFilename));
7805
- headerRecord.uint16(extraFieldLength);
8050
+ headerRecord.writeUint16(getLength(rawFilename));
8051
+ headerRecord.writeUint16(extraFieldLength);
7806
8052
  return {
7807
8053
  headerArray,
7808
8054
  headerView,
@@ -8315,7 +8561,7 @@
8315
8561
  // ignored
8316
8562
  }
8317
8563
 
8318
- const n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],c=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],f=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],t=new Uint8Array(288);t.fill(8,0,144),t.fill(9,144,256),t.fill(7,256,280),t.fill(8,280,288);const u=new Uint8Array(30).fill(5);function r(n){const c=new Uint16Array(16);for(const s of n)c[s]++;c[0]=0;const s=new Uint16Array(17);for(let n=1;15>=n;n++)s[n+1]=s[n]+c[n];const f=new Uint16Array(n.length);for(let c=0;c<n.length;c++)n[c]&&(f[s[n[c]]++]=c);return {l:c,symbols:f}}const l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function U(U){let e;U({wasmURI:()=>(e||(e="data:application/wasm;base64,"+(n=>{let c="";const s=n.length;let f=0;for(;s>f+2;f+=3){const s=n[f]<<16|n[f+1]<<8|n[f+2];c+=l[s>>18&63]+l[s>>12&63]+l[s>>6&63]+l[63&s];}const z=s-f;if(1===z){const s=n[f]<<16;c+=l[s>>18&63]+l[s>>12&63]+"==";}else if(2===z){const s=n[f]<<16|n[f+1]<<8;c+=l[s>>18&63]+l[s>>12&63]+l[s>>6&63]+"=";}return c})((l=>{let U=0,e=0,o=0,a=new Uint8Array(1024),y=0,i=0;for(;!i;){i=w(1);const n=w(2);if(0==n)V();else if(1==n)j(r(t),r(u));else {if(2!=n)throw Error("invalid deflate block type");j(...m());}}return a.subarray(0,y);function b(){if(U>=l.length)throw Error("unexpected end of deflate data");return l[U++]}function w(n){for(;n>o;)e|=b()<<o,o+=8;const c=e&(1<<n)-1;return e>>>=n,o-=n,c}function V(){e=0,o=0;const n=b()|b()<<8;U+=2,L(y+n);for(let c=0;n>c;c++)a[y++]=b();}function j(z,t){let u=q(z);for(;256!=u;){if(256>u)L(y+1),a[y++]=u;else {const z=u-257,r=n[z]+w(c[z]),l=q(t),U=s[l]+w(f[l]);L(y+r);const e=y-U;for(let n=0;r>n;n++)a[y++]=a[e+n];}u=q(z);}}function m(){const n=w(5)+257,c=w(5)+1,s=w(4)+4,f=new Uint8Array(19);for(let n=0;s>n;n++)f[z[n]]=w(3);const t=r(f),u=new Uint8Array(n+c);let l=0;for(;l<u.length;){const n=q(t);if(16>n)u[l++]=n;else if(16==n){const n=u[l-1];let c=w(2)+3;for(;c--;)u[l++]=n;}else l+=17==n?w(3)+3:w(7)+11;}return [r(u.subarray(0,n)),r(u.subarray(n))]}function q(n){const{l:c,symbols:s}=n;let f=0,z=0,t=0;for(let n=1;15>=n;n++){f|=w(1);const u=c[n];if(u>f-z)return s[t+(f-z)];t+=u,z=z+u<<1,f<<=1;}throw Error("invalid huffman code")}function L(n){if(a.length<n){let c=2*a.length;for(;n>c;)c*=2;const s=new Uint8Array(c);s.set(a.subarray(0,y)),a=s;}}})((n=>{const c=(n=(n+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,s=[];for(let f=0;c>f;f+=4){const c=l.indexOf(n[f])<<18|l.indexOf(n[f+1])<<12|(63&l.indexOf(n[f+2]))<<6|63&l.indexOf(n[f+3]);s.push(c>>16&255),"="!==n[f+2]&&s.push(c>>8&255),"="!==n[f+3]&&s.push(255&c);}return new Uint8Array(s)})("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")))),e)});}
8564
+ const n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],c=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],f=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],t=new Uint8Array(288);t.fill(8,0,144),t.fill(9,144,256),t.fill(7,256,280),t.fill(8,280,288);const u=new Uint8Array(30).fill(5);function r(n){const c=new Uint16Array(16);for(const s of n)c[s]++;c[0]=0;const s=new Uint16Array(17);for(let n=1;n<=15;n++)s[n+1]=s[n]+c[n];const f=new Uint16Array(n.length);for(let c=0;c<n.length;c++)n[c]&&(f[s[n[c]]++]=c);return {l:c,symbols:f}}const l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function U(U){let e;U({wasmURI:()=>(e||(e="data:application/wasm;base64,"+(n=>{let c="";const s=n.length;let f=0;for(;f+2<s;f+=3){const s=n[f]<<16|n[f+1]<<8|n[f+2];c+=l[s>>18&63]+l[s>>12&63]+l[s>>6&63]+l[63&s];}const z=s-f;if(1===z){const s=n[f]<<16;c+=l[s>>18&63]+l[s>>12&63]+"==";}else if(2===z){const s=n[f]<<16|n[f+1]<<8;c+=l[s>>18&63]+l[s>>12&63]+l[s>>6&63]+"=";}return c})((l=>{let U=0,e=0,o=0,a=new Uint8Array(1024),y=0,i=0;for(;!i;){i=w(1);const n=w(2);if(0==n)V();else if(1==n)j(r(t),r(u));else {if(2!=n)throw Error("invalid deflate block type");j(...m());}}return a.subarray(0,y);function b(){if(U>=l.length)throw Error("unexpected end of deflate data");return l[U++]}function w(n){for(;o<n;)e|=b()<<o,o+=8;const c=e&(1<<n)-1;return e>>>=n,o-=n,c}function V(){e=0,o=0;const n=b()|b()<<8;U+=2,L(y+n);for(let c=0;c<n;c++)a[y++]=b();}function j(z,t){let u=q(z);for(;256!=u;){if(u<256)L(y+1),a[y++]=u;else {const z=u-257,r=n[z]+w(c[z]),l=q(t),U=s[l]+w(f[l]);L(y+r);const e=y-U;for(let n=0;n<r;n++)a[y++]=a[e+n];}u=q(z);}}function m(){const n=w(5)+257,c=w(5)+1,s=w(4)+4,f=new Uint8Array(19);for(let n=0;n<s;n++)f[z[n]]=w(3);const t=r(f),u=new Uint8Array(n+c);let l=0;for(;l<u.length;){const n=q(t);if(n<16)u[l++]=n;else if(16==n){const n=u[l-1];let c=w(2)+3;for(;c--;)u[l++]=n;}else l+=17==n?w(3)+3:w(7)+11;}return [r(u.subarray(0,n)),r(u.subarray(n))]}function q(n){const{l:c,symbols:s}=n;let f=0,z=0,t=0;for(let n=1;n<=15;n++){f|=w(1);const u=c[n];if(f-z<u)return s[t+(f-z)];t+=u,z=z+u<<1,f<<=1;}throw Error("invalid huffman code")}function L(n){if(a.length<n){let c=2*a.length;for(;c<n;)c*=2;const s=new Uint8Array(c);s.set(a.subarray(0,y)),a=s;}}})((n=>{const c=(n=(n+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,s=[];for(let f=0;f<c;f+=4){const c=l.indexOf(n[f])<<18|l.indexOf(n[f+1])<<12|(63&l.indexOf(n[f+2]))<<6|63&l.indexOf(n[f+3]);s.push(c>>16&255),"="!==n[f+2]&&s.push(c>>8&255),"="!==n[f+3]&&s.push(255&c);}return new Uint8Array(s)})("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")))),e)});}
8319
8565
 
8320
8566
  /*
8321
8567
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -8759,6 +9005,7 @@
8759
9005
  exports.ERR_DUPLICATED_NAME = ERR_DUPLICATED_NAME;
8760
9006
  exports.ERR_ENCRYPTED = ERR_ENCRYPTED;
8761
9007
  exports.ERR_ENCRYPTED_CENTRAL_DIRECTORY = ERR_ENCRYPTED_CENTRAL_DIRECTORY;
9008
+ exports.ERR_ENTRY_DATA_OUT_OF_BOUNDS = ERR_ENTRY_DATA_OUT_OF_BOUNDS;
8762
9009
  exports.ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND = ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND;
8763
9010
  exports.ERR_EOCDR_NOT_FOUND = ERR_EOCDR_NOT_FOUND;
8764
9011
  exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;
@@ -8771,19 +9018,26 @@
8771
9018
  exports.ERR_INVALID_COMMENT_TYPE = ERR_INVALID_COMMENT_TYPE;
8772
9019
  exports.ERR_INVALID_COMPRESSED_DATA = ERR_INVALID_COMPRESSED_DATA;
8773
9020
  exports.ERR_INVALID_CRC32 = ERR_INVALID_CRC32;
9021
+ exports.ERR_INVALID_DATE = ERR_INVALID_DATE;
8774
9022
  exports.ERR_INVALID_ENCRYPTION_STRENGTH = ERR_INVALID_ENCRYPTION_STRENGTH;
8775
9023
  exports.ERR_INVALID_ENTRY_COMMENT = ERR_INVALID_ENTRY_COMMENT;
9024
+ exports.ERR_INVALID_ENTRY_COMMENT_TYPE = ERR_INVALID_ENTRY_COMMENT_TYPE;
8776
9025
  exports.ERR_INVALID_ENTRY_NAME = ERR_INVALID_ENTRY_NAME;
9026
+ exports.ERR_INVALID_EXTRAFIELD = ERR_INVALID_EXTRAFIELD;
8777
9027
  exports.ERR_INVALID_EXTRAFIELD_DATA = ERR_INVALID_EXTRAFIELD_DATA;
9028
+ exports.ERR_INVALID_EXTRAFIELD_DATA_TYPE = ERR_INVALID_EXTRAFIELD_DATA_TYPE;
8778
9029
  exports.ERR_INVALID_EXTRAFIELD_TYPE = ERR_INVALID_EXTRAFIELD_TYPE;
8779
9030
  exports.ERR_INVALID_FILENAME_VALIDATION = ERR_INVALID_FILENAME_VALIDATION;
9031
+ exports.ERR_INVALID_FUNCTION_OPTION = ERR_INVALID_FUNCTION_OPTION;
8780
9032
  exports.ERR_INVALID_GID = ERR_INVALID_GID;
8781
9033
  exports.ERR_INVALID_LEVEL = ERR_INVALID_LEVEL;
8782
9034
  exports.ERR_INVALID_MAX_APPENDED_DATA_SIZE = ERR_INVALID_MAX_APPENDED_DATA_SIZE;
9035
+ exports.ERR_INVALID_MAX_WORKERS = ERR_INVALID_MAX_WORKERS;
8783
9036
  exports.ERR_INVALID_MSDOS_ATTRIBUTES = ERR_INVALID_MSDOS_ATTRIBUTES;
8784
9037
  exports.ERR_INVALID_MSDOS_DATA = ERR_INVALID_MSDOS_DATA;
8785
9038
  exports.ERR_INVALID_PASSWORD = ERR_INVALID_PASSWORD;
8786
9039
  exports.ERR_INVALID_PASSWORD_TYPE = ERR_INVALID_PASSWORD_TYPE;
9040
+ exports.ERR_INVALID_SIGNAL = ERR_INVALID_SIGNAL;
8787
9041
  exports.ERR_INVALID_SIGNATURE = ERR_INVALID_SIGNATURE;
8788
9042
  exports.ERR_INVALID_SIGNATURE_DATA = ERR_INVALID_SIGNATURE_DATA;
8789
9043
  exports.ERR_INVALID_STRICTNESS = ERR_INVALID_STRICTNESS;
@@ -8798,6 +9052,7 @@
8798
9052
  exports.ERR_OVERLAPPING_ENTRY = ERR_OVERLAPPING_ENTRY;
8799
9053
  exports.ERR_RESERVED_COMPRESSION_METHOD = ERR_RESERVED_COMPRESSION_METHOD;
8800
9054
  exports.ERR_SPLIT_ZIP_FILE = ERR_SPLIT_ZIP_FILE;
9055
+ exports.ERR_UNDEFINED_COMPRESSION_METHOD = ERR_UNDEFINED_COMPRESSION_METHOD;
8801
9056
  exports.ERR_UNDEFINED_READER = ERR_UNDEFINED_READER;
8802
9057
  exports.ERR_UNDEFINED_UNCOMPRESSED_SIZE = ERR_UNDEFINED_UNCOMPRESSED_SIZE;
8803
9058
  exports.ERR_UNDETERMINED_SIZE = ERR_UNDETERMINED_SIZE;