@zip.js/zip.js 2.8.37 → 2.8.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/zip-fs.js CHANGED
@@ -46,6 +46,7 @@
46
46
  const LOCAL_FILE_HEADER_SIGNATURE = 0x04034b50;
47
47
  const SPLIT_ZIP_FILE_SIGNATURE = 0x08074b50;
48
48
  const DATA_DESCRIPTOR_RECORD_SIGNATURE = SPLIT_ZIP_FILE_SIGNATURE;
49
+ const ARCHIVE_EXTRA_DATA_SIGNATURE = 0x08064b50;
49
50
  const CENTRAL_FILE_HEADER_SIGNATURE = 0x02014b50;
50
51
  const END_OF_CENTRAL_DIR_SIGNATURE = 0x06054b50;
51
52
  const ZIP64_END_OF_CENTRAL_DIR_SIGNATURE = 0x06064b50;
@@ -77,6 +78,7 @@
77
78
  const BITFLAG_LEVEL_FAST_MASK = 0b100;
78
79
  const BITFLAG_LEVEL_SUPER_FAST_MASK = 0b110;
79
80
  const BITFLAG_DATA_DESCRIPTOR = 0b1000;
81
+ const BITFLAG_STRONG_ENCRYPTION = 0b1000000;
80
82
  const BITFLAG_LANG_ENCODING_FLAG = 0b100000000000;
81
83
  const FILE_ATTR_MSDOS_DIR_MASK = 0b10000;
82
84
  const FILE_ATTR_MSDOS_READONLY_MASK = 0x01;
@@ -160,6 +162,7 @@
160
162
  maxWorkers,
161
163
  terminateWorkerTimeout: 5000,
162
164
  workerStarvationTimeout: 5000,
165
+ workerStartupTimeout: 5000,
163
166
  useWebWorkers: true,
164
167
  useCompressionStream: true,
165
168
  transferStreams: true,
@@ -175,6 +178,7 @@
175
178
  "maxWorkers",
176
179
  "terminateWorkerTimeout",
177
180
  "workerStarvationTimeout",
181
+ "workerStartupTimeout",
178
182
  "useCompressionStream",
179
183
  "useWebWorkers",
180
184
  "transferStreams",
@@ -220,7 +224,7 @@
220
224
  Object.assign(config, DEFAULT_CONFIGURATION);
221
225
  }
222
226
 
