@zip.js/zip.js 2.8.35 → 2.8.37

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 (40) hide show
  1. package/deno.json +3 -2
  2. package/dist/zip-core.js +246 -55
  3. package/dist/zip-core.min.js +1 -1
  4. package/dist/zip-fs-core.js +198 -55
  5. package/dist/zip-fs-core.min.js +1 -1
  6. package/dist/zip-fs-native.js +249 -58
  7. package/dist/zip-fs-native.min.js +1 -1
  8. package/dist/zip-fs.js +247 -56
  9. package/dist/zip-fs.min.js +1 -1
  10. package/dist/zip-legacy.js +248 -57
  11. package/dist/zip-legacy.min.js +1 -1
  12. package/dist/zip-native.js +249 -58
  13. package/dist/zip-native.min.js +1 -1
  14. package/dist/zip-web-worker-native.js +1 -1
  15. package/dist/zip-web-worker.js +1 -1
  16. package/dist/zip.js +247 -56
  17. package/dist/zip.min.js +1 -1
  18. package/index-native.cjs +249 -58
  19. package/index-native.min.js +1 -1
  20. package/index.cjs +247 -56
  21. package/index.d.cts +112 -2
  22. package/index.d.ts +112 -2
  23. package/index.min.js +1 -1
  24. package/lib/core/codec-pool.js +19 -3
  25. package/lib/core/codec-registry.js +116 -0
  26. package/lib/core/constants.js +1 -1
  27. package/lib/core/io.js +47 -26
  28. package/lib/core/options.js +2 -0
  29. package/lib/core/streams/codec-stream.js +1 -1
  30. package/lib/core/streams/zip-entry-stream.js +22 -5
  31. package/lib/core/streams/zlib-js/zlib-streams.min.js +1 -1
  32. package/lib/core/web-worker-base.js +5 -1
  33. package/lib/core/web-worker-inline-native.js +1 -1
  34. package/lib/core/web-worker-inline-wasm.js +1 -1
  35. package/lib/core/zip-reader.js +6 -2
  36. package/lib/core/zip-writer.js +53 -18
  37. package/lib/zip-core-base.js +7 -0
  38. package/lib/zip-core-writer.js +1 -0
  39. package/package.json +1 -1
  40. package/worker-message-property-names.js +1 -1
package/dist/zip.js CHANGED
@@ -104,7 +104,7 @@
104
104
  const HEADER_OFFSET_UNCOMPRESSED_SIZE = 18;
105
105
  const LOCAL_HEADER_COMMON_OFFSET = 4;
106
106
 
107
- const MAX_DATE = new Date(2107, 11, 31);
107
+ const MAX_DATE = new Date(2107, 11, 31, 23, 59, 58);
108
108
  const MIN_DATE = new Date(1980, 0, 1);
109
109
 
110
110
  const UNDEFINED_VALUE = undefined;
@@ -220,7 +220,104 @@
220
220
  Object.assign(config, DEFAULT_CONFIGURATION);
221
221
  }
