@zip.js/zip.js 2.8.34 → 2.8.35

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 (52) hide show
  1. package/README.md +13 -1
  2. package/deno.json +5 -2
  3. package/dist/README.md +3 -1
  4. package/dist/zip-core.js +472 -220
  5. package/dist/zip-core.min.js +1 -1
  6. package/dist/zip-fs-core.js +449 -220
  7. package/dist/zip-fs-core.min.js +1 -1
  8. package/dist/zip-fs-native.js +476 -226
  9. package/dist/zip-fs-native.min.js +1 -1
  10. package/dist/zip-fs.js +478 -228
  11. package/dist/zip-fs.min.js +1 -1
  12. package/dist/zip-legacy.js +474 -222
  13. package/dist/zip-legacy.min.js +1 -1
  14. package/dist/zip-native.js +475 -223
  15. package/dist/zip-native.min.js +1 -1
  16. package/dist/zip-web-worker-native.js +1 -1
  17. package/dist/zip-web-worker.js +1 -1
  18. package/dist/zip.js +477 -225
  19. package/dist/zip.min.js +1 -1
  20. package/index-native.cjs +476 -226
  21. package/index-native.min.js +1 -1
  22. package/index.cjs +478 -228
  23. package/index.d.cts +53 -0
  24. package/index.d.ts +53 -0
  25. package/index.min.js +1 -1
  26. package/lib/core/codec-pool.js +2 -2
  27. package/lib/core/codec-worker.js +6 -2
  28. package/lib/core/configuration.js +22 -1
  29. package/lib/core/io.js +209 -56
  30. package/lib/core/streams/aes-crypto-stream.js +1 -10
  31. package/lib/core/streams/codec-stream.js +36 -15
  32. package/lib/core/streams/zip-entry-stream.js +19 -28
  33. package/lib/core/util/array.js +48 -0
  34. package/lib/core/web-worker-base.js +3 -3
  35. package/lib/core/web-worker-inline-native.js +1 -1
  36. package/lib/core/web-worker-inline-wasm.js +1 -1
  37. package/lib/core/zip-fs.js +2 -3
  38. package/lib/core/zip-reader.js +37 -40
  39. package/lib/core/zip-writer.js +58 -51
  40. package/lib/core/zlib-streams-inline.js +1 -1
  41. package/lib/zip-core-base.js +5 -3
  42. package/lib/zip-fs-native.js +2 -2
  43. package/lib/zip-fs-wasm.js +2 -2
  44. package/lib/zip-legacy.js +2 -2
  45. package/lib/zip-module-native.js +2 -2
  46. package/lib/zip-module-wasm.js +3 -3
  47. package/lib/zip-native.js +2 -2
  48. package/lib/zip-wasm.js +2 -2
  49. package/package.json +3 -3
  50. package/worker-message-property-names.js +3 -0
  51. package/.github/workflows/publish.yml +0 -30
  52. package/reserved-property-names.js +0 -50
package/dist/zip-fs.js CHANGED
@@ -162,6 +162,7 @@
162
162
  workerStarvationTimeout: 5000,
163
163
  useWebWorkers: true,
164
164
  useCompressionStream: true,
165
+ transferStreams: true,
165
166
  CompressionStream: typeof CompressionStream != UNDEFINED_TYPE && CompressionStream,
166
167
  DecompressionStream: typeof DecompressionStream != UNDEFINED_TYPE && DecompressionStream
167
168
  };
@@ -176,13 +177,14 @@
176
177
  "workerStarvationTimeout",
177
178
  "useCompressionStream",
178
179
  "useWebWorkers",
180
+ "transferStreams",
179
181
  "CompressionStream",
180
182
  "DecompressionStream",
181
183
  "CompressionStreamZlib",
182
184
  "DecompressionStreamZlib"
183
185
  ];
184
186
 
185
- const config = Object.assign({}, DEFAULT_CONFIGURATION);
187
+ const config = { ...DEFAULT_CONFIGURATION };
186
188
 
187
189
  function getConfiguration() {
188
190
  return config;
@@ -201,7 +203,24 @@
201
203
  }
202
204
  }
203
205
 
