@zip.js/zip.js 2.11.4 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/deno.json +1 -1
  2. package/dist/zip-core-external.js +427 -110
  3. package/dist/zip-core-external.min.js +1 -1
  4. package/dist/zip-core.js +437 -107
  5. package/dist/zip-core.min.js +1 -1
  6. package/dist/zip-fs-core-external.js +492 -230
  7. package/dist/zip-fs-core-external.min.js +1 -1
  8. package/dist/zip-fs-core.js +505 -227
  9. package/dist/zip-fs-core.min.js +1 -1
  10. package/dist/zip-fs-external.js +492 -230
  11. package/dist/zip-fs-external.min.js +1 -1
  12. package/dist/zip-fs-native.js +507 -229
  13. package/dist/zip-fs-native.min.js +1 -1
  14. package/dist/zip-fs.js +508 -230
  15. package/dist/zip-fs.min.js +1 -1
  16. package/dist/zip-legacy.js +439 -109
  17. package/dist/zip-legacy.min.js +1 -1
  18. package/dist/zip-native.js +439 -109
  19. package/dist/zip-native.min.js +1 -1
  20. package/dist/zip-web-worker-native.js +1 -1
  21. package/dist/zip-web-worker.js +1 -1
  22. package/dist/zip.js +440 -110
  23. package/dist/zip.min.js +1 -1
  24. package/index-native.cjs +507 -229
  25. package/index-native.min.js +1 -1
  26. package/index.cjs +508 -230
  27. package/index.d.cts +468 -59
  28. package/index.d.ts +468 -59
  29. package/index.min.js +1 -1
  30. package/lib/core/codec-worker-web.js +10 -2
  31. package/lib/core/codec-worker.js +4 -3
  32. package/lib/core/configuration.js +20 -5
  33. package/lib/core/constants.js +2 -0
  34. package/lib/core/io.js +13 -5
  35. package/lib/core/options.js +16 -0
  36. package/lib/core/streams/codec-stream.js +6 -0
  37. package/lib/core/util/warnings.js +42 -0
  38. package/lib/core/version.js +1 -1
  39. package/lib/core/web-worker-base.js +4 -3
  40. package/lib/core/web-worker-inline-native.js +1 -1
  41. package/lib/core/web-worker-inline-wasm.js +1 -1
  42. package/lib/core/zip-entry.js +49 -1
  43. package/lib/core/zip-fs.js +43 -132
  44. package/lib/core/zip-reader.js +106 -48
  45. package/lib/core/zip-writer.js +236 -54
  46. package/lib/zip-core-base.js +9 -3
  47. package/lib/zip-core-reader.js +2 -0
  48. package/lib/zip-core-writer.js +6 -1
  49. package/lib/zip-module-wasm-base.js +2 -2
  50. package/package.json +5 -3
package/dist/zip.js CHANGED
@@ -134,6 +134,7 @@
134
134
  const BOOLEAN_TYPE = "boolean";
135
135
 
136
136
  const EMPTY_UINT8_ARRAY = new Uint8Array();
137
+ const SYMBOL_ASYNC_DISPOSE = Symbol.asyncDispose || Symbol();
137
138
 