222
222
 
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:v}=self,b=void 0,S="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,R,U,M,_]=C;class B{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=_[255&t]^M[t>>>8&255]^U[t>>>16&255]^R[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 D extends d{constructor(){let t;const e=new B;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)},v(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.S(e,t[n-1]&2147483648>>e-1,1)),t},S:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,e,n,s){for(void 0===s&&(s=[]);e>=32;e-=32)s.push(n),n=0;if(0===e)return s.concat(t);for(let r=0;r<t.length;r++)s.push(n|t[r]>>>e),n=t[r]<<32-e;const r=t.length?t[t.length-1]:0,o=W.l(r);return s.push(W.S(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.S(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.R=t.R.slice(0),e.U=t.U.slice(0),e.M=t.M):e.reset()}reset(){const t=this;return t.R=t.I.slice(0),t.U=[],t.M=0,t}update(t){const e=this;"string"==typeof t&&(t=K._.A(t));const n=e.U=W.concat(e.U,t),s=e.M,o=e.M=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.B(i.subarray(16*a,16*(a+1))),a+=1;return n.splice(0,16*a),e}D(){const t=this;let e=t.U;const n=t.R;e=W.concat(e,[W.S(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.M/4294967296)),e.push(0|t.M);e.length;)t.B(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}B(e){const n=this,r=n.R,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).D());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.D(),n=new t.O(t.T[1]).update(e).D();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!=S&&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!=S,et=tt&&h.subtle,nt=tt&&typeof et!=S,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],v=4;for(let t=0;s>t;t++)w=c[d>>>24]^a[y>>16&255]^f[m>>8&255]^l[255&g]^n[v],h=c[y>>>24]^a[m>>16&255]^f[g>>8&255]^l[255&d]^n[v+1],p=c[m>>>24]^a[g>>16&255]^f[d>>8&255]^l[255&y]^n[v+2],g=c[g>>>24]^a[d>>16&255]^f[y>>8&255]^l[255&m]^n[v+3],v+=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[v++],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.v(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===b?(t=>{if(typeof w==S){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(){bt(this,t,e,n)},transform(t,e){const n=this;if(n.password||n.rawPassword){const e=St(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(St(n,t))}})}}class vt extends d{constructor({password:t,rawPassword:e,passwordVerification:n}){super({start(){bt(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 bt(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 B(r[0]),ft:new B(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 St(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}class xt 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}=t,w=this;let h,p,d,y=super.readable;const m=a&&r&&!u&&(!o||c)&&!(!i||!s);o&&!c||!a||m||(h=new D,y=_t(y,h)),r&&(m?(d=new Pt,y=Bt(y,new s("gzip")),y=_t(y,d)):y=Mt(y,i,{level:f,chunkSize:e},s,n,s)),o&&(c?y=_t(y,new vt(t)):(p=new lt(t),y=_t(y,p))),Ut(w,y,()=>{let t;o&&!c&&(t=p.signature),o&&!c||!a||(t=m?d.signature:new l(h.value.buffer).getUint32(0)),w.signature=t})}}class Pt 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 Rt 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}=t;let h,p,d=super.readable;i&&(o?d=_t(d,new gt(t)):(p=new ft(t),d=_t(d,p))),f&&(d=Mt(d,u,{chunkSize:e,deflate64:w},s,n,s),d=(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)})})(d)),i&&!o||!c||(h=new D,d=_t(d,h)),Ut(this,d,()=>{if((!i||o)&&c){const t=new l(h.value.buffer);if(a!=t.getUint32(0,!1))throw new r(j)}})}}function Ut(t,n,s){n=_t(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Mt(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 Bt(t,a)}function _t(t,e){return t.pipeThrough(e)}function Bt(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 Dt="data",Vt="close";class Wt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let i;o.startsWith("deflate")?i=xt:o.startsWith("inflate")&&(i=Rt),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!==b&&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 Kt extends d{constructor(t){const e=[];let n=0;function s(){const s=new o(t);let r=0;for(;t>r;){const n=e[0],o=t-r;n.length>o?(s.set(n.subarray(0,o),r),e[0]=n.subarray(o),r+=o):(s.set(n,r),r+=n.length,e.shift())}return n-=t,s}1>t&&(t=65536),super({transform(r,o){for(e.push(r),n+=r.length;n>t;)o.enqueue(s())},flush(t){n&&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,n))}})}}let Et=2;try{typeof navigator!=S&&navigator.hardwareConcurrency&&(Et=navigator.hardwareConcurrency)}catch{}const Lt=new f,Ot=new f;let Tt,jt,Ht,Zt,Ft,Nt=0;async function qt(t){let e,r;try{const{options:o,config:i}=t;if(!o.useCompressionStream)try{await self.initModule(t.config)}catch{o.useCompressionStream=!0}i.CompressionStream=self.CompressionStream,i.DecompressionStream=self.DecompressionStream;const c={highWaterMark:1},a=t.readable||new y({async pull(t){const e=new u(t=>Lt.set(Nt,t));Gt({type:"pull",messageId:Nt}),Nt=(Nt+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},c);r=t.writable||new m({async write(t){let e;const s=new u(t=>e=t);Ot.set(Nt,e),Gt({type:Dt,value:t,messageId:Nt}),Nt=(Nt+1)%n.MAX_SAFE_INTEGER,await s}},c),e=new Wt(o,i),Tt=new AbortController;const{signal:f}=Tt;await a.pipeThrough(e).pipeThrough(new Kt((t=>s.max(t.chunkSize,64))(i))).pipeTo(r,{signal:f,preventClose:!0,preventAbort:!0}),await r.getWriter().close();const{signature:l,inputSize:w,outputSize:h}=e;Gt({type:Vt,result:{signature:l,inputSize:w,outputSize:h}})}catch(t){if(t.outputSize=e?e.outputSize:0,r&&!r.locked)try{await r.getWriter().close()}catch{}Jt(t)}}function Gt(t){let{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 Jt(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 Qt(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=Ht(c),this.in=Ht(a),this.inBufferSize=a,!this.lt||!this.in)throw new r("allocation failed");if(this.ut=new o(c),t?(this.wt=jt.deflate_process,this.ht=jt.deflate_last_consumed,this.yt=jt.deflate_end,this.gt=jt.deflate_new(),n="gzip"===e?jt.deflate_init_gzip(this.gt,i):"deflate-raw"===e?jt.deflate_init_raw(this.gt,i):jt.deflate_init(this.gt,i)):"deflate64-raw"===e?(this.wt=jt.inflate9_process,this.ht=jt.inflate9_last_consumed,this.yt=jt.inflate9_end,this.gt=jt.inflate9_new(),n=jt.inflate9_init_raw(this.gt)):(this.wt=jt.inflate_process,this.ht=jt.inflate_last_consumed,this.yt=jt.inflate_end,this.gt=jt.inflate_new(),n="deflate-raw"===e?jt.inflate_init_raw(this.gt):"gzip"===e?jt.inflate_init_gzip(this.gt):jt.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(Ft.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&&Zt&&(Zt(this.in),this.in=0),this.in=Ht(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(Ft.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&&Zt&&Zt(t.in),t.in=0,t.lt&&Zt&&Zt(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==Dt){const t=Lt.get(n);Lt.delete(n),t({value:s||new o,done:r})}if("ack"==e){const t=Ot.get(n);Ot.delete(n),t()}e==Vt&&Tt.abort()}catch(t){Jt(t)}});class Xt{constructor(t="deflate",e){return Qt(!0,t,e)}}class Yt{constructor(t="deflate",e){return Qt(!1,t,e)}}Xt.vt=!0,Yt.vt=!0;let $t=!1;self.initModule=async t=>{try{const e=await(async(t,{baseURI:e})=>{if(!$t){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(jt=t,({malloc:Ht,free:Zt,memory:Ft}=jt),"function"!=typeof Ht||"function"!=typeof Zt||!Ft)throw jt=Ht=Zt=Ft=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports),$t=!0}})(t.wasmURI,t);return t.CompressionStreamZlib=Xt,t.DecompressionStreamZlib=Yt,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)}});}
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)}});}
224
+
225
+ /*
226
+ Copyright (c) 2025 Gildas Lormeau. All rights reserved.
227
+
228
+ Redistribution and use in source and binary forms, with or without
229
+ modification, are permitted provided that the following conditions are met:
230
+
231
+ 1. Redistributions of source code must retain the above copyright notice,
232
+ this list of conditions and the following disclaimer.
233
+
234
+ 2. Redistributions in binary form must reproduce the above copyright
235
+ notice, this list of conditions and the following disclaimer in
236
+ the documentation and/or other materials provided with the distribution.
237
+
238
+ 3. The names of the authors may not be used to endorse or promote products
239
+ derived from this software without specific prior written permission.
240
+
241
+ THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
242
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
243
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
244
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
245
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
246
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
247
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
248
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
249
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
250
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
251
+ */
252
+
253
+
254
+ const ERR_INVALID_CODEC_DEFINITION = "Invalid codec definition";
255
+ const ERR_RESERVED_COMPRESSION_METHOD = "Reserved compression method";
256
+ const ERR_INVALID_CODEC_MODULE = "Invalid codec module";
257
+
258
+ const STRING_TYPE = "string";
259
+ const RESERVED_COMPRESSION_METHODS = [
260
+ COMPRESSION_METHOD_STORE,
261
+ COMPRESSION_METHOD_DEFLATE,
262
+ COMPRESSION_METHOD_DEFLATE_64,
263
+ COMPRESSION_METHOD_AES
264
+ ];
265
+
266
+ const registeredCodecs = new Map();
267
+ const codecStreams = new Map();
268
+
269
+ function registerCodec(codec = {}) {
270
+ const { compressionMethod, format, codecURI, CompressionStream, DecompressionStream, versionNeeded } = codec;
271
+ if (!Number.isInteger(compressionMethod) || compressionMethod < 0 || compressionMethod > MAX_16_BITS ||
272
+ typeof format != STRING_TYPE || !format.length) {
273
+ throw new Error(ERR_INVALID_CODEC_DEFINITION);
274
+ }
275
+ if (RESERVED_COMPRESSION_METHODS.includes(compressionMethod)) {
276
+ throw new Error(ERR_RESERVED_COMPRESSION_METHOD);
277
+ }
278
+ const hasStreams = typeof CompressionStream == FUNCTION_TYPE || typeof DecompressionStream == FUNCTION_TYPE;
279
+ if (!hasStreams && (typeof codecURI != STRING_TYPE || !codecURI.length)) {
280
+ throw new Error(ERR_INVALID_CODEC_DEFINITION);
281
+ }
282
+ registeredCodecs.set(compressionMethod, { compressionMethod, format, codecURI, versionNeeded });
283
+ if (hasStreams) {
284
+ setCodecStreams(format, { CompressionStream, DecompressionStream });
285
+ }
286
+ }
287
+
288
+ function unregisterCodec(compressionMethod) {
289
+ const codec = registeredCodecs.get(compressionMethod);
290
+ if (codec) {
291
+ registeredCodecs.delete(compressionMethod);
292
+ let formatUsed;
293
+ registeredCodecs.forEach(otherCodec => formatUsed = formatUsed || otherCodec.format == codec.format);
294
+ if (!formatUsed) {
295
+ codecStreams.delete(codec.format);
296
+ }
297
+ }
298
+ }
299
+
300
+ function getRegisteredCodec(compressionMethod) {
301
+ return registeredCodecs.get(compressionMethod);
302
+ }
303
+
304
+ function getCodecStreams(format) {
305
+ return codecStreams.get(format);
306
+ }
307
+
308
+ function setCodecStreams(format, streams) {
309
+ const { CompressionStream, DecompressionStream } = streams;
310
+ if (typeof CompressionStream != FUNCTION_TYPE && typeof DecompressionStream != FUNCTION_TYPE) {
311
+ throw new Error(ERR_INVALID_CODEC_MODULE);
312
+ }
313
+ codecStreams.set(format, { CompressionStream, DecompressionStream });
314
+ }
315
+
316
+ async function ensureCodecStreams(format, codecURI) {
317
+ if (!codecStreams.has(format) && codecURI) {
318
+ setCodecStreams(format, await import(codecURI));
319
+ }
320
+ }
224
321
 