204
- 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:a,Int32Array:c,Map:f,DataView:l,Promise:w,TextEncoder:u,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:g,DecompressionStream:S}=self,b=void 0,k="undefined",v="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[I,A,x,P,R,U,W,D]=C;class M{constructor(t){this.t=t||-1}append(t){let e=0|this.t;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=D[255&t]^W[t>>>8&255]^U[t>>>16&255]^R[t>>>24&255]^P[255&n]^x[n>>>8&255]^A[n>>>16&255]^I[n>>>24&255]}}for(;n>s;s++)e=e>>>8^I[255&(e^t[s])];this.t=e}get(){return~this.t}}class _ extends d{constructor(){let t;const e=new M;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}}const B={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=B.o(n);return 32===s?t.concat(e):B.i(e,s,0|n,t.slice(0,t.length-1))},l(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+B.o(n)},u(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]=B.h(e,t[n-1]&2147483648>>e-1,1)),t},h:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,o:t=>s.round(t/1099511627776)||32,i(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=B.o(r);return s.push(B.h(e+o&31,e+o>32?n:s.pop(),1)),s}},T={bytes:{p(t){const e=B.l(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},m(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(B.h(8*(3&n),s)),e}}},V=class{constructor(t){const e=this;e.blockSize=512,e.S=[1732584193,4023233417,2562383102,271733878,3285377520],e.k=[1518500249,1859775393,2400959708,3395469782],t?(e.v=t.v.slice(0),e.C=t.C.slice(0),e.I=t.I):e.reset()}reset(){const t=this;return t.v=t.S.slice(0),t.C=[],t.I=0,t}update(t){const e=this;"string"==typeof t&&(t=T.A.m(t));const n=e.C=B.concat(e.C,t),s=e.I,o=e.I=s+B.l(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const i=new a(n);let c=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);o>=t;t+=e.blockSize)e.P(i.subarray(16*c,16*(c+1))),c+=1;return n.splice(0,16*c),e}R(){const t=this;let e=t.C;const n=t.v;e=B.concat(e,[B.h(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.I/4294967296)),e.push(0|t.I);e.length;)t.P(e.splice(0,16));return t.reset(),n}U(t,e,n,s){return t>19?t>39?t>59?t>79?void 0:e^n^s:e&n|e&s|n&s:e^n^s:e&n|~e&s}W(t,e){return e<<t|e>>>32-t}P(e){const n=this,r=n.v,o=t(80);for(let t=0;16>t;t++)o[t]=e[t];let i=r[0],a=r[1],c=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.U(t,a,c,f)+l+o[t]+n.k[s.floor(t/20)]|0;l=f,f=c,c=n.W(30,a),a=i,i=e}r[0]=r[0]+i|0,r[1]=r[1]+a|0,r[2]=r[2]+c|0,r[3]=r[3]+f|0,r[4]=r[4]+l|0}},K={importKey:t=>new K.D(T.bytes.m(t)),M(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,a,c,f,w;const u=new ArrayBuffer(o),h=new l(u);let p=0;const d=B;for(e=T.bytes.m(e),w=1;(o||1)>p;w++){for(i=a=t.encrypt(d.concat(e,[w])),c=1;n>c;c++)for(a=t.encrypt(a),f=0;f<a.length;f++)i[f]^=a[f];for(c=0;(o||1)>p&&c<i.length;c++)h.setInt32(p,i[c]),p+=4}return u.slice(0,s/8)},D:class{constructor(t){const e=this,n=e._=V,s=[[],[]];e.B=[new n,new n];const r=e.B[0].blockSize/32;t.length>r&&(t=(new n).update(t).R());for(let e=0;r>e;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e.B[0].update(s[0]),e.B[1].update(s[1]),e.T=new n(e.B[0])}reset(){const t=this;t.T=new t._(t.B[0]),t.V=!1}update(t){this.V=!0,this.T.update(t)}digest(){const t=this,e=t.T.R(),n=new t._(t.B[1]).update(e).R();return t.reset(),n}encrypt(t){if(this.V)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},j=typeof h!=k&&typeof h.getRandomValues==v,E="Invalid password",L="Invalid signature",O="zipjs-abort-check-password";function H(t){if(j)return h.getRandomValues(t);throw new r("Crypto API not supported")}const Z=16,F={name:"PBKDF2"},N=e.assign({hash:{name:"HMAC"}},F),q=e.assign({iterations:1e3,hash:{name:"SHA-1"}},F),G=["deriveBits"],J=[8,12,16],Q=[16,24,32],X=10,Y=[0,0,0,0],$=typeof h!=k,tt=$&&h.subtle,et=$&&typeof tt!=k,nt=T.bytes,st=class{constructor(t){const e=this;e.K=[[[],[],[],[],[]],[[],[],[],[],[]]],e.K[0][0][0]||e.j();const n=e.K[0][4],s=e.K[1],o=t.length;let i,a,c,f=1;if(4!==o&&6!==o&&8!==o)throw new r("invalid aes key size");for(e.k=[a=t.slice(0),c=[]],i=o;4*o+28>i;i++){let t=a[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))),a[i]=a[i-o]^t}for(let t=0;i;t++,i--){const e=a[3&t?i:i-4];c[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.L(t,0)}decrypt(t){return this.L(t,1)}j(){const t=this.K[0],e=this.K[1],n=t[4],s=e[4],r=[],o=[];let i,a,c,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^=a||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[c=r[a=r[l]]];let w=16843009*f^65537*c^257*a^16843008*l,u=257*r[o]^16843008*o;for(let n=0;4>n;n++)t[n][l]=u=u<<24^u>>>8,e[n][o]=w=w<<24^w>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}L(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.k[e],s=n.length/4-2,o=[0,0,0,0],i=this.K[e],a=i[0],c=i[1],f=i[2],l=i[3],w=i[4];let u,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++)u=a[d>>>24]^c[y>>16&255]^f[m>>8&255]^l[255&g]^n[S],h=a[y>>>24]^c[m>>16&255]^f[g>>8&255]^l[255&d]^n[S+1],p=a[m>>>24]^c[g>>16&255]^f[d>>8&255]^l[255&y]^n[S+2],g=a[g>>>24]^c[d>>16&255]^f[y>>8&255]^l[255&m]^n[S+3],S+=4,d=u,y=h,m=p;for(let t=0;4>t;t++)o[e?3&-t:t]=w[d>>>24]<<24^w[y>>16&255]<<16^w[m>>8&255]<<8^w[255&g]^n[S++],u=d,d=y,y=m,m=g,g=u;return o}},rt=class{constructor(t,e){this.O=t,this.H=e,this.Z=e}reset(){this.Z=this.H}update(t){return this.F(this.O,t,this.Z)}N(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}q(t){0===(t[0]=this.N(t[0]))&&(t[1]=this.N(t[1]))}F(t,e,n){let s;if(!(s=e.length))return[];const r=B.l(e);for(let r=0;s>r;r+=4){this.q(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 B.u(e,r)}},ot=K.D;let it=$&&et&&typeof tt.importKey==v,at=$&&et&&typeof tt.deriveBits==v;class ct extends d{constructor({password:t,rawPassword:e,encryptionStrength:n,checkPasswordOnly:s}){super({start(){lt(this,t,e,n)},async transform(t,e){const n=this,{password:i,G:a,J:c,ready:f}=n;i?(await(async(t,e,n,s)=>{const o=await ut(t,e,n,dt(s,0,J[e])),i=dt(s,J[e]);if(o[0]!=i[0]||o[1]!=i[1])throw new r(E)})(n,a,i,dt(t,0,J[a]+2)),t=dt(t,J[a]+2),s?e.error(new r(O)):c()):await f;const l=new o(t.length-X-(t.length-X)%Z);e.enqueue(wt(n,t,l,0,X,!0))},async flush(t){const{X:e,Y:n,pending:s,ready:o}=this;if(n&&e){await o;const i=dt(s,0,s.length-X),a=dt(s,s.length-X);let c=z;if(i.length){const t=mt(nt,i);n.update(t);const s=e.update(t);c=yt(nt,s)}const f=dt(yt(nt,n.digest()),0,X);let l=s.length<X?1:0;for(let t=0;X>t;t++)l|=f[t]^a[t];if(l)throw new r(L);t.enqueue(c)}}})}}class ft extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){let s;super({start(){lt(this,t,e,n)},async transform(t,e){const n=this,{password:s,G:r,J:i,ready:a}=n;let c=z;s?(c=await(async(t,e,n)=>{const s=H(new o(J[e]));return pt(s,await ut(t,e,n,s))})(n,r,s),i()):await a;const f=new o(c.length+t.length-t.length%Z);f.set(c,0),e.enqueue(wt(n,t,f,c.length,0))},async flush(t){const{X:e,Y:n,pending:r,ready:o}=this;if(n&&e){await o;let i=z;if(r.length){const t=e.update(mt(nt,r));n.update(t),i=yt(nt,t)}s.signature=yt(nt,n.digest()).slice(0,X),t.enqueue(pt(i,s.signature))}}}),s=this}}function lt(t,n,s,r){e.assign(t,{ready:new w(e=>t.J=e),password:ht(n,s),G:r-1,pending:z})}function wt(t,e,n,s,r,i){const{X:a,Y:c,pending:f}=t;f.length&&(e=pt(f,e));const l=e.length-r;let w;for(n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new o(e)).set(n,0)}return t})(n,s+(l-l%Z)),w=0;l-Z>=w;w+=Z){const t=mt(nt,dt(e,w,w+Z));i&&c.update(t);const r=a.update(t);i||c.update(r),n.set(yt(nt,r),w+s)}return t.pending=dt(e,w),n}async function ut(n,s,r,i){n.password=null;const a=await(async(t,e,n,s,r)=>{if(!it)return K.importKey(e);try{return await tt.importKey("raw",e,n,!1,r)}catch{return it=!1,K.importKey(e)}})(0,r,N,0,G),c=await(async(t,e,n)=>{if(!at)return K.M(e,t.salt,q.iterations,n);try{return await tt.deriveBits(t,e,n)}catch{return at=!1,K.M(e,t.salt,q.iterations,n)}})(e.assign({salt:i},q),a,8*(2*Q[s]+2)),f=new o(c),l=mt(nt,dt(f,0,Q[s])),w=mt(nt,dt(f,Q[s],2*Q[s])),u=dt(f,2*Q[s]);return e.assign(n,{keys:{key:l,$:w,passwordVerification:u},X:new rt(new st(l),t.from(Y)),Y:new ot(w)}),u}function ht(t,e){return e===b?(t=>{if(typeof u==k){const e=new o((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new u).encode(t)})(t):e}function pt(t,e){let n=t;return t.length+e.length&&(n=new o(t.length+e.length),n.set(t,0),n.set(e,t.length)),n}function dt(t,e,n){return t.subarray(e,n)}function yt(t,e){return t.p(e)}function mt(t,e){return t.m(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=kt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e.at(-1)^n.passwordVerification))throw new r(E);t=t.subarray(12)}s?e.error(new r(O)):e.enqueue(kt(n,t))}})}}class St 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=H(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(vt(n,e),0),r=12}else s=new o(t.length),r=0;s.set(vt(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,tt:new M(r[0]),et:new M(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 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,n[s]);return n}function vt(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.tt.append([e]);const r=~t.tt.get();n=At(s.imul(At(n+It(r)),134775813)+1),t.et.append([n>>>24]);const o=~t.et.get();t.keys=[r,n,o]}function Ct(t){const e=2|t.keys[2];return It(s.imul(e,1^e)>>>8)}function It(t){return 255&t}function At(t){return 4294967295&t}class xt extends d{constructor(t,{chunkSize:e,nt:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:i,zipCrypto:a,signed:c,level:f,deflate64:w}=t,u=this;let h,p,d,y=super.readable;const m=c&&r&&!w&&(!o||a)&&!(!i||!s);o&&!a||!c||m||(h=new _,y=Dt(y,h)),r&&(m?(d=new Pt,y=Mt(y,new s("gzip")),y=Dt(y,d)):y=Wt(y,i,{level:f,chunkSize:e},s,n,s)),o&&(a?y=Dt(y,new St(t)):(p=new ft(t),y=Dt(y,p))),Ut(u,y,()=>{let t;o&&!a&&(t=p.signature),o&&!a||!c||(t=m?d.signature:new l(h.value.buffer).getUint32(0)),u.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 i=n.length+t.length;if(8>=i){const e=new o(i);return e.set(n),e.set(t,n.length),void(n=e)}const a=i-8,c=new o(a),f=s.min(a,n.length);c.set(n.subarray(0,f),0),a>f&&c.set(t.subarray(0,a-f),f),r.enqueue(c);const l=new o(8),w=n.length-f;w&&l.set(n.subarray(f),0),l.set(t.subarray(a-f),w),n=l},flush(){const e=new l(n.buffer,n.byteOffset,n.byteLength);t.signature=e.getUint32(0,!0),t.st=e.getUint32(4,!0)}}),t=this}}class Rt extends d{constructor(t,{chunkSize:e,rt:n,DecompressionStream:s}){super({});const{zipCrypto:o,encrypted:i,signed:a,signature:c,compressed:f,useCompressionStream:w,deflate64:u}=t;let h,p,d=super.readable;i&&(o?d=Dt(d,new gt(t)):(p=new ct(t),d=Dt(d,p))),f&&(d=Wt(d,w,{chunkSize:e,deflate64:u},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||!a||(h=new _,d=Dt(d,h)),Ut(this,d,()=>{if((!i||o)&&a){const t=new l(h.value.buffer);if(c!=t.getUint32(0,!1))throw new r(L)}})}}function Ut(t,n,s){n=Dt(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Wt(t,e,n,s,r,o){const i=e&&s?s:r||o,a=n.deflate64?"deflate64-raw":"deflate-raw";let c;try{c=new i(a,n)}catch(t){if(!e)throw t;if(r)c=new r(a,n);else{if(!o)throw t;c=new o(a,n)}}return Mt(t,c)}function Dt(t,e){return t.pipeThrough(e)}function Mt(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 _t="data",Bt="close";class Tt 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 a=0;const c=new i(t,n),f=super.readable,l=new d({transform(t,e){t&&t.length&&(a+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:a})}}),w=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}=c;e.assign(s,{signature:t,inputSize:a})}});e.defineProperty(s,"readable",{get:()=>f.pipeThrough(l).pipeThrough(c).pipeThrough(w)})}}class Vt extends d{constructor(t){let e;1>t&&(t=65536),super({transform:(n,s)=>{if(e){const t=new o(e.length+n.length);t.set(e),t.set(n,e.length),n=t,e=null}let r=0;for(;n.length-r>t;)s.enqueue(n.slice(r,r+t)),r+=t;e=r?n.slice(r):n},flush(t){e&&e.length&&t.enqueue(e)}})}}let Kt=2;try{typeof navigator!=k&&navigator.hardwareConcurrency&&(Kt=navigator.hardwareConcurrency)}catch{}const jt={ot:"./core/web-worker-wasm.js",wasmURI:"./core/streams/zlib-wasm/zlib-streams.wasm",chunkSize:65536,it:Kt,ct:5e3,ft:5e3,lt:!0,useCompressionStream:!0,CompressionStream:typeof g!=k&&g,DecompressionStream:typeof S!=k&&S};e.assign({},jt);const Et=new f,Lt=new f;let Ot,Ht,Zt,Ft,Nt,qt=0;async function Gt(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 a={highWaterMark:1},c=t.readable||new y({async pull(t){const e=new w(t=>Et.set(qt,t));Jt({type:"pull",messageId:qt}),qt=(qt+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);r=t.writable||new m({async write(t){let e;const s=new w(t=>e=t);Lt.set(qt,e),Jt({type:_t,value:t,messageId:qt}),qt=(qt+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Tt(o,i),Ot=new AbortController;const{signal:f}=Ot;await c.pipeThrough(e).pipeThrough(new Vt((t=>s.max(t.chunkSize,64))(i))).pipeTo(r,{signal:f,preventClose:!0,preventAbort:!0}),await r.getWriter().close();const{signature:l,inputSize:u,outputSize:h}=e;Jt({type:Bt,result:{signature:l,inputSize:u,outputSize:h}})}catch(t){if(t.outputSize=e?e.outputSize:0,r&&!r.locked)try{await r.getWriter().close()}catch{}Qt(t)}}function Jt(t){let{value:e}=t;if(e)if(e.length)try{e=new o(e),t.value=e.buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t)}function Qt(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 Xt(t,e,n={}){const i="number"==typeof n.level?n.level:-1,a="number"==typeof n.outBuffer?n.outBuffer:65536,c="number"==typeof n.inBufferSize?n.inBufferSize:65536;return new d({start(){try{let n;if(this.wt=Zt(a),this.in=Zt(c),this.inBufferSize=c,!this.wt||!this.in)throw new r("allocation failed");if(this.ut=new o(a),t?(this.ht=Ht.deflate_process,this.dt=Ht.deflate_last_consumed,this.yt=Ht.deflate_end,this.gt=Ht.deflate_new(),n="gzip"===e?Ht.deflate_init_gzip(this.gt,i):"deflate-raw"===e?Ht.deflate_init_raw(this.gt,i):Ht.deflate_init(this.gt,i)):"deflate64-raw"===e?(this.ht=Ht.inflate9_process,this.dt=Ht.inflate9_last_consumed,this.yt=Ht.inflate9_end,this.gt=Ht.inflate9_new(),n=Ht.inflate9_init_raw(this.gt)):(this.ht=Ht.inflate_process,this.dt=Ht.inflate_last_consumed,this.yt=Ht.inflate_end,this.gt=Ht.inflate_new(),n="deflate-raw"===e?Ht.inflate_init_raw(this.gt):"gzip"===e?Ht.inflate_init_gzip(this.gt):Ht.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,c=new o(Nt.buffer),f=this.ht,l=this.dt,w=this.wt,u=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&&Ft&&(Ft(this.in),this.in=0),this.in=Zt(e),this.inBufferSize=e,!this.in))throw new r("allocation failed");c.set(i.subarray(h,h+e),this.in);const o=f(this.gt,this.in,e,w,a,0),p=16777215&o;if(p&&(u.set(c.subarray(w,w+p),0),n.enqueue(u.slice(0,p))),!t){const t=o>>24&255,e=128&t?t-256:t;if(0>e)throw new r("process error:"+e)}const d=l(this.gt);if(0===d)break;h+=d}}catch(t){f(this),n.error(t)}},flush(e){try{const n=new o(Nt.buffer),s=this.ht,i=this.wt,c=this.ut;for(;;){const o=s(this.gt,0,0,i,a,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&&(c.set(n.subarray(i,i+f),0),e.enqueue(c.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&&Ft&&Ft(t.in),t.in=0,t.wt&&Ft&&Ft(t.wt),t.wt=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&Gt(t),e==_t){const t=Et.get(n);Et.delete(n),t({value:new o(s),done:r})}if("ack"==e){const t=Lt.get(n);Lt.delete(n),t()}e==Bt&&Ot.abort()}catch(t){Qt(t)}});class Yt{constructor(t="deflate",e){return Xt(!0,t,e)}}class $t{constructor(t="deflate",e){return Xt(!1,t,e)}}Yt.St=!0,$t.St=!0;let te=!1;self.initModule=async t=>{try{const e=await(async(t,{baseURI:e})=>{if(!te){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(Ht=t,({malloc:Zt,free:Ft,memory:Nt}=Ht),"function"!=typeof Zt||"function"!=typeof Ft||!Nt)throw Ht=Zt=Ft=Nt=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports),te=!0}})(t.wasmURI,t);return t.nt=Yt,t.rt=$t,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)}});}
206
+ function setDefaultConfiguration(configuration) {
207
+ for (const propertyName of CONFIGURABLE_PROPERTY_NAMES) {
208
+ const propertyValue = configuration[propertyName];
209
+ if (propertyValue !== UNDEFINED_VALUE) {
210
+ DEFAULT_CONFIGURATION[propertyName] = propertyValue;
211
+ }
212
+ }
213
+ configure(configuration);
214
+ }
215
+
216
+ function resetConfiguration() {
217
+ for (const propertyName of CONFIGURABLE_PROPERTY_NAMES) {
218
+ delete config[propertyName];
219
+ }
220
+ Object.assign(config, DEFAULT_CONFIGURATION);
221
+ }
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)}});}
205
224
 
206
225
  /*
207
226
  Copyright (c) 2022 Gildas Lormeau. All rights reserved.
@@ -385,6 +404,50 @@
385
404
  }
386
405
  }
387
406
 
407
+ /*
408
+ Copyright (c) 2026 Gildas Lormeau. All rights reserved.
409
+
410
+ Redistribution and use in source and binary forms, with or without
411
+ modification, are permitted provided that the following conditions are met:
412
+
413
+ 1. Redistributions of source code must retain the above copyright notice,
414
+ this list of conditions and the following disclaimer.
415
+
416
+ 2. Redistributions in binary form must reproduce the above copyright
417
+ notice, this list of conditions and the following disclaimer in
418
+ the documentation and/or other materials provided with the distribution.
419
+
420
+ 3. The names of the authors may not be used to endorse or promote products
421
+ derived from this software without specific prior written permission.
422
+
423
+ THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
424
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
425
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
426
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
427
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
428
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
429
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
430
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
431
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
432
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
433
+ */
434
+
435
+
436
+ function concat(first, second) {
437
+ const result = new Uint8Array(first.length + second.length);
438
+ result.set(first);
439
+ result.set(second, first.length);
440
+ return result;
441
+ }
442
+
443
+ function toExactUint8Array(array) {
444
+ return array.byteOffset || array.byteLength != array.buffer.byteLength ? new Uint8Array(array) : array;
445
+ }
446
+
447
+ function getDataView(array) {
448
+ return new DataView(array.buffer, array.byteOffset, array.byteLength);
449
+ }
450
+
388
451
  // Derived from https://github.com/xqdoo00o/jszip/blob/master/lib/sjcl.js and https://github.com/bitwiseshiftleft/sjcl
389
452
 
390
453
  // deno-lint-ignore-file no-this-alias