138
139
  /*
139
140
  Copyright (c) 2022 Gildas Lormeau. All rights reserved.
@@ -178,6 +179,7 @@
178
179
  const OPTION_CHECK_OVERLAPPING_ENTRY = "checkOverlappingEntry";
179
180
  const OPTION_CHECK_AMBIGUITY = "checkAmbiguity";
180
181
  const OPTION_CHECK_LOCAL_DIRECTORY = "checkLocalDirectory";
182
+ const OPTION_CHECK_LOCAL_FILENAME = "checkLocalFilename";
181
183
  const OPTION_CHECK_SIGNATURE = "checkSignature";
182
184
  const OPTION_CHECK_CRC32 = "checkCrc32";
183
185
  const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
@@ -208,15 +210,18 @@
208
210
  const OPTION_MAX_APPENDED_DATA_SIZE = "maxAppendedDataSize";
209
211
  const OPTION_DECRYPT_CENTRAL_DIRECTORY = "decryptCentralDirectory";
210
212
  const OPTION_SIGN_CENTRAL_DIRECTORY = "signCentralDirectory";
213
+ const OPTION_ENTRY = "entry";
211
214
  const TEXT_TYPE_FILENAME = "filename";
212
215
  const TEXT_TYPE_COMMENT = "comment";
213
216
  const STRICTNESS_STRICT = "strict";
214
217
  const STRICTNESS_BALANCED = "balanced";
215
218
  const STRICTNESS_TOLERANT = "tolerant";
219
+ const PASS_THROUGH_COMPRESSED = "compressed";
216
220
 
217
221
  const ERR_INVALID_FUNCTION_OPTION = "Invalid option (must be a function)";
218
222
  const ERR_INVALID_SIGNAL = "Invalid signal (must be an AbortSignal instance)";
219
223
  const ERR_INVALID_PASSWORD_TYPE = "Invalid password (password must be a string, rawPassword must be a Uint8Array)";
224
+ const ERR_INVALID_PASS_THROUGH_VALUE = "Invalid passThrough option (must be a boolean or 'compressed')";
220
225
  const ERR_ABORTED = "The operation was aborted";
221
226
  const ABORT_ERROR_NAME = "AbortError";
222
227
 
@@ -246,6 +251,13 @@
246
251
  }
247
252
  }
248
253
 
254
+ function checkPassThroughOption(passThrough) {
255
+ if (passThrough !== UNDEFINED_VALUE && typeof passThrough != BOOLEAN_TYPE && passThrough !== PASS_THROUGH_COMPRESSED) {
256
+ throw new Error(ERR_INVALID_PASS_THROUGH_VALUE);
257
+ }
258
+ return passThrough;
259
+ }
260
+
249
261
  function checkInteger(value, maxValue, errorMessage) {
250
262
  if (!Number.isInteger(value) || value < 0 || value > maxValue) {
251
263
  throw new Error(errorMessage);
@@ -295,6 +307,8 @@
295
307
  const MINIMUM_CHUNK_SIZE = 64;
296
308
  const MINIMUM_PROPERTY_VALUE = 1;
297
309
  const ERR_INVALID_MAX_WORKERS = "Invalid maxWorkers (must be an integer greater than 0)";
310
+ const ERR_INVALID_BASE_URI = "Invalid baseURI (must be a string)";
311
+ const ERR_INVALID_URI = "Invalid URI (must be a string or a function returning a string)";
298
312
  let maxWorkers = 2;
299
313
  try {
300
314
  if (typeof navigator != UNDEFINED_TYPE && navigator.hardwareConcurrency) {
@@ -319,9 +333,9 @@
319
333
  };
320
334
 
321
335
  const PROPERTY_NAME_MAX_WORKERS = "maxWorkers";
336
+ const PROPERTY_NAME_BASE_URI = "baseURI";
322
337
 
323
- const STRING_PROPERTY_NAMES = [
324
- "baseURI",
338
+ const URI_PROPERTY_NAMES = [
325
339
  "wasmURI",
326
340
  "workerURI"
327
341
  ];
@@ -345,7 +359,8 @@
345
359
  "DecompressionStreamFallback"
346
360
  ];
347
361
  const CONFIGURABLE_PROPERTY_NAMES = [
348
- ...STRING_PROPERTY_NAMES,
362
+ PROPERTY_NAME_BASE_URI,
363
+ ...URI_PROPERTY_NAMES,
349
364
  ...BOOLEAN_PROPERTY_NAMES,
350
365
  ...NUMBER_PROPERTY_NAMES,
351
366
  ...FUNCTION_PROPERTY_NAMES
@@ -389,6 +404,14 @@
389
404
  }
390
405
  } else if (FUNCTION_PROPERTY_NAMES.includes(propertyName)) {
391
406
  checkFunctionOption(propertyValue);
407
+ } else if (propertyName == PROPERTY_NAME_BASE_URI) {
408
+ if (propertyValue && typeof propertyValue != STRING_TYPE) {
409
+ throw new Error(ERR_INVALID_BASE_URI);
410
+ }
411
+ } else if (URI_PROPERTY_NAMES.includes(propertyName)) {
412
+ if (propertyValue && typeof propertyValue != STRING_TYPE && typeof propertyValue != FUNCTION_TYPE) {
413
+ throw new Error(ERR_INVALID_URI);
414
+ }
392
415
  }
393
416
  return propertyValue;
394
417
  }
@@ -422,7 +445,7 @@
422
445
  Object.assign(config, DEFAULT_CONFIGURATION);
423
446
  }
424
447
 
425
- 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$1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n$1=t=>t({workerURI:t=>{const n="text/javascript";let s='!function(t){"function"==typeof define&&define.amd?define(t):t()}(function(){"use strict";const{Array:t,Object:n,Number:e,Math:s,Error:r,Uint8Array:o,Uint16Array:c,Uint32Array:i,Int32Array:a,Map:f,DataView:u,Promise:l,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 n=t;for(let t=0;t<8;t++)n=1&n?n>>>1^3988292384:n>>>1;C[0][t]=n}for(let t=0;t<256;t++)for(let n=1;n<8;n++){const e=C[n-1][t];C[n][t]=e>>>8^C[0][255&e]}const[I,A,x,M,P,B,D,F]=C;class R{constructor(t){this.o=t||-1}append(t){let n=0|this.o;const e=0|t.length;let s=0;if(e>=8&&t.buffer){const r=new u(t.buffer,t.byteOffset,e),o=e-8;for(;s<=o;s+=8){const t=n^r.getInt32(s,!0),e=r.getInt32(s+4,!0);n=F[255&t]^D[t>>>8&255]^B[t>>>16&255]^P[t>>>24&255]^M[255&e]^x[e>>>8&255]^A[e>>>16&255]^I[e>>>24&255]}}for(;s<e;s++)n=n>>>8^I[255&(n^t[s])];this.o=n}get(){return~this.o}}class U extends d{constructor(){let t;const n=new R;super({transform(t,e){n.append(t),e.enqueue(t)},flush(){const e=new o(4);new u(e.buffer).setUint32(0,n.get()),t.value=e}}),t=this}}function W(t,n){const e=new o(t.length+n.length);return e.set(t),e.set(n,t.length),e}function _(t){return new u(t.buffer,t.byteOffset,t.byteLength)}const T={concat(t,n){if(0===t.length||0===n.length)return t.concat(n);const e=t[t.length-1],s=T.l(e);return 32===s?t.concat(n):T.h(n,s,0|e,t.slice(0,t.length-1))},bitLength(t){const n=t.length;if(0===n)return 0;const e=t[n-1];return 32*(n-1)+T.l(e)},m(t,n){if(32*t.length<n)return t;const e=(t=t.slice(0,s.ceil(n/32))).length;return n&=31,e>0&&n&&(t[e-1]=T.S(n,t[e-1]&2147483648>>n-1,1)),t},S:(t,n,e)=>32===t?n:(e?0|n:n<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,n,e,s){for(void 0===s&&(s=[]);n>=32;n-=32)s.push(e),e=0;if(0===n)return s.concat(t);for(let r=0;r<t.length;r++)s.push(e|t[r]>>>n),e=t[r]<<32-n;const r=t.length?t[t.length-1]:0,o=T.l(r);return s.push(T.S(n+o&31,n+o>32?e:s.pop(),1)),s}},V={bytes:{v(t){const n=T.bitLength(t)/8,e=new o(n);let s;for(let r=0;r<n;r++)3&r||(s=t[r/4]),e[r]=s>>>24,s<<=8;return e},C(t){const n=[];let e,s=0;for(e=0;e<t.length;e++)s=s<<8|t[e],3&~e||(n.push(s),s=0);return 3&e&&n.push(T.S(8*(3&e),s)),n}}},K=class{constructor(t){const n=this;n.blockSize=512,n.I=[1732584193,4023233417,2562383102,271733878,3285377520],n.A=[1518500249,1859775393,2400959708,3395469782],t?(n.M=t.M.slice(0),n.P=t.P.slice(0),n.B=t.B):n.reset()}reset(){const t=this;return t.M=t.I.slice(0),t.P=[],t.B=0,t}update(t){const n=this;"string"==typeof t&&(t=V.D.C(t));const e=n.P=T.concat(n.P,t),s=n.B,o=n.B=s+T.bitLength(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new i(e);let a=0;for(let t=n.blockSize+s-(n.blockSize+s&n.blockSize-1);t<=o;t+=n.blockSize)n.F(c.subarray(16*a,16*(a+1))),a+=1;return e.splice(0,16*a),n}R(){const t=this;let n=t.P;const e=t.M;n=T.concat(n,[T.S(1,1)]);for(let t=n.length+2;15&t;t++)n.push(0);for(n.push(s.floor(t.B/4294967296)),n.push(0|t.B);n.length;)t.F(n.splice(0,16));return t.reset(),e}U(t,n,e,s){return t<=19?n&e|~n&s:t<=39?n^e^s:t<=59?n&e|n&s|e&s:t<=79?n^e^s:void 0}W(t,n){return n<<t|n>>>32-t}F(n){const e=this,r=e.M,o=t(80);for(let t=0;t<16;t++)o[t]=n[t];let c=r[0],i=r[1],a=r[2],f=r[3],u=r[4];for(let t=0;t<=79;t++){t>=16&&(o[t]=e.W(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const n=e.W(5,c)+e.U(t,i,a,f)+u+o[t]+e.A[s.floor(t/20)]|0;u=f,f=a,a=e.W(30,i),i=c,c=n}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]+u|0}},E={importKey:t=>new E._(V.bytes.C(t)),T(t,n,e,s){if(e=e||1e4,s<0||e<0)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let c,i,a,f,l;const w=new ArrayBuffer(o),h=new u(w);let p=0;const d=T;for(n=V.bytes.C(n),l=1;p<(o||1);l++){for(c=i=t.encrypt(d.concat(n,[l])),a=1;a<e;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 n=this,e=n.V=K,s=[[],[]];n.K=[new e,new e];const r=n.K[0].blockSize/32;t.length>r&&(t=(new e).update(t).R());for(let n=0;n<r;n++)s[0][n]=909522486^t[n],s[1][n]=1549556828^t[n];n.K[0].update(s[0]),n.K[1].update(s[1]),n.L=new e(n.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,n=t.L.R(),e=new t.V(t.K[1]).update(n).R();return t.reset(),e}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="zipjs-abort-check-password";function H(t){if(L)return h.getRandomValues(t);throw new r("Crypto API not supported")}const N=16,q={name:"PBKDF2"},G=n.assign({hash:{name:"HMAC"}},q),J=n.assign({iterations:1e3,hash:{name:"SHA-1"}},q),Q=["deriveBits"],X=[8,12,16],Y=[16,24,32],Z=10,$=[0,0,0,0],tt=typeof h!=b,nt=tt&&h.subtle,et=tt&&typeof nt!=b,st=V.bytes,rt=class{constructor(t){const n=this;n.j=[[[],[],[],[],[]],[[],[],[],[],[]]],n.j[0][0][0]||n.H();const e=n.j[0][4],s=n.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(n.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=e[t>>>24]<<24^e[t>>16&255]<<16^e[t>>8&255]<<8^e[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 n=i[3&t?c:c-4];a[t]=c<=4||t<4?n:s[0][e[n>>>24]]^s[1][e[n>>16&255]]^s[2][e[n>>8&255]]^s[3][e[255&n]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}H(){const t=this.j[0],n=this.j[1],e=t[4],s=n[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 u=c=0;!e[u];u^=i||1,c=o[c]||1){let o=c^c<<1^c<<2^c<<3^c<<4;o=o>>8^255&o^99,e[u]=o,s[o]=u,f=r[a=r[i=r[u]]];let l=16843009*f^65537*a^257*i^16843008*u,w=257*r[o]^16843008*o;for(let e=0;e<4;e++)t[e][u]=w=w<<24^w>>>8,n[e][o]=l=l<<24^l>>>8}for(let e=0;e<5;e++)t[e]=t[e].slice(0),n[e]=n[e].slice(0)}N(t,n){if(4!==t.length)throw new r("invalid aes block size");const e=this.A[n],s=e.length/4-2,o=[0,0,0,0],c=this.j[n],i=c[0],a=c[1],f=c[2],u=c[3],l=c[4];let w,h,p,d=t[0]^e[0],y=t[n?3:1]^e[1],m=t[2]^e[2],S=t[n?1:3]^e[3],g=4;for(let t=0;t<s;t++)w=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^u[255&S]^e[g],h=i[y>>>24]^a[m>>16&255]^f[S>>8&255]^u[255&d]^e[g+1],p=i[m>>>24]^a[S>>16&255]^f[d>>8&255]^u[255&y]^e[g+2],S=i[S>>>24]^a[d>>16&255]^f[y>>8&255]^u[255&m]^e[g+3],g+=4,d=w,y=h,m=p;for(let t=0;t<4;t++)o[n?3&-t:t]=l[d>>>24]<<24^l[y>>16&255]<<16^l[m>>8&255]<<8^l[255&S]^e[g++],w=d,d=y,y=m,m=S,S=w;return o}},ot=class{constructor(t,n){this.G=t,this.J=n,this.X=n}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 n=t>>16&255,e=t>>8&255,s=255&t;255===n?(n=0,255===e?(e=0,255===s?s=0:++s):++e):++n,t=0,t+=n<<16,t+=e<<8,t+=s}return t}$(t){0===(t[0]=this.Z(t[0]))&&(t[1]=this.Z(t[1]))}Y(t,n,e){let s;if(!(s=n.length))return[];const r=T.bitLength(n);for(let r=0;r<s;r+=4){this.$(e);const s=t.encrypt(e);n[r]^=s[0],n[r+1]^=s[1],n[r+2]^=s[2],n[r+3]^=s[3]}return T.m(n,r)}},ct=E._;let it=tt&&et&&typeof nt.importKey==k,at=tt&&et&&typeof nt.deriveBits==k;class ft extends d{constructor({password:t,rawPassword:n,encryptionStrength:e,checkPasswordOnly:s,checkAuthenticationCode:c=!0}){super({start(){lt(this,t,n,e)},async transform(t,n){const e=this,{password:c,strength:i,nt:a,ready:f}=e;c?(await async function(t,n,e,s){const o=await ht(t,n,e,dt(s,0,X[n])),c=dt(s,X[n]);if(o[0]!=c[0]||o[1]!=c[1])throw new r(O)}(e,i,c,dt(t,0,X[i]+2)),t=dt(t,X[i]+2),s?n.error(new r(j)):a()):await f;const u=new o(t.length-Z-(t.length-Z)%N);n.enqueue(wt(e,t,u,0,Z,!0))},async flush(t){const{et:n,st:e,ot:s,ready:o}=this;if(e&&n){await o;const i=dt(s,0,s.length-Z),a=dt(s,s.length-Z);let f=z;if(i.length){const t=mt(st,i);e.update(t);const s=n.update(t);f=yt(st,s)}const u=dt(yt(st,e.digest()),0,Z);let l=s.length<Z?1:0;for(let t=0;t<Z;t++)l|=u[t]^a[t];if(l&&c)throw new r("Invalid authentication code");t.enqueue(f)}}})}}class ut extends d{constructor({password:t,rawPassword:n,encryptionStrength:e}){super({start(){lt(this,t,n,e)},async transform(t,n){const e=this,{password:s,strength:r,nt:c,ready:i}=e;let a=z;s?(a=await async function(t,n,e){const s=H(new o(X[n]));return W(s,await ht(t,n,e,s))}(e,r,s),c()):await i;const f=new o(a.length+t.length-t.length%N);f.set(a,0),n.enqueue(wt(e,t,f,a.length,0))},async flush(t){const{et:n,st:e,ot:s,ready:r}=this;if(e&&n){await r;let o=z;if(s.length){const t=n.update(mt(st,s));e.update(t),o=yt(st,t)}const c=yt(st,e.digest()).slice(0,Z);t.enqueue(W(o,c))}}})}}function lt(t,e,s,r){n.assign(t,{ready:new l(n=>t.nt=n),password:pt(e,s),strength:r-1,ot:z})}function wt(t,n,e,s,r,c){const{et:i,st:a,ot:f}=t;f.length&&(n=W(f,n));const u=n.length-r;let l;for(e=function(t,n){if(n&&n>t.length){const e=t;(t=new o(n)).set(e,0)}return t}(e,s+(u-u%N)),l=0;l<=u-N;l+=N){const t=mt(st,dt(n,l,l+N));c&&a.update(t);const r=i.update(t);c||a.update(r),e.set(yt(st,r),l+s)}return t.ot=dt(n,l),e}async function ht(e,s,r,c){e.password=null;const i=await async function(t,n,e,s,r){if(!it)return E.importKey(n);try{return await nt.importKey("raw",n,e,!1,r)}catch{return it=!1,E.importKey(n)}}(0,r,G,0,Q),a=await async function(t,n,e){if(!at)return E.T(n,t.salt,J.iterations,e);try{return await nt.deriveBits(t,n,e)}catch{return at=!1,E.T(n,t.salt,J.iterations,e)}}(n.assign({salt:c},J),i,8*(2*Y[s]+2)),f=new o(a),u=mt(st,dt(f,0,Y[s])),l=mt(st,dt(f,Y[s],2*Y[s])),w=dt(f,2*Y[s]);return n.assign(e,{keys:{key:u,ct:l,passwordVerification:w},et:new ot(new rt(u),t.from($)),st:new ct(l)}),w}function pt(t,n){return n===v?function(t){if(typeof w==b){t=unescape(encodeURIComponent(t));const n=new o(t.length);for(let e=0;e<n.length;e++)n[e]=t.charCodeAt(e);return n}return(new w).encode(t)}(t):n}function dt(t,n,e){return t.subarray(n,e)}function yt(t,n){return t.v(n)}function mt(t,n){return t.C(n)}class St extends d{constructor({password:t,rawPassword:n,passwordVerification:e,checkPasswordOnly:s}){super({start(){vt(this,t,n,e)},transform(t,n){const e=this;if(e.password||e.rawPassword){const n=bt(e,t.subarray(0,12));if(e.password=e.rawPassword=null,0!=(n[11]^e.passwordVerification))throw new r(O);t=t.subarray(12)}s?n.error(new r(j)):n.enqueue(bt(e,t))}})}}class gt extends d{constructor({password:t,rawPassword:n,passwordVerification:e}){super({start(){vt(this,t,n,e)},transform(t,n){const e=this;let s,r;if(e.password||e.rawPassword){e.password=e.rawPassword=null;const n=H(new o(12));n[11]=e.passwordVerification,s=new o(t.length+n.length),s.set(kt(e,n),0),r=12}else s=new o(t.length),r=0;s.set(kt(e,t),r),n.enqueue(s)}})}}function vt(t,e,s,r){n.assign(t,{password:e,rawPassword:s,passwordVerification:r}),function(t,e,s){const r=[305419896,591751049,878082192];if(n.assign(t,{keys:r,it:new R(r[0]),ft:new R(r[2])}),s)for(let n=0;n<s.length;n++)zt(t,s[n]);else for(let n=0;n<e.length;n++)zt(t,e.charCodeAt(n))}(t,e,s)}function bt(t,n){const e=new o(n.length);for(let s=0;s<n.length;s++)e[s]=Ct(t)^n[s],zt(t,e[s]);return e}function kt(t,n){const e=new o(n.length);for(let s=0;s<n.length;s++)e[s]=Ct(t)^n[s],zt(t,n[s]);return e}function zt(t,n){let[,e]=t.keys;t.it.append([n]);const r=~t.it.get();e=At(s.imul(At(e+It(r)),134775813)+1),t.ft.append([e>>>24]);const o=~t.ft.get();t.keys=[r,e,o]}function Ct(t){const n=2|t.keys[2];return It(s.imul(n,1^n)>>>8)}function It(t){return 255&t}function At(t){return 4294967295&t}function xt(t){if(t instanceof y)return t;const n=t.getReader();return new y({async pull(t){const{value:e,done:s}=await n.read();s?t.close():t.enqueue(e)},cancel:t=>n.cancel(t)})}const Mt=new f;function Pt(t){return Mt.get(t)}const Bt="Invalid uncompressed size",Dt="deflate-raw",Ft="gzip",Rt=[31,139,8];class Ut extends d{constructor(t,{chunkSize:n,CompressionStreamFallback:e,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:c,zipCrypto:i,computeCrc32:a,level:f,deflate64:l,format:w,compressionMethod:h,inputSize:p}=t,d=this;let y,m,S,g=super.readable;const v=w&&Pt(w),b=a&&r&&!l&&!v&&(!o||i)&&Boolean(c&&s);if(o&&!i||!a||b||(y=new U,g=Lt(g,y)),r)if(v)g=Ot(g,Kt(v.CompressionStream,w,{level:f,chunkSize:n,compressionMethod:h,uncompressedSize:p}));else if(b)S=new Wt,g=Ot(g,new s(Ft)),g=Lt(g,S);else try{g=Et(g,c,{level:f,chunkSize:n},s,e)}catch(t){let n;try{n=new s(Ft)}catch{throw t}g=Ot(g,n),g=Lt(g,new Wt)}o&&(i?g=Lt(g,new gt(t)):(m=new ut(t),g=Lt(g,m))),Vt(d,g,()=>{o&&!i||!a||(d.crc32=b?S.crc32:new u(y.value.buffer).getUint32(0))})}}class Wt extends d{constructor(){let t,n=10,e=new o(0);super({transform(t,r){if(n){const e=s.min(n,t.length);if(n-=e,!(t=t.subarray(e)).length)return}const o=e.length+t.length;if(o<=8)return void(e=W(e,t));const c=o-8,i=s.min(c,e.length);r.enqueue(W(e.subarray(0,i),t.subarray(0,c-i))),e=W(e.subarray(i),t.subarray(c-i))},flush(){const n=_(e);t.crc32=n.getUint32(0,!0),t.uncompressedSize=n.getUint32(4,!0)}}),t=this}}class _t extends d{constructor(t,{chunkSize:n,DecompressionStreamFallback:e,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=Lt(C,new St(t)):(z=new ft(t),C=Lt(C,z))),w){const t=m&&Pt(m);if(t)C=Ot(C,Kt(t.DecompressionStream,m,{chunkSize:n,compressionMethod:S,rawBitFlag:g,uncompressedSize:b}));else try{C=Et(C,h,{chunkSize:n,deflate64:p},s,e)}catch(t){if(p||b===v)throw t;let n;try{n=new s(Ft)}catch{throw t}C=function(t,n,e){const s=new R;let c,i,a,f=0,u=!1;const w=new l((t,n)=>{i=t,a=n});w.catch(()=>{}),e||i();const h=new d({start(t){const n=new o(10);n.set(Rt),t.enqueue(n)},transform(t,n){n.enqueue(t)},async flush(t){u=!0,y();try{await w}finally{m()}const n=new o(8),r=_(n);r.setUint32(0,s.get(),!0),r.setUint32(4,e,!0),t.enqueue(n)},cancel(t){a(t)}}),p=new d({transform(t,n){s.append(t),f+=t.length,f>=e?i():u&&y(),n.enqueue(t)},cancel(t){a(t)}});return t=Lt(t,h),Lt(t=Ot(t,n),p);function y(){m(),c=setTimeout(()=>a(new r(Bt)),5e3)}function m(){clearTimeout(c)}}(C,n,b)}C=function(t){const n=t.getReader();return new y({async pull(t){let e;try{e=await n.read()}catch(t){if(t&&t.message)throw t;const n=new r("Invalid compressed data");throw n.cause=t,n}const{value:s,done:o}=e;o?t.close():t.enqueue(s)},cancel:t=>n.cancel(t)})}(C)}a&&(k=new U,C=Lt(C,k)),Vt(this,C,()=>{if(a){const t=new u(k.value.buffer);if(f!=t.getUint32(0,!1))throw new r("Invalid CRC32")}})}}const Tt=new f;function Vt(t,e,s){e=Lt(e,new d({flush:s})),n.defineProperty(t,"readable",{get:()=>e})}function Kt(t,n,e){if(!t)throw new r("Compression method not supported");return new t(n,e)}function Et(t,n,e,s,r){const o=n&&s?s:r||s,c=e.deflate64?"deflate64-raw":Dt;let i;try{i=new o(c,e)}catch(t){if(!n||!r||o==r)throw t;i=new r(c,e)}return Ot(t,i)}function Lt(t,n){return xt(t).pipeThrough(n)}function Ot(t,n){const e=n.writable.getWriter(),s=t.getReader();return async function(){try{for(;;){await e.ready;const t=await s.read();if(t.done){await e.close();break}await e.write(t.value)}}catch(t){await async function(t,n){try{await t.abort(n)}catch{}}(e,t),await async function(t,n){try{await t.cancel(n)}catch{}}(s,t)}}(),n.readable}const jt="data",Ht="close",Nt="deflate";class qt extends d{constructor(t,e){super({});const s=this,{codecType:o}=t;let c;o.startsWith(Nt)?c=Ut:o.startsWith("inflate")&&(c=_t),s.outputSize=0;let i=0;const a=new c(t,e),f=super.readable,u=new d({transform(t,n){t&&t.length&&(i+=t.length,n.enqueue(t))},flush(){n.assign(s,{inputSize:i})}}),l=new d({transform(n,e){if(n&&n.length&&(e.enqueue(n),s.outputSize+=n.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r(Bt)},flush(){const{crc32:t}=a;n.assign(s,{crc32:t,inputSize:i})}});n.defineProperty(s,"readable",{get:()=>f.pipeThrough(u).pipeThrough(a).pipeThrough(l)})}}class Gt extends d{constructor(t){const n=[];let s=0;function r(){const e=new o(t);let r=0;for(;r<t;){const s=n[0],o=t-r;s.length<=o?(e.set(s,r),r+=s.length,n.shift()):(e.set(s.subarray(0,o),r),n[0]=s.subarray(o),r+=o)}return s-=t,e}(!e.isFinite(t)||t<1)&&(t=65536),super({transform(e,o){for(n.push(e),s+=e.length;s>t;)o.enqueue(r())},flush(t){s&&t.enqueue(function(t,n){const e=new o(n);let s=0;for(const n of t)e.set(n,s),s+=n.length;return e}(n,s))}})}}let Jt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Jt=navigator.hardwareConcurrency)}catch{}const Qt=new f,Xt=new f;let Yt,Zt=0;async function $t(t){let n,o;try{const{options:c,config:i}=t;if(c.format)try{await async function(t,n){!Mt.has(t)&&n&&function(t,n){const{CompressionStream:e,DecompressionStream:s}=n;if(typeof e!=k&&typeof s!=k)throw new r("Invalid codec module");Mt.set(t,{CompressionStream:e,DecompressionStream:s})}(t,await(import(n)))}(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(!function(t,n){if(!t)return!1;let e=Tt.get(t);e||(e=new f,Tt.set(t,e));let s=e.get(n);if(s===v){try{new t(n),s=!0}catch{s=!1}e.set(n,s)}return s}(c.codecType.startsWith(Nt)?i.CompressionStream:i.DecompressionStream,Dt))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},u=t.readable?xt(t.readable):new y({async pull(t){const n=new l(t=>Qt.set(Zt,t));tn({type:"pull",messageId:Zt}),Zt=(Zt+1)%e.MAX_SAFE_INTEGER;const{value:s,done:r}=await n;t.enqueue(s),r&&t.close()}},a);o=t.writable?function(t){if(t instanceof m)return t;const n=t.getWriter();return new m({write:t=>n.write(t),close:()=>n.close(),abort:t=>n.abort(t)})}(t.writable):new m({async write(t){let n;const s=new l(t=>n=t);Xt.set(Zt,n),tn({type:jt,value:t,messageId:Zt}),Zt=(Zt+1)%e.MAX_SAFE_INTEGER,await s}},a),n=new qt(c,i),Yt=new AbortController;const{signal:w}=Yt;await u.pipeThrough(n).pipeThrough(new Gt(function(t){return r="string"==typeof(n=r=t.chunkSize)&&n.trim()?e(n):n,e.isInteger(r)&&r>=1?s.max(r,64):65536;var n,r}(i))).pipeTo(o,{signal:w,preventClose:!0,preventAbort:!0}),await o.getWriter().close();const{crc32:h,inputSize:p,outputSize:d}=n;tn({type:Ht,result:{crc32:h,inputSize:p,outputSize:d}})}catch(t){if(t.outputSize=n?n.outputSize:0,o&&!o.locked)try{await o.getWriter().close()}catch{}nn(t)}}function tn(t){const{value:n}=t;if(n)if(n.length)try{t.value=(e=n,e.byteOffset||e.byteLength!=e.buffer.byteLength?new o(e):e).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var e}function nn(t=new r("Unknown error")){const{message:n,stack:e,code:s,name:o,outputSize:c,cause:i,codecImportFailed:a}=t,f={message:n,stack:e,code:s,name:o,outputSize:c};i&&(f.cause={name:i.name,message:i.message}),a&&(f.codecImportFailed=!0),p({error:f})}addEventListener("message",({data:t})=>{const{type:n,messageId:e,value:s,done:r}=t;try{if("start"==n&&$t(t),n==jt){const t=Qt.get(e);Qt.delete(e),t({value:s||new o,done:r})}if("ack"==n){const t=Xt.get(e);Xt.delete(e),t()}n==Ht&&Yt.abort()}catch(t){nn(t)}}),p({type:"ready"});const en="deflate",sn="deflate-raw",rn="deflate64-raw",on="gzip";let cn,an,fn,un,ln;function wn(t,n,e={}){if(!cn){const t=new r("WASM module not loaded");throw t.cause=ln,t}const c="number"==typeof e.level?e.level:-1,i="number"==typeof e.outBuffer?e.outBuffer:65536,a="number"==typeof e.inBufferSize?e.inBufferSize:65536;return new d({start(){try{let e;if(this.ut=an(i),this.in=an(a),this.inBufferSize=a,!this.ut||!this.in)throw new r("allocation failed");if(this.lt=new o(i),t?(this.wt=cn.deflate_process,this.ht=cn.deflate_last_consumed,this.yt=cn.deflate_end,this.St=cn.deflate_new(),e=n===on?cn.deflate_init_gzip(this.St,c):n===sn?cn.deflate_init_raw(this.St,c):cn.deflate_init(this.St,c)):n===rn?(this.wt=cn.inflate9_process,this.ht=cn.inflate9_last_consumed,this.yt=cn.inflate9_end,this.St=cn.inflate9_new(),e=cn.inflate9_init_raw(this.St)):(this.wt=cn.inflate_process,this.ht=cn.inflate_last_consumed,this.yt=cn.inflate_end,this.St=cn.inflate_new(),e=n===sn?cn.inflate_init_raw(this.St):n===on?cn.inflate_init_gzip(this.St):cn.inflate_init(this.St)),0!==e)throw new r("init failed:"+e)}catch(t){throw f(this),t}},transform(t,n){try{const e=t,c=new o(un.buffer),a=this.wt,f=this.ht,u=this.ut,l=this.lt;let w=0;for(;w<e.length;){const t=s.min(e.length-w,32768);if((!this.in||this.inBufferSize<t)&&(this.in&&fn&&(fn(this.in),this.in=0),this.in=an(t),this.inBufferSize=t,!this.in))throw new r("allocation failed");c.set(e.subarray(w,w+t),this.in);const o=a(this.St,this.in,t,u,i,0),h=o>>24&255,p=128&h?h-256:h;if(p<0)throw new r("process error:"+p);const d=16777215&o;d&&(l.set(c.subarray(u,u+d),0),n.enqueue(l.slice(0,d)));const y=f(this.St);if(0===y&&0===d)break;w+=y}}catch(t){f(this),n.error(t)}},flush(t){try{const n=new o(un.buffer),e=this.wt,s=this.ut,c=this.lt;for(;;){const o=e(this.St,0,0,s,i,4),a=o>>24&255,f=128&a?a-256:a;if(f<0)throw new r("process error:"+f);const u=16777215&o;if(u&&(c.set(n.subarray(s,s+u),0),t.enqueue(c.slice(0,u))),1===a||0===u)break}}catch(n){t.error(n)}finally{const n=f(this);0!==n&&t.error(new r("end error:"+n))}},cancel(){f(this)}});function f(t){let n=0;return t.St&&t.yt&&(n=t.yt(t.St)),t.St=0,t.in&&fn&&fn(t.in),t.in=0,t.ut&&fn&&fn(t.ut),t.ut=0,n}}class hn{constructor(t=en,n){return wn(!0,t,n)}}class pn{constructor(t=en,n){return wn(!1,t,n)}}hn.gt=!0,pn.gt=!0,hn.vt=[en,sn,on],pn.vt=[en,sn,on,rn];let dn=!1;!function(t={}){const{init:n}=t,e=t.CompressionStreamFallback||t.CompressionStreamZlib,s=t.DecompressionStreamFallback||t.DecompressionStreamZlib;self.initModule=async t=>{n&&await n(t),e&&(t.CompressionStreamFallback=e),s&&(t.DecompressionStreamFallback=s)}}({CompressionStreamFallback:hn,DecompressionStreamFallback:pn,init:t=>async function(t,{baseURI:n}){if(!dn)try{await async function(t,n){let e,s;try{try{s=new URL(t,n)}catch{}const r=await fetch(s);e=await r.arrayBuffer()}catch(n){if(!t.startsWith("data:application/wasm;base64,"))throw n;e=function(t){const n=t.split(",")[1],e=atob(n),s=e.length,r=new o(s);for(let t=0;t<s;++t)r[t]=e.charCodeAt(t);return r.buffer}(t)}!function(t){if(cn=t,({malloc:an,free:fn,memory:un}=cn),"function"!=typeof an||"function"!=typeof fn||!un)throw cn=an=fn=un=null,new r("Invalid WASM module")}((await WebAssembly.instantiate(e)).instance.exports)}(t,n),dn=!0}catch(t){throw function(t){ln=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,"+function(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$1[s>>18&63]+e$1[s>>12&63]+e$1[s>>6&63]+e$1[63&s];}const o=s-r;if(1===o){const s=t[r]<<16;n+=e$1[s>>18&63]+e$1[s>>12&63]+"==";}else if(2===o){const s=t[r]<<16|t[r+1]<<8;n+=e$1[s>>18&63]+e$1[s>>12&63]+e$1[s>>6&63]+"=";}return n}(s)}});
448
+ 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$1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n$1=t=>t({workerURI:t=>{const n="text/javascript";let s='!function(t){"function"==typeof define&&define.amd?define(t):t()}(function(){"use strict";const{Array:t,Object:n,Number:e,Math:s,Error:r,Uint8Array:o,Uint16Array:c,Uint32Array:i,Int32Array:a,Map:f,DataView:u,Promise:l,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 n=t;for(let t=0;t<8;t++)n=1&n?n>>>1^3988292384:n>>>1;C[0][t]=n}for(let t=0;t<256;t++)for(let n=1;n<8;n++){const e=C[n-1][t];C[n][t]=e>>>8^C[0][255&e]}const[I,A,x,M,P,B,D,F]=C;class R{constructor(t){this.o=t||-1}append(t){let n=0|this.o;const e=0|t.length;let s=0;if(e>=8&&t.buffer){const r=new u(t.buffer,t.byteOffset,e),o=e-8;for(;s<=o;s+=8){const t=n^r.getInt32(s,!0),e=r.getInt32(s+4,!0);n=F[255&t]^D[t>>>8&255]^B[t>>>16&255]^P[t>>>24&255]^M[255&e]^x[e>>>8&255]^A[e>>>16&255]^I[e>>>24&255]}}for(;s<e;s++)n=n>>>8^I[255&(n^t[s])];this.o=n}get(){return~this.o}}class U extends d{constructor(){let t;const n=new R;super({transform(t,e){n.append(t),e.enqueue(t)},flush(){const e=new o(4);new u(e.buffer).setUint32(0,n.get()),t.value=e}}),t=this}}function W(t,n){const e=new o(t.length+n.length);return e.set(t),e.set(n,t.length),e}function _(t){return new u(t.buffer,t.byteOffset,t.byteLength)}const T={concat(t,n){if(0===t.length||0===n.length)return t.concat(n);const e=t[t.length-1],s=T.l(e);return 32===s?t.concat(n):T.h(n,s,0|e,t.slice(0,t.length-1))},bitLength(t){const n=t.length;if(0===n)return 0;const e=t[n-1];return 32*(n-1)+T.l(e)},m(t,n){if(32*t.length<n)return t;const e=(t=t.slice(0,s.ceil(n/32))).length;return n&=31,e>0&&n&&(t[e-1]=T.S(n,t[e-1]&2147483648>>n-1,1)),t},S:(t,n,e)=>32===t?n:(e?0|n:n<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,n,e,s){for(void 0===s&&(s=[]);n>=32;n-=32)s.push(e),e=0;if(0===n)return s.concat(t);for(let r=0;r<t.length;r++)s.push(e|t[r]>>>n),e=t[r]<<32-n;const r=t.length?t[t.length-1]:0,o=T.l(r);return s.push(T.S(n+o&31,n+o>32?e:s.pop(),1)),s}},V={bytes:{v(t){const n=T.bitLength(t)/8,e=new o(n);let s;for(let r=0;r<n;r++)3&r||(s=t[r/4]),e[r]=s>>>24,s<<=8;return e},C(t){const n=[];let e,s=0;for(e=0;e<t.length;e++)s=s<<8|t[e],3&~e||(n.push(s),s=0);return 3&e&&n.push(T.S(8*(3&e),s)),n}}},K=class{constructor(t){const n=this;n.blockSize=512,n.I=[1732584193,4023233417,2562383102,271733878,3285377520],n.A=[1518500249,1859775393,2400959708,3395469782],t?(n.M=t.M.slice(0),n.P=t.P.slice(0),n.B=t.B):n.reset()}reset(){const t=this;return t.M=t.I.slice(0),t.P=[],t.B=0,t}update(t){const n=this;"string"==typeof t&&(t=V.D.C(t));const e=n.P=T.concat(n.P,t),s=n.B,o=n.B=s+T.bitLength(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new i(e);let a=0;for(let t=n.blockSize+s-(n.blockSize+s&n.blockSize-1);t<=o;t+=n.blockSize)n.F(c.subarray(16*a,16*(a+1))),a+=1;return e.splice(0,16*a),n}R(){const t=this;let n=t.P;const e=t.M;n=T.concat(n,[T.S(1,1)]);for(let t=n.length+2;15&t;t++)n.push(0);for(n.push(s.floor(t.B/4294967296)),n.push(0|t.B);n.length;)t.F(n.splice(0,16));return t.reset(),e}U(t,n,e,s){return t<=19?n&e|~n&s:t<=39?n^e^s:t<=59?n&e|n&s|e&s:t<=79?n^e^s:void 0}W(t,n){return n<<t|n>>>32-t}F(n){const e=this,r=e.M,o=t(80);for(let t=0;t<16;t++)o[t]=n[t];let c=r[0],i=r[1],a=r[2],f=r[3],u=r[4];for(let t=0;t<=79;t++){t>=16&&(o[t]=e.W(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const n=e.W(5,c)+e.U(t,i,a,f)+u+o[t]+e.A[s.floor(t/20)]|0;u=f,f=a,a=e.W(30,i),i=c,c=n}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]+u|0}},E={importKey:t=>new E._(V.bytes.C(t)),T(t,n,e,s){if(e=e||1e4,s<0||e<0)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let c,i,a,f,l;const w=new ArrayBuffer(o),h=new u(w);let p=0;const d=T;for(n=V.bytes.C(n),l=1;p<(o||1);l++){for(c=i=t.encrypt(d.concat(n,[l])),a=1;a<e;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 n=this,e=n.V=K,s=[[],[]];n.K=[new e,new e];const r=n.K[0].blockSize/32;t.length>r&&(t=(new e).update(t).R());for(let n=0;n<r;n++)s[0][n]=909522486^t[n],s[1][n]=1549556828^t[n];n.K[0].update(s[0]),n.K[1].update(s[1]),n.L=new e(n.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,n=t.L.R(),e=new t.V(t.K[1]).update(n).R();return t.reset(),e}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="zipjs-abort-check-password";function H(t){if(L)return h.getRandomValues(t);throw new r("Crypto API not supported")}const N=16,q={name:"PBKDF2"},G=n.assign({hash:{name:"HMAC"}},q),J=n.assign({iterations:1e3,hash:{name:"SHA-1"}},q),Q=["deriveBits"],X=[8,12,16],Y=[16,24,32],Z=10,$=[0,0,0,0],tt=typeof h!=b,nt=tt&&h.subtle,et=tt&&typeof nt!=b,st=V.bytes,rt=class{constructor(t){const n=this;n.j=[[[],[],[],[],[]],[[],[],[],[],[]]],n.j[0][0][0]||n.H();const e=n.j[0][4],s=n.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(n.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=e[t>>>24]<<24^e[t>>16&255]<<16^e[t>>8&255]<<8^e[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 n=i[3&t?c:c-4];a[t]=c<=4||t<4?n:s[0][e[n>>>24]]^s[1][e[n>>16&255]]^s[2][e[n>>8&255]]^s[3][e[255&n]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}H(){const t=this.j[0],n=this.j[1],e=t[4],s=n[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 u=c=0;!e[u];u^=i||1,c=o[c]||1){let o=c^c<<1^c<<2^c<<3^c<<4;o=o>>8^255&o^99,e[u]=o,s[o]=u,f=r[a=r[i=r[u]]];let l=16843009*f^65537*a^257*i^16843008*u,w=257*r[o]^16843008*o;for(let e=0;e<4;e++)t[e][u]=w=w<<24^w>>>8,n[e][o]=l=l<<24^l>>>8}for(let e=0;e<5;e++)t[e]=t[e].slice(0),n[e]=n[e].slice(0)}N(t,n){if(4!==t.length)throw new r("invalid aes block size");const e=this.A[n],s=e.length/4-2,o=[0,0,0,0],c=this.j[n],i=c[0],a=c[1],f=c[2],u=c[3],l=c[4];let w,h,p,d=t[0]^e[0],y=t[n?3:1]^e[1],m=t[2]^e[2],S=t[n?1:3]^e[3],g=4;for(let t=0;t<s;t++)w=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^u[255&S]^e[g],h=i[y>>>24]^a[m>>16&255]^f[S>>8&255]^u[255&d]^e[g+1],p=i[m>>>24]^a[S>>16&255]^f[d>>8&255]^u[255&y]^e[g+2],S=i[S>>>24]^a[d>>16&255]^f[y>>8&255]^u[255&m]^e[g+3],g+=4,d=w,y=h,m=p;for(let t=0;t<4;t++)o[n?3&-t:t]=l[d>>>24]<<24^l[y>>16&255]<<16^l[m>>8&255]<<8^l[255&S]^e[g++],w=d,d=y,y=m,m=S,S=w;return o}},ot=class{constructor(t,n){this.G=t,this.J=n,this.X=n}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 n=t>>16&255,e=t>>8&255,s=255&t;255===n?(n=0,255===e?(e=0,255===s?s=0:++s):++e):++n,t=0,t+=n<<16,t+=e<<8,t+=s}return t}$(t){0===(t[0]=this.Z(t[0]))&&(t[1]=this.Z(t[1]))}Y(t,n,e){let s;if(!(s=n.length))return[];const r=T.bitLength(n);for(let r=0;r<s;r+=4){this.$(e);const s=t.encrypt(e);n[r]^=s[0],n[r+1]^=s[1],n[r+2]^=s[2],n[r+3]^=s[3]}return T.m(n,r)}},ct=E._;let it=tt&&et&&typeof nt.importKey==k,at=tt&&et&&typeof nt.deriveBits==k;class ft extends d{constructor({password:t,rawPassword:n,encryptionStrength:e,checkPasswordOnly:s,checkAuthenticationCode:c=!0}){super({start(){lt(this,t,n,e)},async transform(t,n){const e=this,{password:c,strength:i,nt:a,ready:f}=e;c?(await async function(t,n,e,s){const o=await ht(t,n,e,dt(s,0,X[n])),c=dt(s,X[n]);if(o[0]!=c[0]||o[1]!=c[1])throw new r(O)}(e,i,c,dt(t,0,X[i]+2)),t=dt(t,X[i]+2),s?n.error(new r(j)):a()):await f;const u=new o(t.length-Z-(t.length-Z)%N);n.enqueue(wt(e,t,u,0,Z,!0))},async flush(t){const{et:n,st:e,ot:s,ready:o}=this;if(e&&n){await o;const i=dt(s,0,s.length-Z),a=dt(s,s.length-Z);let f=z;if(i.length){const t=mt(st,i);e.update(t);const s=n.update(t);f=yt(st,s)}const u=dt(yt(st,e.digest()),0,Z);let l=s.length<Z?1:0;for(let t=0;t<Z;t++)l|=u[t]^a[t];if(l&&c)throw new r("Invalid authentication code");t.enqueue(f)}}})}}class ut extends d{constructor({password:t,rawPassword:n,encryptionStrength:e}){super({start(){lt(this,t,n,e)},async transform(t,n){const e=this,{password:s,strength:r,nt:c,ready:i}=e;let a=z;s?(a=await async function(t,n,e){const s=H(new o(X[n]));return W(s,await ht(t,n,e,s))}(e,r,s),c()):await i;const f=new o(a.length+t.length-t.length%N);f.set(a,0),n.enqueue(wt(e,t,f,a.length,0))},async flush(t){const{et:n,st:e,ot:s,ready:r}=this;if(e&&n){await r;let o=z;if(s.length){const t=n.update(mt(st,s));e.update(t),o=yt(st,t)}const c=yt(st,e.digest()).slice(0,Z);t.enqueue(W(o,c))}}})}}function lt(t,e,s,r){n.assign(t,{ready:new l(n=>t.nt=n),password:pt(e,s),strength:r-1,ot:z})}function wt(t,n,e,s,r,c){const{et:i,st:a,ot:f}=t;f.length&&(n=W(f,n));const u=n.length-r;let l;for(e=function(t,n){if(n&&n>t.length){const e=t;(t=new o(n)).set(e,0)}return t}(e,s+(u-u%N)),l=0;l<=u-N;l+=N){const t=mt(st,dt(n,l,l+N));c&&a.update(t);const r=i.update(t);c||a.update(r),e.set(yt(st,r),l+s)}return t.ot=dt(n,l),e}async function ht(e,s,r,c){e.password=null;const i=await async function(t,n,e,s,r){if(!it)return E.importKey(n);try{return await nt.importKey("raw",n,e,!1,r)}catch{return it=!1,E.importKey(n)}}(0,r,G,0,Q),a=await async function(t,n,e){if(!at)return E.T(n,t.salt,J.iterations,e);try{return await nt.deriveBits(t,n,e)}catch{return at=!1,E.T(n,t.salt,J.iterations,e)}}(n.assign({salt:c},J),i,8*(2*Y[s]+2)),f=new o(a),u=mt(st,dt(f,0,Y[s])),l=mt(st,dt(f,Y[s],2*Y[s])),w=dt(f,2*Y[s]);return n.assign(e,{keys:{key:u,ct:l,passwordVerification:w},et:new ot(new rt(u),t.from($)),st:new ct(l)}),w}function pt(t,n){return n===v?function(t){if(typeof w==b){t=unescape(encodeURIComponent(t));const n=new o(t.length);for(let e=0;e<n.length;e++)n[e]=t.charCodeAt(e);return n}return(new w).encode(t)}(t):n}function dt(t,n,e){return t.subarray(n,e)}function yt(t,n){return t.v(n)}function mt(t,n){return t.C(n)}class St extends d{constructor({password:t,rawPassword:n,passwordVerification:e,checkPasswordOnly:s}){super({start(){vt(this,t,n,e)},transform(t,n){const e=this;if(e.password||e.rawPassword){const n=bt(e,t.subarray(0,12));if(e.password=e.rawPassword=null,0!=(n[11]^e.passwordVerification))throw new r(O);t=t.subarray(12)}s?n.error(new r(j)):n.enqueue(bt(e,t))}})}}class gt extends d{constructor({password:t,rawPassword:n,passwordVerification:e}){super({start(){vt(this,t,n,e)},transform(t,n){const e=this;let s,r;if(e.password||e.rawPassword){e.password=e.rawPassword=null;const n=H(new o(12));n[11]=e.passwordVerification,s=new o(t.length+n.length),s.set(kt(e,n),0),r=12}else s=new o(t.length),r=0;s.set(kt(e,t),r),n.enqueue(s)}})}}function vt(t,e,s,r){n.assign(t,{password:e,rawPassword:s,passwordVerification:r}),function(t,e,s){const r=[305419896,591751049,878082192];if(n.assign(t,{keys:r,it:new R(r[0]),ft:new R(r[2])}),s)for(let n=0;n<s.length;n++)zt(t,s[n]);else for(let n=0;n<e.length;n++)zt(t,e.charCodeAt(n))}(t,e,s)}function bt(t,n){const e=new o(n.length);for(let s=0;s<n.length;s++)e[s]=Ct(t)^n[s],zt(t,e[s]);return e}function kt(t,n){const e=new o(n.length);for(let s=0;s<n.length;s++)e[s]=Ct(t)^n[s],zt(t,n[s]);return e}function zt(t,n){let[,e]=t.keys;t.it.append([n]);const r=~t.it.get();e=At(s.imul(At(e+It(r)),134775813)+1),t.ft.append([e>>>24]);const o=~t.ft.get();t.keys=[r,e,o]}function Ct(t){const n=2|t.keys[2];return It(s.imul(n,1^n)>>>8)}function It(t){return 255&t}function At(t){return 4294967295&t}function xt(t){if(t instanceof y)return t;const n=t.getReader();return new y({async pull(t){const{value:e,done:s}=await n.read();s?t.close():t.enqueue(e)},cancel:t=>n.cancel(t)})}const Mt=new f;function Pt(t){return Mt.get(t)}const Bt="Invalid uncompressed size",Dt="deflate-raw",Ft="gzip",Rt=[31,139,8];class Ut extends d{constructor(t,{chunkSize:n,CompressionStreamFallback:e,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:c,zipCrypto:i,computeCrc32:a,level:f,deflate64:l,format:w,compressionMethod:h,inputSize:p}=t,d=this;let y,m,S,g=super.readable;const v=w&&Pt(w),b=a&&r&&!l&&!v&&(!o||i)&&Boolean(c&&s);if(o&&!i||!a||b||(y=new U,g=Lt(g,y)),r)if(v)g=Ot(g,Kt(v.CompressionStream,w,{level:f,chunkSize:n,compressionMethod:h,uncompressedSize:p}));else if(b)S=new Wt,g=Ot(g,new s(Ft)),g=Lt(g,S);else try{g=Et(g,c,{level:f,chunkSize:n},s,e)}catch(t){let n;try{n=new s(Ft)}catch{throw t}g=Ot(g,n),g=Lt(g,new Wt)}o&&(i?g=Lt(g,new gt(t)):(m=new ut(t),g=Lt(g,m))),Vt(d,g,()=>{o&&!i||!a||(d.crc32=b?S.crc32:new u(y.value.buffer).getUint32(0))})}}class Wt extends d{constructor(){let t,n=10,e=new o(0);super({transform(t,r){if(n){const e=s.min(n,t.length);if(n-=e,!(t=t.subarray(e)).length)return}const o=e.length+t.length;if(o<=8)return void(e=W(e,t));const c=o-8,i=s.min(c,e.length);r.enqueue(W(e.subarray(0,i),t.subarray(0,c-i))),e=W(e.subarray(i),t.subarray(c-i))},flush(){const n=_(e);t.crc32=n.getUint32(0,!0),t.uncompressedSize=n.getUint32(4,!0)}}),t=this}}class _t extends d{constructor(t,{chunkSize:n,DecompressionStreamFallback:e,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=Lt(C,new St(t)):(z=new ft(t),C=Lt(C,z))),w){const t=m&&Pt(m);if(t)C=Ot(C,Kt(t.DecompressionStream,m,{chunkSize:n,compressionMethod:S,rawBitFlag:g,uncompressedSize:b}));else try{C=Et(C,h,{chunkSize:n,deflate64:p},s,e)}catch(t){if(p||b===v)throw t;let n;try{n=new s(Ft)}catch{throw t}C=function(t,n,e){const s=new R;let c,i,a,f=0,u=!1;const w=new l((t,n)=>{i=t,a=n});w.catch(()=>{}),e||i();const h=new d({start(t){const n=new o(10);n.set(Rt),t.enqueue(n)},transform(t,n){n.enqueue(t)},async flush(t){u=!0,y();try{await w}finally{m()}const n=new o(8),r=_(n);r.setUint32(0,s.get(),!0),r.setUint32(4,e,!0),t.enqueue(n)},cancel(t){a(t)}}),p=new d({transform(t,n){s.append(t),f+=t.length,f>=e?i():u&&y(),n.enqueue(t)},cancel(t){a(t)}});return t=Lt(t,h),Lt(t=Ot(t,n),p);function y(){m(),c=setTimeout(()=>a(new r(Bt)),5e3)}function m(){clearTimeout(c)}}(C,n,b)}C=function(t){const n=t.getReader();return new y({async pull(t){let e;try{e=await n.read()}catch(t){if(t&&t.message)throw t;const n=new r("Invalid compressed data");throw n.cause=t,n}const{value:s,done:o}=e;o?t.close():t.enqueue(s)},cancel:t=>n.cancel(t)})}(C)}a&&(k=new U,C=Lt(C,k)),Vt(this,C,()=>{if(a){const t=new u(k.value.buffer);if(f!=t.getUint32(0,!1))throw new r("Invalid CRC32")}})}}const Tt=new f;function Vt(t,e,s){e=Lt(e,new d({flush:s})),n.defineProperty(t,"readable",{get:()=>e})}function Kt(t,n,e){if(!t)throw new r("Compression method not supported");return new t(n,e)}function Et(t,n,e,s,r){const o=n&&s?s:r||s,c=e.deflate64?"deflate64-raw":Dt;let i;try{i=new o(c,e)}catch(t){if(!n||!r||o==r)throw t;i=new r(c,e)}return Ot(t,i)}function Lt(t,n){return xt(t).pipeThrough(n)}function Ot(t,n){const e=n.writable.getWriter(),s=t.getReader();return async function(){try{for(;;){await e.ready;const t=await s.read();if(t.done){await e.close();break}await e.write(t.value)}}catch(t){await async function(t,n){try{await t.abort(n)}catch{}}(e,t),await async function(t,n){try{await t.cancel(n)}catch{}}(s,t)}}(),n.readable}const jt="data",Ht="close",Nt="deflate";class qt extends d{constructor(t,e){super({});const s=this,{codecType:o}=t;let c;o.startsWith(Nt)?c=Ut:o.startsWith("inflate")&&(c=_t),s.outputSize=0;let i=0;const a=new c(t,e),f=super.readable,u=new d({transform(t,n){t&&t.length&&(i+=t.length,n.enqueue(t))},flush(){n.assign(s,{inputSize:i})}}),l=new d({transform(n,e){if(n&&n.length&&(e.enqueue(n),s.outputSize+=n.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r(Bt)},flush(){const{crc32:t}=a;n.assign(s,{crc32:t,inputSize:i})}});n.defineProperty(s,"readable",{get:()=>f.pipeThrough(u).pipeThrough(a).pipeThrough(l)})}}class Gt extends d{constructor(t){const s=[];let r=0,c=0;function i(){const n=new o(t);let e=0;for(;e<t;){const r=s[0],o=t-e;r.length<=o?(n.set(r,e),e+=r.length,s.shift()):(n.set(r.subarray(0,o),e),s[0]=r.subarray(o),e+=o)}return r-=t,n}(!e.isFinite(t)||t<1)&&(t=65536),super({transform(n,e){for(s.push(n),r+=n.length;r>t;)c+=t,e.enqueue(i())},flush(t){r&&(c+=r,t.enqueue(function(t,n){const e=new o(n);let s=0;for(const n of t)e.set(n,s),s+=n.length;return e}(s,r)))}}),n.defineProperty(this,"outputSize",{get:()=>c})}}let Jt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Jt=navigator.hardwareConcurrency)}catch{}const Qt=new f,Xt=new f;let Yt,Zt=0;async function $t(t){let n,o,c;try{const{options:i,config:a}=t;if(i.format)try{await async function(t,n){!Mt.has(t)&&n&&function(t,n){const{CompressionStream:e,DecompressionStream:s}=n;if(typeof e!=k&&typeof s!=k)throw new r("Invalid codec module");Mt.set(t,{CompressionStream:e,DecompressionStream:s})}(t,await(import(n)))}(i.format,i.codecURI)}catch(t){throw t.codecImportFailed=!0,t}if(a.CompressionStream=self.CompressionStream,a.DecompressionStream=self.DecompressionStream,i.compressed&&!i.format)if(i.useCompressionStream){if(!function(t,n){if(!t)return!1;let e=Tt.get(t);e||(e=new f,Tt.set(t,e));let s=e.get(n);if(s===v){try{new t(n),s=!0}catch{s=!1}e.set(n,s)}return s}(i.codecType.startsWith(Nt)?a.CompressionStream:a.DecompressionStream,Dt))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{i.useCompressionStream=!0}!a.CompressionStreamFallback&&a.CompressionStreamZlib&&(a.CompressionStreamFallback=a.CompressionStreamZlib),!a.DecompressionStreamFallback&&a.DecompressionStreamZlib&&(a.DecompressionStreamFallback=a.DecompressionStreamZlib);const u={highWaterMark:1},w=t.readable?xt(t.readable):new y({async pull(t){const n=new l(t=>Qt.set(Zt,t));tn({type:"pull",messageId:Zt}),Zt=(Zt+1)%e.MAX_SAFE_INTEGER;const{value:s,done:r}=await n;t.enqueue(s),r&&t.close()}},u);c=t.writable?function(t){if(t instanceof m)return t;const n=t.getWriter();return new m({write:t=>n.write(t),close:()=>n.close(),abort:t=>n.abort(t)})}(t.writable):new m({async write(t){let n;const s=new l(t=>n=t);Xt.set(Zt,n),tn({type:jt,value:t,messageId:Zt}),Zt=(Zt+1)%e.MAX_SAFE_INTEGER,await s}},u),n=new qt(i,a),o=new Gt(function(t){return r="string"==typeof(n=r=t.chunkSize)&&n.trim()?e(n):n,e.isInteger(r)&&r>=1?s.max(r,64):65536;var n,r}(a)),Yt=new AbortController;const{signal:h}=Yt;await w.pipeThrough(n).pipeThrough(o).pipeTo(c,{signal:h,preventClose:!0,preventAbort:!0}),await c.getWriter().close();const{crc32:p,inputSize:d,outputSize:S}=n;tn({type:Ht,result:{crc32:p,inputSize:d,outputSize:S}})}catch(t){if(t.outputSize=o?o.outputSize:0,c&&!c.locked)try{await c.getWriter().close()}catch{}nn(t)}}function tn(t){const{value:n}=t;if(n)if(n.length)try{t.value=(e=n,e.byteOffset||e.byteLength!=e.buffer.byteLength?new o(e):e).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var e}function nn(t=new r("Unknown error")){const{message:n,stack:e,code:s,name:o,outputSize:c,cause:i,codecImportFailed:a}=t,f={message:n,stack:e,code:s,name:o,outputSize:c};i&&(f.cause={name:i.name,message:i.message}),a&&(f.codecImportFailed=!0),p({error:f})}addEventListener("message",({data:t})=>{const{type:n,messageId:e,value:s,done:r}=t;try{if("start"==n&&$t(t),n==jt){const t=Qt.get(e);Qt.delete(e),t({value:s||new o,done:r})}if("ack"==n){const t=Xt.get(e);Xt.delete(e),t()}n==Ht&&Yt.abort()}catch(t){nn(t)}}),p({type:"ready"});const en="deflate",sn="deflate-raw",rn="deflate64-raw",on="gzip";let cn,an,fn,un,ln;function wn(t,n,e={}){if(!cn){const t=new r("WASM module not loaded");throw t.cause=ln,t}const c="number"==typeof e.level?e.level:-1,i="number"==typeof e.outBuffer?e.outBuffer:65536,a="number"==typeof e.inBufferSize?e.inBufferSize:65536;return new d({start(){try{let e;if(this.ut=an(i),this.in=an(a),this.inBufferSize=a,!this.ut||!this.in)throw new r("allocation failed");if(this.lt=new o(i),t?(this.wt=cn.deflate_process,this.ht=cn.deflate_last_consumed,this.yt=cn.deflate_end,this.St=cn.deflate_new(),e=n===on?cn.deflate_init_gzip(this.St,c):n===sn?cn.deflate_init_raw(this.St,c):cn.deflate_init(this.St,c)):n===rn?(this.wt=cn.inflate9_process,this.ht=cn.inflate9_last_consumed,this.yt=cn.inflate9_end,this.St=cn.inflate9_new(),e=cn.inflate9_init_raw(this.St)):(this.wt=cn.inflate_process,this.ht=cn.inflate_last_consumed,this.yt=cn.inflate_end,this.St=cn.inflate_new(),e=n===sn?cn.inflate_init_raw(this.St):n===on?cn.inflate_init_gzip(this.St):cn.inflate_init(this.St)),0!==e)throw new r("init failed:"+e)}catch(t){throw f(this),t}},transform(t,n){try{const e=t,c=new o(un.buffer),a=this.wt,f=this.ht,u=this.ut,l=this.lt;let w=0;for(;w<e.length;){const t=s.min(e.length-w,32768);if((!this.in||this.inBufferSize<t)&&(this.in&&fn&&(fn(this.in),this.in=0),this.in=an(t),this.inBufferSize=t,!this.in))throw new r("allocation failed");c.set(e.subarray(w,w+t),this.in);const o=a(this.St,this.in,t,u,i,0),h=o>>24&255,p=128&h?h-256:h;if(p<0)throw new r("process error:"+p);const d=16777215&o;d&&(l.set(c.subarray(u,u+d),0),n.enqueue(l.slice(0,d)));const y=f(this.St);if(0===y&&0===d)break;w+=y}}catch(t){f(this),n.error(t)}},flush(t){try{const n=new o(un.buffer),e=this.wt,s=this.ut,c=this.lt;for(;;){const o=e(this.St,0,0,s,i,4),a=o>>24&255,f=128&a?a-256:a;if(f<0)throw new r("process error:"+f);const u=16777215&o;if(u&&(c.set(n.subarray(s,s+u),0),t.enqueue(c.slice(0,u))),1===a||0===u)break}}catch(n){t.error(n)}finally{const n=f(this);0!==n&&t.error(new r("end error:"+n))}},cancel(){f(this)}});function f(t){let n=0;return t.St&&t.yt&&(n=t.yt(t.St)),t.St=0,t.in&&fn&&fn(t.in),t.in=0,t.ut&&fn&&fn(t.ut),t.ut=0,n}}class hn{constructor(t=en,n){return wn(!0,t,n)}}class pn{constructor(t=en,n){return wn(!1,t,n)}}hn.gt=!0,pn.gt=!0,hn.vt=[en,sn,on],pn.vt=[en,sn,on,rn];let dn=!1;!function(t={}){const{init:n}=t,e=t.CompressionStreamFallback||t.CompressionStreamZlib,s=t.DecompressionStreamFallback||t.DecompressionStreamZlib;self.initModule=async t=>{n&&await n(t),e&&(t.CompressionStreamFallback=e),s&&(t.DecompressionStreamFallback=s)}}({CompressionStreamFallback:hn,DecompressionStreamFallback:pn,init:t=>async function(t,{baseURI:n}){if(!dn)try{await async function(t,n){let e,s;try{try{s=new URL(t,n)}catch{}const r=await fetch(s);e=await r.arrayBuffer()}catch(n){if(!t.startsWith("data:application/wasm;base64,"))throw n;e=function(t){const n=t.split(",")[1],e=atob(n),s=e.length,r=new o(s);for(let t=0;t<s;++t)r[t]=e.charCodeAt(t);return r.buffer}(t)}!function(t){if(cn=t,({malloc:an,free:fn,memory:un}=cn),"function"!=typeof an||"function"!=typeof fn||!un)throw cn=an=fn=un=null,new r("Invalid WASM module")}((await WebAssembly.instantiate(e)).instance.exports)}(t,n),dn=!0}catch(t){throw function(t){ln=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,"+function(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$1[s>>18&63]+e$1[s>>12&63]+e$1[s>>6&63]+e$1[63&s];}const o=s-r;if(1===o){const s=t[r]<<16;n+=e$1[s>>18&63]+e$1[s>>12&63]+"==";}else if(2===o){const s=t[r]<<16|t[r+1]<<8;n+=e$1[s>>18&63]+e$1[s>>12&63]+e$1[s>>6&63]+"=";}return n}(s)}});
426
449
 
427
450
  /*
428
451
  Copyright (c) 2026 Gildas Lormeau. All rights reserved.
@@ -2607,6 +2630,7 @@
2607
2630
  constructor(chunkSize) {
2608
2631
  const pendingChunks = [];
2609
2632
  let pendingLength = 0;
2633
+ let outputSize = 0;
2610
2634
  if (!Number.isFinite(chunkSize) || chunkSize < 1) {
2611
2635
  chunkSize = DEFAULT_CHUNK_SIZE;
2612
2636
  }
@@ -2615,15 +2639,20 @@
2615
2639
  pendingChunks.push(chunk);
2616
2640
  pendingLength += chunk.length;
2617
2641
  while (pendingLength > chunkSize) {
2642
+ outputSize += chunkSize;
2618
2643
  controller.enqueue(shiftChunk());
2619
2644
  }
2620
2645
  },
2621
2646
  flush(controller) {
2622
2647
  if (pendingLength) {
2648
+ outputSize += pendingLength;
2623
2649
  controller.enqueue(concatChunks(pendingChunks, pendingLength));
2624
2650
  }
2625
2651
  }
2626
2652
  });
2653
+ Object.defineProperty(this, "outputSize", {
2654
+ get: () => outputSize
2655
+ });
2627
2656
 
2628
2657
  function shiftChunk() {
2629
2658
  const result = new Uint8Array(chunkSize);
@@ -2828,7 +2857,7 @@
2828
2857
  }
2829
2858
 
2830
2859
  async function runWorker$1({ options, readable, writable, onTaskFinished }, config) {
2831
- let codecStream;
2860
+ let codecStream, chunkStream;
2832
2861
  try {
2833
2862
  if (options.compressed && !options.format) {
2834
2863
  const deflate = options.codecType.startsWith(CODEC_DEFLATE);
@@ -2851,9 +2880,10 @@
2851
2880
  }
2852
2881
  }
2853
2882
  codecStream = new CodecStream(options, config);
2883
+ chunkStream = new ChunkStream(getChunkSize(config));
2854
2884
  await readable
2855
2885
  .pipeThrough(codecStream)
2856
- .pipeThrough(new ChunkStream(getChunkSize(config)))
2886
+ .pipeThrough(chunkStream)
2857
2887
  .pipeTo(writable, { preventClose: true, preventAbort: true });
2858
2888
  const {
2859
2889
  crc32,
@@ -2867,7 +2897,7 @@
2867
2897
  };
2868
2898
  } catch (error) {
2869
2899
  if (codecStream) {
2870
- error.outputSize = codecStream.outputSize;
2900
+ error.outputSize = chunkStream ? chunkStream.outputSize : 0;
2871
2901
  }
2872
2902
  throw error;
2873
2903
  } finally {
@@ -2976,11 +3006,17 @@
2976
3006
  let resolveResult, rejectResult;
2977
3007
  const result = new Promise((resolve, reject) => {
2978
3008
  resolveResult = resolve;
2979
- rejectResult = reject;
3009
+ rejectResult = error => {
3010
+ if (error && error.outputSize === UNDEFINED_VALUE) {
3011
+ error.outputSize = workerData.outputSize;
3012
+ }
3013
+ reject(error);
3014
+ };
2980
3015
  });
2981
3016
  Object.assign(workerData, {
2982
3017
  reader: null,
2983
3018
  writer: null,
3019
+ outputSize: 0,
2984
3020
  resolveResult,
2985
3021
  rejectResult,
2986
3022
  result
@@ -3264,8 +3300,10 @@
3264
3300
  }
3265
3301
  }
3266
3302
  if (type == MESSAGE_DATA) {
3303
+ const chunk = new Uint8Array(value);
3267
3304
  await writer.ready;
3268
- await writer.write(new Uint8Array(value));
3305
+ await writer.write(chunk);
3306
+ workerData.outputSize += chunk.length;
3269
3307
  if (!stale()) {
3270
3308
  sendMessage({ type: MESSAGE_ACK_DATA, messageId }, workerData);
3271
3309
  }
@@ -3573,10 +3611,13 @@
3573
3611
 
3574
3612
 
3575
3613
  const ERR_HTTP_STATUS = "HTTP error ";
3614
+ const MIN_SUCCESS_HTTP_STATUS = 200;
3615
+ const MAX_SUCCESS_HTTP_STATUS = 299;
3576
3616
  const ERR_HTTP_RANGE = "HTTP Range not supported";
3577
3617
  const ERR_HTTP_RESOURCE_CHANGED = "HTTP resource changed";
3578
3618
  const ERR_ITERATOR_COMPLETED_TOO_SOON = "Writer iterator completed too soon";
3579
3619
  const ERR_WRITER_NOT_INITIALIZED = "Writer not initialized";
3620
+ const ERR_WRITER_SIZE_NOT_WRITABLE = "Invalid writer (size must be writable)";
3580
3621
 
3581
3622
  const CONTENT_TYPE_TEXT_PLAIN = "text/plain";
3582
3623
  const HTTP_HEADER_CONTENT_LENGTH = "Content-Length";
@@ -3768,6 +3809,7 @@
3768
3809
  const reader = this;
3769
3810
  const { sourceBlob, size } = reader;
3770
3811
  const { offset = 0, size: readSize = size - offset } = options || {};
3812
+ // deno-lint-ignore valid-typeof
3771
3813
  if (typeof sourceBlob.stream == FUNCTION_TYPE) {
3772
3814
  if (!offset && readSize >= size) {
3773
3815
  return toCompatibleReadable(sourceBlob.stream());
@@ -4154,7 +4196,7 @@
4154
4196
 
4155
4197
  async function sendFetchRequest(method, { fetch: fetchFunction = fetch, options, url }, headers) {
4156
4198
  const response = await fetchFunction(url, Object.assign({}, options, { method, headers }));
4157
- if (response.status < 400) {
4199
+ if (response.status >= MIN_SUCCESS_HTTP_STATUS && response.status <= MAX_SUCCESS_HTTP_STATUS) {
4158
4200
  return response;
4159
4201
  } else {
4160
4202
  throw response.status == 416 ? new Error(ERR_HTTP_RANGE) : new Error(ERR_HTTP_STATUS + (response.statusText || response.status));
@@ -4165,7 +4207,7 @@
4165
4207
  return new Promise((resolve, reject) => {
4166
4208
  const request = new XMLHttpRequest();
4167
4209
  request.addEventListener("load", () => {
4168
- if (request.status < 400) {
4210
+ if (request.status >= MIN_SUCCESS_HTTP_STATUS && request.status <= MAX_SUCCESS_HTTP_STATUS) {
4169
4211
  const headers = [];
4170
4212
  request.getAllResponseHeaders().trim().split(/[\r\n]+/).forEach(header => {
4171
4213
  const splitHeader = header.trim().split(/\s*:\s*/);