225
322
  /*
226
323
  Copyright (c) 2022 Gildas Lormeau. All rights reserved.
@@ -1758,6 +1855,7 @@
1758
1855
 
1759
1856
  const ERR_INVALID_UNCOMPRESSED_SIZE = "Invalid uncompressed size";
1760
1857
  const ERR_INVALID_COMPRESSED_DATA = "Invalid compressed data";
1858
+ const ERR_UNSUPPORTED_COMPRESSION$2 = "Compression method not supported";
1761
1859
  const FORMAT_DEFLATE_RAW = "deflate-raw";
1762
1860
  const FORMAT_DEFLATE64_RAW = "deflate64-raw";
1763
1861
  const FORMAT_GZIP = "gzip";
@@ -1768,18 +1866,21 @@
1768
1866
 
1769
1867
  constructor(options, { chunkSize, CompressionStreamZlib, CompressionStream }) {
1770
1868
  super({});
1771
- const { compressed, encrypted, useCompressionStream, zipCrypto, signed, level, deflate64 } = options;
1869
+ const { compressed, encrypted, useCompressionStream, zipCrypto, signed, level, deflate64, format } = options;
1772
1870
  const stream = this;
1773
1871
  let crc32Stream, encryptionStream, gzipCrc32Stream;
1774
1872
  let readable = super.readable;
1775
- const useGzipCrc32 = signed && compressed && !deflate64 && (!encrypted || zipCrypto) &&
1873
+ const codecStreams = format && getCodecStreams(format);
1874
+ const useGzipCrc32 = signed && compressed && !deflate64 && !codecStreams && (!encrypted || zipCrypto) &&
1776
1875
  Boolean(useCompressionStream && CompressionStream);
1777
1876
  if ((!encrypted || zipCrypto) && signed && !useGzipCrc32) {
1778
1877
  crc32Stream = new Crc32Stream();
1779
1878
  readable = pipeThrough(readable, crc32Stream);
1780
1879
  }
1781
1880
  if (compressed) {
1782
- if (useGzipCrc32) {
1881
+ if (codecStreams) {
1882
+ readable = pipeThroughBackpressured(readable, createCodecStream(codecStreams.CompressionStream, format, { level, chunkSize }));
1883
+ } else if (useGzipCrc32) {
1783
1884
  gzipCrc32Stream = new GzipToRawDeflateStream();
1784
1885
  readable = pipeThroughBackpressured(readable, new CompressionStream(FORMAT_GZIP));
1785
1886
  readable = pipeThrough(readable, gzipCrc32Stream);
@@ -1853,7 +1954,7 @@
1853
1954
 
1854
1955
  constructor(options, { chunkSize, DecompressionStreamZlib, DecompressionStream }) {
1855
1956
  super({});
1856
- const { zipCrypto, encrypted, signed, signature, compressed, useCompressionStream, deflate64 } = options;
1957
+ const { zipCrypto, encrypted, signed, signature, compressed, useCompressionStream, deflate64, format } = options;
1857
1958
  let crc32Stream, decryptionStream;
1858
1959
  let readable = super.readable;
1859
1960
  if (encrypted) {
@@ -1865,7 +1966,12 @@
1865
1966
  }
1866
1967
  }
1867
1968
  if (compressed) {
1868
- readable = pipeThroughCommpressionStream(readable, useCompressionStream, { chunkSize, deflate64 }, DecompressionStream, DecompressionStreamZlib, DecompressionStream);
1969
+ const codecStreams = format && getCodecStreams(format);
1970
+ if (codecStreams) {
1971
+ readable = pipeThroughBackpressured(readable, createCodecStream(codecStreams.DecompressionStream, format, { chunkSize }));
1972
+ } else {
1973
+ readable = pipeThroughCommpressionStream(readable, useCompressionStream, { chunkSize, deflate64 }, DecompressionStream, DecompressionStreamZlib, DecompressionStream);
1974
+ }
1869
1975
  readable = mapInflateStreamError(readable);
1870
1976
  }
1871
1977
  if ((!encrypted || zipCrypto) && signed) {
@@ -1892,6 +1998,13 @@
1892
1998
  });
1893
1999
  }
1894
2000
 
2001
+ function createCodecStream(CodecStreamClass, format, options) {
2002
+ if (!CodecStreamClass) {
2003
+ throw new Error(ERR_UNSUPPORTED_COMPRESSION$2);
2004
+ }
2005
+ return new CodecStreamClass(format, options);
2006
+ }
2007
+
1895
2008
  function pipeThroughCommpressionStream(readable, useCompressionStream, options, CompressionStreamNative, CompressionStreamZlib, CompressionStream) {
1896
2009
  const Stream = useCompressionStream && CompressionStreamNative ? CompressionStreamNative : CompressionStreamZlib || CompressionStream;
1897
2010
  const format = options.deflate64 ? FORMAT_DEFLATE64_RAW : FORMAT_DEFLATE_RAW;
@@ -2085,7 +2198,7 @@
2085
2198
  constructor(chunkSize) {
2086
2199
  const pendingChunks = [];
2087
2200
  let pendingLength = 0;
2088
- if (!(chunkSize >= 1)) {
2201
+ if (!Number.isFinite(chunkSize) || chunkSize < 1) {
2089
2202
  chunkSize = DEFAULT_CHUNK_SIZE;
2090
2203
  }
2091
2204
  super({
@@ -2640,11 +2753,18 @@
2640
2753
 
2641
2754
  async function runWorker(stream, workerOptions) {
2642
2755
  const { options, config } = workerOptions;
2643
- const { transferStreams, useWebWorkers, useCompressionStream, compressed, signed, encrypted } = options;
2756
+ const { transferStreams, useWebWorkers, useCompressionStream, compressed, signed, encrypted, format, codecURI } = options;
2644
2757
  const { workerURI, maxWorkers } = config;
2758
+ if (format) {
2759
+ if (codecURI) {
2760
+ options.codecURI = resolveCodecURI(codecURI, config.baseURI);
2761
+ }
2762
+ await ensureCodecStreams(format, options.codecURI);
2763
+ }
2645
2764
  workerOptions.transferStreams = transferStreams || (transferStreams === UNDEFINED_VALUE && config.transferStreams);
2646
2765
  const streamCopy = !compressed && !signed && !encrypted;
2647
- workerOptions.useWebWorkers = !streamCopy && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
2766
+ const workerSupported = format === UNDEFINED_VALUE || Boolean(options.codecURI);
2767
+ workerOptions.useWebWorkers = !streamCopy && workerSupported && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
2648
2768
  workerOptions.workerURI = workerOptions.useWebWorkers && workerURI ? workerURI : UNDEFINED_VALUE;
2649
2769
  options.useCompressionStream = useCompressionStream || (useCompressionStream === UNDEFINED_VALUE && config.useCompressionStream);
2650
2770
  return (await getWorker()).run();
@@ -2684,6 +2804,14 @@
2684
2804
  }
2685
2805
  }
2686
2806
 
2807
+ function resolveCodecURI(codecURI, baseURI) {
2808
+ try {
2809
+ return new URL(codecURI, baseURI).toString();
2810
+ } catch {
2811
+ return codecURI;
2812
+ }
2813
+ }
2814
+
2687
2815
  function armStarvationTimeout() {
2688
2816
  if (!starvationTimeout && pendingRequests.length && Number.isFinite(starvationDelay) && starvationDelay >= 0) {
2689
2817
  starvationTimeout = setTimeout(onWorkerStarvation, starvationDelay);
@@ -2794,6 +2922,7 @@
2794
2922
  const HTTP_METHOD_GET = "GET";
2795
2923
  const HTTP_RANGE_UNIT = "bytes";
2796
2924
  const DEFAULT_BUFFER_SIZE = 256 * 1024;
2925
+ const DEFAULT_MAXIMUM_RANGE_SIZE = 16 * 1024 * 1024;
2797
2926
 
2798
2927
  const PROPERTY_NAME_WRITABLE = "writable";
2799
2928
  const DISK_BOUNDARY = Symbol();
@@ -3106,6 +3235,7 @@
3106
3235
  forceRangeRequests,
3107
3236
  combineSizeEocd,
3108
3237
  checkResourceChanges = true,
3238
+ maximumRangeSize = DEFAULT_MAXIMUM_RANGE_SIZE,
3109
3239
  fetch
3110
3240
  } = options;
3111
3241
  options = Object.assign({}, options);
@@ -3114,6 +3244,7 @@
3114
3244
  delete options.forceRangeRequests;
3115
3245
  delete options.combineSizeEocd;
3116
3246
  delete options.checkResourceChanges;
3247
+ delete options.maximumRangeSize;
3117
3248
  delete options.useXHR;
3118
3249
  delete options.fetch;
3119
3250
  Object.assign(httpReader, {
@@ -3124,6 +3255,7 @@
3124
3255
  forceRangeRequests,
3125
3256
  combineSizeEocd,
3126
3257
  checkResourceChanges,
3258
+ maximumRangeSize,
3127
3259
  fetch
3128
3260
  });
3129
3261
  }
@@ -3209,40 +3341,31 @@
3209
3341
 
3210
3342
  function createRangeReadable(httpReader, offset, size) {
3211
3343
  let bodyReader;
3344
+ let windowOffset = offset;
3345
+ let windowRemainingLength = 0;
3212
3346
  let remainingLength = size;
3213
3347
  return new ReadableStream({
3214
- async start() {
3215
- const response = await sendFetchRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader, offset, size));
3216
- if (response.status != 206) {
3217
- throw new Error(ERR_HTTP_RANGE);
3218
- }
3219
- const contentRangeHeader = response.headers.get(HTTP_HEADER_CONTENT_RANGE);
3220
- if (contentRangeHeader) {
3221
- const rangeStart = Number(contentRangeHeader.trim().split(/[\s-]+/)[1]);
3222
- if (!Number.isNaN(rangeStart) && rangeStart != offset) {
3223
- throw new Error(ERR_HTTP_RANGE);
3224
- }
3225
- }
3226
- checkResourceValidators(httpReader, response);
3227
- setResourceValidators(httpReader, response);
3228
- bodyReader = response.body.getReader();
3348
+ start() {
3349
+ return openWindow();
3229
3350
  },
3230
3351
  async pull(controller) {
3352
+ if (!bodyReader) {
3353
+ await openWindow();
3354
+ }
3231
3355
  const { value, done } = await bodyReader.read();
3232
3356
  if (done) {
3233
- if (remainingLength) {
3234
- throw new Error(ERR_HTTP_RANGE);
3235
- }
3236
- controller.close();
3237
- } else {
3238
- const chunk = value.length > remainingLength ? value.subarray(0, remainingLength) : value;
3239
- remainingLength -= chunk.length;
3240
- if (chunk.length) {
3241
- controller.enqueue(chunk);
3242
- }
3357
+ throw new Error(ERR_HTTP_RANGE);
3358
+ }
3359
+ const chunk = value.length > windowRemainingLength ? value.subarray(0, windowRemainingLength) : value;
3360
+ windowRemainingLength -= chunk.length;
3361
+ remainingLength -= chunk.length;
3362
+ if (chunk.length) {
3363
+ controller.enqueue(chunk);
3364
+ }
3365
+ if (!windowRemainingLength) {
3366
+ await closeWindow();
3243
3367
  if (!remainingLength) {
3244
3368
  controller.close();
3245
- await bodyReader.cancel();
3246
3369
  }
3247
3370
  }
3248
3371
  },
@@ -3250,6 +3373,32 @@
3250
3373
  return bodyReader && bodyReader.cancel(reason);
3251
3374
  }
3252
3375
  });
3376
+
3377
+ async function openWindow() {
3378
+ const windowLength = Math.min(httpReader.maximumRangeSize, remainingLength);
3379
+ const response = await sendFetchRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader, windowOffset, windowLength));
3380
+ if (response.status != 206) {
3381
+ throw new Error(ERR_HTTP_RANGE);
3382
+ }
3383
+ const contentRangeHeader = response.headers.get(HTTP_HEADER_CONTENT_RANGE);
3384
+ if (contentRangeHeader) {
3385
+ const rangeStart = Number(contentRangeHeader.trim().split(/[\s-]+/)[1]);
3386
+ if (!Number.isNaN(rangeStart) && rangeStart != windowOffset) {
3387
+ throw new Error(ERR_HTTP_RANGE);
3388
+ }
3389
+ }
3390
+ checkResourceValidators(httpReader, response);
3391
+ setResourceValidators(httpReader, response);
3392
+ windowOffset += windowLength;
3393
+ windowRemainingLength = windowLength;
3394
+ bodyReader = response.body.getReader();
3395
+ }
3396
+
3397
+ async function closeWindow() {
3398
+ const currentBodyReader = bodyReader;
3399
+ bodyReader = UNDEFINED_VALUE;
3400
+ await currentBodyReader.cancel();
3401
+ }
3253
3402
  }
3254
3403
 
3255
3404
  function getContentRangeSize(response) {
@@ -3946,6 +4095,7 @@
3946
4095
  const OPTION_PREVENT_CLOSE = "preventClose";
3947
4096
  const OPTION_ENCRYPTION_STRENGTH = "encryptionStrength";
3948
4097
  const OPTION_EXTENDED_TIMESTAMP = "extendedTimestamp";
4098
+ const OPTION_NTFS_TIMESTAMP = "ntfsTimestamp";
3949
4099
  const OPTION_KEEP_ORDER = "keepOrder";
3950
4100
  const OPTION_LEVEL = "level";
3951
4101
  const OPTION_BUFFERED_WRITE = "bufferedWrite";
@@ -4417,7 +4567,8 @@
4417
4567
  throw new Error(ERR_UNSUPPORTED_COMPRESSION$1);
4418
4568
  }
4419
4569
  }
4420
- if ((compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE && compressionMethod != COMPRESSION_METHOD_DEFLATE_64) && !passThrough) {
4570
+ const registeredCodec = passThrough ? UNDEFINED_VALUE : getRegisteredCodec(compressionMethod);
4571
+ if ((compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE && compressionMethod != COMPRESSION_METHOD_DEFLATE_64 && !registeredCodec) && !passThrough) {
4421
4572
  throw new Error(ERR_UNSUPPORTED_COMPRESSION$1);
4422
4573
  }
4423
4574
  if (dataArray.length < HEADER_SIZE || getUint32(dataView, 0) != LOCAL_FILE_HEADER_SIGNATURE) {
@@ -4456,7 +4607,7 @@
4456
4607
  fileEntry.zipCrypto = zipCrypto;
4457
4608
  }
4458
4609
  if (encrypted) {
4459
- if (!zipCrypto && extraFieldAES.strength === UNDEFINED_VALUE) {
4610
+ if (!zipCrypto && (extraFieldAES.strength < 1 || extraFieldAES.strength > 3)) {
4460
4611
  throw new Error(ERR_UNSUPPORTED_ENCRYPTION);
4461
4612
  } else if (!password && !rawPassword) {
4462
4613
  throw new Error(ERR_ENCRYPTED);
@@ -4495,6 +4646,8 @@
4495
4646
  useCompressionStream,
4496
4647
  transferStreams: getOptionValue$1(zipEntry, options, OPTION_TRANSFER_STREAMS),
4497
4648
  deflate64,
4649
+ format: registeredCodec ? registeredCodec.format : UNDEFINED_VALUE,
4650
+ codecURI: registeredCodec ? registeredCodec.codecURI : UNDEFINED_VALUE,
4498
4651
  checkPasswordOnly
4499
4652
  },
4500
4653
  config,
@@ -5112,6 +5265,7 @@
5112
5265
  const ERR_INVALID_ENTRY_NAME = "File entry name exceeds 64KB";
5113
5266
  const ERR_INVALID_VERSION = "Version exceeds 65535";
5114
5267
  const ERR_INVALID_ENCRYPTION_STRENGTH = "The strength must equal 1, 2, or 3";
5268
+ const ERR_UNSUPPORTED_ENCRYPTION_USDZ = "Encryption is not supported in USDZ files";
5115
5269
  const ERR_INVALID_EXTRAFIELD_TYPE = "Extra field type exceeds 65535";
5116
5270
  const ERR_INVALID_EXTRAFIELD_DATA = "Extra field data exceeds 64KB";
5117
5271
  const ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
@@ -5576,6 +5730,7 @@
5576
5730
  const encryptionStrength = getOptionValue(zipWriter, options, OPTION_ENCRYPTION_STRENGTH, 3);
5577
5731
  const zipCrypto = getOptionValue(zipWriter, options, PROPERTY_NAME_ZIPCRYPTO);
5578
5732
  const extendedTimestamp = getOptionValue(zipWriter, options, OPTION_EXTENDED_TIMESTAMP, true);
5733
+ const ntfsTimestamp = getOptionValue(zipWriter, options, OPTION_NTFS_TIMESTAMP);
5579
5734
  const keepOrder = getOptionValue(zipWriter, options, OPTION_KEEP_ORDER, true);
5580
5735
  const useWebWorkers = getOptionValue(zipWriter, options, OPTION_USE_WEB_WORKERS);
5581
5736
  const transferStreams = getOptionValue(zipWriter, options, OPTION_TRANSFER_STREAMS);
@@ -5585,11 +5740,20 @@
5585
5740
  const signal = getOptionValue(zipWriter, options, OPTION_SIGNAL);
5586
5741
  const useUnicodeFileNames = getOptionValue(zipWriter, options, OPTION_USE_UNICODE_FILE_NAMES, true);
5587
5742
  const compressionMethod = getOptionValue(zipWriter, options, PROPERTY_NAME_COMPRESSION_METHOD);
5743
+ const registeredCodec = passThrough || compressionMethod === UNDEFINED_VALUE ? UNDEFINED_VALUE : getRegisteredCodec(compressionMethod);
5588
5744
  if (!passThrough && compressionMethod !== UNDEFINED_VALUE &&
5589
- compressionMethod !== COMPRESSION_METHOD_STORE && compressionMethod !== COMPRESSION_METHOD_DEFLATE) {
5745
+ compressionMethod !== COMPRESSION_METHOD_STORE && compressionMethod !== COMPRESSION_METHOD_DEFLATE && !registeredCodec) {
5590
5746
  throw new Error(ERR_UNSUPPORTED_COMPRESSION);
5591
5747
  }
5592
5748
  let level = getOptionValue(zipWriter, options, OPTION_LEVEL);
5749
+ if (zipWriter.options[OPTION_USDZ]) {
5750
+ if (password !== UNDEFINED_VALUE || rawPassword !== UNDEFINED_VALUE) {
5751
+ throw new Error(ERR_UNSUPPORTED_ENCRYPTION_USDZ);
5752
+ }
5753
+ if (level === UNDEFINED_VALUE && compressionMethod === UNDEFINED_VALUE) {
5754
+ level = 0;
5755
+ }
5756
+ }
5593
5757
  let useCompressionStream = getOptionValue(zipWriter, options, OPTION_USE_COMPRESSION_STREAM);
5594
5758
  let dataDescriptor = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR);
5595
5759
  if (bufferedWrite && dataDescriptor === UNDEFINED_VALUE) {
@@ -5601,7 +5765,7 @@
5601
5765
  if (level !== UNDEFINED_VALUE && level != 6) {
5602
5766
  useCompressionStream = false;
5603
5767
  }
5604
- if (!useCompressionStream && (zipWriter.config.CompressionStream === UNDEFINED_VALUE && zipWriter.config.CompressionStreamZlib === UNDEFINED_VALUE)) {
5768
+ if (!useCompressionStream && !registeredCodec && (zipWriter.config.CompressionStream === UNDEFINED_VALUE && zipWriter.config.CompressionStreamZlib === UNDEFINED_VALUE)) {
5605
5769
  level = 0;
5606
5770
  }
5607
5771
  const zip64 = getOptionValue(zipWriter, options, PROPERTY_NAME_ZIP64);
@@ -5645,6 +5809,7 @@
5645
5809
  encryptionStrength,
5646
5810
  zipCrypto,
5647
5811
  extendedTimestamp,
5812
+ ntfsTimestamp,
5648
5813
  keepOrder,
5649
5814
  useWebWorkers,
5650
5815
  transferStreams,
@@ -5654,6 +5819,9 @@
5654
5819
  signal,
5655
5820
  useUnicodeFileNames,
5656
5821
  compressionMethod,
5822
+ format: registeredCodec ? registeredCodec.format : UNDEFINED_VALUE,
5823
+ codecURI: registeredCodec ? registeredCodec.codecURI : UNDEFINED_VALUE,
5824
+ codecVersionNeeded: registeredCodec ? registeredCodec.versionNeeded : UNDEFINED_VALUE,
5657
5825
  level,
5658
5826
  useCompressionStream,
5659
5827
  dataDescriptor,
@@ -5950,7 +6118,9 @@
5950
6118
  msdosAttributesRaw,
5951
6119
  msdosAttributes,
5952
6120
  useCompressionStream,
5953
- passThrough
6121
+ passThrough,
6122
+ format,
6123
+ codecURI
5954
6124
  } = options;
5955
6125
  const fileEntry = {
5956
6126
  lock,
@@ -6010,7 +6180,9 @@
6010
6180
  encrypted: encrypted && !passThrough,
6011
6181
  useWebWorkers,
6012
6182
  useCompressionStream,
6013
- transferStreams
6183
+ transferStreams,
6184
+ format,
6185
+ codecURI
6014
6186
  },
6015
6187
  config,
6016
6188
  streamOptions: { signal, size, onstart, onprogress, onend }
@@ -6082,6 +6254,7 @@
6082
6254
  rawExtraField,
6083
6255
  encryptionStrength,
6084
6256
  extendedTimestamp,
6257
+ ntfsTimestamp,
6085
6258
  passThrough,
6086
6259
  encrypted,
6087
6260
  zip64UncompressedSize,
@@ -6127,7 +6300,8 @@
6127
6300
  let extraFieldExtendedTimestampFlag;
6128
6301
  if (extendedTimestamp) {
6129
6302
  const lastModTimeUnix = getTimeUnix(lastModDate);
6130
- if (inUnixTimeRange(lastModTimeUnix)) {
6303
+ const lastModTimeUnixInRange = inUnixTimeRange(lastModTimeUnix);
6304
+ if (lastModTimeUnixInRange) {
6131
6305
  const extraFieldTimestampLength = 9 + (lastAccessDate ? 4 : 0) + (creationDate ? 4 : 0);
6132
6306
  const extraFieldTimestamp = createRecordWriter(extraFieldTimestampLength);
6133
6307
  extraFieldExtendedTimestampFlag = 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0);
@@ -6145,19 +6319,26 @@
6145
6319
  } else {
6146
6320
  rawExtraFieldExtendedTimestamp = EMPTY_UINT8_ARRAY;
6147
6321
  }
6148
- try {
6149
- const lastModTimeNTFS = getTimeNTFS(lastModDate);
6150
- const extraFieldNTFS = createRecordWriter(36);
6151
- extraFieldNTFS.uint16(EXTRAFIELD_TYPE_NTFS);
6152
- extraFieldNTFS.uint16(32);
6153
- extraFieldNTFS.skip(4);
6154
- extraFieldNTFS.uint16(EXTRAFIELD_TYPE_NTFS_TAG1);
6155
- extraFieldNTFS.uint16(24);
6156
- extraFieldNTFS.uint64(lastModTimeNTFS);
6157
- extraFieldNTFS.uint64(getTimeNTFS(lastAccessDate) || lastModTimeNTFS);
6158
- extraFieldNTFS.uint64(getTimeNTFS(creationDate) || lastModTimeNTFS);
6159
- rawExtraFieldNTFS = extraFieldNTFS.array;
6160
- } catch {
6322
+ const writeExtraFieldNTFS = ntfsTimestamp === UNDEFINED_VALUE ?
6323
+ !lastModTimeUnixInRange || Boolean(lastAccessDate || creationDate) :
6324
+ ntfsTimestamp;
6325
+ if (writeExtraFieldNTFS) {
6326
+ try {
6327
+ const lastModTimeNTFS = getTimeNTFS(lastModDate);
6328
+ const extraFieldNTFS = createRecordWriter(36);
6329
+ extraFieldNTFS.uint16(EXTRAFIELD_TYPE_NTFS);
6330
+ extraFieldNTFS.uint16(32);
6331
+ extraFieldNTFS.skip(4);
6332
+ extraFieldNTFS.uint16(EXTRAFIELD_TYPE_NTFS_TAG1);
6333
+ extraFieldNTFS.uint16(24);
6334
+ extraFieldNTFS.uint64(lastModTimeNTFS);
6335
+ extraFieldNTFS.uint64(getTimeNTFS(lastAccessDate) || lastModTimeNTFS);
6336
+ extraFieldNTFS.uint64(getTimeNTFS(creationDate) || lastModTimeNTFS);
6337
+ rawExtraFieldNTFS = extraFieldNTFS.array;
6338
+ } catch {
6339
+ rawExtraFieldNTFS = EMPTY_UINT8_ARRAY;
6340
+ }
6341
+ } else {
6161
6342
  rawExtraFieldNTFS = EMPTY_UINT8_ARRAY;
6162
6343
  }
6163
6344
  } else {
@@ -6195,6 +6376,10 @@
6195
6376
  if (compressionMethod === UNDEFINED_VALUE) {
6196
6377
  compressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;
6197
6378
  }
6379
+ const { codecVersionNeeded } = options;
6380
+ if (compressed && codecVersionNeeded !== UNDEFINED_VALUE) {
6381
+ version = version > codecVersionNeeded ? version : codecVersionNeeded;
6382
+ }
6198
6383
  if (zip64) {
6199
6384
  version = version > VERSION_ZIP64 ? version : VERSION_ZIP64;
6200
6385
  }
@@ -7699,6 +7884,8 @@
7699
7884
  exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;
7700
7885
  exports.ERR_HTTP_RANGE = ERR_HTTP_RANGE;
7701
7886
  exports.ERR_HTTP_RESOURCE_CHANGED = ERR_HTTP_RESOURCE_CHANGED;
7887
+ exports.ERR_INVALID_CODEC_DEFINITION = ERR_INVALID_CODEC_DEFINITION;
7888
+ exports.ERR_INVALID_CODEC_MODULE = ERR_INVALID_CODEC_MODULE;
7702
7889
  exports.ERR_INVALID_COMMENT = ERR_INVALID_COMMENT;
7703
7890
  exports.ERR_INVALID_COMPRESSED_DATA = ERR_INVALID_COMPRESSED_DATA;
7704
7891
  exports.ERR_INVALID_ENCRYPTION_STRENGTH = ERR_INVALID_ENCRYPTION_STRENGTH;
@@ -7713,11 +7900,13 @@
7713
7900
  exports.ERR_ITERATOR_COMPLETED_TOO_SOON = ERR_ITERATOR_COMPLETED_TOO_SOON;
7714
7901
  exports.ERR_LOCAL_FILE_HEADER_NOT_FOUND = ERR_LOCAL_FILE_HEADER_NOT_FOUND;
7715
7902
  exports.ERR_OVERLAPPING_ENTRY = ERR_OVERLAPPING_ENTRY;
7903
+ exports.ERR_RESERVED_COMPRESSION_METHOD = ERR_RESERVED_COMPRESSION_METHOD;
7716
7904
  exports.ERR_SPLIT_ZIP_FILE = ERR_SPLIT_ZIP_FILE;
7717
7905
  exports.ERR_UNDEFINED_READER = ERR_UNDEFINED_READER;
7718
7906
  exports.ERR_UNDEFINED_UNCOMPRESSED_SIZE = ERR_UNDEFINED_UNCOMPRESSED_SIZE;
7719
7907
  exports.ERR_UNSUPPORTED_COMPRESSION = ERR_UNSUPPORTED_COMPRESSION$1;
7720
7908
  exports.ERR_UNSUPPORTED_ENCRYPTION = ERR_UNSUPPORTED_ENCRYPTION;
7909
+ exports.ERR_UNSUPPORTED_ENCRYPTION_USDZ = ERR_UNSUPPORTED_ENCRYPTION_USDZ;
7721
7910
  exports.ERR_UNSUPPORTED_FORMAT = ERR_UNSUPPORTED_FORMAT;
7722
7911
  exports.ERR_WRITER_NOT_INITIALIZED = ERR_WRITER_NOT_INITIALIZED;
7723
7912
  exports.ERR_ZIP_NOT_EMPTY = ERR_ZIP_NOT_EMPTY;
@@ -7740,7 +7929,9 @@
7740
7929
  exports.createOPFSTempStream = createOPFSTempStream;
7741
7930
  exports.createSyncAccessHandleTempStream = createSyncAccessHandleTempStream;
7742
7931
  exports.getMimeType = getMimeType;
7932
+ exports.registerCodec = registerCodec;
7743
7933
  exports.resetConfiguration = resetConfiguration;
7744
7934
  exports.terminateWorkers = terminateWorkersAndModule;
7935
+ exports.unregisterCodec = unregisterCodec;
7745
7936
 
7746
7937
  }));