223
- function t$1(t){const e='(t=>{"function"==typeof define&&define.amd?define(t):t()})(function(){"use strict";const{Array:t,Object:e,Number:n,Math:s,Error:r,Uint8Array:o,Uint16Array:i,Uint32Array:c,Int32Array:a,Map:f,DataView:l,Promise:u,TextEncoder:w,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:g,DecompressionStream:S}=self,v=void 0,b="undefined",k="function",z=new o,C=[[],[],[],[],[],[],[],[]];for(let t=0;256>t;t++){let e=t;for(let t=0;8>t;t++)e=1&e?e>>>1^3988292384:e>>>1;C[0][t]=e}for(let t=0;256>t;t++)for(let e=1;8>e;e++){const n=C[e-1][t];C[e][t]=n>>>8^C[0][255&n]}const[A,I,x,P,D,R,U,M]=C;class _{constructor(t){this.o=t||-1}append(t){let e=0|this.o;const n=0|t.length;let s=0;if(n>=8&&t.buffer){const r=new l(t.buffer,t.byteOffset,n),o=n-8;for(;o>=s;s+=8){const t=e^r.getInt32(s,!0),n=r.getInt32(s+4,!0);e=M[255&t]^U[t>>>8&255]^R[t>>>16&255]^D[t>>>24&255]^P[255&n]^x[n>>>8&255]^I[n>>>16&255]^A[n>>>24&255]}}for(;n>s;s++)e=e>>>8^A[255&(e^t[s])];this.o=e}get(){return~this.o}}class B extends d{constructor(){let t;const e=new _;super({transform(t,n){e.append(t),n.enqueue(t)},flush(){const n=new o(4);new l(n.buffer).setUint32(0,e.get()),t.value=n}}),t=this}}function V(t,e){const n=new o(t.length+e.length);return n.set(t),n.set(e,t.length),n}const W={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=W.l(n);return 32===s?t.concat(e):W.h(e,s,0|n,t.slice(0,t.length-1))},m(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+W.l(n)},S(t,e){if(32*t.length<e)return t;const n=(t=t.slice(0,s.ceil(e/32))).length;return e&=31,n>0&&e&&(t[n-1]=W.v(e,t[n-1]&2147483648>>e-1,1)),t},v:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,e,n,s){for(void 0===s&&(s=[]);e>=32;e-=32)s.push(n),n=0;if(0===e)return s.concat(t);for(let r=0;r<t.length;r++)s.push(n|t[r]>>>e),n=t[r]<<32-e;const r=t.length?t[t.length-1]:0,o=W.l(r);return s.push(W.v(e+o&31,e+o>32?n:s.pop(),1)),s}},K={bytes:{C(t){const e=W.m(t)/8,n=new o(e);let s;for(let r=0;e>r;r++)3&r||(s=t[r/4]),n[r]=s>>>24,s<<=8;return n},A(t){const e=[];let n,s=0;for(n=0;n<t.length;n++)s=s<<8|t[n],3&~n||(e.push(s),s=0);return 3&n&&e.push(W.v(8*(3&n),s)),e}}},E=class{constructor(t){const e=this;e.blockSize=512,e.I=[1732584193,4023233417,2562383102,271733878,3285377520],e.P=[1518500249,1859775393,2400959708,3395469782],t?(e.D=t.D.slice(0),e.R=t.R.slice(0),e.U=t.U):e.reset()}reset(){const t=this;return t.D=t.I.slice(0),t.R=[],t.U=0,t}update(t){const e=this;"string"==typeof t&&(t=K.M.A(t));const n=e.R=W.concat(e.R,t),s=e.U,o=e.U=s+W.m(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const i=new c(n);let a=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);o>=t;t+=e.blockSize)e._(i.subarray(16*a,16*(a+1))),a+=1;return n.splice(0,16*a),e}B(){const t=this;let e=t.R;const n=t.D;e=W.concat(e,[W.v(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.U/4294967296)),e.push(0|t.U);e.length;)t._(e.splice(0,16));return t.reset(),n}V(t,e,n,s){return t>19?t>39?t>59?t>79?void 0:e^n^s:e&n|e&s|n&s:e^n^s:e&n|~e&s}W(t,e){return e<<t|e>>>32-t}_(e){const n=this,r=n.D,o=t(80);for(let t=0;16>t;t++)o[t]=e[t];let i=r[0],c=r[1],a=r[2],f=r[3],l=r[4];for(let t=0;79>=t;t++){16>t||(o[t]=n.W(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n.W(5,i)+n.V(t,c,a,f)+l+o[t]+n.P[s.floor(t/20)]|0;l=f,f=a,a=n.W(30,c),c=i,i=e}r[0]=r[0]+i|0,r[1]=r[1]+c|0,r[2]=r[2]+a|0,r[3]=r[3]+f|0,r[4]=r[4]+l|0}},L={importKey:t=>new L.K(K.bytes.A(t)),L(t,e,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let i,c,a,f,u;const w=new ArrayBuffer(o),h=new l(w);let p=0;const d=W;for(e=K.bytes.A(e),u=1;(o||1)>p;u++){for(i=c=t.encrypt(d.concat(e,[u])),a=1;n>a;a++)for(c=t.encrypt(c),f=0;f<c.length;f++)i[f]^=c[f];for(a=0;(o||1)>p&&a<i.length;a++)h.setInt32(p,i[a]),p+=4}return w.slice(0,s/8)},K:class{constructor(t){const e=this,n=e.O=E,s=[[],[]];e.T=[new n,new n];const r=e.T[0].blockSize/32;t.length>r&&(t=(new n).update(t).B());for(let e=0;r>e;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e.T[0].update(s[0]),e.T[1].update(s[1]),e.j=new n(e.T[0])}reset(){const t=this;t.j=new t.O(t.T[0]),t.H=!1}update(t){this.H=!0,this.j.update(t)}digest(){const t=this,e=t.j.B(),n=new t.O(t.T[1]).update(e).B();return t.reset(),n}encrypt(t){if(this.H)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},O=typeof h!=b&&typeof h.getRandomValues==k,T="Invalid password",j="Invalid signature",H="zipjs-abort-check-password";function Z(t){if(O)return h.getRandomValues(t);throw new r("Crypto API not supported")}const F=16,N={name:"PBKDF2"},q=e.assign({hash:{name:"HMAC"}},N),G=e.assign({iterations:1e3,hash:{name:"SHA-1"}},N),J=["deriveBits"],Q=[8,12,16],X=[16,24,32],Y=10,$=[0,0,0,0],tt=typeof h!=b,et=tt&&h.subtle,nt=tt&&typeof et!=b,st=K.bytes,rt=class{constructor(t){const e=this;e.Z=[[[],[],[],[],[]],[[],[],[],[],[]]],e.Z[0][0][0]||e.F();const n=e.Z[0][4],s=e.Z[1],o=t.length;let i,c,a,f=1;if(4!==o&&6!==o&&8!==o)throw new r("invalid aes key size");for(e.P=[c=t.slice(0),a=[]],i=o;4*o+28>i;i++){let t=c[i-1];(i%o===0||8===o&&i%o===4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],i%o===0&&(t=t<<8^t>>>24^f<<24,f=f<<1^283*(f>>7))),c[i]=c[i-o]^t}for(let t=0;i;t++,i--){const e=c[3&t?i:i-4];a[t]=4>=i||4>t?e:s[0][n[e>>>24]]^s[1][n[e>>16&255]]^s[2][n[e>>8&255]]^s[3][n[255&e]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}F(){const t=this.Z[0],e=this.Z[1],n=t[4],s=e[4],r=[],o=[];let i,c,a,f;for(let t=0;256>t;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let l=i=0;!n[l];l^=c||1,i=o[i]||1){let o=i^i<<1^i<<2^i<<3^i<<4;o=o>>8^255&o^99,n[l]=o,s[o]=l,f=r[a=r[c=r[l]]];let u=16843009*f^65537*a^257*c^16843008*l,w=257*r[o]^16843008*o;for(let n=0;4>n;n++)t[n][l]=w=w<<24^w>>>8,e[n][o]=u=u<<24^u>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}N(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.P[e],s=n.length/4-2,o=[0,0,0,0],i=this.Z[e],c=i[0],a=i[1],f=i[2],l=i[3],u=i[4];let w,h,p,d=t[0]^n[0],y=t[e?3:1]^n[1],m=t[2]^n[2],g=t[e?1:3]^n[3],S=4;for(let t=0;s>t;t++)w=c[d>>>24]^a[y>>16&255]^f[m>>8&255]^l[255&g]^n[S],h=c[y>>>24]^a[m>>16&255]^f[g>>8&255]^l[255&d]^n[S+1],p=c[m>>>24]^a[g>>16&255]^f[d>>8&255]^l[255&y]^n[S+2],g=c[g>>>24]^a[d>>16&255]^f[y>>8&255]^l[255&m]^n[S+3],S+=4,d=w,y=h,m=p;for(let t=0;4>t;t++)o[e?3&-t:t]=u[d>>>24]<<24^u[y>>16&255]<<16^u[m>>8&255]<<8^u[255&g]^n[S++],w=d,d=y,y=m,m=g,g=w;return o}},ot=class{constructor(t,e){this.G=t,this.J=e,this.X=e}reset(){this.X=this.J}update(t){return this.Y(this.G,t,this.X)}$(t){if(255&~(t>>24))t+=1<<24;else{let e=t>>16&255,n=t>>8&255,s=255&t;255===e?(e=0,255===n?(n=0,255===s?s=0:++s):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=s}return t}et(t){0===(t[0]=this.$(t[0]))&&(t[1]=this.$(t[1]))}Y(t,e,n){let s;if(!(s=e.length))return[];const r=W.m(e);for(let r=0;s>r;r+=4){this.et(n);const s=t.encrypt(n);e[r]^=s[0],e[r+1]^=s[1],e[r+2]^=s[2],e[r+3]^=s[3]}return W.S(e,r)}},it=L.K;let ct=tt&&nt&&typeof et.importKey==k,at=tt&&nt&&typeof et.deriveBits==k;class ft extends d{constructor({password:t,rawPassword:e,encryptionStrength:n,checkPasswordOnly:s}){super({start(){ut(this,t,e,n)},async transform(t,e){const n=this,{password:i,strength:c,nt:a,ready:f}=n;i?(await(async(t,e,n,s)=>{const o=await ht(t,e,n,dt(s,0,Q[e])),i=dt(s,Q[e]);if(o[0]!=i[0]||o[1]!=i[1])throw new r(T)})(n,c,i,dt(t,0,Q[c]+2)),t=dt(t,Q[c]+2),s?e.error(new r(H)):a()):await f;const l=new o(t.length-Y-(t.length-Y)%F);e.enqueue(wt(n,t,l,0,Y,!0))},async flush(t){const{st:e,ot:n,pending:s,ready:o}=this;if(n&&e){await o;const i=dt(s,0,s.length-Y),c=dt(s,s.length-Y);let a=z;if(i.length){const t=mt(st,i);n.update(t);const s=e.update(t);a=yt(st,s)}const f=dt(yt(st,n.digest()),0,Y);let l=s.length<Y?1:0;for(let t=0;Y>t;t++)l|=f[t]^c[t];if(l)throw new r(j);t.enqueue(a)}}})}}class lt extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){let s;super({start(){ut(this,t,e,n)},async transform(t,e){const n=this,{password:s,strength:r,nt:i,ready:c}=n;let a=z;s?(a=await(async(t,e,n)=>{const s=Z(new o(Q[e]));return V(s,await ht(t,e,n,s))})(n,r,s),i()):await c;const f=new o(a.length+t.length-t.length%F);f.set(a,0),e.enqueue(wt(n,t,f,a.length,0))},async flush(t){const{st:e,ot:n,pending:r,ready:o}=this;if(n&&e){await o;let i=z;if(r.length){const t=e.update(mt(st,r));n.update(t),i=yt(st,t)}s.signature=yt(st,n.digest()).slice(0,Y),t.enqueue(V(i,s.signature))}}}),s=this}}function ut(t,n,s,r){e.assign(t,{ready:new u(e=>t.nt=e),password:pt(n,s),strength:r-1,pending:z})}function wt(t,e,n,s,r,i){const{st:c,ot:a,pending:f}=t;f.length&&(e=V(f,e));const l=e.length-r;let u;for(n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new o(e)).set(n,0)}return t})(n,s+(l-l%F)),u=0;l-F>=u;u+=F){const t=mt(st,dt(e,u,u+F));i&&a.update(t);const r=c.update(t);i||a.update(r),n.set(yt(st,r),u+s)}return t.pending=dt(e,u),n}async function ht(n,s,r,i){n.password=null;const c=await(async(t,e,n,s,r)=>{if(!ct)return L.importKey(e);try{return await et.importKey("raw",e,n,!1,r)}catch{return ct=!1,L.importKey(e)}})(0,r,q,0,J),a=await(async(t,e,n)=>{if(!at)return L.L(e,t.salt,G.iterations,n);try{return await et.deriveBits(t,e,n)}catch{return at=!1,L.L(e,t.salt,G.iterations,n)}})(e.assign({salt:i},G),c,8*(2*X[s]+2)),f=new o(a),l=mt(st,dt(f,0,X[s])),u=mt(st,dt(f,X[s],2*X[s])),w=dt(f,2*X[s]);return e.assign(n,{keys:{key:l,it:u,passwordVerification:w},st:new ot(new rt(l),t.from($)),ot:new it(u)}),w}function pt(t,e){return e===v?(t=>{if(typeof w==b){const e=new o((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new w).encode(t)})(t):e}function dt(t,e,n){return t.subarray(e,n)}function yt(t,e){return t.C(e)}function mt(t,e){return t.A(e)}class gt extends d{constructor({password:t,rawPassword:e,passwordVerification:n,checkPasswordOnly:s}){super({start(){vt(this,t,e,n)},transform(t,e){const n=this;if(n.password||n.rawPassword){const e=bt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e.at(-1)^n.passwordVerification))throw new r(T);t=t.subarray(12)}s?e.error(new r(H)):e.enqueue(bt(n,t))}})}}class St extends d{constructor({password:t,rawPassword:e,passwordVerification:n}){super({start(){vt(this,t,e,n)},transform(t,e){const n=this;let s,r;if(n.password||n.rawPassword){n.password=n.rawPassword=null;const e=Z(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(kt(n,e),0),r=12}else s=new o(t.length),r=0;s.set(kt(n,t),r),e.enqueue(s)}})}}function vt(t,n,s,r){e.assign(t,{password:n,rawPassword:s,passwordVerification:r}),((t,n,s)=>{const r=[305419896,591751049,878082192];if(e.assign(t,{keys:r,ct:new _(r[0]),ft:new _(r[2])}),s)for(let e=0;e<s.length;e++)zt(t,s[e]);else for(let e=0;e<n.length;e++)zt(t,n.charCodeAt(e))})(t,n,s)}function bt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=Ct(t)^e[s],zt(t,n[s]);return n}function kt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=Ct(t)^e[s],zt(t,e[s]);return n}function zt(t,e){let[,n]=t.keys;t.ct.append([e]);const r=~t.ct.get();n=It(s.imul(It(n+At(r)),134775813)+1),t.ft.append([n>>>24]);const o=~t.ft.get();t.keys=[r,n,o]}function Ct(t){const e=2|t.keys[2];return At(s.imul(e,1^e)>>>8)}function At(t){return 255&t}function It(t){return 4294967295&t}const xt=new f;function Pt(t){return xt.get(t)}class Dt extends d{constructor(t,{chunkSize:e,CompressionStreamZlib:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:i,zipCrypto:c,signed:a,level:f,deflate64:u,format:w}=t,h=this;let p,d,y,m=super.readable;const g=w&&Pt(w),S=a&&r&&!u&&!g&&(!o||c)&&!(!i||!s);o&&!c||!a||S||(p=new B,m=Vt(m,p)),r&&(g?m=Wt(m,_t(g.CompressionStream,w,{level:f,chunkSize:e})):S?(y=new Rt,m=Wt(m,new s("gzip")),m=Vt(m,y)):m=Bt(m,i,{level:f,chunkSize:e},s,n,s)),o&&(c?m=Vt(m,new St(t)):(d=new lt(t),m=Vt(m,d))),Mt(h,m,()=>{let t;o&&!c&&(t=d.signature),o&&!c||!a||(t=S?y.signature:new l(p.value.buffer).getUint32(0)),h.signature=t})}}class Rt extends d{constructor(){let t,e=10,n=new o(0);super({transform(t,r){if(e){const n=s.min(e,t.length);if(e-=n,!(t=t.subarray(n)).length)return}const o=n.length+t.length;if(8>=o)return void(n=V(n,t));const i=o-8,c=s.min(i,n.length);r.enqueue(V(n.subarray(0,c),t.subarray(0,i-c))),n=V(n.subarray(c),t.subarray(i-c))},flush(){const e=new l((s=n).buffer,s.byteOffset,s.byteLength);var s;t.signature=e.getUint32(0,!0),t.uncompressedSize=e.getUint32(4,!0)}}),t=this}}class Ut extends d{constructor(t,{chunkSize:e,DecompressionStreamZlib:n,DecompressionStream:s}){super({});const{zipCrypto:o,encrypted:i,signed:c,signature:a,compressed:f,useCompressionStream:u,deflate64:w,format:h}=t;let p,d,m=super.readable;if(i&&(o?m=Vt(m,new gt(t)):(d=new ft(t),m=Vt(m,d))),f){const t=h&&Pt(h);m=t?Wt(m,_t(t.DecompressionStream,h,{chunkSize:e})):Bt(m,u,{chunkSize:e,deflate64:w},s,n,s),m=(t=>{const e=t.getReader();return new y({async pull(t){let n;try{n=await e.read()}catch(t){if(t&&t.message)throw t;const e=new r("Invalid compressed data");throw e.cause=t,e}const{value:s,done:o}=n;o?t.close():t.enqueue(s)},cancel:t=>e.cancel(t)})})(m)}i&&!o||!c||(p=new B,m=Vt(m,p)),Mt(this,m,()=>{if((!i||o)&&c){const t=new l(p.value.buffer);if(a!=t.getUint32(0,!1))throw new r(j)}})}}function Mt(t,n,s){n=Vt(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function _t(t,e,n){if(!t)throw new r("Compression method not supported");return new t(e,n)}function Bt(t,e,n,s,r,o){const i=e&&s?s:r||o,c=n.deflate64?"deflate64-raw":"deflate-raw";let a;try{a=new i(c,n)}catch(t){if(!e)throw t;if(r)a=new r(c,n);else{if(!o)throw t;a=new o(c,n)}}return Wt(t,a)}function Vt(t,e){return t.pipeThrough(e)}function Wt(t,e){const n=e.writable.getWriter(),s=t.getReader();return(async()=>{try{for(;;){await n.ready;const t=await s.read();if(t.done){await n.close();break}await n.write(t.value)}}catch(t){await(async(t,e)=>{try{await t.abort(e)}catch{}})(n,t),await(async(t,e)=>{try{await t.cancel(e)}catch{}})(s,t)}})(),e.readable}const Kt="data",Et="close";class Lt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let i;o.startsWith("deflate")?i=Dt:o.startsWith("inflate")&&(i=Ut),s.outputSize=0;let c=0;const a=new i(t,n),f=super.readable,l=new d({transform(t,e){t&&t.length&&(c+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:c})}}),u=new d({transform(e,n){if(e&&e.length&&(n.enqueue(e),s.outputSize+=e.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r("Invalid uncompressed size")},flush(){const{signature:t}=a;e.assign(s,{signature:t,inputSize:c})}});e.defineProperty(s,"readable",{get:()=>f.pipeThrough(l).pipeThrough(a).pipeThrough(u)})}}class Ot extends d{constructor(t){const e=[];let s=0;function r(){const n=new o(t);let r=0;for(;t>r;){const s=e[0],o=t-r;s.length>o?(n.set(s.subarray(0,o),r),e[0]=s.subarray(o),r+=o):(n.set(s,r),r+=s.length,e.shift())}return s-=t,n}n.isFinite(t)&&t>=1||(t=65536),super({transform(n,o){for(e.push(n),s+=n.length;s>t;)o.enqueue(r())},flush(t){s&&t.enqueue(((t,e)=>{const n=new o(e);let s=0;for(const e of t)n.set(e,s),s+=e.length;return n})(e,s))}})}}let Tt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Tt=navigator.hardwareConcurrency)}catch{}const jt=new f,Ht=new f;let Zt,Ft,Nt,qt,Gt,Jt=0;async function Qt(t){let e,o;try{const{options:i,config:c}=t;if(i.format&&await(async(t,e)=>{!xt.has(t)&&e&&((t,e)=>{const{CompressionStream:n,DecompressionStream:s}=e;if(typeof n!=k&&typeof s!=k)throw new r("Invalid codec module");xt.set(t,{CompressionStream:n,DecompressionStream:s})})(t,await(import(e)))})(i.format,i.codecURI),!i.useCompressionStream)try{await self.initModule(t.config)}catch{i.useCompressionStream=!0}c.CompressionStream=self.CompressionStream,c.DecompressionStream=self.DecompressionStream;const a={highWaterMark:1},f=t.readable||new y({async pull(t){const e=new u(t=>jt.set(Jt,t));Xt({type:"pull",messageId:Jt}),Jt=(Jt+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);o=t.writable||new m({async write(t){let e;const s=new u(t=>e=t);Ht.set(Jt,e),Xt({type:Kt,value:t,messageId:Jt}),Jt=(Jt+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Lt(i,c),Zt=new AbortController;const{signal:l}=Zt;await f.pipeThrough(e).pipeThrough(new Ot((t=>s.max(t.chunkSize,64))(c))).pipeTo(o,{signal:l,preventClose:!0,preventAbort:!0}),await o.getWriter().close();const{signature:w,inputSize:h,outputSize:p}=e;Xt({type:Et,result:{signature:w,inputSize:h,outputSize:p}})}catch(t){if(t.outputSize=e?e.outputSize:0,o&&!o.locked)try{await o.getWriter().close()}catch{}Yt(t)}}function Xt(t){const{value:e}=t;if(e)if(e.length)try{t.value=(n=e,n.byteOffset||n.byteLength!=n.buffer.byteLength?new o(n):n).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var n}function Yt(t=new r("Unknown error")){const{message:e,stack:n,code:s,name:o,outputSize:i}=t;p({error:{message:e,stack:n,code:s,name:o,outputSize:i}})}function $t(t,e,n={}){const i="number"==typeof n.level?n.level:-1,c="number"==typeof n.outBuffer?n.outBuffer:65536,a="number"==typeof n.inBufferSize?n.inBufferSize:65536;return new d({start(){try{let n;if(this.lt=Nt(c),this.in=Nt(a),this.inBufferSize=a,!this.lt||!this.in)throw new r("allocation failed");if(this.ut=new o(c),t?(this.wt=Ft.deflate_process,this.ht=Ft.deflate_last_consumed,this.yt=Ft.deflate_end,this.gt=Ft.deflate_new(),n="gzip"===e?Ft.deflate_init_gzip(this.gt,i):"deflate-raw"===e?Ft.deflate_init_raw(this.gt,i):Ft.deflate_init(this.gt,i)):"deflate64-raw"===e?(this.wt=Ft.inflate9_process,this.ht=Ft.inflate9_last_consumed,this.yt=Ft.inflate9_end,this.gt=Ft.inflate9_new(),n=Ft.inflate9_init_raw(this.gt)):(this.wt=Ft.inflate_process,this.ht=Ft.inflate_last_consumed,this.yt=Ft.inflate_end,this.gt=Ft.inflate_new(),n="deflate-raw"===e?Ft.inflate_init_raw(this.gt):"gzip"===e?Ft.inflate_init_gzip(this.gt):Ft.inflate_init(this.gt)),0!==n)throw new r("init failed:"+n)}catch(t){throw f(this),t}},transform(e,n){try{const i=e,a=new o(Gt.buffer),f=this.wt,l=this.ht,u=this.lt,w=this.ut;let h=0;for(;h<i.length;){const e=s.min(i.length-h,32768);if((!this.in||this.inBufferSize<e)&&(this.in&&qt&&(qt(this.in),this.in=0),this.in=Nt(e),this.inBufferSize=e,!this.in))throw new r("allocation failed");a.set(i.subarray(h,h+e),this.in);const o=f(this.gt,this.in,e,u,c,0),p=16777215&o;if(p&&(w.set(a.subarray(u,u+p),0),n.enqueue(w.slice(0,p))),!t){const t=o>>24&255,e=128&t?t-256:t;if(0>e)throw new r("process error:"+e)}const d=l(this.gt);if(0===d)break;h+=d}}catch(t){f(this),n.error(t)}},flush(e){try{const n=new o(Gt.buffer),s=this.wt,i=this.lt,a=this.ut;for(;;){const o=s(this.gt,0,0,i,c,4),f=16777215&o,l=o>>24&255;if(!t){const t=128&l?l-256:l;if(0>t)throw new r("process error:"+t)}if(f&&(a.set(n.subarray(i,i+f),0),e.enqueue(a.slice(0,f))),1===l||0===f)break}}catch(t){e.error(t)}finally{const t=f(this);0!==t&&e.error(new r("end error:"+t))}},cancel(){f(this)}});function f(t){let e=0;return t.gt&&t.yt&&(e=t.yt(t.gt)),t.gt=0,t.in&&qt&&qt(t.in),t.in=0,t.lt&&qt&&qt(t.lt),t.lt=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&Qt(t),e==Kt){const t=jt.get(n);jt.delete(n),t({value:s||new o,done:r})}if("ack"==e){const t=Ht.get(n);Ht.delete(n),t()}e==Et&&Zt.abort()}catch(t){Yt(t)}});class te{constructor(t="deflate",e){return $t(!0,t,e)}}class ee{constructor(t="deflate",e){return $t(!1,t,e)}}te.St=!0,ee.St=!0;let ne=!1;self.initModule=async t=>{try{const e=await(async(t,{baseURI:e})=>{if(!ne){let n,s;try{try{s=new URL(t,e)}catch{}const r=await fetch(s);n=await r.arrayBuffer()}catch(e){if(!t.startsWith("data:application/wasm;base64,"))throw e;n=(t=>{const e=t.split(",")[1],n=atob(e),s=n.length,r=new o(s);for(let t=0;s>t;++t)r[t]=n.charCodeAt(t);return r.buffer})(t)}(t=>{if(Ft=t,({malloc:Nt,free:qt,memory:Gt}=Ft),"function"!=typeof Nt||"function"!=typeof qt||!Gt)throw Ft=Nt=qt=Gt=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports),ne=!0}})(t.wasmURI,t);return t.CompressionStreamZlib=te,t.DecompressionStreamZlib=ee,e}catch{}}});\n';t({workerURI:t=>{const n="text/javascript";if(t){const t=new Blob([e],{type:n});return URL.createObjectURL(t)}return "data:"+n+","+encodeURIComponent(e)}});}
227
+ function t$1(t){const e='(t=>{"function"==typeof define&&define.amd?define(t):t()})(function(){"use strict";const{Array:t,Object:e,Number:n,Math:s,Error:r,Uint8Array:o,Uint16Array:i,Uint32Array:c,Int32Array:a,Map:f,DataView:l,Promise:u,TextEncoder:w,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:g,DecompressionStream:S}=self,v=void 0,b="undefined",k="function",z=new o,C=[[],[],[],[],[],[],[],[]];for(let t=0;256>t;t++){let e=t;for(let t=0;8>t;t++)e=1&e?e>>>1^3988292384:e>>>1;C[0][t]=e}for(let t=0;256>t;t++)for(let e=1;8>e;e++){const n=C[e-1][t];C[e][t]=n>>>8^C[0][255&n]}const[A,I,x,P,D,R,U,M]=C;class _{constructor(t){this.o=t||-1}append(t){let e=0|this.o;const n=0|t.length;let s=0;if(n>=8&&t.buffer){const r=new l(t.buffer,t.byteOffset,n),o=n-8;for(;o>=s;s+=8){const t=e^r.getInt32(s,!0),n=r.getInt32(s+4,!0);e=M[255&t]^U[t>>>8&255]^R[t>>>16&255]^D[t>>>24&255]^P[255&n]^x[n>>>8&255]^I[n>>>16&255]^A[n>>>24&255]}}for(;n>s;s++)e=e>>>8^A[255&(e^t[s])];this.o=e}get(){return~this.o}}class B extends d{constructor(){let t;const e=new _;super({transform(t,n){e.append(t),n.enqueue(t)},flush(){const n=new o(4);new l(n.buffer).setUint32(0,e.get()),t.value=n}}),t=this}}function V(t,e){const n=new o(t.length+e.length);return n.set(t),n.set(e,t.length),n}const W={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=W.l(n);return 32===s?t.concat(e):W.h(e,s,0|n,t.slice(0,t.length-1))},m(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+W.l(n)},S(t,e){if(32*t.length<e)return t;const n=(t=t.slice(0,s.ceil(e/32))).length;return e&=31,n>0&&e&&(t[n-1]=W.v(e,t[n-1]&2147483648>>e-1,1)),t},v:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,e,n,s){for(void 0===s&&(s=[]);e>=32;e-=32)s.push(n),n=0;if(0===e)return s.concat(t);for(let r=0;r<t.length;r++)s.push(n|t[r]>>>e),n=t[r]<<32-e;const r=t.length?t[t.length-1]:0,o=W.l(r);return s.push(W.v(e+o&31,e+o>32?n:s.pop(),1)),s}},K={bytes:{C(t){const e=W.m(t)/8,n=new o(e);let s;for(let r=0;e>r;r++)3&r||(s=t[r/4]),n[r]=s>>>24,s<<=8;return n},A(t){const e=[];let n,s=0;for(n=0;n<t.length;n++)s=s<<8|t[n],3&~n||(e.push(s),s=0);return 3&n&&e.push(W.v(8*(3&n),s)),e}}},E=class{constructor(t){const e=this;e.blockSize=512,e.I=[1732584193,4023233417,2562383102,271733878,3285377520],e.P=[1518500249,1859775393,2400959708,3395469782],t?(e.D=t.D.slice(0),e.R=t.R.slice(0),e.U=t.U):e.reset()}reset(){const t=this;return t.D=t.I.slice(0),t.R=[],t.U=0,t}update(t){const e=this;"string"==typeof t&&(t=K.M.A(t));const n=e.R=W.concat(e.R,t),s=e.U,o=e.U=s+W.m(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const i=new c(n);let a=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);o>=t;t+=e.blockSize)e._(i.subarray(16*a,16*(a+1))),a+=1;return n.splice(0,16*a),e}B(){const t=this;let e=t.R;const n=t.D;e=W.concat(e,[W.v(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.U/4294967296)),e.push(0|t.U);e.length;)t._(e.splice(0,16));return t.reset(),n}V(t,e,n,s){return t>19?t>39?t>59?t>79?void 0:e^n^s:e&n|e&s|n&s:e^n^s:e&n|~e&s}W(t,e){return e<<t|e>>>32-t}_(e){const n=this,r=n.D,o=t(80);for(let t=0;16>t;t++)o[t]=e[t];let i=r[0],c=r[1],a=r[2],f=r[3],l=r[4];for(let t=0;79>=t;t++){16>t||(o[t]=n.W(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n.W(5,i)+n.V(t,c,a,f)+l+o[t]+n.P[s.floor(t/20)]|0;l=f,f=a,a=n.W(30,c),c=i,i=e}r[0]=r[0]+i|0,r[1]=r[1]+c|0,r[2]=r[2]+a|0,r[3]=r[3]+f|0,r[4]=r[4]+l|0}},L={importKey:t=>new L.K(K.bytes.A(t)),L(t,e,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let i,c,a,f,u;const w=new ArrayBuffer(o),h=new l(w);let p=0;const d=W;for(e=K.bytes.A(e),u=1;(o||1)>p;u++){for(i=c=t.encrypt(d.concat(e,[u])),a=1;n>a;a++)for(c=t.encrypt(c),f=0;f<c.length;f++)i[f]^=c[f];for(a=0;(o||1)>p&&a<i.length;a++)h.setInt32(p,i[a]),p+=4}return w.slice(0,s/8)},K:class{constructor(t){const e=this,n=e.O=E,s=[[],[]];e.T=[new n,new n];const r=e.T[0].blockSize/32;t.length>r&&(t=(new n).update(t).B());for(let e=0;r>e;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e.T[0].update(s[0]),e.T[1].update(s[1]),e.j=new n(e.T[0])}reset(){const t=this;t.j=new t.O(t.T[0]),t.H=!1}update(t){this.H=!0,this.j.update(t)}digest(){const t=this,e=t.j.B(),n=new t.O(t.T[1]).update(e).B();return t.reset(),n}encrypt(t){if(this.H)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},O=typeof h!=b&&typeof h.getRandomValues==k,T="Invalid password",j="Invalid signature",H="zipjs-abort-check-password";function Z(t){if(O)return h.getRandomValues(t);throw new r("Crypto API not supported")}const F=16,N={name:"PBKDF2"},q=e.assign({hash:{name:"HMAC"}},N),G=e.assign({iterations:1e3,hash:{name:"SHA-1"}},N),J=["deriveBits"],Q=[8,12,16],X=[16,24,32],Y=10,$=[0,0,0,0],tt=typeof h!=b,et=tt&&h.subtle,nt=tt&&typeof et!=b,st=K.bytes,rt=class{constructor(t){const e=this;e.Z=[[[],[],[],[],[]],[[],[],[],[],[]]],e.Z[0][0][0]||e.F();const n=e.Z[0][4],s=e.Z[1],o=t.length;let i,c,a,f=1;if(4!==o&&6!==o&&8!==o)throw new r("invalid aes key size");for(e.P=[c=t.slice(0),a=[]],i=o;4*o+28>i;i++){let t=c[i-1];(i%o===0||8===o&&i%o===4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],i%o===0&&(t=t<<8^t>>>24^f<<24,f=f<<1^283*(f>>7))),c[i]=c[i-o]^t}for(let t=0;i;t++,i--){const e=c[3&t?i:i-4];a[t]=4>=i||4>t?e:s[0][n[e>>>24]]^s[1][n[e>>16&255]]^s[2][n[e>>8&255]]^s[3][n[255&e]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}F(){const t=this.Z[0],e=this.Z[1],n=t[4],s=e[4],r=[],o=[];let i,c,a,f;for(let t=0;256>t;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let l=i=0;!n[l];l^=c||1,i=o[i]||1){let o=i^i<<1^i<<2^i<<3^i<<4;o=o>>8^255&o^99,n[l]=o,s[o]=l,f=r[a=r[c=r[l]]];let u=16843009*f^65537*a^257*c^16843008*l,w=257*r[o]^16843008*o;for(let n=0;4>n;n++)t[n][l]=w=w<<24^w>>>8,e[n][o]=u=u<<24^u>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}N(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.P[e],s=n.length/4-2,o=[0,0,0,0],i=this.Z[e],c=i[0],a=i[1],f=i[2],l=i[3],u=i[4];let w,h,p,d=t[0]^n[0],y=t[e?3:1]^n[1],m=t[2]^n[2],g=t[e?1:3]^n[3],S=4;for(let t=0;s>t;t++)w=c[d>>>24]^a[y>>16&255]^f[m>>8&255]^l[255&g]^n[S],h=c[y>>>24]^a[m>>16&255]^f[g>>8&255]^l[255&d]^n[S+1],p=c[m>>>24]^a[g>>16&255]^f[d>>8&255]^l[255&y]^n[S+2],g=c[g>>>24]^a[d>>16&255]^f[y>>8&255]^l[255&m]^n[S+3],S+=4,d=w,y=h,m=p;for(let t=0;4>t;t++)o[e?3&-t:t]=u[d>>>24]<<24^u[y>>16&255]<<16^u[m>>8&255]<<8^u[255&g]^n[S++],w=d,d=y,y=m,m=g,g=w;return o}},ot=class{constructor(t,e){this.G=t,this.J=e,this.X=e}reset(){this.X=this.J}update(t){return this.Y(this.G,t,this.X)}$(t){if(255&~(t>>24))t+=1<<24;else{let e=t>>16&255,n=t>>8&255,s=255&t;255===e?(e=0,255===n?(n=0,255===s?s=0:++s):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=s}return t}et(t){0===(t[0]=this.$(t[0]))&&(t[1]=this.$(t[1]))}Y(t,e,n){let s;if(!(s=e.length))return[];const r=W.m(e);for(let r=0;s>r;r+=4){this.et(n);const s=t.encrypt(n);e[r]^=s[0],e[r+1]^=s[1],e[r+2]^=s[2],e[r+3]^=s[3]}return W.S(e,r)}},it=L.K;let ct=tt&&nt&&typeof et.importKey==k,at=tt&&nt&&typeof et.deriveBits==k;class ft extends d{constructor({password:t,rawPassword:e,encryptionStrength:n,checkPasswordOnly:s}){super({start(){ut(this,t,e,n)},async transform(t,e){const n=this,{password:i,strength:c,nt:a,ready:f}=n;i?(await(async(t,e,n,s)=>{const o=await ht(t,e,n,dt(s,0,Q[e])),i=dt(s,Q[e]);if(o[0]!=i[0]||o[1]!=i[1])throw new r(T)})(n,c,i,dt(t,0,Q[c]+2)),t=dt(t,Q[c]+2),s?e.error(new r(H)):a()):await f;const l=new o(t.length-Y-(t.length-Y)%F);e.enqueue(wt(n,t,l,0,Y,!0))},async flush(t){const{st:e,ot:n,pending:s,ready:o}=this;if(n&&e){await o;const i=dt(s,0,s.length-Y),c=dt(s,s.length-Y);let a=z;if(i.length){const t=mt(st,i);n.update(t);const s=e.update(t);a=yt(st,s)}const f=dt(yt(st,n.digest()),0,Y);let l=s.length<Y?1:0;for(let t=0;Y>t;t++)l|=f[t]^c[t];if(l)throw new r(j);t.enqueue(a)}}})}}class lt extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){let s;super({start(){ut(this,t,e,n)},async transform(t,e){const n=this,{password:s,strength:r,nt:i,ready:c}=n;let a=z;s?(a=await(async(t,e,n)=>{const s=Z(new o(Q[e]));return V(s,await ht(t,e,n,s))})(n,r,s),i()):await c;const f=new o(a.length+t.length-t.length%F);f.set(a,0),e.enqueue(wt(n,t,f,a.length,0))},async flush(t){const{st:e,ot:n,pending:r,ready:o}=this;if(n&&e){await o;let i=z;if(r.length){const t=e.update(mt(st,r));n.update(t),i=yt(st,t)}s.signature=yt(st,n.digest()).slice(0,Y),t.enqueue(V(i,s.signature))}}}),s=this}}function ut(t,n,s,r){e.assign(t,{ready:new u(e=>t.nt=e),password:pt(n,s),strength:r-1,pending:z})}function wt(t,e,n,s,r,i){const{st:c,ot:a,pending:f}=t;f.length&&(e=V(f,e));const l=e.length-r;let u;for(n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new o(e)).set(n,0)}return t})(n,s+(l-l%F)),u=0;l-F>=u;u+=F){const t=mt(st,dt(e,u,u+F));i&&a.update(t);const r=c.update(t);i||a.update(r),n.set(yt(st,r),u+s)}return t.pending=dt(e,u),n}async function ht(n,s,r,i){n.password=null;const c=await(async(t,e,n,s,r)=>{if(!ct)return L.importKey(e);try{return await et.importKey("raw",e,n,!1,r)}catch{return ct=!1,L.importKey(e)}})(0,r,q,0,J),a=await(async(t,e,n)=>{if(!at)return L.L(e,t.salt,G.iterations,n);try{return await et.deriveBits(t,e,n)}catch{return at=!1,L.L(e,t.salt,G.iterations,n)}})(e.assign({salt:i},G),c,8*(2*X[s]+2)),f=new o(a),l=mt(st,dt(f,0,X[s])),u=mt(st,dt(f,X[s],2*X[s])),w=dt(f,2*X[s]);return e.assign(n,{keys:{key:l,it:u,passwordVerification:w},st:new ot(new rt(l),t.from($)),ot:new it(u)}),w}function pt(t,e){return e===v?(t=>{if(typeof w==b){const e=new o((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new w).encode(t)})(t):e}function dt(t,e,n){return t.subarray(e,n)}function yt(t,e){return t.C(e)}function mt(t,e){return t.A(e)}class gt extends d{constructor({password:t,rawPassword:e,passwordVerification:n,checkPasswordOnly:s}){super({start(){vt(this,t,e,n)},transform(t,e){const n=this;if(n.password||n.rawPassword){const e=bt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e.at(-1)^n.passwordVerification))throw new r(T);t=t.subarray(12)}s?e.error(new r(H)):e.enqueue(bt(n,t))}})}}class St extends d{constructor({password:t,rawPassword:e,passwordVerification:n}){super({start(){vt(this,t,e,n)},transform(t,e){const n=this;let s,r;if(n.password||n.rawPassword){n.password=n.rawPassword=null;const e=Z(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(kt(n,e),0),r=12}else s=new o(t.length),r=0;s.set(kt(n,t),r),e.enqueue(s)}})}}function vt(t,n,s,r){e.assign(t,{password:n,rawPassword:s,passwordVerification:r}),((t,n,s)=>{const r=[305419896,591751049,878082192];if(e.assign(t,{keys:r,ct:new _(r[0]),ft:new _(r[2])}),s)for(let e=0;e<s.length;e++)zt(t,s[e]);else for(let e=0;e<n.length;e++)zt(t,n.charCodeAt(e))})(t,n,s)}function bt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=Ct(t)^e[s],zt(t,n[s]);return n}function kt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=Ct(t)^e[s],zt(t,e[s]);return n}function zt(t,e){let[,n]=t.keys;t.ct.append([e]);const r=~t.ct.get();n=It(s.imul(It(n+At(r)),134775813)+1),t.ft.append([n>>>24]);const o=~t.ft.get();t.keys=[r,n,o]}function Ct(t){const e=2|t.keys[2];return At(s.imul(e,1^e)>>>8)}function At(t){return 255&t}function It(t){return 4294967295&t}const xt=new f;function Pt(t){return xt.get(t)}const Dt="deflate-raw";class Rt extends d{constructor(t,{chunkSize:e,CompressionStreamZlib:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:i,zipCrypto:c,signed:a,level:f,deflate64:u,format:w}=t,h=this;let p,d,y,m=super.readable;const g=w&&Pt(w),S=a&&r&&!u&&!g&&(!o||c)&&!(!i||!s);o&&!c||!a||S||(p=new B,m=Kt(m,p)),r&&(g?m=Et(m,Vt(g.CompressionStream,w,{level:f,chunkSize:e})):S?(y=new Ut,m=Et(m,new s("gzip")),m=Kt(m,y)):m=Wt(m,i,{level:f,chunkSize:e},s,n)),o&&(c?m=Kt(m,new St(t)):(d=new lt(t),m=Kt(m,d))),Bt(h,m,()=>{let t;o&&!c&&(t=d.signature),o&&!c||!a||(t=S?y.signature:new l(p.value.buffer).getUint32(0)),h.signature=t})}}class Ut extends d{constructor(){let t,e=10,n=new o(0);super({transform(t,r){if(e){const n=s.min(e,t.length);if(e-=n,!(t=t.subarray(n)).length)return}const o=n.length+t.length;if(8>=o)return void(n=V(n,t));const i=o-8,c=s.min(i,n.length);r.enqueue(V(n.subarray(0,c),t.subarray(0,i-c))),n=V(n.subarray(c),t.subarray(i-c))},flush(){const e=new l((s=n).buffer,s.byteOffset,s.byteLength);var s;t.signature=e.getUint32(0,!0),t.uncompressedSize=e.getUint32(4,!0)}}),t=this}}class Mt extends d{constructor(t,{chunkSize:e,DecompressionStreamZlib:n,DecompressionStream:s}){super({});const{zipCrypto:o,encrypted:i,signed:c,signature:a,compressed:f,useCompressionStream:u,deflate64:w,format:h}=t;let p,d,m=super.readable;if(i&&(o?m=Kt(m,new gt(t)):(d=new ft(t),m=Kt(m,d))),f){const t=h&&Pt(h);m=t?Et(m,Vt(t.DecompressionStream,h,{chunkSize:e})):Wt(m,u,{chunkSize:e,deflate64:w},s,n),m=(t=>{const e=t.getReader();return new y({async pull(t){let n;try{n=await e.read()}catch(t){if(t&&t.message)throw t;const e=new r("Invalid compressed data");throw e.cause=t,e}const{value:s,done:o}=n;o?t.close():t.enqueue(s)},cancel:t=>e.cancel(t)})})(m)}i&&!o||!c||(p=new B,m=Kt(m,p)),Bt(this,m,()=>{if((!i||o)&&c){const t=new l(p.value.buffer);if(a!=t.getUint32(0,!1))throw new r(j)}})}}const _t=new f;function Bt(t,n,s){n=Kt(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Vt(t,e,n){if(!t)throw new r("Compression method not supported");return new t(e,n)}function Wt(t,e,n,s,r){const o=e&&s?s:r||s,i=n.deflate64?"deflate64-raw":Dt;let c;try{c=new o(i,n)}catch(t){if(!e||!r||o==r)throw t;c=new r(i,n)}return Et(t,c)}function Kt(t,e){return t.pipeThrough(e)}function Et(t,e){const n=e.writable.getWriter(),s=t.getReader();return(async()=>{try{for(;;){await n.ready;const t=await s.read();if(t.done){await n.close();break}await n.write(t.value)}}catch(t){await(async(t,e)=>{try{await t.abort(e)}catch{}})(n,t),await(async(t,e)=>{try{await t.cancel(e)}catch{}})(s,t)}})(),e.readable}const Lt="data",Ot="close",Tt="deflate";class jt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let i;o.startsWith(Tt)?i=Rt:o.startsWith("inflate")&&(i=Mt),s.outputSize=0;let c=0;const a=new i(t,n),f=super.readable,l=new d({transform(t,e){t&&t.length&&(c+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:c})}}),u=new d({transform(e,n){if(e&&e.length&&(n.enqueue(e),s.outputSize+=e.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r("Invalid uncompressed size")},flush(){const{signature:t}=a;e.assign(s,{signature:t,inputSize:c})}});e.defineProperty(s,"readable",{get:()=>f.pipeThrough(l).pipeThrough(a).pipeThrough(u)})}}class Ht extends d{constructor(t){const e=[];let s=0;function r(){const n=new o(t);let r=0;for(;t>r;){const s=e[0],o=t-r;s.length>o?(n.set(s.subarray(0,o),r),e[0]=s.subarray(o),r+=o):(n.set(s,r),r+=s.length,e.shift())}return s-=t,n}n.isFinite(t)&&t>=1||(t=65536),super({transform(n,o){for(e.push(n),s+=n.length;s>t;)o.enqueue(r())},flush(t){s&&t.enqueue(((t,e)=>{const n=new o(e);let s=0;for(const e of t)n.set(e,s),s+=e.length;return n})(e,s))}})}}let Zt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Zt=navigator.hardwareConcurrency)}catch{}const Ft=new f,Nt=new f;let qt,Gt,Jt,Qt,Xt,Yt=0;async function $t(t){let e,o;try{const{options:i,config:c}=t;if(i.format&&await(async(t,e)=>{!xt.has(t)&&e&&((t,e)=>{const{CompressionStream:n,DecompressionStream:s}=e;if(typeof n!=k&&typeof s!=k)throw new r("Invalid codec module");xt.set(t,{CompressionStream:n,DecompressionStream:s})})(t,await(import(e)))})(i.format,i.codecURI),c.CompressionStream=self.CompressionStream,c.DecompressionStream=self.DecompressionStream,i.compressed&&!i.format)if(i.useCompressionStream){if(!(t=>{if(!t)return!1;let e=_t.get(t);if(e===v){try{new t(Dt),e=!0}catch{e=!1}_t.set(t,e)}return e})(i.codecType.startsWith(Tt)?c.CompressionStream:c.DecompressionStream))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{i.useCompressionStream=!0}const a={highWaterMark:1},f=t.readable||new y({async pull(t){const e=new u(t=>Ft.set(Yt,t));te({type:"pull",messageId:Yt}),Yt=(Yt+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);o=t.writable||new m({async write(t){let e;const s=new u(t=>e=t);Nt.set(Yt,e),te({type:Lt,value:t,messageId:Yt}),Yt=(Yt+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new jt(i,c),qt=new AbortController;const{signal:l}=qt;await f.pipeThrough(e).pipeThrough(new Ht((t=>s.max(t.chunkSize,64))(c))).pipeTo(o,{signal:l,preventClose:!0,preventAbort:!0}),await o.getWriter().close();const{signature:w,inputSize:h,outputSize:p}=e;te({type:Ot,result:{signature:w,inputSize:h,outputSize:p}})}catch(t){if(t.outputSize=e?e.outputSize:0,o&&!o.locked)try{await o.getWriter().close()}catch{}ee(t)}}function te(t){const{value:e}=t;if(e)if(e.length)try{t.value=(n=e,n.byteOffset||n.byteLength!=n.buffer.byteLength?new o(n):n).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var n}function ee(t=new r("Unknown error")){const{message:e,stack:n,code:s,name:o,outputSize:i}=t;p({error:{message:e,stack:n,code:s,name:o,outputSize:i}})}function ne(t,e,n={}){const i="number"==typeof n.level?n.level:-1,c="number"==typeof n.outBuffer?n.outBuffer:65536,a="number"==typeof n.inBufferSize?n.inBufferSize:65536;return new d({start(){try{let n;if(this.lt=Jt(c),this.in=Jt(a),this.inBufferSize=a,!this.lt||!this.in)throw new r("allocation failed");if(this.ut=new o(c),t?(this.wt=Gt.deflate_process,this.ht=Gt.deflate_last_consumed,this.yt=Gt.deflate_end,this.gt=Gt.deflate_new(),n="gzip"===e?Gt.deflate_init_gzip(this.gt,i):"deflate-raw"===e?Gt.deflate_init_raw(this.gt,i):Gt.deflate_init(this.gt,i)):"deflate64-raw"===e?(this.wt=Gt.inflate9_process,this.ht=Gt.inflate9_last_consumed,this.yt=Gt.inflate9_end,this.gt=Gt.inflate9_new(),n=Gt.inflate9_init_raw(this.gt)):(this.wt=Gt.inflate_process,this.ht=Gt.inflate_last_consumed,this.yt=Gt.inflate_end,this.gt=Gt.inflate_new(),n="deflate-raw"===e?Gt.inflate_init_raw(this.gt):"gzip"===e?Gt.inflate_init_gzip(this.gt):Gt.inflate_init(this.gt)),0!==n)throw new r("init failed:"+n)}catch(t){throw f(this),t}},transform(e,n){try{const i=e,a=new o(Xt.buffer),f=this.wt,l=this.ht,u=this.lt,w=this.ut;let h=0;for(;h<i.length;){const e=s.min(i.length-h,32768);if((!this.in||this.inBufferSize<e)&&(this.in&&Qt&&(Qt(this.in),this.in=0),this.in=Jt(e),this.inBufferSize=e,!this.in))throw new r("allocation failed");a.set(i.subarray(h,h+e),this.in);const o=f(this.gt,this.in,e,u,c,0),p=16777215&o;if(p&&(w.set(a.subarray(u,u+p),0),n.enqueue(w.slice(0,p))),!t){const t=o>>24&255,e=128&t?t-256:t;if(0>e)throw new r("process error:"+e)}const d=l(this.gt);if(0===d)break;h+=d}}catch(t){f(this),n.error(t)}},flush(e){try{const n=new o(Xt.buffer),s=this.wt,i=this.lt,a=this.ut;for(;;){const o=s(this.gt,0,0,i,c,4),f=16777215&o,l=o>>24&255;if(!t){const t=128&l?l-256:l;if(0>t)throw new r("process error:"+t)}if(f&&(a.set(n.subarray(i,i+f),0),e.enqueue(a.slice(0,f))),1===l||0===f)break}}catch(t){e.error(t)}finally{const t=f(this);0!==t&&e.error(new r("end error:"+t))}},cancel(){f(this)}});function f(t){let e=0;return t.gt&&t.yt&&(e=t.yt(t.gt)),t.gt=0,t.in&&Qt&&Qt(t.in),t.in=0,t.lt&&Qt&&Qt(t.lt),t.lt=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&$t(t),e==Lt){const t=Ft.get(n);Ft.delete(n),t({value:s||new o,done:r})}if("ack"==e){const t=Nt.get(n);Nt.delete(n),t()}e==Ot&&qt.abort()}catch(t){ee(t)}}),p({type:"ready"});class se{constructor(t="deflate",e){return ne(!0,t,e)}}class re{constructor(t="deflate",e){return ne(!1,t,e)}}se.St=!0,re.St=!0;let oe=!1;self.initModule=async t=>{try{const e=await(async(t,{baseURI:e})=>{if(!oe){let n,s;try{try{s=new URL(t,e)}catch{}const r=await fetch(s);n=await r.arrayBuffer()}catch(e){if(!t.startsWith("data:application/wasm;base64,"))throw e;n=(t=>{const e=t.split(",")[1],n=atob(e),s=n.length,r=new o(s);for(let t=0;s>t;++t)r[t]=n.charCodeAt(t);return r.buffer})(t)}(t=>{if(Gt=t,({malloc:Jt,free:Qt,memory:Xt}=Gt),"function"!=typeof Jt||"function"!=typeof Qt||!Xt)throw Gt=Jt=Qt=Xt=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports),oe=!0}})(t.wasmURI,t);return t.CompressionStreamZlib=se,t.DecompressionStreamZlib=re,e}catch{}}});\n';t({workerURI:t=>{const n="text/javascript";if(t){const t=new Blob([e],{type:n});return URL.createObjectURL(t)}return "data:"+n+","+encodeURIComponent(e)}});}
224
228
 