@@ -4469,8 +4511,10 @@
4469
4511
  writable: toCompatibleWritable(writer)
4470
4512
  };
4471
4513
  }
4472
- if (writer.size === UNDEFINED_VALUE) {
4473
- writer.size = 0;
4514
+ try {
4515
+ writer.size = writer.size === UNDEFINED_VALUE ? 0 : writer.size;
4516
+ } catch {
4517
+ throw new Error(ERR_WRITER_SIZE_NOT_WRITABLE);
4474
4518
  }
4475
4519
  return writer;
4476
4520
  }
@@ -4518,6 +4562,45 @@
4518
4562
  }
4519
4563
  }
4520
4564
 
4565
+ /*
4566
+ Copyright (c) 2026 Gildas Lormeau. All rights reserved.
4567
+
4568
+ Redistribution and use in source and binary forms, with or without
4569
+ modification, are permitted provided that the following conditions are met:
4570
+
4571
+ 1. Redistributions of source code must retain the above copyright notice,
4572
+ this list of conditions and the following disclaimer.
4573
+
4574
+ 2. Redistributions in binary form must reproduce the above copyright
4575
+ notice, this list of conditions and the following disclaimer in
4576
+ the documentation and/or other materials provided with the distribution.
4577
+
4578
+ 3. The names of the authors may not be used to endorse or promote products
4579
+ derived from this software without specific prior written permission.
4580
+
4581
+ THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
4582
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
4583
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
4584
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
4585
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4586
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
4587
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
4588
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
4589
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4590
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4591
+ */
4592
+
4593
+
4594
+ function addWarning(warnings, reason, filename) {
4595
+ if (!warnings.some(warning => warning.reason == reason)) {
4596
+ const warning = { reason };
4597
+ if (filename !== UNDEFINED_VALUE) {
4598
+ warning.filename = filename;
4599
+ }
4600
+ warnings.push(warning);
4601
+ }
4602
+ }
4603
+
4521
4604
  /*
4522
4605
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
4523
4606
 
@@ -4546,6 +4629,7 @@
4546
4629
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4547
4630
  */