@@ -1489,16 +1552,6 @@
1489
1552
  }
1490
1553
  }
1491
1554
 
1492
- function concat(leftArray, rightArray) {
1493
- let array = leftArray;
1494
- if (leftArray.length + rightArray.length) {
1495
- array = new Uint8Array(leftArray.length + rightArray.length);
1496
- array.set(leftArray, 0);
1497
- array.set(rightArray, leftArray.length);
1498
- }
1499
- return array;
1500
- }
1501
-
1502
1555
  function expand(inputArray, length) {
1503
1556
  if (length && length > inputArray.length) {
1504
1557
  const array = inputArray;
@@ -1760,44 +1813,34 @@
1760
1813
  constructor() {
1761
1814
  // deno-lint-ignore prefer-const
1762
1815
  let stream;
1763
- let headerLeft = GZIP_HEADER_LENGTH;
1764
- let tail = new Uint8Array(0);
1816
+ let headerBytesLeft = GZIP_HEADER_LENGTH;
1817
+ let trailerCandidate = new Uint8Array(0);
1765
1818
  super({
1766
1819
  transform(chunk, controller) {
1767
- if (headerLeft) {
1768
- const dropped = Math.min(headerLeft, chunk.length);
1769
- headerLeft -= dropped;
1770
- chunk = chunk.subarray(dropped);
1820
+ if (headerBytesLeft) {
1821
+ const droppedLength = Math.min(headerBytesLeft, chunk.length);
1822
+ headerBytesLeft -= droppedLength;
1823
+ chunk = chunk.subarray(droppedLength);
1771
1824
  if (!chunk.length) {
1772
1825
  return;
1773
1826
  }
1774
1827
  }
1775
- const available = tail.length + chunk.length;
1776
- if (available <= GZIP_TRAILER_LENGTH) {
1777
- const pending = new Uint8Array(available);
1778
- pending.set(tail);
1779
- pending.set(chunk, tail.length);
1780
- tail = pending;
1828
+ const availableLength = trailerCandidate.length + chunk.length;
1829
+ if (availableLength <= GZIP_TRAILER_LENGTH) {
1830
+ trailerCandidate = concat(trailerCandidate, chunk);
1781
1831
  return;
1782
1832
  }
1783
- const emitLength = available - GZIP_TRAILER_LENGTH;
1784
- const output = new Uint8Array(emitLength);
1785
- const fromTail = Math.min(emitLength, tail.length);
1786
- output.set(tail.subarray(0, fromTail), 0);
1787
- if (emitLength > fromTail) {
1788
- output.set(chunk.subarray(0, emitLength - fromTail), fromTail);
1789
- }
1790
- controller.enqueue(output);
1791
- const nextTail = new Uint8Array(GZIP_TRAILER_LENGTH);
1792
- const tailRemaining = tail.length - fromTail;
1793
- if (tailRemaining) {
1794
- nextTail.set(tail.subarray(fromTail), 0);
1795
- }
1796
- nextTail.set(chunk.subarray(emitLength - fromTail), tailRemaining);
1797
- tail = nextTail;
1833
+ const emitLength = availableLength - GZIP_TRAILER_LENGTH;
1834
+ const emittedFromTrailer = Math.min(emitLength, trailerCandidate.length);
1835
+ controller.enqueue(concat(
1836
+ trailerCandidate.subarray(0, emittedFromTrailer),
1837
+ chunk.subarray(0, emitLength - emittedFromTrailer)));
1838
+ trailerCandidate = concat(
1839
+ trailerCandidate.subarray(emittedFromTrailer),
1840
+ chunk.subarray(emitLength - emittedFromTrailer));
1798
1841
  },
1799
1842
  flush() {
1800
- const dataView = new DataView(tail.buffer, tail.byteOffset, tail.byteLength);
1843
+ const dataView = getDataView(trailerCandidate);
1801
1844
  stream.signature = dataView.getUint32(0, true);
1802
1845
  stream.uncompressedSize = dataView.getUint32(4, true);
1803
1846
  }
@@ -1972,7 +2015,7 @@
1972
2015
  */
1973
2016
 
1974
2017
 
1975
- const DEFAULT_CHUNK_SIZE$1 = 64 * 1024;
2018
+ const DEFAULT_CHUNK_SIZE = 64 * 1024;
1976
2019
  const MESSAGE_EVENT_TYPE = "message";
1977
2020
  const MESSAGE_START = "start";
1978
2021
  const MESSAGE_PULL = "pull";
@@ -2040,33 +2083,54 @@
2040
2083
  class ChunkStream extends TransformStream {
2041
2084
 
2042
2085
  constructor(chunkSize) {
2043
- let pendingChunk;
2086
+ const pendingChunks = [];
2087
+ let pendingLength = 0;
2044
2088
  if (!(chunkSize >= 1)) {
2045
- chunkSize = DEFAULT_CHUNK_SIZE$1;
2089
+ chunkSize = DEFAULT_CHUNK_SIZE;
2046
2090
  }
2047
2091
  super({
2048
- transform,
2092
+ transform(chunk, controller) {
2093
+ pendingChunks.push(chunk);
2094
+ pendingLength += chunk.length;
2095
+ while (pendingLength > chunkSize) {
2096
+ controller.enqueue(shiftChunk());
2097
+ }
2098
+ },
2049
2099
  flush(controller) {
2050
- if (pendingChunk && pendingChunk.length) {
2051
- controller.enqueue(pendingChunk);
2100
+ if (pendingLength) {
2101
+ controller.enqueue(concatChunks(pendingChunks, pendingLength));
2052
2102
  }
2053
2103
  }
2054
2104
  });
2055
2105
 
2056
- function transform(chunk, controller) {
2057
- if (pendingChunk) {
2058
- const newChunk = new Uint8Array(pendingChunk.length + chunk.length);
2059
- newChunk.set(pendingChunk);
2060
- newChunk.set(chunk, pendingChunk.length);
2061
- chunk = newChunk;
2062
- pendingChunk = null;
2106
+ function shiftChunk() {
2107
+ const result = new Uint8Array(chunkSize);
2108
+ let resultOffset = 0;
2109
+ while (resultOffset < chunkSize) {
2110
+ const firstChunk = pendingChunks[0];
2111
+ const remainingLength = chunkSize - resultOffset;
2112
+ if (firstChunk.length <= remainingLength) {
2113
+ result.set(firstChunk, resultOffset);
2114
+ resultOffset += firstChunk.length;
2115
+ pendingChunks.shift();
2116
+ } else {
2117
+ result.set(firstChunk.subarray(0, remainingLength), resultOffset);
2118
+ pendingChunks[0] = firstChunk.subarray(remainingLength);
2119
+ resultOffset += remainingLength;
2120
+ }
2063
2121
  }
2122
+ pendingLength -= chunkSize;
2123
+ return result;
2124
+ }
2125
+
2126
+ function concatChunks(chunks, length) {
2127
+ const result = new Uint8Array(length);
2064
2128
  let offset = 0;
2065
- while (chunk.length - offset > chunkSize) {
2066
- controller.enqueue(chunk.slice(offset, offset + chunkSize));
2067
- offset += chunkSize;
2129
+ for (const chunk of chunks) {
2130
+ result.set(chunk, offset);
2131
+ offset += chunk.length;
2068
2132
  }
2069
- pendingChunk = offset ? chunk.slice(offset) : chunk;
2133
+ return result;
2070
2134
  }
2071
2135
  }
2072
2136
  }
@@ -2252,7 +2316,10 @@
2252
2316
  }
2253
2317
  }
2254
2318
  codecStream = new CodecStream(options, config);
2255
- await readable.pipeThrough(codecStream).pipeTo(writable, { preventClose: true, preventAbort: true });
2319
+ await readable
2320
+ .pipeThrough(codecStream)
2321
+ .pipeThrough(new ChunkStream(getChunkSize(config)))
2322
+ .pipeTo(writable, { preventClose: true, preventAbort: true });
2256
2323
  const {
2257
2324
  signature,
2258
2325
  inputSize,
@@ -2451,7 +2518,7 @@
2451
2518
  const { value, readable, writable } = message;
2452
2519
  const transferables = [];
2453
2520
  if (value) {
2454
- message.value = value.byteOffset || value.byteLength != value.buffer.byteLength ? new Uint8Array(value) : value;
2521
+ message.value = toExactUint8Array(value);
2455
2522
  transferables.push(message.value.buffer);
2456
2523
  }
2457
2524
  if (transferStreams && transferStreamsSupported) {
@@ -2575,8 +2642,8 @@
2575
2642
  const { options, config } = workerOptions;
2576
2643
  const { transferStreams, useWebWorkers, useCompressionStream, compressed, signed, encrypted } = options;
2577
2644
  const { workerURI, maxWorkers } = config;
2578
- workerOptions.transferStreams = transferStreams || transferStreams === UNDEFINED_VALUE;
2579
- const streamCopy = !compressed && !signed && !encrypted && !workerOptions.transferStreams;
2645
+ workerOptions.transferStreams = transferStreams || (transferStreams === UNDEFINED_VALUE && config.transferStreams);
2646
+ const streamCopy = !compressed && !signed && !encrypted;
2580
2647
  workerOptions.useWebWorkers = !streamCopy && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
2581
2648
  workerOptions.workerURI = workerOptions.useWebWorkers && workerURI ? workerURI : UNDEFINED_VALUE;
2582
2649
  options.useCompressionStream = useCompressionStream || (useCompressionStream === UNDEFINED_VALUE && config.useCompressionStream);
@@ -2710,6 +2777,7 @@
2710
2777
 
2711
2778
  const ERR_HTTP_STATUS = "HTTP error ";
2712
2779
  const ERR_HTTP_RANGE = "HTTP Range not supported";
2780
+ const ERR_HTTP_RESOURCE_CHANGED = "HTTP resource changed";
2713
2781
  const ERR_ITERATOR_COMPLETED_TOO_SOON = "Writer iterator completed too soon";
2714
2782
  const ERR_WRITER_NOT_INITIALIZED = "Writer not initialized";
2715
2783
 
@@ -2720,13 +2788,15 @@
2720
2788
  const HTTP_HEADER_ACCEPT_RANGES = "Accept-Ranges";
2721
2789
  const HTTP_HEADER_RANGE = "Range";
2722
2790
  const HTTP_HEADER_CONTENT_TYPE = "Content-Type";
2791
+ const HTTP_HEADER_ETAG = "Etag";
2792
+ const HTTP_HEADER_LAST_MODIFIED = "Last-Modified";
2723
2793
  const HTTP_METHOD_HEAD = "HEAD";
2724
2794
  const HTTP_METHOD_GET = "GET";
2725
2795
  const HTTP_RANGE_UNIT = "bytes";
2726
- const DEFAULT_CHUNK_SIZE = 64 * 1024;
2727
2796
  const DEFAULT_BUFFER_SIZE = 256 * 1024;
2728
2797
 
2729
2798
  const PROPERTY_NAME_WRITABLE = "writable";
2799
+ const DISK_BOUNDARY = Symbol();
2730
2800
 
2731
2801
  class Stream {
2732
2802
 
@@ -2745,13 +2815,13 @@
2745
2815
  return this.createReadable();
2746
2816
  }
2747
2817
 
2748
- createReadable({ offset = 0, size, diskNumberStart, chunkSize = DEFAULT_CHUNK_SIZE } = {}) {
2818
+ createReadable({ offset = 0, size, chunkSize = getChunkSize(getConfiguration()) } = {}) {
2749
2819
  const reader = this;
2750
2820
  let chunkOffset = 0;
2751
2821
  return new ReadableStream({
2752
2822
  async pull(controller) {
2753
2823
  const dataSize = size === UNDEFINED_VALUE ? chunkSize : Math.min(chunkSize, size - chunkOffset);
2754
- const data = await readUint8Array(reader, offset + chunkOffset, dataSize, diskNumberStart);
2824
+ const data = await readUint8Array(reader, offset + chunkOffset, dataSize);
2755
2825
  controller.enqueue(data);
2756
2826
  if ((chunkOffset + chunkSize > size) || (size === UNDEFINED_VALUE && !data.length && dataSize)) {
2757
2827
  controller.close();
@@ -2773,7 +2843,7 @@
2773
2843
  if (!writer.initialized) {
2774
2844
  throw new Error(ERR_WRITER_NOT_INITIALIZED);
2775
2845
  }
2776
- return writer.writeUint8Array(chunk);
2846
+ return writer.writeUint8Array(toExactUint8Array(chunk));
2777
2847
  }
2778
2848
  });
2779
2849
  Object.defineProperty(writer, PROPERTY_NAME_WRITABLE, {
@@ -2860,6 +2930,27 @@
2860
2930
  }
2861
2931
  }
2862
2932
 
2933
+ let blobSliceReliable;
2934
+ let blobSliceProbe;
2935
+
2936
+ function probeBlobSliceReliability() {
2937
+ blobSliceProbe = (async () => {
2938
+ try {
2939
+ const slicedBlob = new Blob([new Uint8Array(3)]).slice(1, 2);
2940
+ const streamReader = slicedBlob.stream().getReader();
2941
+ let streamedLength = 0;
2942
+ let result = await streamReader.read();
2943
+ while (!result.done) {
2944
+ streamedLength += result.value.length;
2945
+ result = await streamReader.read();
2946
+ }
2947
+ blobSliceReliable = streamedLength == 1;
2948
+ } catch {
2949
+ blobSliceReliable = false;
2950
+ }
2951
+ })();
2952
+ }
2953
+
2863
2954
  class BlobReader extends Reader {
2864
2955
 
2865
2956
  constructor(blob) {
@@ -2868,14 +2959,32 @@
2868
2959
  blob,
2869
2960
  size: blob.size
2870
2961
  });
2962
+ if (!blobSliceProbe) {
2963
+ probeBlobSliceReliability();
2964
+ }
2965
+ }
2966
+
2967
+ createReadable(options) {
2968
+ const reader = this;
2969
+ const { blob, size } = reader;
2970
+ const { offset = 0, size: readSize = size - offset } = options || {};
2971
+ if (!offset && readSize >= size) {
2972
+ return blob.stream();
2973
+ }
2974
+ if (blobSliceReliable) {
2975
+ return blob.slice(offset, offset + readSize).stream();
2976
+ }
2977
+ return super.createReadable(options);
2871
2978
  }
2872
2979
 
2873
2980
  async readUint8Array(offset, length) {
2874
2981
  const reader = this;
2875
2982
  const offsetEnd = offset + length;
2876
- const blob = offset || offsetEnd < reader.size ? reader.blob.slice(offset, offsetEnd) : reader.blob;
2983
+ const readsWholeBlob = !offset && offsetEnd >= reader.size;
2984
+ const blob = readsWholeBlob ? reader.blob : reader.blob.slice(offset, offsetEnd);
2877
2985
  let arrayBuffer = await blob.arrayBuffer();
2878
- if (arrayBuffer.byteLength > length) {
2986
+ const sliceIgnoredByBuggyImplementation = arrayBuffer.byteLength > length;
2987
+ if (sliceIgnoredByBuggyImplementation) {
2879
2988
  arrayBuffer = arrayBuffer.slice(offset, offsetEnd);
2880
2989
  }
2881
2990
  return new Uint8Array(arrayBuffer);
@@ -2956,6 +3065,18 @@
2956
3065
  super.init();
2957
3066
  }
2958
3067
 
3068
+ createReadable(options) {
3069
+ const reader = this;
3070
+ const { useRangeHeader, forceRangeRequests, size } = reader;
3071
+ if ((useRangeHeader || forceRangeRequests) && size !== UNDEFINED_VALUE) {
3072
+ const { offset = 0, size: readSize = size - offset } = options || {};
3073
+ if (readSize > 0 && offset < size) {
3074
+ return createRangeReadable(reader, offset, Math.min(readSize, size - offset));
3075
+ }
3076
+ }
3077
+ return super.createReadable(options);
3078
+ }
3079
+
2959
3080
  readUint8Array(index, length) {
2960
3081
  return readUint8ArrayHttpReader(this, index, length, sendFetchRequest, getFetchRequestData);
2961
3082
  }
@@ -2984,6 +3105,7 @@
2984
3105
  useRangeHeader,
2985
3106
  forceRangeRequests,
2986
3107
  combineSizeEocd,
3108
+ checkResourceChanges = true,
2987
3109
  fetch
2988
3110
  } = options;
2989
3111
  options = Object.assign({}, options);
@@ -2991,6 +3113,7 @@
2991
3113
  delete options.useRangeHeader;
2992
3114
  delete options.forceRangeRequests;
2993
3115
  delete options.combineSizeEocd;
3116
+ delete options.checkResourceChanges;
2994
3117
  delete options.useXHR;
2995
3118
  delete options.fetch;
2996
3119
  Object.assign(httpReader, {
@@ -3000,6 +3123,7 @@
3000
3123
  useRangeHeader,
3001
3124
  forceRangeRequests,
3002
3125
  combineSizeEocd,
3126
+ checkResourceChanges,
3003
3127
  fetch
3004
3128
  });
3005
3129
  }
@@ -3024,17 +3148,8 @@
3024
3148
  httpReader.eocdCache = eocdCache;
3025
3149
  }
3026
3150
  }
3027
- let contentSize;
3028
- const contentRangeHeader = response.headers.get(HTTP_HEADER_CONTENT_RANGE);
3029
- if (contentRangeHeader) {
3030
- const splitHeader = contentRangeHeader.trim().split(/\s*\/\s*/);
3031
- if (splitHeader.length) {
3032
- const headerValue = splitHeader[1];
3033
- if (headerValue && headerValue != "*") {
3034
- contentSize = Number(headerValue);
3035
- }
3036
- }
3037
- }
3151
+ setResourceValidators(httpReader, response);
3152
+ const contentSize = getContentRangeSize(response);
3038
3153
  if (contentSize === UNDEFINED_VALUE) {
3039
3154
  await getContentLength(httpReader, sendRequest, getRequestData);
3040
3155
  } else {
@@ -3075,6 +3190,8 @@
3075
3190
  throw new Error(ERR_HTTP_RANGE);
3076
3191
  }
3077
3192
  }
3193
+ checkResourceValidators(httpReader, response);
3194
+ setResourceValidators(httpReader, response);
3078
3195
  const data = new Uint8Array(await response.arrayBuffer());
3079
3196
  if (data.length != length) {
3080
3197
  throw new Error(ERR_HTTP_RANGE);
@@ -3086,7 +3203,97 @@
3086
3203
  if (!data) {
3087
3204
  await getRequestData(httpReader, options);
3088
3205
  }
3089
- return new Uint8Array(httpReader.data.subarray(index, index + length));
3206
+ return httpReader.data.subarray(index, index + length);
3207
+ }
3208
+ }
3209
+
3210
+ function createRangeReadable(httpReader, offset, size) {
3211
+ let bodyReader;
3212
+ let remainingLength = size;
3213
+ 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();
3229
+ },
3230
+ async pull(controller) {
3231
+ const { value, done } = await bodyReader.read();
3232
+ 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
+ }
3243
+ if (!remainingLength) {
3244
+ controller.close();
3245
+ await bodyReader.cancel();
3246
+ }
3247
+ }
3248
+ },
3249
+ cancel(reason) {
3250
+ return bodyReader && bodyReader.cancel(reason);
3251
+ }
3252
+ });
3253
+ }
3254
+
3255
+ function getContentRangeSize(response) {
3256
+ const contentRangeHeader = response.headers.get(HTTP_HEADER_CONTENT_RANGE);
3257
+ if (contentRangeHeader) {
3258
+ const headerValue = contentRangeHeader.trim().split(/\s*\/\s*/)[1];
3259
+ if (headerValue && headerValue != "*") {
3260
+ const contentSize = Number(headerValue);
3261
+ if (!Number.isNaN(contentSize)) {
3262
+ return contentSize;
3263
+ }
3264
+ }
3265
+ }
3266
+ }
3267
+
3268
+ function getResourceValidators({ headers }) {
3269
+ return {
3270
+ etag: headers.get(HTTP_HEADER_ETAG) || UNDEFINED_VALUE,
3271
+ lastModified: headers.get(HTTP_HEADER_LAST_MODIFIED) || UNDEFINED_VALUE
3272
+ };
3273
+ }
3274
+
3275
+ function setResourceValidators(httpReader, response) {
3276
+ const { checkResourceChanges, resourceValidators } = httpReader;
3277
+ if (checkResourceChanges && !resourceValidators && response.status == 206) {
3278
+ httpReader.resourceValidators = getResourceValidators(response);
3279
+ }
3280
+ }
3281
+
3282
+ function checkResourceValidators(httpReader, response) {
3283
+ const { checkResourceChanges, resourceValidators, size } = httpReader;
3284
+ if (checkResourceChanges) {
3285
+ const contentRangeSize = getContentRangeSize(response);
3286
+ if (contentRangeSize !== UNDEFINED_VALUE && size !== UNDEFINED_VALUE && contentRangeSize != size) {
3287
+ throw new Error(ERR_HTTP_RESOURCE_CHANGED);
3288
+ }
3289
+ if (resourceValidators) {
3290
+ const validators = getResourceValidators(response);
3291
+ const changed = Object.entries(resourceValidators).some(([name, value]) =>
3292
+ value !== UNDEFINED_VALUE && validators[name] !== UNDEFINED_VALUE && value != validators[name]);
3293
+ if (changed) {
3294
+ throw new Error(ERR_HTTP_RESOURCE_CHANGED);
3295
+ }
3296
+ }
3090
3297
  }
3091
3298
  }
3092
3299
 
@@ -3197,6 +3404,10 @@
3197
3404
  super.init();
3198
3405
  }
3199
3406
 
3407
+ createReadable(options) {
3408
+ return this.reader.createReadable(options);
3409
+ }
3410
+
3200
3411
  readUint8Array(index, length) {
3201
3412
  return this.reader.readUint8Array(index, length);
3202
3413
  }
@@ -3277,25 +3488,26 @@
3277
3488
  const reader = this;
3278
3489
  const { readers } = reader;
3279
3490
  reader.lastDiskNumber = 0;
3280
- reader.lastDiskOffset = 0;
3281
- await Promise.all(readers.map(async (diskReader, indexDiskReader) => {
3282
- await initStream(diskReader);
3283
- if (indexDiskReader != readers.length - 1) {
3284
- reader.lastDiskOffset += diskReader.size;
3285
- }
3491
+ await Promise.all(readers.map(diskReader => initStream(diskReader)));
3492
+ reader.diskOffsets = readers.map(diskReader => {
3493
+ const diskOffset = reader.size;
3286
3494
  reader.size += diskReader.size;
3287
- }));
3495
+ return diskOffset;
3496
+ });
3288
3497
  super.init();
3289
3498
  }
3290
3499
 
3291
- async readUint8Array(offset, length, diskNumber = 0) {
3500
+ getDiskOffset(diskNumber) {
3501
+ const { diskOffsets, size } = this;
3502
+ const diskOffset = diskOffsets.at(diskNumber);
3503
+ return diskOffset === UNDEFINED_VALUE ? size : diskOffset;
3504
+ }
3505
+
3506
+ async readUint8Array(offset, length) {
3292
3507
  const reader = this;
3293
3508
  const { readers } = this;
3294
3509
  let result;
3295
- let currentDiskNumber = diskNumber;
3296
- if (currentDiskNumber == -1) {
3297
- currentDiskNumber = readers.length - 1;
3298
- }
3510
+ let currentDiskNumber = 0;
3299
3511
  let currentReaderOffset = offset;
3300
3512
  while (readers[currentDiskNumber] && currentReaderOffset >= readers[currentDiskNumber].size) {
3301
3513
  currentReaderOffset -= readers[currentDiskNumber].size;
@@ -3308,14 +3520,9 @@
3308
3520
  result = await readUint8Array(currentReader, currentReaderOffset, length);
3309
3521
  } else {
3310
3522
  const chunkLength = currentReaderSize - currentReaderOffset;
3311
- result = new Uint8Array(length);
3312
3523
  const firstPart = await readUint8Array(currentReader, currentReaderOffset, chunkLength);
3313
- result.set(firstPart, 0);
3314
- const secondPart = await reader.readUint8Array(offset + chunkLength, length - chunkLength, diskNumber);
3315
- result.set(secondPart, chunkLength);
3316
- if (firstPart.length + secondPart.length < length) {
3317
- result = result.subarray(0, firstPart.length + secondPart.length);
3318
- }
3524
+ const secondPart = await reader.readUint8Array(offset + chunkLength, length - chunkLength);
3525
+ result = concat(firstPart, secondPart);
3319
3526
  }
3320
3527
  } else {
3321
3528
  result = EMPTY_UINT8_ARRAY;
@@ -3340,6 +3547,12 @@
3340
3547
  let diskSourceWriter, diskWritable, diskWriter;
3341
3548
  const writable = new WritableStream({
3342
3549
  async write(chunk) {
3550
+ if (chunk === DISK_BOUNDARY) {
3551
+ if (diskWriter) {
3552
+ await endDisk();
3553
+ }
3554
+ return;
3555
+ }
3343
3556
  const { availableSize } = writer;
3344
3557
  if (!diskWriter) {
3345
3558
  const { value, done } = await writerGenerator.next();
@@ -3359,11 +3572,7 @@
3359
3572
  await this.write(chunk);
3360
3573
  } else if (chunk.length >= availableSize) {
3361
3574
  await writeChunk(chunk.subarray(0, availableSize));
3362
- await closeDisk();
3363
- writer.diskOffset += diskSourceWriter.size;
3364
- writer.diskNumber++;
3365
- diskWriter = null;
3366
- writer.availableSize = writer.maxSize;
3575
+ await endDisk();
3367
3576
  if (chunk.length > availableSize) {
3368
3577
  await this.write(chunk.subarray(availableSize));
3369
3578
  }
@@ -3374,7 +3583,7 @@
3374
3583
  async close() {
3375
3584
  if (diskWriter) {
3376
3585
  await diskWriter.ready;
3377
- await closeDisk();
3586
+ await closeDiskWriter();
3378
3587
  }
3379
3588
  },
3380
3589
  async abort(reason) {
@@ -3399,10 +3608,28 @@
3399
3608
  }
3400
3609
  }
3401
3610
 
3402
- async function closeDisk() {
3611
+ async function endDisk() {
3612
+ await closeDiskWriter();
3613
+ writer.diskOffset += diskSourceWriter.size;
3614
+ writer.diskNumber++;
3615
+ diskWriter = null;
3616
+ writer.availableSize = writer.maxSize;
3617
+ }
3618
+
3619
+ async function closeDiskWriter() {
3403
3620
  await diskWriter.close();
3404
3621
  }
3405
3622
  }
3623
+
3624
+ async closeDisk() {
3625
+ const streamWriter = this.writable.getWriter();
3626
+ try {
3627
+ await streamWriter.ready;
3628
+ await streamWriter.write(DISK_BOUNDARY);
3629
+ } finally {
3630
+ streamWriter.releaseLock();
3631
+ }
3632
+ }
3406
3633
  }
3407
3634
 
3408
3635
  class GenericReader {
@@ -3434,14 +3661,6 @@
3434
3661
  if (writer.size === UNDEFINED_VALUE) {
3435
3662
  writer.size = 0;
3436
3663
  }
3437
- if (!(writer instanceof SplitDataWriter)) {
3438
- Object.assign(writer, {
3439
- diskNumber: 0,
3440
- diskOffset: 0,
3441
- availableSize: INFINITY_VALUE,
3442
- maxSize: INFINITY_VALUE
3443
- });
3444
- }
3445
3664
  return writer;
3446
3665
  }
3447
3666
  }
@@ -3460,8 +3679,8 @@
3460
3679
  }
3461
3680
  }
3462
3681
 
3463
- function readUint8Array(reader, offset, size, diskNumber) {
3464
- return reader.readUint8Array(offset, size, diskNumber);
3682
+ function readUint8Array(reader, offset, size) {
3683
+ return reader.readUint8Array(offset, size);
3465
3684
  }
3466
3685
 
3467
3686
  /*
@@ -3837,7 +4056,7 @@
3837
4056
  const { endOfDirectoryInfo, endOfDirectoryReachingEndCount } = await findEndOfCentralDirectory(reader, rejectAmbiguousEndOfDirectory, maxAppendedDataSize);
3838
4057
  if (!endOfDirectoryInfo) {
3839
4058
  const signatureArray = await readUint8Array(reader, 0, 4);
3840
- const signatureView = getDataView$1(signatureArray);
4059
+ const signatureView = getDataView(signatureArray);
3841
4060
  if (getUint32(signatureView) == SPLIT_ZIP_FILE_SIGNATURE) {
3842
4061
  throw new Error(ERR_SPLIT_ZIP_FILE);
3843
4062
  } else {
@@ -3847,7 +4066,7 @@
3847
4066
  if (rejectAmbiguousEndOfDirectory && endOfDirectoryReachingEndCount > 1) {
3848
4067
  throwAmbiguousArchive("multiple end of central directory records");
3849
4068
  }
3850
- const endOfDirectoryView = getDataView$1(endOfDirectoryInfo);
4069
+ const endOfDirectoryView = getDataView(endOfDirectoryInfo);
3851
4070
  let directoryDataLength = getUint32(endOfDirectoryView, 12);
3852
4071
  let directoryDataOffset = getUint32(endOfDirectoryView, 16);
3853
4072
  const commentOffset = endOfDirectoryInfo.offset;
@@ -3863,17 +4082,21 @@
3863
4082
  let prependedDataLength = 0;
3864
4083
  let startOffset;
3865
4084
  let zip64EndOfDirectory;
3866
- if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS || diskNumber == MAX_16_BITS) {
4085
+ const requiresZip64 = directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS || diskNumber == MAX_16_BITS;
4086
+ if (directoryDataOffset != MAX_32_BITS && diskNumber != MAX_16_BITS) {
4087
+ directoryDataOffset += getDiskOffset$1(reader, diskNumber);
4088
+ }
4089
+ if (requiresZip64) {
3867
4090
  const endOfDirectoryLocatorArray = endOfDirectoryInfo.offset >= ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH ?
3868
4091
  await readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH) :
3869
4092
  EMPTY_UINT8_ARRAY;
3870
- const endOfDirectoryLocatorView = getDataView$1(endOfDirectoryLocatorArray);
4093
+ const endOfDirectoryLocatorView = getDataView(endOfDirectoryLocatorArray);
3871
4094
  if (endOfDirectoryLocatorArray.length == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH &&
3872
4095
  getUint32(endOfDirectoryLocatorView, 0) == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE) {
3873
- directoryDataOffset = getBigUint64(endOfDirectoryLocatorView, 8);
3874
- let endOfDirectoryArray = await readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH, -1);
3875
- let endOfDirectoryView = getDataView$1(endOfDirectoryArray);
3876
- const expectedDirectoryDataOffset = endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH - ZIP64_END_OF_CENTRAL_DIR_LENGTH - (reader.lastDiskOffset || 0);
4096
+ directoryDataOffset = getDiskOffset$1(reader, getUint32(endOfDirectoryLocatorView, 4)) + getBigUint64(endOfDirectoryLocatorView, 8);
4097
+ let endOfDirectoryArray = await readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH);
4098
+ let endOfDirectoryView = getDataView(endOfDirectoryArray);
4099
+ const expectedDirectoryDataOffset = endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH - ZIP64_END_OF_CENTRAL_DIR_LENGTH;
3877
4100
  if ((endOfDirectoryArray.length < ZIP64_END_OF_CENTRAL_DIR_LENGTH || getUint32(endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE) &&
3878
4101
  directoryDataOffset != expectedDirectoryDataOffset && expectedDirectoryDataOffset >= 0) {
3879
4102
  const originalDirectoryDataOffset = directoryDataOffset;
@@ -3881,8 +4104,8 @@
3881
4104
  if (directoryDataOffset > originalDirectoryDataOffset) {
3882
4105
  prependedDataLength = directoryDataOffset - originalDirectoryDataOffset;
3883
4106
  }
3884
- endOfDirectoryArray = await readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH, -1);
3885
- endOfDirectoryView = getDataView$1(endOfDirectoryArray);
4107
+ endOfDirectoryArray = await readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH);
4108
+ endOfDirectoryView = getDataView(endOfDirectoryArray);
3886
4109
  }
3887
4110
  if (endOfDirectoryArray.length < ZIP64_END_OF_CENTRAL_DIR_LENGTH || getUint32(endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE) {
3888
4111
  throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
@@ -3908,7 +4131,7 @@
3908
4131
  } else if (checkAmbiguity && directoryDataLength != getBigUint64(endOfDirectoryView, 40)) {
3909
4132
  throwAmbiguousArchive("mismatched zip64 end of central directory record");
3910
4133
  }
3911
- directoryDataOffset = getBigUint64(endOfDirectoryView, 48) + prependedDataLength;
4134
+ directoryDataOffset = getDiskOffset$1(reader, diskNumber) + getBigUint64(endOfDirectoryView, 48) + prependedDataLength;
3912
4135
  }
3913
4136
  }
3914
4137
  const declaredDirectoryDataLength = directoryDataLength;
@@ -3925,19 +4148,19 @@
3925
4148
  throw new Error(ERR_BAD_FORMAT);
3926
4149
  }
3927
4150
  let offset = 0;
3928
- let directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength, diskNumber);
3929
- let directoryView = getDataView$1(directoryArray);
4151
+ let directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4152
+ let directoryView = getDataView(directoryArray);
3930
4153
  if (directoryDataLength) {
3931
4154
  if (directoryArray.length < 4) {
3932
4155
  throw new Error(ERR_BAD_FORMAT);
3933
4156
  }
3934
- const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength - (reader.lastDiskOffset || 0);
4157
+ const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
3935
4158
  if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
3936
4159
  const storedPointsAtDirectory = getUint32(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE;
3937
4160
  let reconcile = !storedPointsAtDirectory;
3938
4161
  if (!reconcile && expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
3939
- const expectedSignatureArray = await readUint8Array(reader, expectedDirectoryDataOffset, 4, diskNumber);
3940
- reconcile = getUint32(getDataView$1(expectedSignatureArray), 0) == CENTRAL_FILE_HEADER_SIGNATURE;
4162
+ const expectedSignatureArray = await readUint8Array(reader, expectedDirectoryDataOffset, 4);
4163
+ reconcile = getUint32(getDataView(expectedSignatureArray), 0) == CENTRAL_FILE_HEADER_SIGNATURE;
3941
4164
  }
3942
4165
  if (reconcile) {
3943
4166
  const originalDirectoryDataOffset = directoryDataOffset;
@@ -3945,16 +4168,16 @@
3945
4168
  if (directoryDataOffset > originalDirectoryDataOffset) {
3946
4169
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
3947
4170
  }
3948
- directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength, diskNumber);
3949
- directoryView = getDataView$1(directoryArray);
4171
+ directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4172
+ directoryView = getDataView(directoryArray);
3950
4173
  }
3951
4174
  }
3952
4175
  }
3953
- const expectedDirectoryDataLength = centralDirectoryEndOffset - directoryDataOffset - (reader.lastDiskOffset || 0);
4176
+ const expectedDirectoryDataLength = centralDirectoryEndOffset - directoryDataOffset;
3954
4177
  if (directoryDataLength != expectedDirectoryDataLength && expectedDirectoryDataLength >= 0 && diskNumber == lastDiskNumber) {
3955
4178
  directoryDataLength = expectedDirectoryDataLength;
3956
- directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength, diskNumber);
3957
- directoryView = getDataView$1(directoryArray);
4179
+ directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4180
+ directoryView = getDataView(directoryArray);
3958
4181
  }
3959
4182
  if (directoryDataOffset < 0 || directoryDataOffset >= reader.size) {
3960
4183
  throw new Error(ERR_BAD_FORMAT);
@@ -4027,7 +4250,7 @@
4027
4250
  });
4028
4251
  readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
4029
4252
  fileEntry.offset += prependedDataLength;
4030
- startOffset = Math.min(fileEntry.offset, startOffset);
4253
+ startOffset = Math.min(getDiskOffset$1(reader, fileEntry.diskNumberStart) + fileEntry.offset, startOffset);
4031
4254
  if (checkAmbiguity) {
4032
4255
  if (filenames.has(fileEntry.filename)) {
4033
4256
  duplicateFilename = true;
@@ -4181,8 +4404,9 @@
4181
4404
  dataDescriptor
4182
4405
  } = bitFlag;
4183
4406
  const localDirectory = fileEntry.localDirectory = {};
4184
- const dataArray = await readUint8Array(reader, offset, HEADER_SIZE, diskNumberStart);
4185
- const dataView = getDataView$1(dataArray);
4407
+ const localHeaderOffset = getDiskOffset$1(reader, diskNumberStart) + offset;
4408
+ const dataArray = await readUint8Array(reader, localHeaderOffset, HEADER_SIZE);
4409
+ const dataView = getDataView(dataArray);
4186
4410
  let password = getOptionValue$1(zipEntry, options, OPTION_PASSWORD);
4187
4411
  let rawPassword = getOptionValue$1(zipEntry, options, OPTION_RAW_PASSWORD);
4188
4412
  const passThrough = getOptionValue$1(zipEntry, options, OPTION_PASS_THROUGH);
@@ -4207,12 +4431,12 @@
4207
4431
  const checkAmbiguity = getStrictness(getOptionValue$1(zipEntry, options, OPTION_STRICTNESS), getOptionValue$1(zipEntry, options, OPTION_CHECK_AMBIGUITY)) == STRICTNESS_STRICT;
4208
4432
  let rawLocalFilename = EMPTY_UINT8_ARRAY;
4209
4433
  if (checkAmbiguity && (filenameLength || extraFieldLength)) {
4210
- const trailingDataArray = await readUint8Array(reader, offset + HEADER_SIZE, filenameLength + extraFieldLength, diskNumberStart);
4434
+ const trailingDataArray = await readUint8Array(reader, localHeaderOffset + HEADER_SIZE, filenameLength + extraFieldLength);
4211
4435
  rawLocalFilename = trailingDataArray.subarray(0, filenameLength);
4212
4436
  localDirectory.rawExtraField = trailingDataArray.subarray(filenameLength);
4213
4437
  } else {
4214
4438
  localDirectory.rawExtraField = extraFieldLength ?
4215
- await readUint8Array(reader, offset + HEADER_SIZE + filenameLength, extraFieldLength, diskNumberStart) :
4439
+ await readUint8Array(reader, localHeaderOffset + HEADER_SIZE + filenameLength, extraFieldLength) :
4216
4440
  EMPTY_UINT8_ARRAY;
4217
4441
  }
4218
4442
  readCommonFooter(zipEntry, localDirectory, dataView, 4, true);
@@ -4238,9 +4462,9 @@
4238
4462
  throw new Error(ERR_ENCRYPTED);
4239
4463
  }
4240
4464
  }
4241
- const dataOffset = offset + HEADER_SIZE + filenameLength + extraFieldLength;
4465
+ const dataOffset = localHeaderOffset + HEADER_SIZE + filenameLength + extraFieldLength;
4242
4466
  const size = compressedSize;
4243
- const readable = reader.createReadable({ offset: dataOffset, size, diskNumberStart, chunkSize: getChunkSize(config) });
4467
+ const readable = reader.createReadable({ offset: dataOffset, size });
4244
4468
  const signal = getOptionValue$1(zipEntry, options, OPTION_SIGNAL);
4245
4469
  const checkPasswordOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_PASSWORD_ONLY);
4246
4470
  let checkOverlappingEntry = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY);
@@ -4281,8 +4505,7 @@
4281
4505
  reader,
4282
4506
  fileEntry,
4283
4507
  index,
4284
- offset,
4285
- diskNumberStart,
4508
+ offset: localHeaderOffset,
4286
4509
  signature,
4287
4510
  compressedSize,
4288
4511
  uncompressedSize,
@@ -4346,7 +4569,7 @@
4346
4569
  function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory) {
4347
4570
  const { rawExtraField } = directory;
4348
4571
  const extraField = directory.extraField = new Map();
4349
- const rawExtraFieldView = getDataView$1(new Uint8Array(rawExtraField));
4572
+ const rawExtraFieldView = getDataView(rawExtraField);
4350
4573
  let offsetExtraField = 0;
4351
4574
  try {
4352
4575
  while (offsetExtraField < rawExtraField.length) {
@@ -4418,7 +4641,7 @@
4418
4641
 
4419
4642
  function readExtraFieldZip64(extraFieldZip64, directory) {
4420
4643
  directory.zip64 = true;
4421
- const extraFieldView = getDataView$1(extraFieldZip64.data);
4644
+ const extraFieldView = getDataView(extraFieldZip64.data);
4422
4645
  const missingProperties = ZIP64_PROPERTIES.filter(([propertyName, max]) => directory[propertyName] == max);
4423
4646
  const requiredLength = missingProperties.reduce((length, [, max]) => length + ZIP64_EXTRACTION[max].bytes, 0);
4424
4647
  if (extraFieldZip64.data.length < requiredLength) {
@@ -4437,10 +4660,10 @@
4437
4660
  extraFieldUnicode.valid = false;
4438
4661
  return;
4439
4662
  }
4440
- const extraFieldView = getDataView$1(extraFieldUnicode.data);
4663
+ const extraFieldView = getDataView(extraFieldUnicode.data);
4441
4664
  const crc32 = new Crc32();
4442
4665
  crc32.append(fileEntry[rawPropertyName]);
4443
- const dataViewSignature = getDataView$1(new Uint8Array(4));
4666
+ const dataViewSignature = getDataView(new Uint8Array(4));
4444
4667
  dataViewSignature.setUint32(0, crc32.get(), true);
4445
4668
  const signature = getUint32(extraFieldView, 1);
4446
4669
  Object.assign(extraFieldUnicode, {
@@ -4455,7 +4678,7 @@
4455
4678
  }
4456
4679
 
4457
4680
  function readExtraFieldAES(extraFieldAES, directory, compressionMethod) {
4458
- const extraFieldView = getDataView$1(extraFieldAES.data);
4681
+ const extraFieldView = getDataView(extraFieldAES.data);
4459
4682
  const strength = getUint8(extraFieldView, 4);
4460
4683
  Object.assign(extraFieldAES, {
4461
4684
  vendorVersion: getUint8(extraFieldView, 0),
@@ -4468,7 +4691,7 @@
4468
4691
  }
4469
4692
 
4470
4693
  function readExtraFieldNTFS(extraFieldNTFS, directory) {
4471
- const extraFieldView = getDataView$1(extraFieldNTFS.data);
4694
+ const extraFieldView = getDataView(extraFieldNTFS.data);
4472
4695
  let offsetExtraField = 4;
4473
4696
  let tag1Data;
4474
4697
  try {
@@ -4485,7 +4708,7 @@
4485
4708
  }
4486
4709
  try {
4487
4710
  if (tag1Data && tag1Data.length == 24) {
4488
- const tag1View = getDataView$1(tag1Data);
4711
+ const tag1View = getDataView(tag1Data);
4489
4712
  const rawLastModDate = tag1View.getBigUint64(0, true);
4490
4713
  const rawLastAccessDate = tag1View.getBigUint64(8, true);
4491
4714
  const rawCreationDate = tag1View.getBigUint64(16, true);
@@ -4508,7 +4731,7 @@
4508
4731
 
4509
4732
  function readExtraFieldUnix(extraField, directory, isInfoZip) {
4510
4733
  try {
4511
- const view = getDataView$1(new Uint8Array(extraField.data));
4734
+ const view = getDataView(extraField.data);
4512
4735
  let uid, gid;
4513
4736
  if (isInfoZip) {
4514
4737
  let offset = 0;
@@ -4546,7 +4769,7 @@
4546
4769
  if (!extraFieldExtendedTimestamp.data.length) {
4547
4770
  return;
4548
4771
  }
4549
- const extraFieldView = getDataView$1(extraFieldExtendedTimestamp.data);
4772
+ const extraFieldView = getDataView(extraFieldExtendedTimestamp.data);
4550
4773
  const flags = getUint8(extraFieldView, 0);
4551
4774
  const timeProperties = [];
4552
4775
  const timeRawProperties = [];
@@ -4584,7 +4807,6 @@
4584
4807
  fileEntry,
4585
4808
  index,
4586
4809
  offset,
4587
- diskNumberStart,
4588
4810
  signature,
4589
4811
  compressedSize,
4590
4812
  uncompressedSize,
@@ -4593,12 +4815,6 @@
4593
4815
  extraFieldZip64,
4594
4816
  readRanges
4595
4817
  }) {
4596
- let diskOffset = 0;
4597
- if (diskNumberStart && reader.readers) {
4598
- for (let indexReader = 0; indexReader < Math.min(diskNumberStart, reader.readers.length); indexReader++) {
4599
- diskOffset += reader.readers[indexReader].size;
4600
- }
4601
- }
4602
4818
  let dataDescriptorLength = 0;
4603
4819
  if (dataDescriptor) {
4604
4820
  if (extraFieldZip64) {
@@ -4608,19 +4824,19 @@
4608
4824
  }
4609
4825
  }
4610
4826
  if (dataDescriptorLength) {
4611
- const dataDescriptorArray = await readUint8Array(reader, dataOffset + compressedSize, dataDescriptorLength + DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH, diskNumberStart);
4827
+ const dataDescriptorArray = await readUint8Array(reader, dataOffset + compressedSize, dataDescriptorLength + DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH);
4612
4828
  const dataDescriptorSignature = dataDescriptorArray.length == dataDescriptorLength + DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH &&
4613
- getUint32(getDataView$1(dataDescriptorArray), 0) == DATA_DESCRIPTOR_RECORD_SIGNATURE;
4829
+ getUint32(getDataView(dataDescriptorArray), 0) == DATA_DESCRIPTOR_RECORD_SIGNATURE;
4614
4830
  if (dataDescriptorSignature) {
4615
- const readSignature = getUint32(getDataView$1(dataDescriptorArray), 4);
4831
+ const readSignature = getUint32(getDataView(dataDescriptorArray), 4);
4616
4832
  let readCompressedSize;
4617
4833
  let readUncompressedSize;
4618
4834
  if (extraFieldZip64) {
4619
- readCompressedSize = getBigUint64(getDataView$1(dataDescriptorArray), 8);
4620
- readUncompressedSize = getBigUint64(getDataView$1(dataDescriptorArray), 16);
4835
+ readCompressedSize = getBigUint64(getDataView(dataDescriptorArray), 8);
4836
+ readUncompressedSize = getBigUint64(getDataView(dataDescriptorArray), 16);
4621
4837
  } else {
4622
- readCompressedSize = getUint32(getDataView$1(dataDescriptorArray), 8);
4623
- readUncompressedSize = getUint32(getDataView$1(dataDescriptorArray), 12);
4838
+ readCompressedSize = getUint32(getDataView(dataDescriptorArray), 8);
4839
+ readUncompressedSize = getUint32(getDataView(dataDescriptorArray), 12);
4624
4840
  }
4625
4841
  const matchSignature = (fileEntry.encrypted && !fileEntry.zipCrypto) || readSignature == signature;
4626
4842
  if (matchSignature &&
@@ -4631,8 +4847,8 @@
4631
4847
  }
4632
4848
  }
4633
4849
  const range = {
4634
- start: diskOffset + offset,
4635
- end: diskOffset + dataOffset + compressedSize + dataDescriptorLength,
4850
+ start: offset,
4851
+ end: dataOffset + compressedSize + dataDescriptorLength,
4636
4852
  fileEntry
4637
4853
  };
4638
4854
  for (const [otherIndex, otherRange] of readRanges) {
@@ -4645,6 +4861,10 @@
4645
4861
  readRanges.set(index, range);
4646
4862
  }
4647
4863
 
4864
+ function getDiskOffset$1(reader, diskNumber) {
4865
+ return reader.getDiskOffset ? reader.getDiskOffset(diskNumber) : 0;
4866
+ }
4867
+
4648
4868
  function getStrictness(strictness, checkAmbiguity) {
4649
4869
  if (strictness === UNDEFINED_VALUE) {
4650
4870
  return checkAmbiguity ? STRICTNESS_STRICT : STRICTNESS_BALANCED;
@@ -4728,7 +4948,7 @@
4728
4948
  async function* scanEndOfCentralDirectory(reader, scanLength) {
4729
4949
  const scanOffset = reader.size - scanLength;
4730
4950
  const scanArray = await readUint8Array(reader, scanOffset, scanLength);
4731
- const scanView = getDataView$1(scanArray);
4951
+ const scanView = getDataView(scanArray);
4732
4952
  for (let indexByte = scanArray.length - END_OF_CENTRAL_DIR_LENGTH; indexByte >= 0; indexByte--) {
4733
4953
  if (getUint32(scanView, indexByte) == END_OF_CENTRAL_DIR_SIGNATURE) {
4734
4954
  yield [scanView, scanOffset, scanArray, indexByte, scanOffset + indexByte];
@@ -4751,7 +4971,8 @@
4751
4971
  if (!filesLength && !directoryDataLength) {
4752
4972
  return CENTRAL_DIRECTORY_PLAUSIBLE;
4753
4973
  }
4754
- for (const centralDirectoryOffset of [offset - directoryDataLength, directoryDataOffset]) {
4974
+ const directoryDiskNumber = getUint16(view, indexByte + 6);
4975
+ for (const centralDirectoryOffset of [offset - directoryDataLength, getDiskOffset$1(reader, directoryDiskNumber) + directoryDataOffset]) {
4755
4976
  if (await readSignature(reader, view, anchoredOffset, centralDirectoryOffset, size, remoteProbeBudget) == CENTRAL_FILE_HEADER_SIGNATURE) {
4756
4977
  return CENTRAL_DIRECTORY_REACHABLE;
4757
4978
  }
@@ -4769,7 +4990,7 @@
4769
4990
  if (remoteProbeBudget.count > 0) {
4770
4991
  remoteProbeBudget.count--;
4771
4992
  const signatureArray = await readUint8Array(reader, signatureOffset, 4);
4772
- return getUint32(getDataView$1(signatureArray), 0);
4993
+ return getUint32(getDataView(signatureArray), 0);
4773
4994
  }
4774
4995
  return UNDEFINED_VALUE;
4775
4996
  }
@@ -4834,9 +5055,27 @@
4834
5055
  return Number(view.getBigUint64(offset, true));
4835
5056
  }
4836
5057
 
4837
- function getDataView$1(array) {
4838
- return new DataView(array.buffer, array.byteOffset, array.byteLength);
4839
- }
5058
+ var zipReader = /*#__PURE__*/Object.freeze({
5059
+ __proto__: null,
5060
+ ERR_AMBIGUOUS_ARCHIVE: ERR_AMBIGUOUS_ARCHIVE,
5061
+ ERR_BAD_FORMAT: ERR_BAD_FORMAT,
5062
+ ERR_CENTRAL_DIRECTORY_NOT_FOUND: ERR_CENTRAL_DIRECTORY_NOT_FOUND,
5063
+ ERR_ENCRYPTED: ERR_ENCRYPTED,
5064
+ ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND: ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND,
5065
+ ERR_EOCDR_NOT_FOUND: ERR_EOCDR_NOT_FOUND,
5066
+ ERR_EXTRAFIELD_ZIP64_NOT_FOUND: ERR_EXTRAFIELD_ZIP64_NOT_FOUND,
5067
+ ERR_INVALID_COMPRESSED_DATA: ERR_INVALID_COMPRESSED_DATA,
5068
+ ERR_INVALID_PASSWORD: ERR_INVALID_PASSWORD,
5069
+ ERR_INVALID_SIGNATURE: ERR_INVALID_SIGNATURE,
5070
+ ERR_INVALID_UNCOMPRESSED_SIZE: ERR_INVALID_UNCOMPRESSED_SIZE,
5071
+ ERR_LOCAL_FILE_HEADER_NOT_FOUND: ERR_LOCAL_FILE_HEADER_NOT_FOUND,
5072
+ ERR_OVERLAPPING_ENTRY: ERR_OVERLAPPING_ENTRY,
5073
+ ERR_SPLIT_ZIP_FILE: ERR_SPLIT_ZIP_FILE,
5074
+ ERR_UNSUPPORTED_COMPRESSION: ERR_UNSUPPORTED_COMPRESSION$1,
5075
+ ERR_UNSUPPORTED_ENCRYPTION: ERR_UNSUPPORTED_ENCRYPTION,
5076
+ ZipReader: ZipReader,
5077
+ ZipReaderStream: ZipReaderStream
5078
+ });
4840
5079
 
4841
5080
  /*
4842
5081
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -4901,9 +5140,10 @@
4901
5140
 
4902
5141
  constructor(writer, options = {}) {
4903
5142
  writer = new GenericWriter(writer);
5143
+ const { availableSize = INFINITY_VALUE, maxSize = INFINITY_VALUE } = writer;
4904
5144
  const addSplitZipSignature =
4905
- writer.availableSize !== UNDEFINED_VALUE && writer.availableSize > 0 && writer.availableSize !== INFINITY_VALUE &&
4906
- writer.maxSize !== UNDEFINED_VALUE && writer.maxSize > 0 && writer.maxSize !== INFINITY_VALUE;
5145
+ availableSize > 0 && availableSize !== INFINITY_VALUE &&
5146
+ maxSize > 0 && maxSize !== INFINITY_VALUE;
4907
5147
  Object.assign(this, {
4908
5148
  writer,
4909
5149
  addSplitZipSignature,
@@ -4925,9 +5165,10 @@
4925
5165
  }
4926
5166
  reader = new GenericReader(reader);
4927
5167
  await initStream(reader);
4928
- const zipReader = new ZipReader(reader.readable);
4929
- const entries = await zipReader.getEntries();
4930
- await zipReader.close();
5168
+ const { ZipReader } = await Promise.resolve().then(function () { return zipReader; });
5169
+ const zipReader$1 = new ZipReader(reader.readable);
5170
+ const entries = await zipReader$1.getEntries();
5171
+ await zipReader$1.close();
4931
5172
  await initStream(this.writer);
4932
5173
  await reader.readable.pipeTo(this.writer.writable, { preventClose: true, preventAbort: true });
4933
5174
  this.writer.size = this.offset = reader.size;
@@ -4943,8 +5184,6 @@
4943
5184
  encrypted,
4944
5185
  uncompressedSize,
4945
5186
  compressedSize,
4946
- diskOffset,
4947
- diskNumber,
4948
5187
  zip64
4949
5188
  } = entry;
4950
5189
  let {
@@ -4992,8 +5231,9 @@
4992
5231
  Object.assign(entry, {
4993
5232
  zip64UncompressedSize,
4994
5233
  zip64CompressedSize,
4995
- zip64Offset: zip64 && this.offset - diskOffset >= MAX_32_BITS,
4996
- zip64DiskNumberStart: zip64 && diskNumber >= MAX_16_BITS,
5234
+ zip64Offset: zip64 && entry.offset >= MAX_32_BITS,
5235
+ diskNumberStart: 0,
5236
+ zip64DiskNumberStart: false,
4997
5237
  rawExtraFieldZip64,
4998
5238
  rawExtraFieldAES,
4999
5239
  rawExtraFieldExtendedTimestamp,
@@ -5160,7 +5400,8 @@
5160
5400
  try {
5161
5401
  const sizesInfo = await resolveSizes(zipWriter, reader, metadataInfo, options);
5162
5402
  ({ reader } = sizesInfo);
5163
- const { diskOffset, diskNumber } = zipWriter.writer;
5403
+ const diskOffset = getDiskOffset(zipWriter.writer);
5404
+ const diskNumber = getDiskNumber(zipWriter.writer);
5164
5405
  options = Object.assign({}, options, attributesInfo.resolvedOptions, metadataInfo.resolvedOptions, sizesInfo.resolvedOptions, {
5165
5406
  internalFileAttribute: metadataInfo.resolvedOptions.internalFileAttributes,
5166
5407
  externalFileAttribute: attributesInfo.resolvedOptions.externalFileAttributes,
@@ -5337,7 +5578,7 @@
5337
5578
  const extendedTimestamp = getOptionValue(zipWriter, options, OPTION_EXTENDED_TIMESTAMP, true);
5338
5579
  const keepOrder = getOptionValue(zipWriter, options, OPTION_KEEP_ORDER, true);
5339
5580
  const useWebWorkers = getOptionValue(zipWriter, options, OPTION_USE_WEB_WORKERS);
5340
- const transferStreams = getOptionValue(zipWriter, options, OPTION_TRANSFER_STREAMS, true);
5581
+ const transferStreams = getOptionValue(zipWriter, options, OPTION_TRANSFER_STREAMS);
5341
5582
  const bufferedWrite = getOptionValue(zipWriter, options, OPTION_BUFFERED_WRITE);
5342
5583
  const createTempStream = getOptionValue(zipWriter, options, OPTION_CREATE_TEMP_STREAM);
5343
5584
  const dataDescriptorSignature = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR_SIGNATURE, true);
@@ -5535,7 +5776,7 @@
5535
5776
  await requestLockWriter();
5536
5777
  }
5537
5778
  await initStream(fileWriter);
5538
- const { diskOffset } = writer;
5779
+ const diskOffset = getDiskOffset(writer);
5539
5780
  if (zipWriter.addSplitZipSignature) {
5540
5781
  delete zipWriter.addSplitZipSignature;
5541
5782
  const signatureArray = new Uint8Array(4);
@@ -5552,7 +5793,7 @@
5552
5793
  await lockPreviousFileEntry;
5553
5794
  await skipDiskIfNeeded();
5554
5795
  }
5555
- const diskNumberStart = writer.diskNumber;
5796
+ const diskNumberStart = getDiskNumber(writer);
5556
5797
  const entryOffset = getSegmentOffset(zipWriter, writer);
5557
5798
  fileEntry.diskNumberStart = diskNumberStart;
5558
5799
  if (!bufferedWrite) {
@@ -5572,11 +5813,11 @@
5572
5813
  writingBufferedEntryData = true;
5573
5814
  writerSizeBeforeEntry = writer.size;
5574
5815
  await skipDiskIfNeeded();
5575
- fileEntry.diskNumberStart = writer.diskNumber;
5816
+ fileEntry.diskNumberStart = getDiskNumber(writer);
5576
5817
  fileEntry.offset = getSegmentOffset(zipWriter, writer);
5577
5818
  if (usdz) {
5578
5819
  const previousMetadataSize = entryInfo.metadataSize;
5579
- appendExtraFieldUSDZ(entryInfo, zipWriter.offset - writer.diskOffset);
5820
+ appendExtraFieldUSDZ(entryInfo, zipWriter.offset - getDiskOffset(writer));
5580
5821
  fileEntry.size += entryInfo.metadataSize - previousMetadataSize;
5581
5822
  }
5582
5823
  updateLocalHeader(fileEntry, headerInfo.localHeaderView, options);
@@ -5641,9 +5882,8 @@
5641
5882
  }
5642
5883
 
5643
5884
  async function skipDiskIfNeeded() {
5644
- if (getLength(headerInfo.localHeaderArray) > writer.availableSize) {
5645
- writer.availableSize = 0;
5646
- await writeData(writer, EMPTY_UINT8_ARRAY);
5885
+ if (exceedsAvailableSize(writer, getLength(headerInfo.localHeaderArray))) {
5886
+ await writer.closeDisk();
5647
5887
  }
5648
5888
  }
5649
5889
  }
@@ -5754,7 +5994,7 @@
5754
5994
  }
5755
5995
  const { writable } = writer;
5756
5996
  if (reader) {
5757
- const readable = reader.createReadable ? reader.createReadable({ chunkSize: getChunkSize(config) }) : reader.readable;
5997
+ const readable = reader.createReadable ? reader.createReadable() : reader.readable;
5758
5998
  const size = reader.size;
5759
5999
  const workerOptions = {
5760
6000
  options: {
@@ -6186,8 +6426,8 @@
6186
6426
 
6187
6427
  async function closeFile(zipWriter, comment, options) {
6188
6428
  const directoryDataLength = createDirectoryRecords(zipWriter.files);
6189
- const { cdStartDiskNumber, cdStartDiskOffset } = await writeDirectoryRecords(zipWriter, directoryDataLength, options);
6190
- await writeEndOfDirectoryRecord(zipWriter, comment, options, { cdStartDiskNumber, cdStartDiskOffset, directoryDataLength });
6429
+ const directoryStart = await writeDirectoryRecords(zipWriter, directoryDataLength, options);
6430
+ await writeEndOfDirectoryRecord(zipWriter, comment, options, { directoryStart, directoryDataLength });
6191
6431
  }
6192
6432
 
6193
6433
  function createDirectoryRecords(files) {
@@ -6269,8 +6509,8 @@
6269
6509
  await initStream(writer);
6270
6510
  let offset = 0;
6271
6511
  let directoryDiskOffset = 0;
6272
- let cdStartDiskNumber = writer.diskNumber;
6273
- let cdStartDiskOffset = writer.diskOffset;
6512
+ let directoryStartDiskNumber = getDiskNumber(writer);
6513
+ let directoryStartDiskOffset = getDiskOffset(writer);
6274
6514
  for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
6275
6515
  const {
6276
6516
  offset: fileEntryOffset,
@@ -6297,15 +6537,14 @@
6297
6537
  } = fileEntry;
6298
6538
  const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
6299
6539
  const directoryRecordLength = CENTRAL_FILE_HEADER_LENGTH + getLength(rawFilename, rawComment) + extraFieldLength;
6300
- if (offset + directoryRecordLength - directoryDiskOffset > writer.availableSize) {
6540
+ if (exceedsAvailableSize(writer, offset + directoryRecordLength - directoryDiskOffset)) {
6301
6541
  await writeData(writer, directoryArray.slice(directoryDiskOffset, offset));
6302
6542
  directoryDiskOffset = offset;
6303
- writer.availableSize = 0;
6304
- await writeData(writer, EMPTY_UINT8_ARRAY);
6543
+ await writer.closeDisk();
6305
6544
  }
6306
6545
  if (indexFileEntry == 0) {
6307
- cdStartDiskNumber = writer.diskNumber;
6308
- cdStartDiskOffset = writer.diskOffset;
6546
+ directoryStartDiskNumber = getDiskNumber(writer);
6547
+ directoryStartDiskOffset = getDiskOffset(writer);
6309
6548
  }
6310
6549
  if (!zip64UncompressedSize) {
6311
6550
  setUint32(headerView, HEADER_OFFSET_UNCOMPRESSED_SIZE, uncompressedSize);
@@ -6345,18 +6584,18 @@
6345
6584
  }
6346
6585
  }
6347
6586
  await writeData(writer, directoryDiskOffset ? directoryArray.slice(directoryDiskOffset) : directoryArray);
6348
- return { cdStartDiskNumber, cdStartDiskOffset };
6587
+ return { diskNumber: directoryStartDiskNumber, diskOffset: directoryStartDiskOffset };
6349
6588
  }
6350
6589
 
6351
6590
  async function writeEndOfDirectoryRecord(zipWriter, comment, options, cdInfo) {
6352
6591
  const { writer } = zipWriter;
6353
- const { cdStartDiskNumber, cdStartDiskOffset } = cdInfo;
6592
+ const { directoryStart } = cdInfo;
6354
6593
  let { directoryDataLength } = cdInfo;
6355
6594
  let filesLength = zipWriter.files.size;
6356
- let diskNumber = cdStartDiskNumber;
6357
- let directoryOffset = zipWriter.offset - cdStartDiskOffset - (cdStartDiskNumber ? zipWriter.initialOffset : 0);
6358
- let lastDiskNumber = writer.diskNumber;
6359
- if (writer.availableSize < END_OF_CENTRAL_DIR_LENGTH) {
6595
+ let diskNumber = directoryStart.diskNumber;
6596
+ let directoryOffset = getSegmentOffset(zipWriter, directoryStart);
6597
+ let lastDiskNumber = getDiskNumber(writer);
6598
+ if (exceedsAvailableSize(writer, END_OF_CENTRAL_DIR_LENGTH)) {
6360
6599
  lastDiskNumber++;
6361
6600
  }
6362
6601
  let zip64 = getOptionValue(zipWriter, options, PROPERTY_NAME_ZIP64);
@@ -6372,11 +6611,10 @@
6372
6611
  throw new Error(ERR_INVALID_COMMENT);
6373
6612
  }
6374
6613
  const endOfdirectoryRecord = createRecordWriter(zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH);
6375
- if (getLength(endOfdirectoryRecord.array) + commentLength > writer.availableSize) {
6376
- writer.availableSize = 0;
6377
- await writeData(writer, EMPTY_UINT8_ARRAY);
6614
+ if (exceedsAvailableSize(writer, getLength(endOfdirectoryRecord.array) + commentLength)) {
6615
+ await writer.closeDisk();
6378
6616
  }
6379
- lastDiskNumber = writer.diskNumber;
6617
+ lastDiskNumber = getDiskNumber(writer);
6380
6618
  if (zip64) {
6381
6619
  endOfdirectoryRecord.uint32(ZIP64_END_OF_CENTRAL_DIR_SIGNATURE);
6382
6620
  endOfdirectoryRecord.uint64(44);
@@ -6390,7 +6628,7 @@
6390
6628
  endOfdirectoryRecord.uint64(directoryOffset);
6391
6629
  endOfdirectoryRecord.uint32(ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE);
6392
6630
  endOfdirectoryRecord.uint32(lastDiskNumber);
6393
- endOfdirectoryRecord.uint64(BigInt(zipWriter.offset) + BigInt(directoryDataLength) - BigInt(writer.diskOffset) - BigInt(writer.diskNumber ? zipWriter.initialOffset : 0));
6631
+ endOfdirectoryRecord.uint64(BigInt(getSegmentOffset(zipWriter, writer)) + BigInt(directoryDataLength));
6394
6632
  endOfdirectoryRecord.uint32(lastDiskNumber + 1);
6395
6633
  const supportZip64SplitFile = getOptionValue(zipWriter, options, OPTION_SUPPORT_ZIP64_SPLIT_FILE, true);
6396
6634
  if (supportZip64SplitFile) {
@@ -6430,8 +6668,23 @@
6430
6668
  };
6431
6669
  }
6432
6670
 
6433
- function getSegmentOffset(zipWriter, writer) {
6434
- return zipWriter.offset - writer.diskOffset - (writer.diskNumber ? zipWriter.initialOffset : 0);
6671
+ function getDiskNumber(writer) {
6672
+ const { diskNumber = 0 } = writer;
6673
+ return diskNumber;
6674
+ }
6675
+
6676
+ function getDiskOffset(writer) {
6677
+ const { diskOffset = 0 } = writer;
6678
+ return diskOffset;
6679
+ }
6680
+
6681
+ function exceedsAvailableSize(writer, length) {
6682
+ const { availableSize = INFINITY_VALUE } = writer;
6683
+ return length > availableSize;
6684
+ }
6685
+
6686
+ function getSegmentOffset(zipWriter, { diskNumber = 0, diskOffset = 0 }) {
6687
+ return zipWriter.offset - diskOffset - (diskNumber ? zipWriter.initialOffset : 0);
6435
6688
  }
6436
6689
 
6437
6690
  async function writeData(writer, array) {
@@ -6508,9 +6761,6 @@
6508
6761
  array.set(typedArray, offset);
6509
6762
  }
6510
6763
 
6511
- function getDataView(array) {
6512
- return new DataView(array.buffer, array.byteOffset, array.byteLength);
6513
- }
6514
6764
 
6515
6765
  function getLength(...arrayLikes) {
6516
6766
  let result = 0;
@@ -7051,12 +7301,12 @@
7051
7301
 
7052
7302
 
7053
7303
  try {
7054
- configure({ baseURI: (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('zip-fs.js', document.baseURI).href)) });
7304
+ setDefaultConfiguration({ baseURI: (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('zip-fs.js', document.baseURI).href)) });
7055
7305
  } catch {
7056
7306
  // ignored
7057
7307
  }
7058
7308
 
7059
- const n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],c=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],f=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],t=new Uint8Array(288);t.fill(8,0,144),t.fill(9,144,256),t.fill(7,256,280),t.fill(8,280,288);const u=new Uint8Array(30).fill(5);function r(n){const c=new Uint16Array(16);for(const s of n)c[s]++;c[0]=0;const s=new Uint16Array(17);for(let n=1;15>=n;n++)s[n+1]=s[n]+c[n];const f=new Uint16Array(n.length);for(let c=0;c<n.length;c++)n[c]&&(f[s[n[c]]++]=c);return {t:c,symbols:f}}const l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function U(U){let e;U({wasmURI:()=>(e||(e="data:application/wasm;base64,"+(n=>{let c="";const s=n.length;let f=0;for(;s>f+2;f+=3){const s=n[f]<<16|n[f+1]<<8|n[f+2];c+=l[s>>18&63]+l[s>>12&63]+l[s>>6&63]+l[63&s];}const z=s-f;if(1===z){const s=n[f]<<16;c+=l[s>>18&63]+l[s>>12&63]+"==";}else if(2===z){const s=n[f]<<16|n[f+1]<<8;c+=l[s>>18&63]+l[s>>12&63]+l[s>>6&63]+"=";}return c})((l=>{let U=0,e=0,o=0,a=new Uint8Array(1024),y=0,i=0;for(;!i;){i=w(1);const n=w(2);if(0==n)V();else if(1==n)j(r(t),r(u));else {if(2!=n)throw Error("invalid deflate block type");j(...m());}}return a.subarray(0,y);function b(){if(U>=l.length)throw Error("unexpected end of deflate data");return l[U++]}function w(n){for(;n>o;)e|=b()<<o,o+=8;const c=e&(1<<n)-1;return e>>>=n,o-=n,c}function V(){e=0,o=0;const n=b()|b()<<8;U+=2,L(y+n);for(let c=0;n>c;c++)a[y++]=b();}function j(z,t){let u=q(z);for(;256!=u;){if(256>u)L(y+1),a[y++]=u;else {const z=u-257,r=n[z]+w(c[z]),l=q(t),U=s[l]+w(f[l]);L(y+r);const e=y-U;for(let n=0;r>n;n++)a[y++]=a[e+n];}u=q(z);}}function m(){const n=w(5)+257,c=w(5)+1,s=w(4)+4,f=new Uint8Array(19);for(let n=0;s>n;n++)f[z[n]]=w(3);const t=r(f),u=new Uint8Array(n+c);let l=0;for(;l<u.length;){const n=q(t);if(16>n)u[l++]=n;else if(16==n){const n=u[l-1];let c=w(2)+3;for(;c--;)u[l++]=n;}else l+=17==n?w(3)+3:w(7)+11;}return [r(u.subarray(0,n)),r(u.subarray(n))]}function q(n){const{t:c,symbols:s}=n;let f=0,z=0,t=0;for(let n=1;15>=n;n++){f|=w(1);const u=c[n];if(u>f-z)return s[t+(f-z)];t+=u,z=z+u<<1,f<<=1;}throw Error("invalid huffman code")}function L(n){if(a.length<n){let c=2*a.length;for(;n>c;)c*=2;const s=new Uint8Array(c);s.set(a.subarray(0,y)),a=s;}}})((n=>{const c=(n=(n+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,s=[];for(let f=0;c>f;f+=4){const c=l.indexOf(n[f])<<18|l.indexOf(n[f+1])<<12|(63&l.indexOf(n[f+2]))<<6|63&l.indexOf(n[f+3]);s.push(c>>16&255),"="!==n[f+2]&&s.push(c>>8&255),"="!==n[f+3]&&s.push(255&c);}return new Uint8Array(s)})("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")))),e)});}
7309
+ const n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],c=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],f=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],t=new Uint8Array(288);t.fill(8,0,144),t.fill(9,144,256),t.fill(7,256,280),t.fill(8,280,288);const u=new Uint8Array(30).fill(5);function r(n){const c=new Uint16Array(16);for(const s of n)c[s]++;c[0]=0;const s=new Uint16Array(17);for(let n=1;15>=n;n++)s[n+1]=s[n]+c[n];const f=new Uint16Array(n.length);for(let c=0;c<n.length;c++)n[c]&&(f[s[n[c]]++]=c);return {l:c,symbols:f}}const l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function U(U){let e;U({wasmURI:()=>(e||(e="data:application/wasm;base64,"+(n=>{let c="";const s=n.length;let f=0;for(;s>f+2;f+=3){const s=n[f]<<16|n[f+1]<<8|n[f+2];c+=l[s>>18&63]+l[s>>12&63]+l[s>>6&63]+l[63&s];}const z=s-f;if(1===z){const s=n[f]<<16;c+=l[s>>18&63]+l[s>>12&63]+"==";}else if(2===z){const s=n[f]<<16|n[f+1]<<8;c+=l[s>>18&63]+l[s>>12&63]+l[s>>6&63]+"=";}return c})((l=>{let U=0,e=0,o=0,a=new Uint8Array(1024),y=0,i=0;for(;!i;){i=w(1);const n=w(2);if(0==n)V();else if(1==n)j(r(t),r(u));else {if(2!=n)throw Error("invalid deflate block type");j(...m());}}return a.subarray(0,y);function b(){if(U>=l.length)throw Error("unexpected end of deflate data");return l[U++]}function w(n){for(;n>o;)e|=b()<<o,o+=8;const c=e&(1<<n)-1;return e>>>=n,o-=n,c}function V(){e=0,o=0;const n=b()|b()<<8;U+=2,L(y+n);for(let c=0;n>c;c++)a[y++]=b();}function j(z,t){let u=q(z);for(;256!=u;){if(256>u)L(y+1),a[y++]=u;else {const z=u-257,r=n[z]+w(c[z]),l=q(t),U=s[l]+w(f[l]);L(y+r);const e=y-U;for(let n=0;r>n;n++)a[y++]=a[e+n];}u=q(z);}}function m(){const n=w(5)+257,c=w(5)+1,s=w(4)+4,f=new Uint8Array(19);for(let n=0;s>n;n++)f[z[n]]=w(3);const t=r(f),u=new Uint8Array(n+c);let l=0;for(;l<u.length;){const n=q(t);if(16>n)u[l++]=n;else if(16==n){const n=u[l-1];let c=w(2)+3;for(;c--;)u[l++]=n;}else l+=17==n?w(3)+3:w(7)+11;}return [r(u.subarray(0,n)),r(u.subarray(n))]}function q(n){const{l:c,symbols:s}=n;let f=0,z=0,t=0;for(let n=1;15>=n;n++){f|=w(1);const u=c[n];if(u>f-z)return s[t+(f-z)];t+=u,z=z+u<<1,f<<=1;}throw Error("invalid huffman code")}function L(n){if(a.length<n){let c=2*a.length;for(;n>c;)c*=2;const s=new Uint8Array(c);s.set(a.subarray(0,y)),a=s;}}})((n=>{const c=(n=(n+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,s=[];for(let f=0;c>f;f+=4){const c=l.indexOf(n[f])<<18|l.indexOf(n[f+1])<<12|(63&l.indexOf(n[f+2]))<<6|63&l.indexOf(n[f+3]);s.push(c>>16&255),"="!==n[f+2]&&s.push(c>>8&255),"="!==n[f+3]&&s.push(255&c);}return new Uint8Array(s)})("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")))),e)});}
7060
7310
 
7061
7311
  /*
7062
7312
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -7378,7 +7628,7 @@
7378
7628
 
7379
7629
  let modulePromise;
7380
7630
 
7381
- U(configure);
7631
+ U(setDefaultConfiguration);
7382
7632
  configureWorker({
7383
7633
  initModule: config => {
7384
7634
  if (!modulePromise) {
@@ -7393,7 +7643,7 @@
7393
7643
  return modulePromise;
7394
7644
  }
7395
7645
  });
7396
- configure({
7646
+ setDefaultConfiguration({
7397
7647
  CompressionStreamZlib,
7398
7648
  DecompressionStreamZlib
7399
7649
  });
@@ -7582,9 +7832,7 @@
7582
7832
 
7583
7833
  async getArrayBuffer(options) {
7584
7834
  const array = await this.getUint8Array(options);
7585
- return array.byteOffset || array.byteLength != array.buffer.byteLength
7586
- ? array.buffer.slice(array.byteOffset, array.byteOffset + array.byteLength)
7587
- : array.buffer;
7835
+ return toExactUint8Array(array).buffer;
7588
7836
  }
7589
7837
 
7590
7838
  replaceBlob(blob) {
@@ -10088,7 +10336,7 @@
10088
10336
  */
10089
10337
 
10090
10338
 
10091
- t$1(configure);
10339
+ t$1(setDefaultConfiguration);
10092
10340
 
10093
10341
  exports.BlobReader = BlobReader;
10094
10342
  exports.BlobWriter = BlobWriter;
@@ -10103,6 +10351,7 @@
10103
10351
  exports.ERR_EOCDR_NOT_FOUND = ERR_EOCDR_NOT_FOUND;
10104
10352
  exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;
10105
10353
  exports.ERR_HTTP_RANGE = ERR_HTTP_RANGE;
10354
+ exports.ERR_HTTP_RESOURCE_CHANGED = ERR_HTTP_RESOURCE_CHANGED;
10106
10355
  exports.ERR_INVALID_COMMENT = ERR_INVALID_COMMENT;
10107
10356
  exports.ERR_INVALID_COMPRESSED_DATA = ERR_INVALID_COMPRESSED_DATA;
10108
10357
  exports.ERR_INVALID_ENCRYPTION_STRENGTH = ERR_INVALID_ENCRYPTION_STRENGTH;
@@ -10145,6 +10394,7 @@
10145
10394
  exports.createSyncAccessHandleTempStream = createSyncAccessHandleTempStream;
10146
10395
  exports.fs = fs;
10147
10396
  exports.getMimeType = getMimeType;
10397
+ exports.resetConfiguration = resetConfiguration;
10148
10398
  exports.terminateWorkers = terminateWorkersAndModule;
10149
10399
 
10150
10400
  }));