225
229
  /*
226
230
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -1885,7 +1889,7 @@
1885
1889
  readable = pipeThroughBackpressured(readable, new CompressionStream(FORMAT_GZIP));
1886
1890
  readable = pipeThrough(readable, gzipCrc32Stream);
1887
1891
  } else {
1888
- readable = pipeThroughCommpressionStream(readable, useCompressionStream, { level, chunkSize }, CompressionStream, CompressionStreamZlib, CompressionStream);
1892
+ readable = pipeThroughCompressionStream(readable, useCompressionStream, { level, chunkSize }, CompressionStream, CompressionStreamZlib);
1889
1893
  }
1890
1894
  }
1891
1895
  if (encrypted) {
@@ -1970,7 +1974,7 @@
1970
1974
  if (codecStreams) {
1971
1975
  readable = pipeThroughBackpressured(readable, createCodecStream(codecStreams.DecompressionStream, format, { chunkSize }));
1972
1976
  } else {
1973
- readable = pipeThroughCommpressionStream(readable, useCompressionStream, { chunkSize, deflate64 }, DecompressionStream, DecompressionStreamZlib, DecompressionStream);
1977
+ readable = pipeThroughCompressionStream(readable, useCompressionStream, { chunkSize, deflate64 }, DecompressionStream, DecompressionStreamZlib);
1974
1978
  }
1975
1979
  readable = mapInflateStreamError(readable);
1976
1980
  }
@@ -1989,6 +1993,25 @@
1989
1993
  }
1990
1994
  }
1991
1995
 
1996
+ const deflateRawSupportByStream = new Map();
1997
+
1998
+ function supportsDeflateRaw(StreamClass) {
1999
+ if (!StreamClass) {
2000
+ return false;
2001
+ }
2002
+ let supported = deflateRawSupportByStream.get(StreamClass);
2003
+ if (supported === UNDEFINED_VALUE) {
2004
+ try {
2005
+ new StreamClass(FORMAT_DEFLATE_RAW);
2006
+ supported = true;
2007
+ } catch {
2008
+ supported = false;
2009
+ }
2010
+ deflateRawSupportByStream.set(StreamClass, supported);
2011
+ }
2012
+ return supported;
2013
+ }
2014
+
1992
2015
  function setReadable(stream, readable, flush) {
1993
2016
  readable = pipeThrough(readable, new TransformStream({ flush }));
1994
2017
  Object.defineProperty(stream, "readable", {
@@ -2005,21 +2028,17 @@
2005
2028
  return new CodecStreamClass(format, options);
2006
2029
  }
2007
2030
 
2008
- function pipeThroughCommpressionStream(readable, useCompressionStream, options, CompressionStreamNative, CompressionStreamZlib, CompressionStream) {
2009
- const Stream = useCompressionStream && CompressionStreamNative ? CompressionStreamNative : CompressionStreamZlib || CompressionStream;
2031
+ function pipeThroughCompressionStream(readable, useCompressionStream, options, CompressionStreamNative, CompressionStreamZlib) {
2032
+ const Stream = useCompressionStream && CompressionStreamNative ?
2033
+ CompressionStreamNative :
2034
+ CompressionStreamZlib || CompressionStreamNative;
2010
2035
  const format = options.deflate64 ? FORMAT_DEFLATE64_RAW : FORMAT_DEFLATE_RAW;
2011
2036
  let codecStream;
2012
2037
  try {
2013
2038
  codecStream = new Stream(format, options);
2014
2039
  } catch (error) {
2015
- if (useCompressionStream) {
2016
- if (CompressionStreamZlib) {
2017
- codecStream = new CompressionStreamZlib(format, options);
2018
- } else if (CompressionStream) {
2019
- codecStream = new CompressionStream(format, options);
2020
- } else {
2021
- throw error;
2022
- }
2040
+ if (useCompressionStream && CompressionStreamZlib && Stream != CompressionStreamZlib) {
2041
+ codecStream = new CompressionStreamZlib(format, options);
2023
2042
  } else {
2024
2043
  throw error;
2025
2044
  }
@@ -2280,6 +2299,7 @@
2280
2299
  const MODULE_WORKER_OPTIONS = { type: "module" };
2281
2300
  const ERROR_EVENT_TYPE = "error";
2282
2301
  const MESSAGE_ERROR_EVENT_TYPE = "messageerror";
2302
+ const ERR_WORKER_STARTUP_TIMEOUT = "Worker startup timeout";
2283
2303
 
2284
2304
  let webWorkerSupported, webWorkerSource, webWorkerURI, webWorkerOptions;
2285
2305
  let transferStreamsSupported = true;
@@ -2294,6 +2314,10 @@
2294
2314
  initModule$1 = initModuleFunction;
2295
2315
  }
2296
2316
 
2317
+ function resetWebWorkerSupport() {
2318
+ webWorkerSupported = UNDEFINED_VALUE;
2319
+ }
2320
+
2297
2321
  class CodecWorker {
2298
2322
 
2299
2323
  constructor(workerData, { readable, writable }, { options, config, streamOptions, useWebWorkers, transferStreams, workerURI }, onTaskFinished) {
@@ -2387,7 +2411,7 @@
2387
2411
  }
2388
2412
 
2389
2413
  function createWebWorkerInterface(workerData, config) {
2390
- const { baseURI, chunkSize } = config;
2414
+ const { baseURI, chunkSize, workerStartupTimeout } = config;
2391
2415
  let { wasmURI } = config;
2392
2416
 
2393
2417
  if (!workerData.interface) {
@@ -2404,9 +2428,26 @@
2404
2428
  }
2405
2429
  Object.assign(workerData, {
2406
2430
  worker,
2431
+ workerAlive: false,
2407
2432
  terminated: false,
2408
2433
  interface: {
2409
- run: () => runWebWorker(workerData, { chunkSize, wasmURI, baseURI })
2434
+ run: async () => {
2435
+ try {
2436
+ return await runWebWorker(workerData, { chunkSize, wasmURI, baseURI, workerStartupTimeout });
2437
+ } catch (error) {
2438
+ if (error && error.workerStartupFailed) {
2439
+ webWorkerSupported = false;
2440
+ const { reader } = workerData;
2441
+ if (reader) {
2442
+ reader.releaseLock();
2443
+ }
2444
+ workerData.reader = null;
2445
+ workerData.writer = null;
2446
+ return runWorker$1(workerData, config);
2447
+ }
2448
+ throw error;
2449
+ }
2450
+ }
2410
2451
  }
2411
2452
  });
2412
2453
  }
@@ -2416,15 +2457,23 @@
2416
2457
  async function runWorker$1({ options, readable, writable, onTaskFinished }, config) {
2417
2458
  let codecStream;
2418
2459
  try {
2419
- if (!options.useCompressionStream) {
2420
- try {
2421
- await initModule$1(config);
2422
- } catch {
2423
- const ZlibStream = options.codecType.startsWith(CODEC_DEFLATE) ?
2424
- config.CompressionStreamZlib :
2425
- config.DecompressionStreamZlib;
2426
- if (!ZlibStream || ZlibStream.requiresModule) {
2427
- options.useCompressionStream = true;
2460
+ if (options.compressed && !options.format) {
2461
+ const deflate = options.codecType.startsWith(CODEC_DEFLATE);
2462
+ const ZlibStream = deflate ? config.CompressionStreamZlib : config.DecompressionStreamZlib;
2463
+ const NativeStream = deflate ? config.CompressionStream : config.DecompressionStream;
2464
+ if (!options.useCompressionStream) {
2465
+ try {
2466
+ await initModule$1(config);
2467
+ } catch {
2468
+ if (!ZlibStream || ZlibStream.requiresModule) {
2469
+ options.useCompressionStream = true;
2470
+ }
2471
+ }
2472
+ } else if (ZlibStream && ZlibStream.requiresModule && !supportsDeflateRaw(NativeStream)) {
2473
+ try {
2474
+ await initModule$1(config);
2475
+ } catch {
2476
+ // ignored
2428
2477
  }
2429
2478
  }
2430
2479
  }
@@ -2493,6 +2542,10 @@
2493
2542
  writer: writable.getWriter()
2494
2543
  });
2495
2544
  }
2545
+ const { workerStartupTimeout } = config;
2546
+ if (!workerData.workerAlive && Number.isFinite(workerStartupTimeout) && workerStartupTimeout >= 0) {
2547
+ workerData.startupTimeout = setTimeout(() => onStartupTimeout(workerData), workerStartupTimeout);
2548
+ }
2496
2549
  try {
2497
2550
  const resultValue = await result;
2498
2551
  await closeWritable();
@@ -2605,28 +2658,68 @@
2605
2658
  } else {
2606
2659
  worker = new Worker(webWorkerURI, webWorkerOptions);
2607
2660
  }
2608
- worker.addEventListener(MESSAGE_EVENT_TYPE, event => onMessage(event, workerData));
2661
+ worker.addEventListener(MESSAGE_EVENT_TYPE, event => {
2662
+ workerData.workerAlive = true;
2663
+ clearStartupTimeout(workerData);
2664
+ onMessage(event, workerData);
2665
+ });
2609
2666
  worker.addEventListener(ERROR_EVENT_TYPE, event => onWorkerError(event, workerData));
2610
2667
  worker.addEventListener(MESSAGE_ERROR_EVENT_TYPE, event => onWorkerError(event, workerData));
2611
2668
  return worker;
2612
2669
  }
2613
2670
 
2671
+ function onStartupTimeout(workerData) {
2672
+ workerData.startupTimeout = null;
2673
+ if (workerData.workerAlive) {
2674
+ return;
2675
+ }
2676
+ const { rejectResult, writer } = workerData;
2677
+ terminateWorker$1(workerData);
2678
+ workerData.worker = null;
2679
+ if (rejectResult) {
2680
+ const error = new Error(ERR_WORKER_STARTUP_TIMEOUT);
2681
+ error.workerStartupFailed = true;
2682
+ rejectResult(error);
2683
+ if (writer) {
2684
+ writer.releaseLock();
2685
+ }
2686
+ }
2687
+ }
2688
+
2689
+ function clearStartupTimeout(workerData) {
2690
+ const { startupTimeout } = workerData;
2691
+ if (startupTimeout) {
2692
+ clearTimeout(startupTimeout);
2693
+ workerData.startupTimeout = null;
2694
+ }
2695
+ }
2696
+
2614
2697
  function onWorkerError(event, workerData) {
2615
2698
  if (event.preventDefault) {
2616
2699
  event.preventDefault();
2617
2700
  }
2618
- const { rejectResult, writer, onTaskFinished } = workerData;
2701
+ clearStartupTimeout(workerData);
2702
+ const { workerAlive, rejectResult, writer, onTaskFinished } = workerData;
2619
2703
  terminateWorker$1(workerData);
2704
+ if (!workerAlive) {
2705
+ workerData.worker = null;
2706
+ }
2620
2707
  if (rejectResult) {
2621
- rejectResult(event.error || new Error(event.message || ERROR_EVENT_TYPE));
2708
+ let error = event.error || new Error(event.message || ERROR_EVENT_TYPE);
2709
+ if (!workerAlive) {
2710
+ error = Object.assign(new Error(error.message || ERROR_EVENT_TYPE), { workerStartupFailed: true });
2711
+ }
2712
+ rejectResult(error);
2622
2713
  if (writer) {
2623
2714
  writer.releaseLock();
2624
2715
  }
2625
- onTaskFinished();
2716
+ if (workerAlive) {
2717
+ onTaskFinished();
2718
+ }
2626
2719
  }
2627
2720
  }
2628
2721
 
2629
- function sendMessage(message, { worker, writer, transferStreams }) {
2722
+ function sendMessage(message, { worker, writer, transferStreams, workerAlive }) {
2630
2723
  try {
2631
2724
  const { value, readable, writable } = message;
2632
2725
  const transferables = [];
@@ -2634,7 +2727,7 @@
2634
2727
  message.value = toExactUint8Array(value);
2635
2728
  transferables.push(message.value.buffer);
2636
2729
  }
2637
- if (transferStreams && transferStreamsSupported) {
2730
+ if (transferStreams && transferStreamsSupported && workerAlive) {
2638
2731
  if (readable) {
2639
2732
  transferables.push(readable);
2640
2733
  }
@@ -2872,6 +2965,7 @@
2872
2965
  clearTerminateTimeout(workerData);
2873
2966
  return workerData.terminate();
2874
2967
  }));
2968
+ resetWebWorkerSupport();
2875
2969
  }
2876
2970
 
2877
2971
  /*
@@ -4155,6 +4249,7 @@
4155
4249
  const ERR_SPLIT_ZIP_FILE = "Split zip file";
4156
4250
  const ERR_OVERLAPPING_ENTRY = "Overlapping entry found";
4157
4251
  const ERR_AMBIGUOUS_ARCHIVE = "Ambiguous archive";
4252
+ const ERR_ENCRYPTED_CENTRAL_DIRECTORY = "Encrypted central directory is not supported";
4158
4253
  const CHARSET_UTF8 = "utf-8";
4159
4254
  const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
4160
4255
  const CHARSET_CP437 = "cp437";
@@ -4232,6 +4327,7 @@
4232
4327
  let prependedDataLength = 0;
4233
4328
  let startOffset;
4234
4329
  let zip64EndOfDirectory;
4330
+ let zip64EndOfDirectoryVersion2;
4235
4331
  const requiresZip64 = directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS || diskNumber == MAX_16_BITS;
4236
4332
  if (directoryDataOffset != MAX_32_BITS && diskNumber != MAX_16_BITS) {
4237
4333
  directoryDataOffset += getDiskOffset$1(reader, diskNumber);
@@ -4261,6 +4357,7 @@
4261
4357
  throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
4262
4358
  }
4263
4359
  zip64EndOfDirectory = true;
4360
+ zip64EndOfDirectoryVersion2 = getBigUint64(endOfDirectoryView, 4) > ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12;
4264
4361
  if (lastDiskNumber == MAX_16_BITS) {
4265
4362
  lastDiskNumber = getUint32(endOfDirectoryView, 16);
4266
4363
  } else if (checkAmbiguity && lastDiskNumber != getUint32(endOfDirectoryView, 16)) {
@@ -4340,6 +4437,9 @@
4340
4437
  for (let indexFile = 0; indexFile < filesLength; indexFile++) {
4341
4438
  const fileEntry = new ZipEntry$1(reader, config, zipReader.options);
4342
4439
  if (offset + CENTRAL_FILE_HEADER_LENGTH > directoryArray.length || getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE) {
4440
+ if (indexFile == 0 && (zip64EndOfDirectoryVersion2 || detectEncryptedCentralDirectory(directoryView))) {
4441
+ throw new Error(ERR_ENCRYPTED_CENTRAL_DIRECTORY);
4442
+ }
4343
4443
  throw new Error(ERR_CENTRAL_DIRECTORY_NOT_FOUND);
4344
4444
  }
4345
4445
  readCommonHeader(fileEntry, directoryView, offset + 6);
@@ -4607,6 +4707,9 @@
4607
4707
  fileEntry.zipCrypto = zipCrypto;
4608
4708
  }
4609
4709
  if (encrypted) {
4710
+ if ((localDirectory.rawBitFlag & BITFLAG_STRONG_ENCRYPTION) == BITFLAG_STRONG_ENCRYPTION) {
4711
+ throw new Error(ERR_UNSUPPORTED_ENCRYPTION);
4712
+ }
4610
4713
  if (!zipCrypto && (extraFieldAES.strength < 1 || extraFieldAES.strength > 3)) {
4611
4714
  throw new Error(ERR_UNSUPPORTED_ENCRYPTION);
4612
4715
  } else if (!password && !rawPassword) {
@@ -4700,6 +4803,16 @@
4700
4803
  }
4701
4804
  };
4702
4805
 
4806
+ function detectEncryptedCentralDirectory(directoryView) {
4807
+ const maxOffset = Math.min(directoryView.byteLength, 1024) - 3;
4808
+ for (let offset = 0; offset < maxOffset; offset++) {
4809
+ if (getUint32(directoryView, offset) == ARCHIVE_EXTRA_DATA_SIGNATURE) {
4810
+ return true;
4811
+ }
4812
+ }
4813
+ return false;
4814
+ }
4815
+
4703
4816
  function readCommonHeader(directory, dataView, offset) {
4704
4817
  const rawBitFlag = directory.rawBitFlag = getUint16(dataView, offset + 2);
4705
4818
  const encrypted = (rawBitFlag & BITFLAG_ENCRYPTED) == BITFLAG_ENCRYPTED;
@@ -5214,6 +5327,7 @@
5214
5327
  ERR_BAD_FORMAT: ERR_BAD_FORMAT,
5215
5328
  ERR_CENTRAL_DIRECTORY_NOT_FOUND: ERR_CENTRAL_DIRECTORY_NOT_FOUND,
5216
5329
  ERR_ENCRYPTED: ERR_ENCRYPTED,
5330
+ ERR_ENCRYPTED_CENTRAL_DIRECTORY: ERR_ENCRYPTED_CENTRAL_DIRECTORY,
5217
5331
  ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND: ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND,
5218
5332
  ERR_EOCDR_NOT_FOUND: ERR_EOCDR_NOT_FOUND,
5219
5333
  ERR_EXTRAFIELD_ZIP64_NOT_FOUND: ERR_EXTRAFIELD_ZIP64_NOT_FOUND,
@@ -5626,7 +5740,11 @@
5626
5740
  if (versionMadeBy > MAX_16_BITS) {
5627
5741
  throw new Error(ERR_INVALID_VERSION);
5628
5742
  }
5629
- let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
5743
+ let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES);
5744
+ const externalFileAttributesProvided = externalFileAttributes !== UNDEFINED_VALUE;
5745
+ if (!externalFileAttributesProvided) {
5746
+ externalFileAttributes = 0;
5747
+ }
5630
5748
  if (!options[PROPERTY_NAME_DIRECTORY] && name.endsWith(DIRECTORY_SIGNATURE)) {
5631
5749
  options[PROPERTY_NAME_DIRECTORY] = true;
5632
5750
  }
@@ -5635,13 +5753,13 @@
5635
5753
  if (!name.endsWith(DIRECTORY_SIGNATURE)) {
5636
5754
  name += DIRECTORY_SIGNATURE;
5637
5755
  }
5638
- if (externalFileAttributes === 0) {
5756
+ if (!externalFileAttributesProvided) {
5639
5757
  externalFileAttributes = FILE_ATTR_MSDOS_DIR_MASK;
5640
5758
  if (!msDosCompatible) {
5641
5759
  externalFileAttributes |= (FILE_ATTR_UNIX_TYPE_DIR | FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;
5642
5760
  }
5643
5761
  }
5644
- } else if (!msDosCompatible && externalFileAttributes === 0) {
5762
+ } else if (!msDosCompatible && !externalFileAttributesProvided) {
5645
5763
  if (executable) {
5646
5764
  externalFileAttributes = (FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;
5647
5765
  } else {
@@ -5650,6 +5768,7 @@
5650
5768
  }
5651
5769
  let unixExternalUpper;
5652
5770
  if (!msDosCompatible) {
5771
+ const unixModeProvided = unixMode !== UNDEFINED_VALUE || Boolean(setuid || setgid || sticky);
5653
5772
  unixExternalUpper = (externalFileAttributes >> 16) & MAX_16_BITS;
5654
5773
  unixMode = unixMode === UNDEFINED_VALUE ? unixExternalUpper : (unixMode & MAX_16_BITS);
5655
5774
  if (setuid) {
@@ -5667,10 +5786,12 @@
5667
5786
  } else {
5668
5787
  sticky = Boolean(unixMode & FILE_ATTR_UNIX_STICKY_MASK);
5669
5788
  }
5670
- if (directory) {
5671
- unixMode |= FILE_ATTR_UNIX_TYPE_DIR;
5789
+ if (!externalFileAttributesProvided || unixModeProvided) {
5790
+ if (directory) {
5791
+ unixMode |= FILE_ATTR_UNIX_TYPE_DIR;
5792
+ }
5793
+ externalFileAttributes = ((unixMode & MAX_16_BITS) << 16) | (externalFileAttributes & MAX_16_BITS);
5672
5794
  }
5673
- externalFileAttributes = ((unixMode & MAX_16_BITS) << 16) | (externalFileAttributes & MAX_8_BITS);
5674
5795
  }
5675
5796
  ({ msdosAttributesRaw, msdosAttributes } = normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes));
5676
5797
  if (hasMsDosProvided) {
@@ -6393,6 +6514,7 @@
6393
6514
  if (extraFieldLength > MAX_16_BITS) {
6394
6515
  throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
6395
6516
  }
6517
+ const dosLastModDate = new Date(Math.ceil(lastModDate.getTime() / 2000) * 2000);
6396
6518
  const {
6397
6519
  headerArray,
6398
6520
  headerView,
@@ -6402,7 +6524,7 @@
6402
6524
  bitFlag: getBitFlag(level, useUnicodeFileNames, dataDescriptor, encrypted, compressionMethod),
6403
6525
  compressionMethod,
6404
6526
  uncompressedSize,
6405
- lastModDate: lastModDate < MIN_DATE ? MIN_DATE : lastModDate > MAX_DATE ? MAX_DATE : lastModDate,
6527
+ lastModDate: dosLastModDate < MIN_DATE ? MIN_DATE : dosLastModDate > MAX_DATE ? MAX_DATE : dosLastModDate,
6406
6528
  rawFilename,
6407
6529
  zip64CompressedSize,
6408
6530
  zip64UncompressedSize,
@@ -10532,6 +10654,7 @@
10532
10654
  exports.ERR_CENTRAL_DIRECTORY_NOT_FOUND = ERR_CENTRAL_DIRECTORY_NOT_FOUND;
10533
10655
  exports.ERR_DUPLICATED_NAME = ERR_DUPLICATED_NAME;
10534
10656
  exports.ERR_ENCRYPTED = ERR_ENCRYPTED;
10657
+ exports.ERR_ENCRYPTED_CENTRAL_DIRECTORY = ERR_ENCRYPTED_CENTRAL_DIRECTORY;
10535
10658
  exports.ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND = ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND;
10536
10659
  exports.ERR_EOCDR_NOT_FOUND = ERR_EOCDR_NOT_FOUND;
10537
10660
  exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;