4548
4631
 
4632
+
4549
4633
  const PROPERTY_NAME_FILENAME = "filename";
4550
4634
  const PROPERTY_NAME_RAW_FILENAME = "rawFilename";
4551
4635
  const PROPERTY_NAME_COMMENT = "comment";
@@ -4670,6 +4754,38 @@
4670
4754
 
4671
4755
  }
4672
4756
 
4757
+ const INTERPRETED_EXTRA_FIELD_TYPES = new Set([
4758
+ EXTRAFIELD_TYPE_ZIP64,
4759
+ EXTRAFIELD_TYPE_AES,
4760
+ EXTRAFIELD_TYPE_NTFS,
4761
+ EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP,
4762
+ EXTRAFIELD_TYPE_UNICODE_PATH,
4763
+ EXTRAFIELD_TYPE_UNICODE_COMMENT,
4764
+ EXTRAFIELD_TYPE_USDZ,
4765
+ EXTRAFIELD_TYPE_INFOZIP,
4766
+ EXTRAFIELD_TYPE_UNIX,
4767
+ EXTRAFIELD_TYPE_UNIX_TYPE1,
4768
+ EXTRAFIELD_TYPE_PKWARE_UNIX
4769
+ ]);
4770
+
4771
+ function getUserExtraField(extraField) {
4772
+ if (extraField) {
4773
+ const userExtraField = new Map();
4774
+ extraField.forEach((field, type) => {
4775
+ if (!INTERPRETED_EXTRA_FIELD_TYPES.has(type)) {
4776
+ userExtraField.set(type, field.data);
4777
+ }
4778
+ });
4779
+ if (userExtraField.size) {
4780
+ return userExtraField;
4781
+ }
4782
+ }
4783
+ }
4784
+
4785
+ function getEncryptionOverhead(encrypted, zipCrypto, encryptionStrength) {
4786
+ return encrypted ? (zipCrypto ? 12 : 16 + encryptionStrength * 4) : 0;
4787
+ }
4788
+
4673
4789
  /*
4674
4790
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
4675
4791
 
@@ -4729,6 +4845,8 @@
4729
4845
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4730
4846
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4731
4847
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
4848
+ const WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = "multiple end of central directory records";
4849
+ const WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME = "mismatched local file header (filename)";
4732
4850
  const WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = "mismatched local file header (general purpose bit flag)";
4733
4851
  const WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = "mismatched local file header (compression method)";
4734
4852
  const WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = "mismatched local file header (crc32 or sizes)";
@@ -4799,7 +4917,7 @@
4799
4917
  }
4800
4918
  }
4801
4919
  if (rejectAmbiguousEndOfDirectory && endOfDirectoryReachingEndCount > 1) {
4802
- throwAmbiguousArchive("multiple end of central directory records");
4920
+ throwAmbiguousArchive(WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY);
4803
4921
  }
4804
4922
  const endOfDirectoryView = getDataView(endOfDirectoryInfo);
4805
4923
  let directoryDataLength = getUint32$1(endOfDirectoryView, 12);
@@ -5097,7 +5215,8 @@
5097
5215
  const writer = new TransformStream();
5098
5216
  const arrayBufferPromise = streamToBlob(writer.readable).then(blob => blob.arrayBuffer());
5099
5217
  arrayBufferPromise.catch(() => { });
5100
- await fileEntry.getData(writer, entry, zipReader.readRanges, options);
5218
+ await fileEntry.getData(writer, entry, zipReader.readRanges,
5219
+ Object.assign({}, options, { preventClose: false }));
5101
5220
  return arrayBufferPromise;
5102
5221
  };
5103
5222
  offset = endOffset;
@@ -5178,49 +5297,101 @@
5178
5297
  await reader.readable.cancel();
5179
5298
  }
5180
5299
  }
5300
+
5301
+ [SYMBOL_ASYNC_DISPOSE]() {
5302
+ return this.close();
5303
+ }
5181
5304
  }
5182
5305
 
5183
5306
  class ZipReaderStream {
5184
5307
 
5185
5308
  constructor(options = {}) {
5186
- const { readable, writable } = new TransformStream();
5187
- const gen = new ZipReader(readable, options).getEntriesGenerator();
5309
+ let sourceController;
5310
+ const { readable, writable } = new TransformStream({
5311
+ start(controller) {
5312
+ sourceController = controller;
5313
+ }
5314
+ });
5315
+ const zipReader = new ZipReader(readable, options);
5316
+ const gen = zipReader.getEntriesGenerator();
5317
+ const pendingEntries = new Set();
5188
5318
  this.readable = new ReadableStream({
5189
5319
  async pull(controller) {
5190
5320
  const { done, value } = await gen.next();
5191
5321
  if (done)
5192
5322
  return controller.close();
5193
- const entryReadable = (function () {
5194
- const { readable, writable } = new TransformStream();
5195
- if (value.getData) {
5196
- getData();
5197
- return readable;
5198
- }
5199
-
5200
- async function getData() {
5201
- try {
5202
- await value.getData(writable);
5203
- } catch (error) {
5204
- try {
5205
- await writable.abort(error);
5206
- } catch {
5207
- // ignored
5208
- }
5209
- }
5210
- }
5211
- })();
5323
+ const entryStream = createEntryStream(value, pendingEntries);
5212
5324
  const chunk = {
5213
5325
  ...value,
5214
- readable: entryReadable
5326
+ readable: entryStream.readable
5215
5327
  };
5216
5328
  delete chunk.getData;
5329
+ Object.defineProperties(chunk, {
5330
+ localDirectory: {
5331
+ get: () => value.localDirectory,
5332
+ enumerable: true
5333
+ },
5334
+ warnings: {
5335
+ get: () => value.warnings,
5336
+ enumerable: true
5337
+ }
5338
+ });
5217
5339
  controller.enqueue(chunk);
5340
+ },
5341
+ async cancel(reason) {
5342
+ const entryStreams = Array.from(pendingEntries);
5343
+ pendingEntries.clear();
5344
+ sourceController.error(reason);
5345
+ await Promise.allSettled(entryStreams.map(entryStream => entryStream.cancel(reason)));
5346
+ await Promise.allSettled([gen.return(), zipReader.close()]);
5218
5347
  }
5219
5348
  });
5220
5349
  this.writable = writable;
5221
5350
  }
5222
5351
  }
5223
5352
 
5353
+ function createEntryStream(entry, pendingEntries) {
5354
+ const { readable, writable } = new TransformStream();
5355
+ let dataReader;
5356
+ const entryStream = {
5357
+ cancel: async reason => {
5358
+ pendingEntries.delete(entryStream);
5359
+ await (dataReader ? dataReader.cancel(reason) : readable.cancel(reason));
5360
+ }
5361
+ };
5362
+ entryStream.readable = new ReadableStream({
5363
+ async pull(controller) {
5364
+ if (!dataReader) {
5365
+ dataReader = readable.getReader();
5366
+ pendingEntries.add(entryStream);
5367
+ getData();
5368
+ }
5369
+ const { done, value } = await dataReader.read();
5370
+ if (done) {
5371
+ controller.close();
5372
+ } else {
5373
+ controller.enqueue(value);
5374
+ }
5375
+ },
5376
+ cancel: reason => entryStream.cancel(reason)
5377
+ }, { highWaterMark: 0 });
5378
+ return entryStream;
5379
+
5380
+ async function getData() {
5381
+ try {
5382
+ await entry.getData(writable, { preventClose: false });
5383
+ } catch (error) {
5384
+ try {
5385
+ await writable.abort(error);
5386
+ } catch {
5387
+ // ignored
5388
+ }
5389
+ } finally {
5390
+ pendingEntries.delete(entryStream);
5391
+ }
5392
+ }
5393
+ }
5394
+
5224
5395
  async function isZipFile(reader, options = {}) {
5225
5396
  reader = new GenericReader(reader);
5226
5397
  await initStream(reader);
@@ -5280,7 +5451,9 @@
5280
5451
  const dataView = getDataView(dataArray);
5281
5452
  let password = getOptionValue$1(zipEntry, options, OPTION_PASSWORD);
5282
5453
  let rawPassword = getOptionValue$1(zipEntry, options, OPTION_RAW_PASSWORD);
5283
- const passThrough = getOptionValue$1(zipEntry, options, OPTION_PASS_THROUGH);
5454
+ const passThrough = checkPassThroughOption(getOptionValue$1(zipEntry, options, OPTION_PASS_THROUGH));
5455
+ const passThroughCompression = Boolean(passThrough);
5456
+ const passThroughEncryption = passThrough === true;
5284
5457
  checkPasswordOption(password, rawPassword);
5285
5458
  password = password && password.length && password;
5286
5459
  rawPassword = rawPassword && rawPassword.length && rawPassword;
@@ -5301,7 +5474,9 @@
5301
5474
  const checkLocalDirectoryOption = getOptionValue$1(zipEntry, options, OPTION_CHECK_LOCAL_DIRECTORY);
5302
5475
  const entryStrictness = getStrictness(options, zipEntry.options);
5303
5476
  const checkLocalDirectory = getCheckLocalDirectory(checkLocalDirectoryOption, entryStrictness);
5304
- const checkLocalFilename = getCheckLocalFilename(checkLocalDirectoryOption, entryStrictness);
5477
+ const checkLocalFilenameOption = getOptionValue$1(zipEntry, options, OPTION_CHECK_LOCAL_FILENAME);
5478
+ const checkLocalFilename = getCheckLocalFilename(
5479
+ checkLocalFilenameOption === UNDEFINED_VALUE ? checkLocalDirectoryOption : checkLocalFilenameOption, entryStrictness);
5305
5480
  let rawLocalFilename = EMPTY_UINT8_ARRAY;
5306
5481
  if (checkLocalFilename && (filenameLength || extraFieldLength)) {
5307
5482
  const trailingDataArray = await readUint8Array(reader, localHeaderOffset + HEADER_SIZE, filenameLength + extraFieldLength);
@@ -5332,16 +5507,17 @@
5332
5507
  if (gid !== UNDEFINED_VALUE && fileEntry.gid === UNDEFINED_VALUE) {
5333
5508
  fileEntry.gid = gid;
5334
5509
  }
5335
- const encrypted = zipEntry.encrypted && localDirectory.encrypted && !passThrough;
5510
+ const checkPasswordOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_PASSWORD_ONLY);
5511
+ const encrypted = zipEntry.encrypted && localDirectory.encrypted && (!passThroughEncryption || checkPasswordOnly);
5336
5512
  const zipCrypto = encrypted && !extraFieldAES;
5337
- if (!passThrough) {
5513
+ if (!passThroughEncryption) {
5338
5514
  fileEntry.zipCrypto = zipCrypto;
5339
5515
  }
5340
5516
  if (encrypted && (localDirectory.rawBitFlag & BITFLAG_STRONG_ENCRYPTION) == BITFLAG_STRONG_ENCRYPTION) {
5341
5517
  throw new Error(ERR_UNSUPPORTED_ENCRYPTION);
5342
5518
  }
5343
- const registeredCodec = passThrough ? UNDEFINED_VALUE : getRegisteredCodec(compressionMethod);
5344
- if (compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE && compressionMethod != COMPRESSION_METHOD_DEFLATE_64 && !registeredCodec && !passThrough) {
5519
+ const registeredCodec = passThroughCompression ? UNDEFINED_VALUE : getRegisteredCodec(compressionMethod);
5520
+ if (compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE && compressionMethod != COMPRESSION_METHOD_DEFLATE_64 && !registeredCodec && !passThroughCompression) {
5345
5521
  throw new Error(ERR_UNSUPPORTED_COMPRESSION);
5346
5522
  }
5347
5523
  if (encrypted) {
@@ -5358,15 +5534,16 @@
5358
5534
  const readable = toCompatibleReadable(reader.createReadable({ offset: dataOffset, size }));
5359
5535
  const signal = checkSignalOption(getOptionValue$1(zipEntry, options, OPTION_SIGNAL));
5360
5536
  throwIfAborted(signal);
5361
- const checkPasswordOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_PASSWORD_ONLY);
5362
5537
  let checkOverlappingEntry = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY);
5363
5538
  const checkOverlappingEntryOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY_ONLY);
5364
5539
  if (checkOverlappingEntryOnly) {
5365
5540
  checkOverlappingEntry = true;
5366
5541
  }
5367
5542
  const { onstart, onprogress, onend } = options;
5368
- const compressed = compressionMethod != COMPRESSION_METHOD_STORE && !passThrough;
5369
- const outputSize = passThrough ? compressedSize : uncompressedSize;
5543
+ const compressed = compressionMethod != COMPRESSION_METHOD_STORE && !passThroughCompression;
5544
+ const outputSize = passThroughCompression ?
5545
+ compressedSize - getEncryptionOverhead(encrypted, zipCrypto, extraFieldAES && extraFieldAES.strength) :
5546
+ uncompressedSize;
5370
5547
  const deflate64 = compressionMethod == COMPRESSION_METHOD_DEFLATE_64;
5371
5548
  let useCompressionStream = getOptionValue$1(zipEntry, options, OPTION_USE_COMPRESSION_STREAM);
5372
5549
  if (deflate64) {
@@ -5375,7 +5552,7 @@
5375
5552
  const checkCrc32Option = getOptionValue$1(zipEntry, options, OPTION_CHECK_CRC32);
5376
5553
  const checkCrc32 = (checkCrc32Option === UNDEFINED_VALUE ?
5377
5554
  getOptionValue$1(zipEntry, options, OPTION_CHECK_SIGNATURE) :
5378
- checkCrc32Option) && !passThrough &&
5555
+ checkCrc32Option) && !passThroughCompression &&
5379
5556
  (!encrypted || zipCrypto || (extraFieldAES && extraFieldAES.vendorVersion == VENDOR_VERSION_AE_1$1));
5380
5557
  const workerOptions = {
5381
5558
  options: {
@@ -5429,10 +5606,10 @@
5429
5606
  await initStream(writer, getDecodableOutputSize(outputSize, compressedSize, compressed));
5430
5607
  ({ writable } = writer);
5431
5608
  const { outputSize: writtenSize } = await runWorker({ readable, writable }, workerOptions);
5432
- writer.size += writtenSize;
5433
5609
  if (writtenSize != outputSize) {
5434
- throw new Error(ERR_INVALID_UNCOMPRESSED_SIZE);
5610
+ throw Object.assign(new Error(ERR_INVALID_UNCOMPRESSED_SIZE), { outputSize: writtenSize });
5435
5611
  }
5612
+ writer.size += writtenSize;
5436
5613
  }
5437
5614
  } catch (error) {
5438
5615
  if (error.outputSize !== UNDEFINED_VALUE) {
@@ -6098,7 +6275,7 @@
6098
6275
  if (checkLocalFilename && !maskedLocalDirectory &&
6099
6276
  (rawLocalFilename.length != rawFilename.length ||
6100
6277
  rawLocalFilename.some((byteValue, indexByte) => byteValue != rawFilename[indexByte]))) {
6101
- reportAmbiguity(reject, warnings, "mismatched local file header (filename)");
6278
+ reportAmbiguity(reject, warnings, WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME);
6102
6279
  }
6103
6280
  if ((localDirectory.rawBitFlag & BITFLAG_AMBIGUITY_MASK) != (zipEntry.rawBitFlag & BITFLAG_AMBIGUITY_MASK)) {
6104
6281
  reportAmbiguity(reject, warnings, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG);
@@ -6123,16 +6300,6 @@
6123
6300
  }
6124
6301
  }
6125
6302
 
6126
- function addWarning(warnings, reason, filename) {
6127
- if (!warnings.some(warning => warning.reason == reason)) {
6128
- const warning = { reason };
6129
- if (filename !== UNDEFINED_VALUE) {
6130
- warning.filename = filename;
6131
- }
6132
- warnings.push(warning);
6133
- }
6134
- }
6135
-
6136
6303
  function throwAmbiguousArchive(reason) {
6137
6304
  const error = new Error(ERR_AMBIGUOUS_ARCHIVE);
6138
6305
  error.reason = reason;
@@ -6212,7 +6379,9 @@
6212
6379
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG: WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG,
6213
6380
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6214
6381
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6382
+ WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME: WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME,
6215
6383
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6384
+ WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY: WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY,
6216
6385
  WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6217
6386
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
6218
6387
  WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
@@ -6265,7 +6434,7 @@
6265
6434
  const ERR_INVALID_ENCRYPTION_STRENGTH = "The strength must equal 1, 2, or 3";
6266
6435
  const ERR_UNSUPPORTED_ENCRYPTION_USDZ = "Encryption is not supported in USDZ files";
6267
6436
  const ERR_UNSUPPORTED_SPLIT_USDZ = "Split zip files are not supported in USDZ files";
6268
- const ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH = "Encryption is not supported when the 'passThrough' option is set";
6437
+ const ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH = "Encryption is not supported when the 'passThrough' option is set to true (use 'compressed' instead)";
6269
6438
  const ERR_INVALID_EXTRAFIELD = "Invalid extra field (must be a Map)";
6270
6439
  const ERR_INVALID_EXTRAFIELD_TYPE = "Invalid extra field type (must be integer 0..65535)";
6271
6440
  const ERR_INVALID_EXTRAFIELD_DATA_TYPE = "Invalid extra field data (must be a Uint8Array)";
@@ -6277,6 +6446,7 @@
6277
6446
  const ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported (set the 'zip64' option to 'true')";
6278
6447
  const ERR_UNDEFINED_UNCOMPRESSED_SIZE = "Undefined uncompressed size";
6279
6448
  const ERR_UNDEFINED_COMPRESSION_METHOD = "Undefined compression method";
6449
+ const ERR_UNDEFINED_CRC32 = "Undefined CRC32";
6280
6450
  const ERR_UNDETERMINED_SIZE = "Undetermined size";
6281
6451
  const ERR_UNDEFINED_READER = "Undefined reader";
6282
6452
  const ERR_INVALID_READER = "Invalid reader (must be a Reader instance, a ReadableStream instance, or an object with a 'readable' property)";
@@ -6290,14 +6460,21 @@
6290
6460
  const ERR_INVALID_MSDOS_DATA = "Invalid msdosAttributes (must be an object with boolean flags)";
6291
6461
  const ERR_INVALID_LEVEL = "Invalid level (must be integer 0..9)";
6292
6462
  const ERR_INVALID_SIGNATURE_DATA = "Signature data exceeds 64KB";
6463
+ const ERR_INVALID_ENTRY = "Invalid entry option (must be an entry returned by ZipReader#getEntries())";
6464
+ const ERR_ZIP_CRYPTO_LAST_MOD_DATE = "The last modification date of an entry encrypted with ZipCrypto cannot be changed when passThrough is set";
6465
+ const WARNING_COMPRESSION_UNAVAILABLE = "compression unavailable";
6466
+ const WARNING_CLAMPED_LAST_MODIFICATION_DATE = "clamped last modification date";
6293
6467
 
6294
6468
  const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
6295
6469
  const EXTRAFIELD_OFFSET_AES_VENDOR_VERSION = 4;
6296
6470
  const EXTRAFIELD_OFFSET_AES_COMPRESSION_METHOD = 9;
6297
6471
  const EXTRAFIELD_USDZ_MAX_LENGTH = 67;
6472
+ const MIN_PRINTABLE_ASCII_CHARACTER_CODE = 0x20;
6473
+ const MAX_PRINTABLE_ASCII_CHARACTER_CODE = 0x7e;
6298
6474
  const VENDOR_VERSION_AE_1 = 1;
6299
6475
  const INFOZIP_EXTRA_FIELD_TYPE = "infozip";
6300
6476
  const UNIX_EXTRA_FIELD_TYPE = "unix";
6477
+ const LEVEL_BY_BITFLAG_LEVEL = [8, 9, 5, 3];
6301
6478
  const MAX_LEVEL = 9;
6302
6479
 
6303
6480
  let workers = 0;
@@ -6324,9 +6501,11 @@
6324
6501
  initialOffset: options[OPTION_OFFSET] === UNDEFINED_VALUE ? 0 : options[OPTION_OFFSET] - (writer.size || writer.writable.size || 0),
6325
6502
  pendingAddFileCalls: new Set(),
6326
6503
  pendingErrors: [],
6504
+ warnings: [],
6327
6505
  bufferedWrites: 0,
6328
6506
  directWrites: 0,
6329
- lastFileEntry: UNDEFINED_VALUE
6507
+ lastFileEntry: UNDEFINED_VALUE,
6508
+ archiveClosed: false
6330
6509
  });
6331
6510
  }
6332
6511
 
@@ -6491,6 +6670,9 @@
6491
6670
  const zipWriter = this;
6492
6671
  const { pendingAddFileCalls, writer } = this;
6493
6672
  const { writable } = writer;
6673
+ if (zipWriter.archiveClosed) {
6674
+ return getWriterData(writer);
6675
+ }
6494
6676
  if (!(comment instanceof Uint8Array)) {
6495
6677
  throw new Error(ERR_INVALID_COMMENT_TYPE);
6496
6678
  }
@@ -6514,11 +6696,16 @@
6514
6696
  throw error;
6515
6697
  }
6516
6698
  await closeFile(zipWriter, comment, options);
6699
+ zipWriter.archiveClosed = true;
6517
6700
  const preventClose = !ownsWritable(writer) && getOptionValue(zipWriter, options, OPTION_PREVENT_CLOSE);
6518
6701
  if (!preventClose) {
6519
6702
  await writable.getWriter().close();
6520
6703
  }
6521
- return writer.getData ? writer.getData() : writable;
6704
+ return getWriterData(writer);
6705
+ }
6706
+
6707
+ [SYMBOL_ASYNC_DISPOSE]() {
6708
+ return this.close();
6522
6709
  }
6523
6710
  }
6524
6711
 
@@ -6597,6 +6784,10 @@
6597
6784
  }
6598
6785
  }
6599
6786
 
6787
+ function getWriterData(writer) {
6788
+ return writer.getData ? writer.getData() : writer.writable;
6789
+ }
6790
+
6600
6791
  function watchPromiseError(zipWriter, promise) {
6601
6792
  const watchedPromise = new WatchedPromise((resolve, reject) => Promise.prototype.then.call(promise, resolve, reject));
6602
6793
  const watcher = {};
@@ -6615,6 +6806,14 @@
6615
6806
 
6616
6807
  async function addFileEntry(zipWriter, name, reader, options) {
6617
6808
  options = Object.assign({}, options);
6809
+ const entry = options[OPTION_ENTRY];
6810
+ if (entry !== UNDEFINED_VALUE) {
6811
+ const { entryOptions, passThroughOptions } = getSourceEntryOptions(entry,
6812
+ checkPassThroughOption(getOptionValue(zipWriter, options, OPTION_PASS_THROUGH)),
6813
+ getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE));
6814
+ delete options[OPTION_ENTRY];
6815
+ options = Object.assign(entryOptions, passThroughOptions, options);
6816
+ }
6618
6817
  if (getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY) && !name.endsWith(DIRECTORY_SIGNATURE)) {
6619
6818
  name += DIRECTORY_SIGNATURE;
6620
6819
  }
@@ -6679,21 +6878,33 @@
6679
6878
  try {
6680
6879
  const { resolvedOptions } = metadataInfo;
6681
6880
  if (resolvedOptions.level != 0 && resolvedOptions.compressionMethod === UNDEFINED_VALUE &&
6682
- !resolvedOptions.passThrough && !(await supportsDeflate(getConfiguration()))) {
6881
+ !resolvedOptions.passThroughCompression && !(await supportsDeflate(getConfiguration()))) {
6683
6882
  resolvedOptions.level = 0;
6883
+ addWarning(zipWriter.warnings, WARNING_COMPRESSION_UNAVAILABLE, name);
6684
6884
  }
6685
6885
  const sizesInfo = await resolveSizes(zipWriter, reader, metadataInfo, options);
6686
6886
  ({ reader } = sizesInfo);
6687
6887
  const diskOffset = getDiskOffset(zipWriter.writer);
6688
6888
  const diskNumber = getDiskNumber(zipWriter.writer);
6889
+ let crc32 = options.crc32 === UNDEFINED_VALUE ? options[PROPERTY_NAME_SIGNATURE] : options.crc32;
6890
+ const storesAE2 = sizesInfo.resolvedOptions.encrypted && !resolvedOptions.zipCrypto;
6891
+ if (resolvedOptions.passThroughCompression && !resolvedOptions.passThroughEncryption && storesAE2) {
6892
+ crc32 = UNDEFINED_VALUE;
6893
+ }
6894
+ if (resolvedOptions.passThroughCompression && reader && !storesAE2 && crc32 === UNDEFINED_VALUE) {
6895
+ throw new Error(ERR_UNDEFINED_CRC32);
6896
+ }
6689
6897
  options = Object.assign({}, options, attributesInfo.resolvedOptions, metadataInfo.resolvedOptions, sizesInfo.resolvedOptions, {
6690
6898
  signature: options[PROPERTY_NAME_SIGNATURE],
6691
- crc32: options.crc32 === UNDEFINED_VALUE ? options[PROPERTY_NAME_SIGNATURE] : options.crc32,
6899
+ crc32,
6692
6900
  offset: zipWriter.offset - diskOffset,
6693
6901
  diskNumberStart: diskNumber,
6694
6902
  [OPTION_USDZ]: zipWriter.options[OPTION_USDZ]
6695
6903
  });
6696
6904
  const headerInfo = getHeaderInfo(options);
6905
+ if (headerInfo.lastModDateClamped) {
6906
+ addWarning(zipWriter.warnings, WARNING_CLAMPED_LAST_MODIFICATION_DATE, name);
6907
+ }
6697
6908
  const dataDescriptorInfo = getDataDescriptorInfo(options);
6698
6909
  const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
6699
6910
  fileEntry = await getFileEntry(zipWriter, name, reader, {
@@ -6720,6 +6931,95 @@
6720
6931
  return new Entry(fileEntry);
6721
6932
  }
6722
6933
 
6934
+ function getSourceEntryOptions(entry, passThrough, lastModDateOverride) {
6935
+ if (entry === null || typeof entry != OBJECT_TYPE || Array.isArray(entry)) {
6936
+ throw new Error(ERR_INVALID_ENTRY);
6937
+ }
6938
+ const {
6939
+ externalFileAttributes,
6940
+ versionMadeBy,
6941
+ comment,
6942
+ lastModDate,
6943
+ rawLastModDate,
6944
+ creationDate,
6945
+ lastAccessDate,
6946
+ uncompressedSize,
6947
+ encrypted,
6948
+ zipCrypto,
6949
+ crc32,
6950
+ compressionMethod,
6951
+ extraFieldAES,
6952
+ extraFieldUnix,
6953
+ internalFileAttributes,
6954
+ extraField,
6955
+ bitFlag,
6956
+ directory,
6957
+ uid,
6958
+ gid
6959
+ } = entry;
6960
+ const entryOptions = {
6961
+ externalFileAttributes,
6962
+ versionMadeBy,
6963
+ comment,
6964
+ lastModDate,
6965
+ creationDate,
6966
+ lastAccessDate,
6967
+ internalFileAttributes,
6968
+ directory
6969
+ };
6970
+ if (bitFlag && bitFlag.languageEncodingFlag) {
6971
+ entryOptions[OPTION_USE_UNICODE_FILE_NAMES] = true;
6972
+ }
6973
+ const userExtraField = getUserExtraField(extraField);
6974
+ if (userExtraField) {
6975
+ entryOptions[PROPERTY_NAME_EXTRA_FIELD] = userExtraField;
6976
+ }
6977
+ if (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE) {
6978
+ Object.assign(entryOptions, {
6979
+ uid,
6980
+ gid,
6981
+ unixExtraFieldType: extraFieldUnix ? UNIX_EXTRA_FIELD_TYPE : INFOZIP_EXTRA_FIELD_TYPE
6982
+ });
6983
+ }
6984
+ const passThroughOptions = {};
6985
+ if (passThrough && !directory) {
6986
+ Object.assign(passThroughOptions, {
6987
+ uncompressedSize,
6988
+ crc32,
6989
+ compressionMethod
6990
+ });
6991
+ if (passThrough !== PASS_THROUGH_COMPRESSED) {
6992
+ Object.assign(passThroughOptions, {
6993
+ encrypted,
6994
+ zipCrypto,
6995
+ encryptionStrength: extraFieldAES ? extraFieldAES.strength : UNDEFINED_VALUE
6996
+ });
6997
+ }
6998
+ if (bitFlag) {
6999
+ passThroughOptions.dataDescriptor = bitFlag.dataDescriptor;
7000
+ passThroughOptions[OPTION_LEVEL] = LEVEL_BY_BITFLAG_LEVEL[bitFlag.level];
7001
+ }
7002
+ if (lastModDateOverride === UNDEFINED_VALUE) {
7003
+ passThroughOptions.rawLastModDate = rawLastModDate;
7004
+ } else if (passThrough !== PASS_THROUGH_COMPRESSED && zipCrypto && (!bitFlag || bitFlag.dataDescriptor) &&
7005
+ lastModDateOverride instanceof Date &&
7006
+ getDosTimeHighByte(lastModDateOverride) != ((rawLastModDate >>> 8) & MAX_8_BITS)) {
7007
+ throw new Error(ERR_ZIP_CRYPTO_LAST_MOD_DATE);
7008
+ }
7009
+ }
7010
+ return { entryOptions, passThroughOptions };
7011
+ }
7012
+
7013
+ function getDosTimeHighByte(lastModDate) {
7014
+ let dosLastModDate = new Date(Math.ceil(Math.floor(lastModDate.getTime() / 1000) / 2) * 2000);
7015
+ if (dosLastModDate < MIN_DATE) {
7016
+ dosLastModDate = MIN_DATE;
7017
+ } else if (dosLastModDate > MAX_DATE) {
7018
+ dosLastModDate = MAX_DATE;
7019
+ }
7020
+ return ((dosLastModDate.getHours() << 3) | (dosLastModDate.getMinutes() >> 3)) & MAX_8_BITS;
7021
+ }
7022
+
6723
7023
  function resolveAttributes(zipWriter, name, options) {
6724
7024
  let msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
6725
7025
  let versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? VERSION_MADE_BY_MSDOS : VERSION_MADE_BY_UNIX);
@@ -6873,7 +7173,9 @@
6873
7173
  const lastAccessDate = getDateOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
6874
7174
  const creationDate = getDateOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
6875
7175
  const internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);
6876
- const passThrough = getOptionValue(zipWriter, options, OPTION_PASS_THROUGH);
7176
+ const passThrough = checkPassThroughOption(getOptionValue(zipWriter, options, OPTION_PASS_THROUGH));
7177
+ const passThroughCompression = Boolean(passThrough);
7178
+ const passThroughEncryption = passThrough === true;
6877
7179
  const password = getOptionValue(zipWriter, options, OPTION_PASSWORD);
6878
7180
  const rawPassword = getOptionValue(zipWriter, options, OPTION_RAW_PASSWORD);
6879
7181
  checkPasswordOption(password, rawPassword);
@@ -6889,10 +7191,11 @@
6889
7191
  const dataDescriptorSignature = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR_SIGNATURE, true);
6890
7192
  const signal = checkSignalOption(getOptionValue(zipWriter, options, OPTION_SIGNAL));
6891
7193
  throwIfAborted(signal);
6892
- const useUnicodeFileNames = getOptionValue(zipWriter, options, OPTION_USE_UNICODE_FILE_NAMES, true);
7194
+ const useUnicodeFileNames = getOptionValue(zipWriter, options, OPTION_USE_UNICODE_FILE_NAMES,
7195
+ !isPrintableASCIIText(rawFilename) || !isPrintableASCIIText(rawComment));
6893
7196
  const compressionMethod = getOptionValue(zipWriter, options, PROPERTY_NAME_COMPRESSION_METHOD);
6894
- const registeredCodec = passThrough || compressionMethod === UNDEFINED_VALUE ? UNDEFINED_VALUE : getRegisteredCodec(compressionMethod);
6895
- if (!passThrough && compressionMethod !== UNDEFINED_VALUE &&
7197
+ const registeredCodec = passThroughCompression || compressionMethod === UNDEFINED_VALUE ? UNDEFINED_VALUE : getRegisteredCodec(compressionMethod);
7198
+ if (!passThroughCompression && compressionMethod !== UNDEFINED_VALUE &&
6896
7199
  compressionMethod !== COMPRESSION_METHOD_STORE && compressionMethod !== COMPRESSION_METHOD_DEFLATE && !registeredCodec) {
6897
7200
  throw new Error(ERR_UNSUPPORTED_COMPRESSION);
6898
7201
  }
@@ -6906,15 +7209,15 @@
6906
7209
  level = 0;
6907
7210
  }
6908
7211
  }
6909
- if (passThrough) {
6910
- level = UNDEFINED_VALUE;
7212
+ if (passThroughCompression) {
7213
+ level = toNumber(options[OPTION_LEVEL]);
6911
7214
  }
6912
7215
  let useCompressionStream = getOptionValue(zipWriter, options, OPTION_USE_COMPRESSION_STREAM);
6913
7216
  let dataDescriptor = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR);
6914
7217
  if (bufferedWrite && dataDescriptor === UNDEFINED_VALUE) {
6915
7218
  dataDescriptor = false;
6916
7219
  }
6917
- if (dataDescriptor === UNDEFINED_VALUE || (zipCrypto && !passThrough)) {
7220
+ if (dataDescriptor === UNDEFINED_VALUE || (zipCrypto && !passThroughEncryption)) {
6918
7221
  dataDescriptor = true;
6919
7222
  }
6920
7223
  if (level !== UNDEFINED_VALUE && level != 6) {
@@ -6938,7 +7241,8 @@
6938
7241
  lastAccessDate,
6939
7242
  creationDate,
6940
7243
  internalFileAttributes,
6941
- passThrough,
7244
+ passThroughCompression,
7245
+ passThroughEncryption,
6942
7246
  password,
6943
7247
  rawPassword,
6944
7248
  encryptionStrength,
@@ -6999,7 +7303,7 @@
6999
7303
  }
7000
7304
 
7001
7305
  async function resolveSizes(zipWriter, reader, { resolvedOptions: metadata }, options) {
7002
- if (metadata.passThrough && !reader && !getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY)) {
7306
+ if (metadata.passThroughCompression && !reader && !getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY)) {
7003
7307
  throw new Error(ERR_UNDEFINED_READER);
7004
7308
  }
7005
7309
  let contentSize;
@@ -7015,12 +7319,12 @@
7015
7319
  }
7016
7320
 
7017
7321
  function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options) {
7018
- const { passThrough, zipCrypto, password, rawPassword, encryptionStrength } = metadata;
7322
+ const { passThroughCompression, passThroughEncryption, zipCrypto, password, rawPassword, encryptionStrength } = metadata;
7019
7323
  let { dataDescriptor, zip64, level, compressionMethod } = metadata;
7020
7324
  let maximumCompressedSize = 0;
7021
7325
  let uncompressedSize = 0;
7022
7326
  let unknownSize = false;
7023
- if (passThrough && hasContent) {
7327
+ if (passThroughCompression && hasContent) {
7024
7328
  uncompressedSize = options[PROPERTY_NAME_UNCOMPRESSED_SIZE];
7025
7329
  if (uncompressedSize === UNDEFINED_VALUE) {
7026
7330
  throw new Error(ERR_UNDEFINED_UNCOMPRESSED_SIZE);
@@ -7031,17 +7335,17 @@
7031
7335
  }
7032
7336
  const zip64Enabled = zip64 === true;
7033
7337
  const encrypted = getOptionValue(zipWriter, options, PROPERTY_NAME_ENCRYPTED);
7034
- if (hasContent && passThrough && !encrypted && getLength(password, rawPassword)) {
7338
+ if (hasContent && passThroughEncryption && !encrypted && getLength(password, rawPassword)) {
7035
7339
  throw new Error(ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH);
7036
7340
  }
7037
- const encryptedEntry = hasContent && (Boolean((password && getLength(password)) || (rawPassword && getLength(rawPassword))) || (passThrough && encrypted));
7341
+ const encryptedEntry = hasContent && (Boolean((password && getLength(password)) || (rawPassword && getLength(rawPassword))) || (passThroughEncryption && encrypted));
7038
7342
  if (!hasContent) {
7039
7343
  level = 0;
7040
7344
  compressionMethod = COMPRESSION_METHOD_STORE;
7041
7345
  }
7042
- const encryptionOverhead = encryptedEntry ? (zipCrypto ? 12 : 16 + encryptionStrength * 4) : 0;
7346
+ const encryptionOverhead = getEncryptionOverhead(encryptedEntry, zipCrypto, encryptionStrength);
7043
7347
  if (hasContent) {
7044
- if (!passThrough) {
7348
+ if (!passThroughCompression) {
7045
7349
  if (contentSize === UNDEFINED_VALUE) {
7046
7350
  dataDescriptor = true;
7047
7351
  if (zip64 || zip64 === UNDEFINED_VALUE) {
@@ -7054,10 +7358,12 @@
7054
7358
  }
7055
7359
  } else {
7056
7360
  options.uncompressedSize = uncompressedSize;
7057
- maximumCompressedSize = contentSize === UNDEFINED_VALUE ? getMaximumCompressedSize(uncompressedSize) + encryptionOverhead : contentSize;
7361
+ maximumCompressedSize = contentSize === UNDEFINED_VALUE ?
7362
+ getMaximumCompressedSize(uncompressedSize) + encryptionOverhead :
7363
+ contentSize + (passThroughEncryption ? 0 : encryptionOverhead);
7058
7364
  }
7059
7365
  }
7060
- const emptyEntry = !encryptedEntry && (!hasContent || (contentSize === 0 && !passThrough)) && !isCompressed(compressionMethod, level);
7366
+ const emptyEntry = !encryptedEntry && (!hasContent || (contentSize === 0 && !passThroughCompression)) && !isCompressed(compressionMethod, level);
7061
7367
  if (emptyEntry && !zipCrypto && getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR) === UNDEFINED_VALUE) {
7062
7368
  dataDescriptor = false;
7063
7369
  }
@@ -7264,6 +7570,7 @@
7264
7570
  localExtraFieldZip64Length,
7265
7571
  rawExtraFieldExtendedTimestamp,
7266
7572
  extraFieldExtendedTimestampFlag,
7573
+ extraFieldExtendedTimestampTime,
7267
7574
  rawExtraFieldNTFS,
7268
7575
  rawExtraFieldUnix,
7269
7576
  rawExtraFieldAES,
@@ -7276,6 +7583,7 @@
7276
7583
  password,
7277
7584
  rawPassword,
7278
7585
  level,
7586
+ useUnicodeFileNames,
7279
7587
  zip64,
7280
7588
  zip64Enabled,
7281
7589
  zip64UncompressedSize,
@@ -7310,7 +7618,8 @@
7310
7618
  msdosAttributesRaw,
7311
7619
  msdosAttributes,
7312
7620
  useCompressionStream,
7313
- passThrough,
7621
+ passThroughCompression,
7622
+ passThroughEncryption,
7314
7623
  format,
7315
7624
  codecURI
7316
7625
  } = options;
@@ -7321,9 +7630,9 @@
7321
7630
  zip64Enabled,
7322
7631
  directory: Boolean(directory),
7323
7632
  executable: Boolean(executable),
7324
- filenameUTF8: true,
7633
+ filenameUTF8: Boolean(useUnicodeFileNames),
7325
7634
  rawFilename,
7326
- commentUTF8: true,
7635
+ commentUTF8: Boolean(useUnicodeFileNames),
7327
7636
  rawComment,
7328
7637
  rawExtraFieldZip64,
7329
7638
  localExtraFieldZip64Length,
@@ -7354,7 +7663,7 @@
7354
7663
  uncompressedSize
7355
7664
  } = options;
7356
7665
  let compressedSize = 0;
7357
- if (!passThrough) {
7666
+ if (!passThroughCompression) {
7358
7667
  uncompressedSize = 0;
7359
7668
  }
7360
7669
  const { writable } = writer;
@@ -7371,9 +7680,9 @@
7371
7680
  encryptionStrength,
7372
7681
  zipCrypto: encrypted && zipCrypto,
7373
7682
  passwordVerification: encrypted && zipCrypto && (rawLastModDate >> 8) & MAX_8_BITS,
7374
- computeCrc32: !passThrough,
7375
- compressed: compressed && !passThrough,
7376
- encrypted: encrypted && !passThrough,
7683
+ computeCrc32: !passThroughCompression,
7684
+ compressed: compressed && !passThroughCompression,
7685
+ encrypted: encrypted && !passThroughEncryption,
7377
7686
  useWebWorkers,
7378
7687
  useCompressionStream,
7379
7688
  transferStreams,
@@ -7388,7 +7697,7 @@
7388
7697
  const result = await runWorker({ readable, writable }, workerOptions);
7389
7698
  compressedSize = result.outputSize;
7390
7699
  writer.size += compressedSize;
7391
- if (!passThrough) {
7700
+ if (!passThroughCompression) {
7392
7701
  uncompressedSize = result.inputSize;
7393
7702
  if (!encrypted || zipCrypto) {
7394
7703
  crc32 = result.crc32;
@@ -7431,8 +7740,9 @@
7431
7740
  headerArray,
7432
7741
  headerView,
7433
7742
  signature: crc32,
7434
- crc32: encrypted && !zipCrypto && !passThrough ? UNDEFINED_VALUE : crc32,
7743
+ crc32: encrypted && !zipCrypto && !passThroughCompression ? UNDEFINED_VALUE : crc32,
7435
7744
  extraFieldExtendedTimestampFlag,
7745
+ extraFieldExtendedTimestampTime,
7436
7746
  zip64UncompressedSize,
7437
7747
  zip64CompressedSize
7438
7748
  });
@@ -7457,7 +7767,7 @@
7457
7767
  encryptionStrength,
7458
7768
  extendedTimestamp,
7459
7769
  ntfsTimestamp,
7460
- passThrough,
7770
+ passThroughCompression,
7461
7771
  encrypted,
7462
7772
  zip64UncompressedSize,
7463
7773
  zip64CompressedSize,
@@ -7468,7 +7778,7 @@
7468
7778
  let { version, compressionMethod } = options;
7469
7779
  const compressed = !directory && isCompressed(compressionMethod, level);
7470
7780
  let rawLocalExtraFieldZip64;
7471
- const uncompressedFile = passThrough || !compressed;
7781
+ const uncompressedFile = passThroughCompression || !compressed;
7472
7782
  const zip64ExtraFieldComplete = zip64 && (options.bufferedWrite || !dataDescriptor || ((!zip64UncompressedSize && !zip64CompressedSize) || (uncompressedFile && !unknownSize)));
7473
7783
  const writeLocalExtraFieldZip64 = zip64ExtraFieldComplete || (zip64 && dataDescriptor && (zip64UncompressedSize || zip64CompressedSize));
7474
7784
  if (zip64 && (zip64UncompressedSize || zip64CompressedSize)) {
@@ -7480,8 +7790,8 @@
7480
7790
  if (zip64ExtraFieldComplete) {
7481
7791
  extraFieldZip64.writeUint64(uncompressedSize);
7482
7792
  if (uncompressedFile) {
7483
- const encryptionOverhead = encrypted ? (zipCrypto ? 12 : 16 + encryptionStrength * 4) : 0;
7484
- extraFieldZip64.writeUint64(passThrough ? 0 : uncompressedSize + encryptionOverhead);
7793
+ const encryptionOverhead = getEncryptionOverhead(encrypted, zipCrypto, encryptionStrength);
7794
+ extraFieldZip64.writeUint64(passThroughCompression ? 0 : uncompressedSize + encryptionOverhead);
7485
7795
  }
7486
7796
  }
7487
7797
  } else {
@@ -7500,6 +7810,7 @@
7500
7810
  let rawExtraFieldNTFS;
7501
7811
  let rawExtraFieldExtendedTimestamp;
7502
7812
  let extraFieldExtendedTimestampFlag;
7813
+ let extraFieldExtendedTimestampTime;
7503
7814
  if (extendedTimestamp) {
7504
7815
  const lastModTimeUnix = getTimeUnix(lastModDate);
7505
7816
  const lastModTimeUnixInRange = inUnixTimeRange(lastModTimeUnix);
@@ -7507,6 +7818,7 @@
7507
7818
  const extraFieldTimestampLength = 9 + (lastAccessDate ? 4 : 0) + (creationDate ? 4 : 0);
7508
7819
  const extraFieldTimestamp = createRecordWriter(extraFieldTimestampLength);
7509
7820
  extraFieldExtendedTimestampFlag = 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0);
7821
+ extraFieldExtendedTimestampTime = lastModTimeUnix;
7510
7822
  extraFieldTimestamp.writeUint16(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
7511
7823
  extraFieldTimestamp.writeUint16(extraFieldTimestampLength - 4);
7512
7824
  extraFieldTimestamp.writeUint8(extraFieldExtendedTimestampFlag);
@@ -7590,7 +7902,7 @@
7590
7902
  }
7591
7903
  if (encrypted && !zipCrypto) {
7592
7904
  version = version > VERSION_AES ? version : VERSION_AES;
7593
- if (passThrough && crc32 !== UNDEFINED_VALUE) {
7905
+ if (passThroughCompression && crc32 !== UNDEFINED_VALUE) {
7594
7906
  rawExtraFieldAES[EXTRAFIELD_OFFSET_AES_VENDOR_VERSION] = VENDOR_VERSION_AE_1;
7595
7907
  }
7596
7908
  setUint16(getDataView(rawExtraFieldAES), EXTRAFIELD_OFFSET_AES_COMPRESSION_METHOD, compressionMethod);
@@ -7652,12 +7964,14 @@
7652
7964
  headerArray,
7653
7965
  headerView,
7654
7966
  lastModDate: storedLastModDate,
7967
+ lastModDateClamped: storedLastModDate === clampedLastModDate && dosLastModDate.getTime() != clampedLastModDate.getTime(),
7655
7968
  rawLastModDate,
7656
7969
  encrypted,
7657
7970
  compressed,
7658
7971
  version,
7659
7972
  compressionMethod,
7660
7973
  extraFieldExtendedTimestampFlag,
7974
+ extraFieldExtendedTimestampTime,
7661
7975
  rawExtraFieldZip64: EMPTY_UINT8_ARRAY,
7662
7976
  localExtraFieldZip64Length,
7663
7977
  rawExtraFieldExtendedTimestamp,
@@ -7760,7 +8074,7 @@
7760
8074
  }, {
7761
8075
  zip64,
7762
8076
  zipCrypto,
7763
- passThrough,
8077
+ passThroughCompression,
7764
8078
  dataDescriptor
7765
8079
  }) {
7766
8080
  const {
@@ -7771,7 +8085,7 @@
7771
8085
  dataDescriptorView,
7772
8086
  dataDescriptorOffset
7773
8087
  } = dataDescriptorInfo;
7774
- if ((!encrypted || zipCrypto || passThrough) && crc32 !== UNDEFINED_VALUE) {
8088
+ if ((!encrypted || zipCrypto || passThroughCompression) && crc32 !== UNDEFINED_VALUE) {
7775
8089
  setUint32(headerView, HEADER_OFFSET_SIGNATURE, crc32);
7776
8090
  if (dataDescriptor) {
7777
8091
  setUint32(dataDescriptorView, dataDescriptorOffset, crc32);
@@ -7802,9 +8116,9 @@
7802
8116
  uncompressedSize,
7803
8117
  zip64UncompressedSize,
7804
8118
  zip64CompressedSize
7805
- }, localHeaderView, { dataDescriptor, passThrough }) {
8119
+ }, localHeaderView, { dataDescriptor, passThroughCompression }) {
7806
8120
  if (!dataDescriptor) {
7807
- if (!encrypted || (passThrough && crc32 !== UNDEFINED_VALUE)) {
8121
+ if (!encrypted || (passThroughCompression && crc32 !== UNDEFINED_VALUE)) {
7808
8122
  setUint32(localHeaderView, HEADER_OFFSET_SIGNATURE + LOCAL_HEADER_COMMON_OFFSET, crc32);
7809
8123
  }
7810
8124
  if (!zip64CompressedSize) {
@@ -7841,9 +8155,8 @@
7841
8155
  rawExtraFieldUnix,
7842
8156
  rawExtraField,
7843
8157
  rawCentralExtraField,
7844
- extendedTimestamp,
7845
8158
  extraFieldExtendedTimestampFlag,
7846
- lastModDate,
8159
+ extraFieldExtendedTimestampTime,
7847
8160
  zip64Enabled,
7848
8161
  uncompressedSize,
7849
8162
  compressedSize
@@ -7886,16 +8199,15 @@
7886
8199
  fileEntry.zip64Offset = zip64Offset;
7887
8200
  fileEntry.zip64DiskNumberStart = zip64DiskNumberStart;
7888
8201
  let rawExtraFieldTimestamp;
7889
- const lastModTimeUnix = getTimeUnix(lastModDate);
7890
- if (extendedTimestamp && inUnixTimeRange(lastModTimeUnix)) {
8202
+ if (extraFieldExtendedTimestampTime === UNDEFINED_VALUE) {
8203
+ rawExtraFieldTimestamp = EMPTY_UINT8_ARRAY;
8204
+ } else {
7891
8205
  const extraFieldTimestamp = createRecordWriter(9);
7892
8206
  extraFieldTimestamp.writeUint16(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
7893
8207
  extraFieldTimestamp.writeUint16(5);
7894
8208
  extraFieldTimestamp.writeUint8(extraFieldExtendedTimestampFlag);
7895
- extraFieldTimestamp.writeUint32(lastModTimeUnix);
8209
+ extraFieldTimestamp.writeUint32(extraFieldExtendedTimestampTime);
7896
8210
  rawExtraFieldTimestamp = extraFieldTimestamp.array;
7897
- } else {
7898
- rawExtraFieldTimestamp = EMPTY_UINT8_ARRAY;
7899
8211
  }
7900
8212
  fileEntry.rawExtraFieldExtendedTimestamp = rawExtraFieldTimestamp;
7901
8213
  const extraFieldLength = getLength(
@@ -8395,6 +8707,11 @@
8395
8707
  };
8396
8708
  }
8397
8709
 
8710
+ function isPrintableASCIIText(rawText) {
8711
+ return rawText.every(characterCode =>
8712
+ characterCode >= MIN_PRINTABLE_ASCII_CHARACTER_CODE && characterCode <= MAX_PRINTABLE_ASCII_CHARACTER_CODE);
8713
+ }
8714
+
8398
8715
  function getBitFlag(level, useUnicodeFileNames, dataDescriptor, encrypted, compressionMethod) {
8399
8716
  let bitFlag = 0;
8400
8717
  if (useUnicodeFileNames) {
@@ -8556,7 +8873,7 @@
8556
8873
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8557
8874
  */
