single-file-core 1.1.78 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ ((e,t)=>{"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).zip={})})(this,(function(e){"use strict";const{Array:t,Object:n,String:r,Number:s,BigInt:a,Math:i,Date:o,Map:c,Set:l,Response:u,URL:f,Error:h,Uint8Array:d,Uint16Array:p,Uint32Array:w,DataView:g,Blob:m,Promise:y,TextEncoder:b,TextDecoder:v,document:k,crypto:S,btoa:_,TransformStream:z,ReadableStream:D,WritableStream:x,CompressionStream:R,DecompressionStream:F,navigator:T,Worker:C}="undefined"!=typeof globalThis?globalThis:this||self;var E=d,U=p,W=Int32Array,A=new E([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,0,0,0]),O=new E([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,0,0]),L=new E([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),N=(e,t)=>{for(var n=new U(31),r=0;31>r;++r)n[r]=t+=1<<e[r-1];var s=new W(n[30]);for(r=1;30>r;++r)for(var a=n[r];a<n[r+1];++a)s[a]=a-n[r]<<5|r;return{b:n,r:s}},I=N(A,2),P=I.b,M=I.r;P[28]=258,M[258]=28;for(var B=N(O,0),V=B.b,H=B.r,q=new U(32768),K=0;32768>K;++K){var Z=(43690&K)>>1|(21845&K)<<1;Z=(61680&(Z=(52428&Z)>>2|(13107&Z)<<2))>>4|(3855&Z)<<4,q[K]=((65280&Z)>>8|(255&Z)<<8)>>1}var j=(e,t,n)=>{for(var r=e.length,s=0,a=new U(t);r>s;++s)e[s]&&++a[e[s]-1];var i,o=new U(t);for(s=1;t>s;++s)o[s]=o[s-1]+a[s-1]<<1;if(n){i=new U(1<<t);var c=15-t;for(s=0;r>s;++s)if(e[s])for(var l=s<<4|e[s],u=t-e[s],f=o[e[s]-1]++<<u,h=f|(1<<u)-1;h>=f;++f)i[q[f]>>c]=l}else for(i=new U(r),s=0;r>s;++s)e[s]&&(i[s]=q[o[e[s]-1]++]>>15-e[s]);return i},G=new E(288);for(K=0;144>K;++K)G[K]=8;for(K=144;256>K;++K)G[K]=9;for(K=256;280>K;++K)G[K]=7;for(K=280;288>K;++K)G[K]=8;var Y=new E(32);for(K=0;32>K;++K)Y[K]=5;var X=j(G,9,0),J=j(G,9,1),Q=j(Y,5,0),$=j(Y,5,1),ee=e=>{for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},te=(e,t,n)=>{var r=t/8|0;return(e[r]|e[r+1]<<8)>>(7&t)&n},ne=(e,t)=>{var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(7&t)},re=e=>(e+7)/8|0,se=(e,t,n)=>{(null==t||0>t)&&(t=0),(null==n||n>e.length)&&(n=e.length);var r=new E(n-t);return r.set(e.subarray(t,n)),r},ae=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],ie=(e,t,n)=>{var r=new h(t||ae[e]);if(r.code=e,h.captureStackTrace&&h.captureStackTrace(r,ie),!n)throw r;return r},oe=(e,t,n)=>{n<<=7&t;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},ce=(e,t,n)=>{n<<=7&t;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8,e[r+2]|=n>>16},le=(e,t)=>{for(var n=[],r=0;r<e.length;++r)e[r]&&n.push({s:r,f:e[r]});var s=n.length,a=n.slice();if(!s)return{t:ge,l:0};if(1==s){var i=new E(n[0].s+1);return i[n[0].s]=1,{t:i,l:1}}n.sort(((e,t)=>e.f-t.f)),n.push({s:-1,f:25001});var o=n[0],c=n[1],l=0,u=1,f=2;for(n[0]={s:-1,f:o.f+c.f,l:o,r:c};u!=s-1;)o=n[n[l].f<n[f].f?l++:f++],c=n[l!=u&&n[l].f<n[f].f?l++:f++],n[u++]={s:-1,f:o.f+c.f,l:o,r:c};var h=a[0].s;for(r=1;s>r;++r)a[r].s>h&&(h=a[r].s);var d=new U(h+1),p=ue(n[u-1],d,0);if(p>t){r=0;var w=0,g=p-t,m=1<<g;for(a.sort(((e,t)=>d[t.s]-d[e.s]||e.f-t.f));s>r;++r){var y=a[r].s;if(d[y]<=t)break;w+=m-(1<<p-d[y]),d[y]=t}for(w>>=g;w>0;){var b=a[r].s;d[b]<t?w-=1<<t-d[b]++-1:++r}for(;r>=0&&w;--r){var v=a[r].s;d[v]==t&&(--d[v],++w)}p=t}return{t:new E(d),l:p}},ue=(e,t,n)=>-1==e.s?i.max(ue(e.l,t,n+1),ue(e.r,t,n+1)):t[e.s]=n,fe=e=>{for(var t=e.length;t&&!e[--t];);for(var n=new U(++t),r=0,s=e[0],a=1,i=e=>{n[r++]=e},o=1;t>=o;++o)if(e[o]==s&&o!=t)++a;else{if(!s&&a>2){for(;a>138;a-=138)i(32754);a>2&&(i(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(i(s),--a;a>6;a-=6)i(8304);a>2&&(i(a-3<<5|8208),a=0)}for(;a--;)i(s);a=1,s=e[o]}return{c:n.subarray(0,r),n:t}},he=(e,t)=>{for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},de=(e,t,n)=>{var r=n.length,s=re(t+2);e[s]=255&r,e[s+1]=r>>8,e[s+2]=255^e[s],e[s+3]=255^e[s+1];for(var a=0;r>a;++a)e[s+a+4]=n[a];return 8*(s+4+r)},pe=(e,t,n,r,s,a,i,o,c,l,u)=>{oe(t,u++,n),++s[256];for(var f=le(s,15),h=f.t,d=f.l,p=le(a,15),w=p.t,g=p.l,m=fe(h),y=m.c,b=m.n,v=fe(w),k=v.c,S=v.n,_=new U(19),z=0;z<y.length;++z)++_[31&y[z]];for(z=0;z<k.length;++z)++_[31&k[z]];for(var D=le(_,7),x=D.t,R=D.l,F=19;F>4&&!x[L[F-1]];--F);var T,C,E,W,N=l+5<<3,I=he(s,G)+he(a,Y)+i,P=he(s,h)+he(a,w)+i+14+3*F+he(_,x)+2*_[16]+3*_[17]+7*_[18];if(c>=0&&I>=N&&P>=N)return de(t,u,e.subarray(c,c+l));if(oe(t,u,1+(I>P)),u+=2,I>P){T=j(h,d,0),C=h,E=j(w,g,0),W=w;var M=j(x,R,0);for(oe(t,u,b-257),oe(t,u+5,S-1),oe(t,u+10,F-4),u+=14,z=0;F>z;++z)oe(t,u+3*z,x[L[z]]);u+=3*F;for(var B=[y,k],V=0;2>V;++V){var H=B[V];for(z=0;z<H.length;++z){var q=31&H[z];oe(t,u,M[q]),u+=x[q],q>15&&(oe(t,u,H[z]>>5&127),u+=H[z]>>12)}}}else T=X,C=G,E=Q,W=Y;for(z=0;o>z;++z){var K=r[z];if(K>255){ce(t,u,T[257+(q=K>>18&31)]),u+=C[q+257],q>7&&(oe(t,u,K>>23&31),u+=A[q]);var Z=31&K;ce(t,u,E[Z]),u+=W[Z],Z>3&&(ce(t,u,K>>5&8191),u+=O[Z])}else ce(t,u,T[K]),u+=C[K]}return ce(t,u,T[256]),u+C[256]},we=new W([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),ge=new E(0),me=function(){function e(e,t){if("function"==typeof e&&(t=e,e={}),this.ondata=t,this.o=e||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new E(98304),this.o.dictionary){var n=this.o.dictionary.subarray(-32768);this.b.set(n,32768-n.length),this.s.i=32768-n.length}}return e.prototype.p=function(e,t){this.ondata(((e,t,n,r,s)=>{if(!s&&(s={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),o=new E(a.length+e.length);o.set(a),o.set(e,a.length),e=o,s.w=a.length}return((e,t,n,r,s,a)=>{var o=a.z||e.length,c=new E(0+o+5*(1+i.ceil(o/7e3))+0),l=c.subarray(0,c.length-0),u=a.l,f=7&(a.r||0);if(t){f&&(l[0]=a.r>>3);for(var h=we[t-1],d=h>>13,p=8191&h,w=(1<<n)-1,g=a.p||new U(32768),m=a.h||new U(w+1),y=i.ceil(n/3),b=2*y,v=t=>(e[t]^e[t+1]<<y^e[t+2]<<b)&w,k=new W(25e3),S=new U(288),_=new U(32),z=0,D=0,x=a.i||0,R=0,F=a.w||0,T=0;o>x+2;++x){var C=v(x),L=32767&x,N=m[C];if(g[L]=N,m[C]=L,x>=F){var I=o-x;if((z>7e3||R>24576)&&(I>423||!u)){f=pe(e,l,0,k,S,_,D,R,T,x-T,f),R=z=D=0,T=x;for(var P=0;286>P;++P)S[P]=0;for(P=0;30>P;++P)_[P]=0}var B=2,V=0,q=p,K=L-N&32767;if(I>2&&C==v(x-K))for(var Z=i.min(d,I)-1,j=i.min(32767,x),G=i.min(258,I);j>=K&&--q&&L!=N;){if(e[x+B]==e[x+B-K]){for(var Y=0;G>Y&&e[x+Y]==e[x+Y-K];++Y);if(Y>B){if(B=Y,V=K,Y>Z)break;var X=i.min(K,Y-2),J=0;for(P=0;X>P;++P){var Q=x-K+P&32767,$=Q-g[Q]&32767;$>J&&(J=$,N=Q)}}}K+=(L=N)-(N=g[L])&32767}if(V){k[R++]=268435456|M[B]<<18|H[V];var ee=31&M[B],te=31&H[V];D+=A[ee]+O[te],++S[257+ee],++_[te],F=x+B,++z}else k[R++]=e[x],++S[e[x]]}}for(x=i.max(x,F);o>x;++x)k[R++]=e[x],++S[e[x]];f=pe(e,l,u,k,S,_,D,R,T,x-T,f),u||(a.r=7&f|l[f/8|0]<<3,f-=7,a.h=m,a.p=g,a.i=x,a.w=F)}else{for(x=a.w||0;o+u>x;x+=65535){var ne=x+65535;o>ne||(l[f/8|0]=u,ne=o),f=de(l,f+1,e.subarray(x,ne))}a.i=o}return se(c,0,0+re(f)+0)})(e,null==t.level?6:t.level,null==t.mem?i.ceil(1.5*i.max(8,i.min(13,i.log(e.length)))):12+t.mem,0,0,s)})(e,this.o,0,0,this.s),t)},e.prototype.push=function(e,t){this.ondata||ie(5),this.s.l&&ie(4);var n=e.length+this.s.z;if(n>this.b.length){if(n>2*this.b.length-32768){var r=new E(-32768&n);r.set(this.b.subarray(0,this.s.z)),this.b=r}var s=this.b.length-this.s.z;s&&(this.b.set(e.subarray(0,s),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(e.subarray(s),32768),this.s.z=e.length-s+32768,this.s.i=32766,this.s.w=32768}else this.b.set(e,this.s.z),this.s.z+=e.length;this.s.l=1&t,(this.s.z>this.s.w+8191||t)&&(this.p(this.b,t||!1),this.s.w=this.s.i,this.s.i-=2)},e}(),ye=function(){function e(e,t){"function"==typeof e&&(t=e,e={}),this.ondata=t;var n=e&&e.dictionary&&e.dictionary.subarray(-32768);this.s={i:0,b:n?n.length:0},this.o=new E(32768),this.p=new E(0),n&&this.o.set(n)}return e.prototype.e=function(e){if(this.ondata||ie(5),this.d&&ie(4),this.p.length){if(e.length){var t=new E(this.p.length+e.length);t.set(this.p),t.set(e,this.p.length),this.p=t}}else this.p=e},e.prototype.c=function(e){this.s.i=+(this.d=e||!1);var t=this.s.b,n=((e,t,n)=>{var r=e.length;if(!r||t.f&&!t.l)return n||new E(0);var s=!n||2!=t.i,a=t.i;n||(n=new E(3*r));var o=e=>{var t=n.length;if(e>t){var r=new E(i.max(2*t,e));r.set(n),n=r}},c=t.f||0,l=t.p||0,u=t.b||0,f=t.l,h=t.d,d=t.m,p=t.n,w=8*r;do{if(!f){c=te(e,l,1);var g=te(e,l+1,3);if(l+=3,!g){var m=e[(F=re(l)+4)-4]|e[F-3]<<8,y=F+m;if(y>r){a&&ie(0);break}s&&o(u+m),n.set(e.subarray(F,y),u),t.b=u+=m,t.p=l=8*y,t.f=c;continue}if(1==g)f=J,h=$,d=9,p=5;else if(2==g){var b=te(e,l,31)+257,v=te(e,l+10,15)+4,k=b+te(e,l+5,31)+1;l+=14;for(var S=new E(k),_=new E(19),z=0;v>z;++z)_[L[z]]=te(e,l+3*z,7);l+=3*v;var D=ee(_),x=(1<<D)-1,R=j(_,D,1);for(z=0;k>z;){var F,T=R[te(e,l,x)];if(l+=15&T,16>(F=T>>4))S[z++]=F;else{var C=0,U=0;for(16==F?(U=3+te(e,l,3),l+=2,C=S[z-1]):17==F?(U=3+te(e,l,7),l+=3):18==F&&(U=11+te(e,l,127),l+=7);U--;)S[z++]=C}}var W=S.subarray(0,b),N=S.subarray(b);d=ee(W),p=ee(N),f=j(W,d,1),h=j(N,p,1)}else ie(1);if(l>w){a&&ie(0);break}}s&&o(u+131072);for(var I=(1<<d)-1,M=(1<<p)-1,B=l;;B=l){var H=(C=f[ne(e,l)&I])>>4;if((l+=15&C)>w){a&&ie(0);break}if(C||ie(2),256>H)n[u++]=H;else{if(256==H){B=l,f=null;break}var q=H-254;if(H>264){var K=A[z=H-257];q=te(e,l,(1<<K)-1)+P[z],l+=K}var Z=h[ne(e,l)&M],G=Z>>4;if(Z||ie(3),l+=15&Z,N=V[G],G>3&&(K=O[G],N+=ne(e,l)&(1<<K)-1,l+=K),l>w){a&&ie(0);break}s&&o(u+131072);var Y=u+q;if(N>u){var X=0-N,Q=i.min(N,Y);for(0>X+u&&ie(3);Q>u;++u)n[u]=undefined[X+u]}for(;Y>u;u+=4)n[u]=n[u-N],n[u+1]=n[u+1-N],n[u+2]=n[u+2-N],n[u+3]=n[u+3-N];u=Y}}t.l=f,t.p=B,t.b=u,t.f=c,f&&(c=1,t.m=d,t.d=h,t.n=p)}while(!c);return u==n.length?n:se(n,0,u)})(this.p,this.s,this.o);this.ondata(se(n,t,this.s.b),this.d),this.o=se(n,this.s.b-32768),this.s.b=this.o.length,this.p=se(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(e,t){this.e(e),this.c(t)},e}(),be=void 0!==v&&new v;try{be.decode(ge,{stream:!0})}catch(e){}function ve(e,t,r){return class{constructor(s){const a=this;var i,o;i=s,o="level",("function"==typeof n.hasOwn?n.hasOwn(i,o):i.hasOwnProperty(o))&&void 0===s.level&&delete s.level,a.codec=new e(n.assign({},t,s)),r(a.codec,(e=>{if(a.pendingData){const t=a.pendingData;a.pendingData=new d(t.length+e.length);const{pendingData:n}=a;n.set(t,0),n.set(e,t.length)}else a.pendingData=new d(e)}))}append(e){return this.codec.push(e),s(this)}flush(){return this.codec.push(new d,!0),s(this)}};function s(e){if(e.pendingData){const t=e.pendingData;return e.pendingData=null,t}return new d}}const{Deflate:ke,Inflate:Se}=((e,t={},n)=>({Deflate:ve(e.Deflate,t.deflate,n),Inflate:ve(e.Inflate,t.inflate,n)}))({Deflate:me,Inflate:ye},void 0,((e,t)=>e.ondata=t)),_e=4294967295,ze=65535,De=33639248,xe=101075792,Re=void 0,Fe="undefined",Te="function";class Ce{constructor(e){return class extends z{constructor(t,n){const r=new e(n);super({transform(e,t){t.enqueue(r.append(e))},flush(e){const t=r.flush();t&&e.enqueue(t)}})}}}}let Ee=2;try{typeof T!=Fe&&T.hardwareConcurrency&&(Ee=T.hardwareConcurrency)}catch(e){}const Ue={chunkSize:524288,maxWorkers:Ee,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:Re,CompressionStreamNative:typeof R!=Fe&&R,DecompressionStreamNative:typeof F!=Fe&&F},We=n.assign({},Ue);function Ae(e){const{baseURL:n,chunkSize:r,maxWorkers:s,terminateWorkerTimeout:a,useCompressionStream:i,useWebWorkers:o,Deflate:c,Inflate:l,CompressionStream:u,DecompressionStream:f,workerScripts:d}=e;if(Oe("baseURL",n),Oe("chunkSize",r),Oe("maxWorkers",s),Oe("terminateWorkerTimeout",a),Oe("useCompressionStream",i),Oe("useWebWorkers",o),c&&(We.CompressionStream=new Ce(c)),l&&(We.DecompressionStream=new Ce(l)),Oe("CompressionStream",u),Oe("DecompressionStream",f),d!==Re){const{deflate:e,inflate:n}=d;if((e||n)&&(We.workerScripts||(We.workerScripts={})),e){if(!t.isArray(e))throw new h("workerScripts.deflate must be an array");We.workerScripts.deflate=e}if(n){if(!t.isArray(n))throw new h("workerScripts.inflate must be an array");We.workerScripts.inflate=n}}}function Oe(e,t){t!==Re&&(We[e]=t)}const Le=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;Le[e]=t}class Ne{constructor(e){this.crc=e||-1}append(e){let t=0|this.crc;for(let n=0,r=0|e.length;r>n;n++)t=t>>>8^Le[255&(t^e[n])];this.crc=t}get(){return~this.crc}}class Ie extends z{constructor(){let e;const t=new Ne;super({transform(e,n){t.append(e),n.enqueue(e)},flush(){const n=new d(4);new g(n.buffer).setUint32(0,t.get()),e.value=n}}),e=this}}const Pe={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e.length-1],r=Pe.getPartial(n);return 32===r?e.concat(t):Pe._shiftRight(t,r,0|n,e.slice(0,e.length-1))},bitLength(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32*(t-1)+Pe.getPartial(n)},clamp(e,t){if(32*e.length<t)return e;const n=(e=e.slice(0,i.ceil(t/32))).length;return t&=31,n>0&&t&&(e[n-1]=Pe.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial:(e,t,n)=>32===e?t:(n?0|t:t<<32-e)+1099511627776*e,getPartial:e=>i.round(e/1099511627776)||32,_shiftRight(e,t,n,r){for(void 0===r&&(r=[]);t>=32;t-=32)r.push(n),n=0;if(0===t)return r.concat(e);for(let s=0;s<e.length;s++)r.push(n|e[s]>>>t),n=e[s]<<32-t;const s=e.length?e[e.length-1]:0,a=Pe.getPartial(s);return r.push(Pe.partial(t+a&31,t+a>32?n:r.pop(),1)),r}},Me={bytes:{fromBits(e){const t=Pe.bitLength(e)/8,n=new d(t);let r;for(let s=0;t>s;s++)0==(3&s)&&(r=e[s/4]),n[s]=r>>>24,r<<=8;return n},toBits(e){const t=[];let n,r=0;for(n=0;n<e.length;n++)r=r<<8|e[n],3==(3&n)&&(t.push(r),r=0);return 3&n&&t.push(Pe.partial(8*(3&n),r)),t}}},Be=class{constructor(e){const t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){const e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){const t=this;"string"==typeof e&&(e=Me.utf8String.toBits(e));const n=t._buffer=Pe.concat(t._buffer,e),r=t._length,s=t._length=r+Pe.bitLength(e);if(s>9007199254740991)throw new h("Cannot hash more than 2^53 - 1 bits");const a=new w(n);let i=0;for(let e=t.blockSize+r-(t.blockSize+r&t.blockSize-1);s>=e;e+=t.blockSize)t._block(a.subarray(16*i,16*(i+1))),i+=1;return n.splice(0,16*i),t}finalize(){const e=this;let t=e._buffer;const n=e._h;t=Pe.concat(t,[Pe.partial(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(i.floor(e._length/4294967296)),t.push(0|e._length);t.length;)e._block(t.splice(0,16));return e.reset(),n}_f(e,t,n,r){return e>19?e>39?e>59?e>79?void 0:t^n^r:t&n|t&r|n&r:t^n^r:t&n|~t&r}_S(e,t){return t<<e|t>>>32-e}_block(e){const n=this,r=n._h,s=t(80);for(let t=0;16>t;t++)s[t]=e[t];let a=r[0],o=r[1],c=r[2],l=r[3],u=r[4];for(let e=0;79>=e;e++){16>e||(s[e]=n._S(1,s[e-3]^s[e-8]^s[e-14]^s[e-16]));const t=n._S(5,a)+n._f(e,o,c,l)+u+s[e]+n._key[i.floor(e/20)]|0;u=l,l=c,c=n._S(30,o),o=a,a=t}r[0]=r[0]+a|0,r[1]=r[1]+o|0,r[2]=r[2]+c|0,r[3]=r[3]+l|0,r[4]=r[4]+u|0}},Ve={getRandomValues(e){const t=new w(e.buffer),n=e=>{let t=987654321;const n=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&n,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n)/4294967296+.5)*(i.random()>.5?1:-1))};for(let r,s=0;s<e.length;s+=4){const e=n(4294967296*(r||i.random()));r=987654071*e(),t[s/4]=4294967296*e()|0}return e}},He={importKey:e=>new He.hmacSha1(Me.bytes.toBits(e)),pbkdf2(e,t,n,r){if(n=n||1e4,0>r||0>n)throw new h("invalid params to pbkdf2");const s=1+(r>>5)<<2;let a,i,o,c,l;const u=new ArrayBuffer(s),f=new g(u);let d=0;const p=Pe;for(t=Me.bytes.toBits(t),l=1;(s||1)>d;l++){for(a=i=e.encrypt(p.concat(t,[l])),o=1;n>o;o++)for(i=e.encrypt(i),c=0;c<i.length;c++)a[c]^=i[c];for(o=0;(s||1)>d&&o<a.length;o++)f.setInt32(d,a[o]),d+=4}return u.slice(0,r/8)},hmacSha1:class{constructor(e){const t=this,n=t._hash=Be,r=[[],[]];t._baseHash=[new n,new n];const s=t._baseHash[0].blockSize/32;e.length>s&&(e=(new n).update(e).finalize());for(let t=0;s>t;t++)r[0][t]=909522486^e[t],r[1][t]=1549556828^e[t];t._baseHash[0].update(r[0]),t._baseHash[1].update(r[1]),t._resultHash=new n(t._baseHash[0])}reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){this._updated=!0,this._resultHash.update(e)}digest(){const e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}encrypt(e){if(this._updated)throw new h("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},qe=void 0!==S&&"function"==typeof S.getRandomValues,Ke="Invalid password",Ze="Invalid signature",je="zipjs-abort-check-password";function Ge(e){return qe?S.getRandomValues(e):Ve.getRandomValues(e)}const Ye=16,Xe={name:"PBKDF2"},Je=n.assign({hash:{name:"HMAC"}},Xe),Qe=n.assign({iterations:1e3,hash:{name:"SHA-1"}},Xe),$e=["deriveBits"],et=[8,12,16],tt=[16,24,32],nt=10,rt=[0,0,0,0],st="undefined",at="function",it=typeof S!=st,ot=it&&S.subtle,ct=it&&typeof ot!=st,lt=Me.bytes,ut=class{constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();const n=t._tables[0][4],r=t._tables[1],s=e.length;let a,i,o,c=1;if(4!==s&&6!==s&&8!==s)throw new h("invalid aes key size");for(t._key=[i=e.slice(0),o=[]],a=s;4*s+28>a;a++){let e=i[a-1];(a%s==0||8===s&&a%s==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],a%s==0&&(e=e<<8^e>>>24^c<<24,c=c<<1^283*(c>>7))),i[a]=i[a-s]^e}for(let e=0;a;e++,a--){const t=i[3&e?a:a-4];o[e]=4>=a||4>e?t:r[0][n[t>>>24]]^r[1][n[t>>16&255]]^r[2][n[t>>8&255]]^r[3][n[255&t]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){const e=this._tables[0],t=this._tables[1],n=e[4],r=t[4],s=[],a=[];let i,o,c,l;for(let e=0;256>e;e++)a[(s[e]=e<<1^283*(e>>7))^e]=e;for(let u=i=0;!n[u];u^=o||1,i=a[i]||1){let a=i^i<<1^i<<2^i<<3^i<<4;a=a>>8^255&a^99,n[u]=a,r[a]=u,l=s[c=s[o=s[u]]];let f=16843009*l^65537*c^257*o^16843008*u,h=257*s[a]^16843008*a;for(let n=0;4>n;n++)e[n][u]=h=h<<24^h>>>8,t[n][a]=f=f<<24^f>>>8}for(let n=0;5>n;n++)e[n]=e[n].slice(0),t[n]=t[n].slice(0)}_crypt(e,t){if(4!==e.length)throw new h("invalid aes block size");const n=this._key[t],r=n.length/4-2,s=[0,0,0,0],a=this._tables[t],i=a[0],o=a[1],c=a[2],l=a[3],u=a[4];let f,d,p,w=e[0]^n[0],g=e[t?3:1]^n[1],m=e[2]^n[2],y=e[t?1:3]^n[3],b=4;for(let e=0;r>e;e++)f=i[w>>>24]^o[g>>16&255]^c[m>>8&255]^l[255&y]^n[b],d=i[g>>>24]^o[m>>16&255]^c[y>>8&255]^l[255&w]^n[b+1],p=i[m>>>24]^o[y>>16&255]^c[w>>8&255]^l[255&g]^n[b+2],y=i[y>>>24]^o[w>>16&255]^c[g>>8&255]^l[255&m]^n[b+3],b+=4,w=f,g=d,m=p;for(let e=0;4>e;e++)s[t?3&-e:e]=u[w>>>24]<<24^u[g>>16&255]<<16^u[m>>8&255]<<8^u[255&y]^n[b++],f=w,w=g,g=m,m=y,y=f;return s}},ft=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if(255==(e>>24&255)){let t=e>>16&255,n=e>>8&255,r=255&e;255===t?(t=0,255===n?(n=0,255===r?r=0:++r):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=r}else e+=1<<24;return e}incCounter(e){0===(e[0]=this.incWord(e[0]))&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let r;if(!(r=t.length))return[];const s=Pe.bitLength(t);for(let s=0;r>s;s+=4){this.incCounter(n);const r=e.encrypt(n);t[s]^=r[0],t[s+1]^=r[1],t[s+2]^=r[2],t[s+3]^=r[3]}return Pe.clamp(t,s)}},ht=He.hmacSha1;let dt=it&&ct&&typeof ot.importKey==at,pt=it&&ct&&typeof ot.deriveBits==at;class wt extends z{constructor({password:e,signed:t,encryptionStrength:r,checkPasswordOnly:s}){super({start(){n.assign(this,{ready:new y((e=>this.resolveReady=e)),password:e,signed:t,strength:r-1,pending:new d})},async transform(e,t){const n=this,{password:r,strength:a,resolveReady:i,ready:o}=n;r?(await(async(e,t,n,r)=>{const s=await yt(e,t,n,vt(r,0,et[t])),a=vt(r,et[t]);if(s[0]!=a[0]||s[1]!=a[1])throw new h(Ke)})(n,a,r,vt(e,0,et[a]+2)),e=vt(e,et[a]+2),s?t.error(new h(je)):i()):await o;const c=new d(e.length-nt-(e.length-nt)%Ye);t.enqueue(mt(n,e,c,0,nt,!0))},async flush(e){const{signed:t,ctr:n,hmac:r,pending:s,ready:a}=this;await a;const i=vt(s,0,s.length-nt),o=vt(s,s.length-nt);let c=new d;if(i.length){const e=St(lt,i);r.update(e);const t=n.update(e);c=kt(lt,t)}if(t){const e=vt(kt(lt,r.digest()),0,nt);for(let t=0;nt>t;t++)if(e[t]!=o[t])throw new h(Ze)}e.enqueue(c)}})}}class gt extends z{constructor({password:e,encryptionStrength:t}){let r;super({start(){n.assign(this,{ready:new y((e=>this.resolveReady=e)),password:e,strength:t-1,pending:new d})},async transform(e,t){const n=this,{password:r,strength:s,resolveReady:a,ready:i}=n;let o=new d;r?(o=await(async(e,t,n)=>{const r=Ge(new d(et[t]));return bt(r,await yt(e,t,n,r))})(n,s,r),a()):await i;const c=new d(o.length+e.length-e.length%Ye);c.set(o,0),t.enqueue(mt(n,e,c,o.length,0))},async flush(e){const{ctr:t,hmac:n,pending:s,ready:a}=this;await a;let i=new d;if(s.length){const e=t.update(St(lt,s));n.update(e),i=kt(lt,e)}r.signature=kt(lt,n.digest()).slice(0,nt),e.enqueue(bt(i,r.signature))}}),r=this}}function mt(e,t,n,r,s,a){const{ctr:i,hmac:o,pending:c}=e,l=t.length-s;let u;for(c.length&&(t=bt(c,t),n=((e,t)=>{if(t&&t>e.length){const n=e;(e=new d(t)).set(n,0)}return e})(n,l-l%Ye)),u=0;l-Ye>=u;u+=Ye){const e=St(lt,vt(t,u,u+Ye));a&&o.update(e);const s=i.update(e);a||o.update(s),n.set(kt(lt,s),u+r)}return e.pending=vt(t,u),n}async function yt(e,r,s,a){e.password=null;const i=(e=>{if(void 0===b){const t=new d((e=unescape(encodeURIComponent(e))).length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}return(new b).encode(e)})(s),o=await(async(e,t,n,r,s)=>{if(!dt)return He.importKey(t);try{return await ot.importKey("raw",t,n,!1,s)}catch(e){return dt=!1,He.importKey(t)}})(0,i,Je,0,$e),c=await(async(e,t,n)=>{if(!pt)return He.pbkdf2(t,e.salt,Qe.iterations,n);try{return await ot.deriveBits(e,t,n)}catch(r){return pt=!1,He.pbkdf2(t,e.salt,Qe.iterations,n)}})(n.assign({salt:a},Qe),o,8*(2*tt[r]+2)),l=new d(c),u=St(lt,vt(l,0,tt[r])),f=St(lt,vt(l,tt[r],2*tt[r])),h=vt(l,2*tt[r]);return n.assign(e,{keys:{key:u,authentication:f,passwordVerification:h},ctr:new ft(new ut(u),t.from(rt)),hmac:new ht(f)}),h}function bt(e,t){let n=e;return e.length+t.length&&(n=new d(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function vt(e,t,n){return e.subarray(t,n)}function kt(e,t){return e.fromBits(t)}function St(e,t){return e.toBits(t)}class _t extends z{constructor({password:e,passwordVerification:t,checkPasswordOnly:r}){super({start(){n.assign(this,{password:e,passwordVerification:t}),Rt(this,e)},transform(e,t){const n=this;if(n.password){const t=Dt(n,e.subarray(0,12));if(n.password=null,t[11]!=n.passwordVerification)throw new h(Ke);e=e.subarray(12)}r?t.error(new h(je)):t.enqueue(Dt(n,e))}})}}class zt extends z{constructor({password:e,passwordVerification:t}){super({start(){n.assign(this,{password:e,passwordVerification:t}),Rt(this,e)},transform(e,t){const n=this;let r,s;if(n.password){n.password=null;const t=Ge(new d(12));t[11]=n.passwordVerification,r=new d(e.length+t.length),r.set(xt(n,t),0),s=12}else r=new d(e.length),s=0;r.set(xt(n,e),s),t.enqueue(r)}})}}function Dt(e,t){const n=new d(t.length);for(let r=0;r<t.length;r++)n[r]=Tt(e)^t[r],Ft(e,n[r]);return n}function xt(e,t){const n=new d(t.length);for(let r=0;r<t.length;r++)n[r]=Tt(e)^t[r],Ft(e,t[r]);return n}function Rt(e,t){const r=[305419896,591751049,878082192];n.assign(e,{keys:r,crcKey0:new Ne(r[0]),crcKey2:new Ne(r[2])});for(let n=0;n<t.length;n++)Ft(e,t.charCodeAt(n))}function Ft(e,t){let[n,r,s]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.get(),r=Et(i.imul(Et(r+Ct(n)),134775813)+1),e.crcKey2.append([r>>>24]),s=~e.crcKey2.get(),e.keys=[n,r,s]}function Tt(e){const t=2|e.keys[2];return Ct(i.imul(t,1^t)>>>8)}function Ct(e){return 255&e}function Et(e){return 4294967295&e}const Ut="deflate-raw";class Wt extends z{constructor(e,{chunkSize:t,CompressionStream:n,CompressionStreamNative:r}){super({});const{compressed:s,encrypted:a,useCompressionStream:i,zipCrypto:o,signed:c,level:l}=e,u=this;let f,h,d=Ot(super.readable);a&&!o||!c||(f=new Ie,d=It(d,f)),s&&(d=Nt(d,i,{level:l,chunkSize:t},r,n)),a&&(o?d=It(d,new zt(e)):(h=new gt(e),d=It(d,h))),Lt(u,d,(()=>{let e;a&&!o&&(e=h.signature),a&&!o||!c||(e=new g(f.value.buffer).getUint32(0)),u.signature=e}))}}class At extends z{constructor(e,{chunkSize:t,DecompressionStream:n,DecompressionStreamNative:r}){super({});const{zipCrypto:s,encrypted:a,signed:i,signature:o,compressed:c,useCompressionStream:l}=e;let u,f,d=Ot(super.readable);a&&(s?d=It(d,new _t(e)):(f=new wt(e),d=It(d,f))),c&&(d=Nt(d,l,{chunkSize:t},r,n)),a&&!s||!i||(u=new Ie,d=It(d,u)),Lt(this,d,(()=>{if((!a||s)&&i){const e=new g(u.value.buffer);if(o!=e.getUint32(0,!1))throw new h(Ze)}}))}}function Ot(e){return It(e,new z({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function Lt(e,t,r){t=It(t,new z({flush:r})),n.defineProperty(e,"readable",{get:()=>t})}function Nt(e,t,n,r,s){try{e=It(e,new(t&&r?r:s)(Ut,n))}catch(r){if(!t)throw r;e=It(e,new s(Ut,n))}return e}function It(e,t){return e.pipeThrough(t)}const Pt="data",Mt="inflate";class Bt extends z{constructor(e,t){super({});const r=this,{codecType:s}=e;let a;s.startsWith("deflate")?a=Wt:s.startsWith(Mt)&&(a=At);let i=0;const o=new a(e,t),c=super.readable,l=new z({transform(e,t){e&&e.length&&(i+=e.length,t.enqueue(e))},flush(){const{signature:e}=o;n.assign(r,{signature:e,size:i})}});n.defineProperty(r,"readable",{get:()=>c.pipeThrough(o).pipeThrough(l)})}}const Vt=typeof C!=Fe;class Ht{constructor(e,{readable:t,writable:r},{options:s,config:a,streamOptions:i,useWebWorkers:o,transferStreams:c,scripts:l},u){const{signal:f}=i;return n.assign(e,{busy:!0,readable:t.pipeThrough(new qt(t,i,a),{signal:f}),writable:r,options:n.assign({},s),scripts:l,transferStreams:c,terminate(){const{worker:t,busy:n}=e;t&&!n&&(t.terminate(),e.interface=null)},onTaskFinished(){e.busy=!1,u(e)}}),(o&&Vt?jt:Zt)(e,a)}}class qt extends z{constructor(e,{onstart:t,onprogress:n,size:r,onend:s},{chunkSize:a}){let i=0;super({start(){t&&Kt(t,r)},async transform(e,t){i+=e.length,n&&await Kt(n,i,r),t.enqueue(e)},flush(){e.size=i,s&&Kt(s,i)}},{highWaterMark:1,size:()=>a})}}async function Kt(e,...t){try{await e(...t)}catch(e){}}function Zt(e,t){return{run:()=>(async({options:e,readable:t,writable:n,onTaskFinished:r},s)=>{const a=new Bt(e,s);try{await t.pipeThrough(a).pipeTo(n,{preventClose:!0,preventAbort:!0});const{signature:e,size:s}=a;return{signature:e,size:s}}finally{r()}})(e,t)}}function jt(e,{baseURL:t,chunkSize:r}){return e.interface||n.assign(e,{worker:Xt(e.scripts[0],t,e),interface:{run:()=>(async(e,t)=>{let r,s;const a=new y(((e,t)=>{r=e,s=t}));n.assign(e,{reader:null,writer:null,resolveResult:r,rejectResult:s,result:a});const{readable:i,options:o,scripts:c}=e,{writable:l,closed:u}=(e=>{const t=e.getWriter();let n;const r=new y((e=>n=e));return{writable:new x({async write(e){await t.ready,await t.write(e)},close(){t.releaseLock(),n()},abort:e=>t.abort(e)}),closed:r}})(e.writable);Jt({type:"start",scripts:c.slice(1),options:o,config:t,readable:i,writable:l},e)||n.assign(e,{reader:i.getReader(),writer:l.getWriter()});const f=await a;try{await l.getWriter().close()}catch(e){}return await u,f})(e,{chunkSize:r})}}),e.interface}let Gt=!0,Yt=!0;function Xt(e,t,r){const s={type:"module"};let a,i;typeof e==Te&&(e=e());try{a=new f(e,t)}catch(t){a=e}if(Gt)try{i=new C(a)}catch(e){Gt=!1,i=new C(a,s)}else i=new C(a,s);return i.addEventListener("message",(e=>(async({data:e},t)=>{const{type:r,value:s,messageId:a,result:i,error:o}=e,{reader:c,writer:l,resolveResult:u,rejectResult:f,onTaskFinished:p}=t;try{if(o){const{message:e,stack:t,code:r,name:s}=o,a=new h(e);n.assign(a,{stack:t,code:r,name:s}),w(a)}else{if("pull"==r){const{value:e,done:n}=await c.read();Jt({type:Pt,value:e,done:n,messageId:a},t)}r==Pt&&(await l.ready,await l.write(new d(s)),Jt({type:"ack",messageId:a},t)),"close"==r&&w(null,i)}}catch(o){w(o)}function w(e,t){e?f(e):u(t),l&&l.releaseLock(),p()}})(e,r))),i}function Jt(e,{worker:t,writer:n,onTaskFinished:r,transferStreams:s}){try{let{value:n,readable:r,writable:a}=e;const i=[];if(n&&(e.value=n.buffer,i.push(e.value)),s&&Yt?(r&&i.push(r),a&&i.push(a)):e.readable=e.writable=null,i.length)try{return t.postMessage(e,i),!0}catch(n){Yt=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(e){throw n&&n.releaseLock(),r(),e}}let Qt=[];const $t=[];let en=0;function tn(e){const{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}const nn=65536,rn="writable";class sn{constructor(){this.size=0}init(){this.initialized=!0}}class an extends sn{get readable(){const e=this,{chunkSize:t=nn}=e,n=new D({start(){this.chunkOffset=0},async pull(r){const{offset:s=0,size:a,diskNumberStart:o}=n,{chunkOffset:c}=this;r.enqueue(await pn(e,s+c,i.min(t,a-c),o)),c+t>a?r.close():this.chunkOffset+=t}});return n}}class on extends sn{constructor(){super();const e=this,t=new x({write:t=>e.writeUint8Array(t)});n.defineProperty(e,rn,{get:()=>t})}writeUint8Array(){}}class cn extends an{constructor(e){super(),n.assign(this,{blob:e,size:e.size})}async readUint8Array(e,t){const n=this,r=e+t,s=e||r<n.size?n.blob.slice(e,r):n.blob;let a=await s.arrayBuffer();return a.byteLength>t&&(a=a.slice(e,r)),new d(a)}}class ln extends sn{constructor(e){super();const t=new z,r=[];e&&r.push(["Content-Type",e]),n.defineProperty(this,rn,{get:()=>t.writable}),this.blob=new u(t.readable,{headers:r}).blob()}getData(){return this.blob}}class un extends an{constructor(e){super(),this.readers=e}async init(){const e=this,{readers:t}=e;e.lastDiskNumber=0,e.lastDiskOffset=0,await y.all(t.map((async(n,r)=>{await n.init(),r!=t.length-1&&(e.lastDiskOffset+=n.size),e.size+=n.size}))),super.init()}async readUint8Array(e,t,n=0){const r=this,{readers:s}=this;let a,o=n;-1==o&&(o=s.length-1);let c=e;for(;c>=s[o].size;)c-=s[o].size,o++;const l=s[o],u=l.size;if(c+t>u){const s=u-c;a=new d(t),a.set(await pn(l,c,s)),a.set(await r.readUint8Array(e+s,t-s,n),s)}else a=await pn(l,c,t);return r.lastDiskNumber=i.max(o,r.lastDiskNumber),a}}class fn extends sn{constructor(e,t=4294967295){super();const r=this;let s,a,i;n.assign(r,{diskNumber:0,diskOffset:0,size:0,maxSize:t,availableSize:t});const o=new x({async write(t){const{availableSize:n}=r;if(i)t.length<n?await c(t):(await c(t.slice(0,n)),await l(),r.diskOffset+=s.size,r.diskNumber++,i=null,await this.write(t.slice(n)));else{const{value:n,done:o}=await e.next();if(o&&!n)throw new h("Writer iterator completed too soon");s=n,s.size=0,s.maxSize&&(r.maxSize=s.maxSize),r.availableSize=r.maxSize,await hn(s),a=n.writable,i=a.getWriter(),await this.write(t)}},async close(){await i.ready,await l()}});async function c(e){const t=e.length;t&&(await i.ready,await i.write(e),s.size+=t,r.size+=t,r.availableSize-=t)}async function l(){a.size=s.size,await i.close()}n.defineProperty(r,rn,{get:()=>o})}}async function hn(e,t){e.init&&!e.initialized&&await e.init(t)}function dn(e){return t.isArray(e)&&(e=new un(e)),e instanceof D&&(e={readable:e}),e}function pn(e,t,n,r){return e.readUint8Array(t,n,r)}const wn="\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");function gn(e,t){return t&&"cp437"==t.trim().toLowerCase()?(e=>{{let t="";for(let n=0;n<e.length;n++)t+=wn[e[n]];return t}})(e):new v(t).decode(e)}const mn="filename",yn="rawFilename",bn="comment",vn="rawComment",kn="uncompressedSize",Sn="compressedSize",_n="offset",zn="diskNumberStart",Dn="lastModDate",xn="rawLastModDate",Rn="lastAccessDate",Fn="creationDate",Tn=[mn,yn,Sn,kn,Dn,xn,bn,vn,Rn,Fn,_n,zn,zn,"internalFileAttribute","externalFileAttribute","msDosCompatible","zip64","directory","bitFlag","encrypted","signature","filenameUTF8","commentUTF8","compressionMethod","version","versionMadeBy","extraField","rawExtraField","extraFieldZip64","extraFieldUnicodePath","extraFieldUnicodeComment","extraFieldAES","extraFieldNTFS","extraFieldExtendedTimestamp"];class Cn{constructor(e){Tn.forEach((t=>this[t]=e[t]))}}const En="File format is not recognized",Un="End of central directory not found",Wn="End of Zip64 central directory not found",An="End of Zip64 central directory locator not found",On="Central directory header not found",Ln="Local file header not found",Nn="Zip64 extra field not found",In="File contains encrypted entry",Pn="Encryption method not supported",Mn="Compression method not supported",Bn="Split zip file",Vn="utf-8",Hn="cp437",qn=[[kn,_e],[Sn,_e],[_n,_e],[zn,ze]],Kn={[ze]:{getValue:tr,bytes:4},[_e]:{getValue:nr,bytes:8}};class Zn{constructor(e,t,r){n.assign(this,{reader:e,config:t,options:r})}async getData(e,t,r={}){const a=this,{reader:i,offset:o,diskNumberStart:c,extraFieldAES:l,compressionMethod:u,config:f,bitFlag:p,signature:w,rawLastModDate:g,uncompressedSize:m,compressedSize:b}=a,v=t.localDirectory={},k=rr(await pn(i,o,30,c));let S=Xn(a,r,"password");if(S=S&&S.length&&S,l&&99!=l.originalCompressionMethod)throw new h(Mn);if(0!=u&&8!=u)throw new h(Mn);if(67324752!=tr(k,0))throw new h(Ln);jn(v,k,4),v.rawExtraField=v.extraFieldLength?await pn(i,o+30+v.filenameLength,v.extraFieldLength,c):new d,await Gn(a,v,k,4,!0),n.assign(t,{lastAccessDate:v.lastAccessDate,creationDate:v.creationDate});const _=a.encrypted&&v.encrypted,z=_&&!l;if(_){if(!z&&l.strength===Re)throw new h(Pn);if(!S)throw new h(In)}const D=o+30+v.filenameLength+v.extraFieldLength,R=b,F=i.readable;n.assign(F,{diskNumberStart:c,offset:D,size:R});const T=Xn(a,r,"signal"),C=Xn(a,r,"checkPasswordOnly");C&&(e=new x),e=(e=>{e.writable===Re&&typeof e.next==Te&&(e=new fn(e)),e instanceof x&&(e={writable:e});const{writable:t}=e;return t.size===Re&&(t.size=0),e instanceof fn||n.assign(e,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),e})(e),await hn(e,m);const{writable:E}=e,{onstart:U,onprogress:W,onend:A}=r,O={options:{codecType:Mt,password:S,zipCrypto:z,encryptionStrength:l&&l.strength,signed:Xn(a,r,"checkSignature"),passwordVerification:z&&(p.dataDescriptor?g>>>8&255:w>>>24&255),signature:w,compressed:0!=u,encrypted:_,useWebWorkers:Xn(a,r,"useWebWorkers"),useCompressionStream:Xn(a,r,"useCompressionStream"),transferStreams:Xn(a,r,"transferStreams"),checkPasswordOnly:C},config:f,streamOptions:{signal:T,size:R,onstart:U,onprogress:W,onend:A}};let L=0;try{({outputSize:L}=await(async(e,t)=>{const{options:n,config:r}=t,{transferStreams:a,useWebWorkers:i,useCompressionStream:o,codecType:c,compressed:l,signed:u,encrypted:f}=n,{workerScripts:h,maxWorkers:d,terminateWorkerTimeout:p}=r;t.transferStreams=a||a===Re;const w=!(l||u||f||t.transferStreams);let g;t.useWebWorkers=!w&&(i||i===Re&&r.useWebWorkers),t.scripts=t.useWebWorkers&&h?h[c]:[],n.useCompressionStream=o||o===Re&&r.useCompressionStream;const m=Qt.find((e=>!e.busy));if(m)tn(m),g=new Ht(m,e,t,b);else if(Qt.length<d){const n={indexWorker:en};en++,Qt.push(n),g=new Ht(n,e,t,b)}else g=await new y((n=>$t.push({resolve:n,stream:e,workerOptions:t})));return g.run();function b(e){if($t.length){const[{resolve:t,stream:n,workerOptions:r}]=$t.splice(0,1);t(new Ht(e,n,r,b))}else e.worker?(tn(e),s.isFinite(p)&&p>=0&&(e.terminateTimeout=setTimeout((()=>{Qt=Qt.filter((t=>t!=e)),e.terminate()}),p))):Qt=Qt.filter((t=>t!=e))}})({readable:F,writable:E},O))}catch(e){if(!C||e.message!=je)throw e}finally{const e=Xn(a,r,"preventClose");E.size+=L,e||E.locked||await E.getWriter().close()}return C?void 0:e.getData?e.getData():E}}function jn(e,t,r){const s=e.rawBitFlag=er(t,r+2),a=1==(1&s),i=tr(t,r+6);n.assign(e,{encrypted:a,version:er(t,r),bitFlag:{level:(6&s)>>1,dataDescriptor:8==(8&s),languageEncodingFlag:2048==(2048&s)},rawLastModDate:i,lastModDate:Jn(i),filenameLength:er(t,r+22),extraFieldLength:er(t,r+24)})}async function Gn(e,t,r,s,a){const{rawExtraField:i}=t,l=t.extraField=new c,u=rr(new d(i));let f=0;try{for(;f<i.length;){const e=er(u,f),t=er(u,f+2);l.set(e,{type:e,data:i.slice(f+4,f+4+t)}),f+=4+t}}catch(e){}const p=er(r,s+4);n.assign(t,{signature:tr(r,s+10),uncompressedSize:tr(r,s+18),compressedSize:tr(r,s+14)});const w=l.get(1);w&&(((e,t)=>{t.zip64=!0;const n=rr(e.data),r=qn.filter((([e,n])=>t[e]==n));for(let s=0,a=0;s<r.length;s++){const[i,o]=r[s];if(t[i]==o){const r=Kn[o];t[i]=e[i]=r.getValue(n,a),a+=r.bytes}else if(e[i])throw new h(Nn)}})(w,t),t.extraFieldZip64=w);const g=l.get(28789);g&&(await Yn(g,mn,yn,t,e),t.extraFieldUnicodePath=g);const m=l.get(25461);m&&(await Yn(m,bn,vn,t,e),t.extraFieldUnicodeComment=m);const y=l.get(39169);y?(((e,t,r)=>{const s=rr(e.data),a=$n(s,4);n.assign(e,{vendorVersion:$n(s,0),vendorId:$n(s,2),strength:a,originalCompressionMethod:r,compressionMethod:er(s,5)}),t.compressionMethod=e.compressionMethod})(y,t,p),t.extraFieldAES=y):t.compressionMethod=p;const b=l.get(10);b&&(((e,t)=>{const r=rr(e.data);let s,a=4;try{for(;a<e.data.length&&!s;){const t=er(r,a),n=er(r,a+2);1==t&&(s=e.data.slice(a+4,a+4+n)),a+=4+n}}catch(e){}try{if(s&&24==s.length){const r=rr(s),a=r.getBigUint64(0,!0),i=r.getBigUint64(8,!0),o=r.getBigUint64(16,!0);n.assign(e,{rawLastModDate:a,rawLastAccessDate:i,rawCreationDate:o});const c={lastModDate:Qn(a),lastAccessDate:Qn(i),creationDate:Qn(o)};n.assign(e,c),n.assign(t,c)}}catch(e){}})(b,t),t.extraFieldNTFS=b);const v=l.get(21589);v&&(((e,t,n)=>{const r=rr(e.data),s=$n(r,0),a=[],i=[];n?(1==(1&s)&&(a.push(Dn),i.push(xn)),2==(2&s)&&(a.push(Rn),i.push("rawLastAccessDate")),4==(4&s)&&(a.push(Fn),i.push("rawCreationDate"))):5>e.data.length||(a.push(Dn),i.push(xn));let c=1;a.forEach(((n,s)=>{if(e.data.length>=c+4){const a=tr(r,c);t[n]=e[n]=new o(1e3*a);const l=i[s];e[l]=a}c+=4}))})(v,t,a),t.extraFieldExtendedTimestamp=v);const k=l.get(6534);k&&(t.extraFieldUSDZ=k)}async function Yn(e,t,r,s,a){const i=rr(e.data),o=new Ne;o.append(a[r]);const c=rr(new d(4));c.setUint32(0,o.get(),!0);const l=tr(i,1);n.assign(e,{version:$n(i,0),[t]:gn(e.data.subarray(5)),valid:!a.bitFlag.languageEncodingFlag&&l==tr(c,0)}),e.valid&&(s[t]=e[t],s[t+"UTF8"]=!0)}function Xn(e,t,n){return t[n]===Re?e.options[n]:t[n]}function Jn(e){const t=(4294901760&e)>>16,n=65535&e;try{return new o(1980+((65024&t)>>9),((480&t)>>5)-1,31&t,(63488&n)>>11,(2016&n)>>5,2*(31&n),0)}catch(e){}}function Qn(e){return new o(s(e/a(1e4)-a(116444736e5)))}function $n(e,t){return e.getUint8(t)}function er(e,t){return e.getUint16(t,!0)}function tr(e,t){return e.getUint32(t,!0)}function nr(e,t){return s(e.getBigUint64(t,!0))}function rr(e){return new g(e.buffer)}Ae({Inflate:Se}),e.BlobReader=cn,e.BlobWriter=ln,e.Data64URIWriter=class extends on{constructor(e){super(),n.assign(this,{data:"data:"+(e||"")+";base64,",pending:[]})}writeUint8Array(e){const t=this;let n=0,s=t.pending;const a=t.pending.length;for(t.pending="",n=0;n<3*i.floor((a+e.length)/3)-a;n++)s+=r.fromCharCode(e[n]);for(;n<e.length;n++)t.pending+=r.fromCharCode(e[n]);s.length>2?t.data+=_(s):t.pending=s}getData(){return this.data+_(this.pending)}},e.ERR_BAD_FORMAT=En,e.ERR_CENTRAL_DIRECTORY_NOT_FOUND=On,e.ERR_ENCRYPTED=In,e.ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND=An,e.ERR_EOCDR_NOT_FOUND=Un,e.ERR_EOCDR_ZIP64_NOT_FOUND=Wn,e.ERR_EXTRAFIELD_ZIP64_NOT_FOUND=Nn,e.ERR_INVALID_PASSWORD=Ke,e.ERR_INVALID_SIGNATURE=Ze,e.ERR_LOCAL_FILE_HEADER_NOT_FOUND=Ln,e.ERR_SPLIT_ZIP_FILE=Bn,e.ERR_UNSUPPORTED_COMPRESSION=Mn,e.ERR_UNSUPPORTED_ENCRYPTION=Pn,e.TextWriter=class extends ln{constructor(e){super(e),n.assign(this,{encoding:e,utf8:!e||"utf-8"==e.toLowerCase()})}async getData(){const{encoding:e,utf8:t}=this,r=await super.getData();if(r.text&&t)return r.text();{const t=new FileReader;return new y(((s,a)=>{n.assign(t,{onload:({target:e})=>s(e.result),onerror:()=>a(t.error)}),t.readAsText(r,e)}))}}},e.ZipReader=class{constructor(e,t={}){n.assign(this,{reader:dn(e),options:t,config:We})}async*getEntriesGenerator(e={}){const t=this;let{reader:r}=t;const{config:s}=t;if(await hn(r),r.size!==Re&&r.readUint8Array||(r=new cn(await new u(r.readable).blob()),await hn(r)),22>r.size)throw new h(En);r.chunkSize=(e=>i.max(e.chunkSize,64))(s);const a=await(async(e,t,n)=>{const r=new d(4);return rr(r).setUint32(0,101010256,!0),await s(22)||await s(i.min(1048582,n));async function s(t){const s=n-t,a=await pn(e,s,t);for(let e=a.length-22;e>=0;e--)if(a[e]==r[0]&&a[e+1]==r[1]&&a[e+2]==r[2]&&a[e+3]==r[3])return{offset:s+e,buffer:a.slice(e,e+22).buffer}}})(r,0,r.size);if(!a)throw 134695760==tr(rr(await pn(r,0,4)))?new h(Bn):new h(Un);const o=rr(a);let c=tr(o,12),l=tr(o,16);const f=a.offset,p=er(o,20),w=f+22+p;let g=er(o,4);const m=r.lastDiskNumber||0;let b=er(o,6),v=er(o,8),k=0,S=0;if(l==_e||c==_e||v==ze||b==ze){const e=rr(await pn(r,a.offset-20,20));if(117853008!=tr(e,0))throw new h(Wn);l=nr(e,8);let t=await pn(r,l,56,-1),n=rr(t);const s=a.offset-20-56;if(tr(n,0)!=xe&&l!=s){const e=l;l=s,k=l-e,t=await pn(r,l,56,-1),n=rr(t)}if(tr(n,0)!=xe)throw new h(An);g==ze&&(g=tr(n,16)),b==ze&&(b=tr(n,20)),v==ze&&(v=nr(n,32)),c==_e&&(c=nr(n,40)),l-=c}if(m!=g)throw new h(Bn);if(0>l||l>=r.size)throw new h(En);let _=0,z=await pn(r,l,c,b),D=rr(z);if(c){const e=a.offset-c;if(tr(D,_)!=De&&l!=e){const t=l;l=e,k=l-t,z=await pn(r,l,c,b),D=rr(z)}}const x=a.offset-l-(r.lastDiskOffset||0);if(c==x||0>x||(c=x,z=await pn(r,l,c,b),D=rr(z)),0>l||l>=r.size)throw new h(En);const R=Xn(t,e,"filenameEncoding"),F=Xn(t,e,"commentEncoding");for(let a=0;v>a;a++){const o=new Zn(r,s,t.options);if(tr(D,_)!=De)throw new h(On);jn(o,D,_+6);const c=!!o.bitFlag.languageEncodingFlag,l=_+46,u=l+o.filenameLength,f=u+o.extraFieldLength,d=er(D,_+4),p=0==(0&d),w=z.subarray(l,u),g=er(D,_+32),m=f+g,b=z.subarray(f,m),x=c,T=c,C=p&&16==(16&$n(D,_+38)),E=tr(D,_+42)+k;n.assign(o,{versionMadeBy:d,msDosCompatible:p,compressedSize:0,uncompressedSize:0,commentLength:g,directory:C,offset:E,diskNumberStart:er(D,_+34),internalFileAttribute:er(D,_+36),externalFileAttribute:tr(D,_+38),rawFilename:w,filenameUTF8:x,commentUTF8:T,rawExtraField:z.subarray(u,f)});const[U,W]=await y.all([gn(w,x?Vn:R||Hn),gn(b,T?Vn:F||Hn)]);n.assign(o,{rawComment:b,filename:U,comment:W,directory:C||U.endsWith("/")}),S=i.max(E,S),await Gn(o,o,D,_+6);const A=new Cn(o);A.getData=(e,t)=>o.getData(e,A,t),_=m;const{onprogress:O}=e;if(O)try{await O(a+1,v,new Cn(o))}catch(e){}yield A}const T=Xn(t,e,"extractPrependedData"),C=Xn(t,e,"extractAppendedData");return T&&(t.prependedData=S>0?await pn(r,0,S):new d),t.comment=p?await pn(r,f+22,p):new d,C&&(t.appendedData=w<r.size?await pn(r,w,r.size-w):new d),!0}async getEntries(e={}){const t=[];for await(const n of this.getEntriesGenerator(e))t.push(n);return t}async close(){}},e.configure=Ae,e.getMimeType=()=>"application/octet-stream",e.terminateWorkers=()=>{Qt.forEach((e=>{tn(e),e.terminate()}))},n.defineProperty(e,"__esModule",{value:!0})}));
@@ -1,343 +0,0 @@
1
- /*
2
- * Copyright 2010-2022 Gildas Lormeau
3
- * contact : gildas.lormeau <at> gmail.com
4
- *
5
- * This file is part of SingleFile.
6
- *
7
- * The code in this file is free software: you can redistribute it and/or
8
- * modify it under the terms of the GNU Affero General Public License
9
- * (GNU AGPL) as published by the Free Software Foundation, either version 3
10
- * of the License, or (at your option) any later version.
11
- *
12
- * The code in this file is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
15
- * General Public License for more details.
16
- *
17
- * As additional permission under GNU AGPL version 3 section 7, you may
18
- * distribute UNMODIFIED VERSIONS OF THIS file without the copy of the GNU
19
- * AGPL normally required by section 4, provided you include this license
20
- * notice and a URL through which recipients can access the Corresponding
21
- * Source.
22
- */
23
-
24
- /* global globalThis */
25
-
26
- import * as cssTree from "./../vendor/css-tree.js";
27
- import {
28
- normalizeFontFamily,
29
- getFontWeight
30
- } from "./../core/helper.js";
31
-
32
- const helper = {
33
- normalizeFontFamily,
34
- getFontWeight
35
- };
36
-
37
- const FontFace = globalThis.FontFace;
38
- const JSON = globalThis.JSON;
39
-
40
- const REGEXP_URL_SIMPLE_QUOTES_FN = /url\s*\(\s*'(.*?)'\s*\)/i;
41
- const REGEXP_URL_DOUBLE_QUOTES_FN = /url\s*\(\s*"(.*?)"\s*\)/i;
42
- const REGEXP_URL_NO_QUOTES_FN = /url\s*\(\s*(.*?)\s*\)/i;
43
- const REGEXP_URL_FUNCTION = /(url|local|-sf-url-original)\(.*?\)\s*(,|$)/g;
44
- const REGEXP_SIMPLE_QUOTES_STRING = /^'(.*?)'$/;
45
- const REGEXP_DOUBLE_QUOTES_STRING = /^"(.*?)"$/;
46
- const REGEXP_URL_FUNCTION_WOFF = /^url\(\s*["']?data:font\/(woff2?)/;
47
- const REGEXP_URL_FUNCTION_WOFF_ALT = /^url\(\s*["']?data:application\/x-font-(woff)/;
48
- const REGEXP_FONT_FORMAT = /\.([^.?#]+)((\?|#).*?)?$/;
49
- const REGEXP_FONT_FORMAT_VALUE = /format\((.*?)\)\s*,?$/;
50
- const REGEXP_FONT_SRC = /(.*?)\s*,?$/;
51
- const EMPTY_URL_SOURCE = /^url\(["']?data:[^,]*,?["']?\)/;
52
- const LOCAL_SOURCE = "local(";
53
- const MEDIA_ALL = "all";
54
- const FONT_STRETCHES = {
55
- "ultra-condensed": "50%",
56
- "extra-condensed": "62.5%",
57
- "condensed": "75%",
58
- "semi-condensed": "87.5%",
59
- "normal": "100%",
60
- "semi-expanded": "112.5%",
61
- "expanded": "125%",
62
- "extra-expanded": "150%",
63
- "ultra-expanded": "200%"
64
- };
65
- const FONT_MAX_LOAD_DELAY = 5000;
66
-
67
- export {
68
- process
69
- };
70
-
71
- async function process(doc, stylesheets, fontDeclarations, fontTests) {
72
- const fontsDetails = {
73
- fonts: new Map(),
74
- medias: new Map(),
75
- supports: new Map()
76
- };
77
- const stats = { rules: { processed: 0, discarded: 0 }, fonts: { processed: 0, discarded: 0 } };
78
- let sheetIndex = 0;
79
- stylesheets.forEach(stylesheetInfo => {
80
- const cssRules = stylesheetInfo.stylesheet.children;
81
- if (cssRules) {
82
- stats.rules.processed += cssRules.size;
83
- stats.rules.discarded += cssRules.size;
84
- if (stylesheetInfo.mediaText && stylesheetInfo.mediaText != MEDIA_ALL) {
85
- const mediaFontsDetails = createFontsDetailsInfo();
86
- fontsDetails.medias.set("media-" + sheetIndex + "-" + stylesheetInfo.mediaText, mediaFontsDetails);
87
- getFontsDetails(doc, cssRules, sheetIndex, mediaFontsDetails);
88
- } else {
89
- getFontsDetails(doc, cssRules, sheetIndex, fontsDetails);
90
- }
91
- }
92
- sheetIndex++;
93
- });
94
- processFontDetails(fontsDetails);
95
- await Promise.all([...stylesheets].map(async ([, stylesheetInfo], sheetIndex) => {
96
- const cssRules = stylesheetInfo.stylesheet.children;
97
- const media = stylesheetInfo.mediaText;
98
- if (cssRules) {
99
- if (media && media != MEDIA_ALL) {
100
- await processFontFaceRules(cssRules, sheetIndex, fontsDetails.medias.get("media-" + sheetIndex + "-" + media), fontDeclarations, fontTests, stats);
101
- } else {
102
- await processFontFaceRules(cssRules, sheetIndex, fontsDetails, fontDeclarations, fontTests, stats);
103
- }
104
- stats.rules.discarded -= cssRules.size;
105
- }
106
- }));
107
- return stats;
108
- }
109
-
110
- function getFontsDetails(doc, cssRules, sheetIndex, mediaFontsDetails) {
111
- let mediaIndex = 0, supportsIndex = 0;
112
- cssRules.forEach(ruleData => {
113
- if (ruleData.type == "Atrule" && ruleData.name == "media" && ruleData.block && ruleData.block.children && ruleData.prelude) {
114
- const mediaText = cssTree.generate(ruleData.prelude);
115
- const fontsDetails = createFontsDetailsInfo();
116
- mediaFontsDetails.medias.set("media-" + sheetIndex + "-" + mediaIndex + "-" + mediaText, fontsDetails);
117
- mediaIndex++;
118
- getFontsDetails(doc, ruleData.block.children, sheetIndex, fontsDetails);
119
- } else if (ruleData.type == "Atrule" && ruleData.name == "supports" && ruleData.block && ruleData.block.children && ruleData.prelude) {
120
- const supportsText = cssTree.generate(ruleData.prelude);
121
- const fontsDetails = createFontsDetailsInfo();
122
- mediaFontsDetails.supports.set("supports-" + sheetIndex + "-" + supportsIndex + "-" + supportsText, fontsDetails);
123
- supportsIndex++;
124
- getFontsDetails(doc, ruleData.block.children, sheetIndex, fontsDetails);
125
- } else if (ruleData.type == "Atrule" && ruleData.name == "font-face" && ruleData.block && ruleData.block.children) {
126
- const fontKey = getFontKey(ruleData);
127
- let fontInfo = mediaFontsDetails.fonts.get(fontKey);
128
- if (!fontInfo) {
129
- fontInfo = [];
130
- mediaFontsDetails.fonts.set(fontKey, fontInfo);
131
- }
132
- const src = getPropertyValue(ruleData, "src");
133
- if (src) {
134
- const fontSources = src.match(REGEXP_URL_FUNCTION);
135
- if (fontSources) {
136
- fontSources.forEach(source => fontInfo.unshift(source));
137
- }
138
- }
139
- }
140
- });
141
- }
142
-
143
- function processFontDetails(fontsDetails) {
144
- fontsDetails.fonts.forEach((fontInfo, fontKey) => {
145
- fontsDetails.fonts.set(fontKey, fontInfo.map(fontSource => {
146
- const fontFormatMatch = fontSource.match(REGEXP_FONT_FORMAT_VALUE);
147
- let fontFormat;
148
- const fontUrl = getURL(fontSource);
149
- if (fontFormatMatch && fontFormatMatch[1]) {
150
- fontFormat = fontFormatMatch[1].replace(REGEXP_SIMPLE_QUOTES_STRING, "$1").replace(REGEXP_DOUBLE_QUOTES_STRING, "$1").toLowerCase();
151
- }
152
- if (!fontFormat) {
153
- const fontFormatMatch = fontSource.match(REGEXP_URL_FUNCTION_WOFF);
154
- if (fontFormatMatch && fontFormatMatch[1]) {
155
- fontFormat = fontFormatMatch[1];
156
- } else {
157
- const fontFormatMatch = fontSource.match(REGEXP_URL_FUNCTION_WOFF_ALT);
158
- if (fontFormatMatch && fontFormatMatch[1]) {
159
- fontFormat = fontFormatMatch[1];
160
- }
161
- }
162
- }
163
- if (!fontFormat && fontUrl) {
164
- const fontFormatMatch = fontUrl.match(REGEXP_FONT_FORMAT);
165
- if (fontFormatMatch && fontFormatMatch[1]) {
166
- fontFormat = fontFormatMatch[1];
167
- }
168
- }
169
- return { src: fontSource.match(REGEXP_FONT_SRC)[1], fontUrl, format: fontFormat };
170
- }));
171
- });
172
- fontsDetails.medias.forEach(mediaFontsDetails => processFontDetails(mediaFontsDetails));
173
- fontsDetails.supports.forEach(supportsFontsDetails => processFontDetails(supportsFontsDetails));
174
- }
175
-
176
- async function processFontFaceRules(cssRules, sheetIndex, fontsDetails, fontDeclarations, fontTests, stats) {
177
- const removedRules = [];
178
- let mediaIndex = 0, supportsIndex = 0;
179
- for (let cssRule = cssRules.head; cssRule; cssRule = cssRule.next) {
180
- const ruleData = cssRule.data;
181
- if (ruleData.type == "Atrule" && ruleData.name == "media" && ruleData.block && ruleData.block.children && ruleData.prelude) {
182
- const mediaText = cssTree.generate(ruleData.prelude);
183
- await processFontFaceRules(ruleData.block.children, sheetIndex, fontsDetails.medias.get("media-" + sheetIndex + "-" + mediaIndex + "-" + mediaText), fontDeclarations, fontTests, stats);
184
- mediaIndex++;
185
- } else if (ruleData.type == "Atrule" && ruleData.name == "supports" && ruleData.block && ruleData.block.children && ruleData.prelude) {
186
- const supportsText = cssTree.generate(ruleData.prelude);
187
- await processFontFaceRules(ruleData.block.children, sheetIndex, fontsDetails.supports.get("supports-" + sheetIndex + "-" + supportsIndex + "-" + supportsText), fontDeclarations, fontTests, stats);
188
- supportsIndex++;
189
- } else if (ruleData.type == "Atrule" && ruleData.name == "font-face") {
190
- const key = getFontKey(ruleData);
191
- const fontInfo = fontsDetails.fonts.get(key);
192
- if (fontInfo) {
193
- const processed = await processFontFaceRule(ruleData, fontInfo, fontDeclarations, fontTests, stats);
194
- if (processed) {
195
- fontsDetails.fonts.delete(key);
196
- }
197
- } else {
198
- removedRules.push(cssRule);
199
- }
200
- }
201
- }
202
- removedRules.forEach(cssRule => cssRules.remove(cssRule));
203
- }
204
-
205
- async function processFontFaceRule(ruleData, fontInfo, fontDeclarations, fontTests, stats) {
206
- const removedNodes = [];
207
- for (let node = ruleData.block.children.head; node; node = node.next) {
208
- if (node.data.property == "src") {
209
- removedNodes.push(node);
210
- }
211
- }
212
- removedNodes.pop();
213
- removedNodes.forEach(node => ruleData.block.children.remove(node));
214
- const srcDeclaration = ruleData.block.children.filter(node => node.property == "src").tail;
215
- if (srcDeclaration) {
216
- await Promise.all(fontInfo.map(async source => {
217
- if (fontTests.has(source.src)) {
218
- source.valid = fontTests.get(source.src);
219
- } else {
220
- if (FontFace && source.fontUrl) {
221
- const fontFace = new FontFace("test-font", source.src);
222
- try {
223
- let timeout;
224
- await Promise.race([
225
- fontFace.load().then(() => fontFace.loaded).then(() => { source.valid = true; globalThis.clearTimeout(timeout); }),
226
- new Promise(resolve => timeout = globalThis.setTimeout(() => { source.valid = true; resolve(); }, FONT_MAX_LOAD_DELAY))
227
- ]);
228
- } catch (error) {
229
- const urlNodes = cssTree.findAll(srcDeclaration.data, node => node.type == "Url");
230
- const declarationFontURLs = Array.from(fontDeclarations).find(([node]) => urlNodes.includes(node) && node.value == source.fontUrl);
231
- if (declarationFontURLs && declarationFontURLs[1].length) {
232
- const fontURL = declarationFontURLs[1][0];
233
- if (fontURL) {
234
- const fontFace = new FontFace("test-font", "url(" + fontURL + ")");
235
- try {
236
- let timeout;
237
- await Promise.race([
238
- fontFace.load().then(() => fontFace.loaded).then(() => { source.valid = true; globalThis.clearTimeout(timeout); }),
239
- new Promise(resolve => timeout = globalThis.setTimeout(() => { source.valid = true; resolve(); }, FONT_MAX_LOAD_DELAY))
240
- ]);
241
- } catch (error) {
242
- // ignored
243
- }
244
- }
245
- } else {
246
- source.valid = true;
247
- }
248
- }
249
- } else {
250
- source.valid = true;
251
- }
252
- fontTests.set(source.src, source.valid);
253
- }
254
- }));
255
- const findSourceByFormat = (fontFormat, testValidity) => fontInfo.find(source => !source.src.match(EMPTY_URL_SOURCE) && source.format == fontFormat && (!testValidity || source.valid));
256
- const filterSources = fontSource => fontInfo.filter(source => source == fontSource || source.src.startsWith(LOCAL_SOURCE));
257
- stats.fonts.processed += fontInfo.length;
258
- stats.fonts.discarded += fontInfo.length;
259
- const woffFontFound =
260
- findSourceByFormat("woff2-variations", true) || findSourceByFormat("woff2", true) || findSourceByFormat("woff", true);
261
- if (woffFontFound) {
262
- fontInfo = filterSources(woffFontFound);
263
- } else {
264
- const ttfFontFound =
265
- findSourceByFormat("truetype-variations", true) || findSourceByFormat("truetype", true);
266
- if (ttfFontFound) {
267
- fontInfo = filterSources(ttfFontFound);
268
- } else {
269
- const otfFontFound =
270
- findSourceByFormat("opentype") || findSourceByFormat("embedded-opentype");
271
- if (otfFontFound) {
272
- fontInfo = filterSources(otfFontFound);
273
- } else {
274
- fontInfo = fontInfo.filter(source => !source.src.match(EMPTY_URL_SOURCE) && (source.valid) || source.src.startsWith(LOCAL_SOURCE));
275
- }
276
- }
277
- }
278
- stats.fonts.discarded -= fontInfo.length;
279
- fontInfo.reverse();
280
- try {
281
- srcDeclaration.data.value = cssTree.parse(fontInfo.map(fontSource => fontSource.src).join(","), { context: "value", parseCustomProperty: true });
282
- }
283
- catch (error) {
284
- // ignored
285
- }
286
- return true;
287
- } else {
288
- return false;
289
- }
290
- }
291
-
292
- function getPropertyValue(ruleData, propertyName) {
293
- let property;
294
- if (ruleData.block.children) {
295
- property = ruleData.block.children.filter(node => {
296
- try {
297
- return node.property == propertyName && !cssTree.generate(node.value).match(/\\9$/);
298
- } catch (error) {
299
- return node.property == propertyName;
300
- }
301
- }).tail;
302
- }
303
- if (property) {
304
- try {
305
- return cssTree.generate(property.data.value);
306
- } catch (error) {
307
- // ignored
308
- }
309
- }
310
- }
311
-
312
- function getFontKey(ruleData) {
313
- return JSON.stringify([
314
- helper.normalizeFontFamily(getPropertyValue(ruleData, "font-family")),
315
- helper.getFontWeight(getPropertyValue(ruleData, "font-weight") || "400"),
316
- getPropertyValue(ruleData, "font-style") || "normal",
317
- getPropertyValue(ruleData, "unicode-range"),
318
- getFontStretch(getPropertyValue(ruleData, "font-stretch")),
319
- getPropertyValue(ruleData, "font-variant") || "normal",
320
- getPropertyValue(ruleData, "font-feature-settings"),
321
- getPropertyValue(ruleData, "font-variation-settings")
322
- ]);
323
- }
324
-
325
- function getFontStretch(stretch) {
326
- return FONT_STRETCHES[stretch] || stretch;
327
- }
328
-
329
- function createFontsDetailsInfo() {
330
- return {
331
- fonts: new Map(),
332
- medias: new Map(),
333
- supports: new Map()
334
- };
335
- }
336
-
337
- function getURL(urlFunction) {
338
- urlFunction = urlFunction.replace(/url\(-sf-url-original\\\(\\"(.*?)\\"\\\)\\ /g, "");
339
- const urlMatch = urlFunction.match(REGEXP_URL_SIMPLE_QUOTES_FN) ||
340
- urlFunction.match(REGEXP_URL_DOUBLE_QUOTES_FN) ||
341
- urlFunction.match(REGEXP_URL_NO_QUOTES_FN);
342
- return urlMatch && urlMatch[1];
343
- }