8558
8875
 
8559
- const VERSION = "2.11.4";
8876
+ const VERSION = "2.12.0";
8560
8877
 
8561
8878
  /*
8562
8879
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -9378,9 +9695,9 @@
9378
9695
  DecompressionStreamFallback: DecompressionStreamZlib
9379
9696
  });
9380
9697
 
9381
- function terminateWorkersAndModule() {
9698
+ async function terminateWorkersAndModule() {
9699
+ await terminateWorkers();
9382
9700
  modulePromise = null;
9383
- terminateWorkers();
9384
9701
  resetWasmModule();
9385
9702
  }
9386
9703
 
@@ -9450,6 +9767,7 @@
9450
9767
  exports.BlobWriter = BlobWriter;
9451
9768
  exports.Data64URIReader = Data64URIReader;
9452
9769
  exports.Data64URIWriter = Data64URIWriter;
9770
+ exports.ERR_ABORTED = ERR_ABORTED;
9453
9771
  exports.ERR_AMBIGUOUS_ARCHIVE = ERR_AMBIGUOUS_ARCHIVE;
9454
9772
  exports.ERR_BAD_FORMAT = ERR_BAD_FORMAT;
9455
9773
  exports.ERR_CENTRAL_DIRECTORY_NOT_FOUND = ERR_CENTRAL_DIRECTORY_NOT_FOUND;
@@ -9462,7 +9780,9 @@
9462
9780
  exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;
9463
9781
  exports.ERR_HTTP_RANGE = ERR_HTTP_RANGE;
9464
9782
  exports.ERR_HTTP_RESOURCE_CHANGED = ERR_HTTP_RESOURCE_CHANGED;
9783
+ exports.ERR_HTTP_STATUS = ERR_HTTP_STATUS;
9465
9784
  exports.ERR_INVALID_AUTHENTICATION_CODE = ERR_INVALID_AUTHENTICATION_CODE;
9785
+ exports.ERR_INVALID_BASE_URI = ERR_INVALID_BASE_URI;
9466
9786
  exports.ERR_INVALID_CODEC_DEFINITION = ERR_INVALID_CODEC_DEFINITION;
9467
9787
  exports.ERR_INVALID_CODEC_MODULE = ERR_INVALID_CODEC_MODULE;
9468
9788
  exports.ERR_INVALID_COMMENT = ERR_INVALID_COMMENT;
@@ -9471,6 +9791,7 @@
9471
9791
  exports.ERR_INVALID_CRC32 = ERR_INVALID_CRC32;
9472
9792
  exports.ERR_INVALID_DATE = ERR_INVALID_DATE;
9473
9793
  exports.ERR_INVALID_ENCRYPTION_STRENGTH = ERR_INVALID_ENCRYPTION_STRENGTH;
9794
+ exports.ERR_INVALID_ENTRY = ERR_INVALID_ENTRY;
9474
9795
  exports.ERR_INVALID_ENTRY_COMMENT = ERR_INVALID_ENTRY_COMMENT;
9475
9796
  exports.ERR_INVALID_ENTRY_COMMENT_TYPE = ERR_INVALID_ENTRY_COMMENT_TYPE;
9476
9797
  exports.ERR_INVALID_ENTRY_NAME = ERR_INVALID_ENTRY_NAME;
@@ -9488,6 +9809,7 @@
9488
9809
  exports.ERR_INVALID_MSDOS_DATA = ERR_INVALID_MSDOS_DATA;
9489
9810
  exports.ERR_INVALID_PASSWORD = ERR_INVALID_PASSWORD;
9490
9811
  exports.ERR_INVALID_PASSWORD_TYPE = ERR_INVALID_PASSWORD_TYPE;
9812
+ exports.ERR_INVALID_PASS_THROUGH_VALUE = ERR_INVALID_PASS_THROUGH_VALUE;
9491
9813
  exports.ERR_INVALID_READER = ERR_INVALID_READER;
9492
9814
  exports.ERR_INVALID_SIGNAL = ERR_INVALID_SIGNAL;
9493
9815
  exports.ERR_INVALID_SIGNATURE_DATA = ERR_INVALID_SIGNATURE_DATA;
@@ -9497,6 +9819,7 @@
9497
9819
  exports.ERR_INVALID_UNIX_EXTRA_FIELD_TYPE = ERR_INVALID_UNIX_EXTRA_FIELD_TYPE;
9498
9820
  exports.ERR_INVALID_UNIX_ID_SIZE = ERR_INVALID_UNIX_ID_SIZE;
9499
9821
  exports.ERR_INVALID_UNIX_MODE = ERR_INVALID_UNIX_MODE;
9822
+ exports.ERR_INVALID_URI = ERR_INVALID_URI;
9500
9823
  exports.ERR_INVALID_VERSION = ERR_INVALID_VERSION;
9501
9824
  exports.ERR_ITERATOR_COMPLETED_TOO_SOON = ERR_ITERATOR_COMPLETED_TOO_SOON;
9502
9825
  exports.ERR_LOCAL_FILE_HEADER_NOT_FOUND = ERR_LOCAL_FILE_HEADER_NOT_FOUND;
@@ -9504,6 +9827,7 @@
9504
9827
  exports.ERR_RESERVED_COMPRESSION_METHOD = ERR_RESERVED_COMPRESSION_METHOD;
9505
9828
  exports.ERR_SPLIT_ZIP_FILE = ERR_SPLIT_ZIP_FILE;
9506
9829
  exports.ERR_UNDEFINED_COMPRESSION_METHOD = ERR_UNDEFINED_COMPRESSION_METHOD;
9830
+ exports.ERR_UNDEFINED_CRC32 = ERR_UNDEFINED_CRC32;
9507
9831
  exports.ERR_UNDEFINED_READER = ERR_UNDEFINED_READER;
9508
9832
  exports.ERR_UNDEFINED_UNCOMPRESSED_SIZE = ERR_UNDEFINED_UNCOMPRESSED_SIZE;
9509
9833
  exports.ERR_UNDETERMINED_SIZE = ERR_UNDETERMINED_SIZE;
@@ -9519,6 +9843,8 @@
9519
9843
  exports.ERR_UNSUPPORTED_UINT64 = ERR_UNSUPPORTED_UINT64;
9520
9844
  exports.ERR_WORKER_STARTUP_TIMEOUT = ERR_WORKER_STARTUP_TIMEOUT;
9521
9845
  exports.ERR_WRITER_NOT_INITIALIZED = ERR_WRITER_NOT_INITIALIZED;
9846
+ exports.ERR_WRITER_SIZE_NOT_WRITABLE = ERR_WRITER_SIZE_NOT_WRITABLE;
9847
+ exports.ERR_ZIP_CRYPTO_LAST_MOD_DATE = ERR_ZIP_CRYPTO_LAST_MOD_DATE;
9522
9848
  exports.ERR_ZIP_NOT_EMPTY = ERR_ZIP_NOT_EMPTY;
9523
9849
  exports.HttpRangeReader = HttpRangeReader;
9524
9850
  exports.HttpReader = HttpReader;
@@ -9531,13 +9857,17 @@
9531
9857
  exports.Uint8ArrayWriter = Uint8ArrayWriter;
9532
9858
  exports.VERSION = VERSION;
9533
9859
  exports.WARNING_APPENDED_DATA = WARNING_APPENDED_DATA;
9860
+ exports.WARNING_CLAMPED_LAST_MODIFICATION_DATE = WARNING_CLAMPED_LAST_MODIFICATION_DATE;
9534
9861
  exports.WARNING_COMPRESSED_PATCHED_DATA = WARNING_COMPRESSED_PATCHED_DATA;
9862
+ exports.WARNING_COMPRESSION_UNAVAILABLE = WARNING_COMPRESSION_UNAVAILABLE;
9535
9863
  exports.WARNING_DUPLICATE_FILENAME = WARNING_DUPLICATE_FILENAME;
9536
9864
  exports.WARNING_MALFORMED_EXTRA_FIELD = WARNING_MALFORMED_EXTRA_FIELD;
9537
9865
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG;
9538
9866
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
9539
9867
  exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
9868
+ exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME = WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME;
9540
9869
  exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
9870
+ exports.WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY;
9541
9871
  exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
9542
9872
  exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
9543
9873
  exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;