libmount
Version:
Standalone FAT12, FAT16, FAT32, VFAT implementation in JavaScript
45 lines (43 loc) • 20.3 kB
JavaScript
const ns = {};
class aa{decode(a){return(new TextDecoder("UTF-16")).decode(new Uint16Array(a))}encode(a){const b=a.length,c=new Uint8Array(b);for(let d=0;d<b;d++){const e=a.charCodeAt(d);c[d]=e<256?e:63}return c}}const ba=new aa;class ca extends Error{constructor(){super(void 0);this.name="ValidationError"}};const t=a=>new Uint8Array([...a].map(b=>b.charCodeAt(0))),da=t(" $%'-_@~`!(){}^#&"),ea=t(".+,;=[]"),fa=a=>{let b=a[0];for(let c=1,d=a.length;c<d;c++)b=(b<<7|b>>1)+a[c]&255;return b},ha=a=>a>127||a>64&&a<91||a>47&&a<58||da.includes(a),ia=a=>{let b=0;for(;b<a.length&&a.charCodeAt(b)===32;)b++;let c=a.length-1,d;for(;c>=b&&((d=a.charCodeAt(c))===32||d===46);)c--;return a.slice(b,c+1)},ja=a=>{const b=[];a=a.split(/[/\\]/u);for(let d=0;d<a.length;d++){var c=a[d].trim();c!==""&&c!=="."&&(c===".."?b.length&&
b.length--:(c=ia(c),c!==""&&b.push(c)))}return b},oa=(a,b)=>{b=b.decode(a);a=b.slice(0,8).trimEnd();b=b.slice(8,11).trimEnd();return b===""?a:a+"."+b},pa=(a,b,c,d,e)=>{if(e.startsWith(" ")||e.endsWith(" "))return!1;let f=0;d=d.encode(e);if(d.length>c)return!1;for(;f<d.length;){e=d[f];if(!ha(e))return!1;a[b+f]=e;f++}for(;f<c;)a[b+f]=32,f++;return!0},qa=(a,b)=>{var c=a.lastIndexOf(".");const d=c<0?a:a.substring(0,c);a=c<0?"":a.substring(c+1);if(d===""&&a==="")return null;c=new Uint8Array(11);return pa(c,
0,8,b,d)&&pa(c,8,3,b,a)?c:null},u=new Uint8Array(520),ra=new Uint16Array(260),sa=a=>{let b=0,c=a.length-1,d;do{var e=a[c--],f=e.va;let g=0;for(;g<10&&(d=f[g++]|f[g++]<<8);)ra[b++]=d;if(d){f=e.wa;for(g=0;g<12&&(d=f[g++]|f[g++]<<8);)ra[b++]=d;if(d)for(e=e.xa,g=0;g<4&&(d=e[g++]|e[g++]<<8);)ra[b++]=d}}while(d&&c>=0);return String.fromCharCode(...ra.subarray(0,b))},ta=(a,b,c)=>{let d="",e=0,f=0;for(;e<a.length&&f<b;){const g=a.charAt(e);if(d!==""||g!==" "){const h=c.encode(g),k=h[0];k!==63&&(ha(k)?(d+=
g,f+=h.length):(d+="_",f++))}e++}return d},ua=(a,b,c)=>{a=a.toUpperCase();var d=a.lastIndexOf("."),e=d<0?"":a.substring(d+1);d=ta(d<0?a:a.substring(0,d),6,b);b=ta(e,3,b);if(d.length>2)a=d;else{e=0;for(let f=0;f<a.length;f++)e=e+a.charCodeAt(f)&65535;a=e.toString(16).padStart(4,"0").toUpperCase();a=d+a}d=b===""?"":"."+b;for(e=b=1;e<=7;){e=a.substring(0,7-e)+"~"+b+d;if(!c.has(e))return e;b++;e=b.toString().length}return""},va=(a,b,c)=>a?new Date(1980+(a>>9&127),Math.max(0,(a>>5&15)-1),Math.max(1,a&
31),b>>11&31,b>>5&63,Math.floor(c/100)+((b&31)<<1),c%100*10):null,v=a=>a?a.getFullYear()-1980<<9|a.getMonth()+1<<5|a.getDate():0,x=a=>a?a.getHours()<<11|a.getMinutes()<<5|a.getSeconds()>>1:0;const wa=[235,60,144],xa=[235,88,144],ya=t("¾V|´¬ÀtÍë÷1ÀÍÍëþ"),za=t("¾r|´¬ÀtÍë÷1ÀÍÍëþ");function Aa(a,b){a=a.g.read(b,2);return a[0]|a[1]<<8}function y(a,b,c){a.g.write?.(b,c)}class Ba{constructor(a){this.g=a}o(a){a=this.g.read(a,4);return(a[0]|a[1]<<8|a[2]<<16|a[3]<<24)>>>0}u(a,b){y(this,a,new Uint8Array([b,b>>>8,b>>>16,b>>>24]))}}function z(a,b){a.i=b;return a}function A(a,b){a.i+=b;return a}function D(a,b){return new Uint8Array(a.g.subarray(a.i,a.i+=b))}function G(a){return a.g[a.i++]}function H(a){const b=a.g;return b[a.i++]|b[a.i++]<<8}
function I(a,b){a.g.set(b,a.i);a.i+=b.length;return a}function K(a,b){a.g[a.i++]=b;return a}function Da(a,b){a.g.fill(0,a.i,a.i+=b);return a}function L(a,b){const c=a.g;c[a.i++]=b;c[a.i++]=b>>>8;return a}class O{constructor(a){this.g=a;this.i=0}o(){const a=this.g;return(a[this.i++]|a[this.i++]<<8|a[this.i++]<<16|a[this.i++]<<24)>>>0}u(a){const b=this.g;b[this.i++]=a;a>>>=8;b[this.i++]=a;a>>>=8;b[this.i++]=a;b[this.i++]=a>>>8;return this}};const P=a=>{if(!a)throw new ca;},Ea=a=>{const b=G(a),c=G(a);a=G(a);return{sa:c>>6<<8|a,La:b,Ma:c&63}},Fa=(a,b)=>{const c=b.sa>>8<<6|b.Ma&63,d=b.sa&255;K(K(K(a,b.La),c),d)},Ga=a=>{P(a.g.length>=512);z(a,446);const b=[];for(let c=0;c<4;c++){let d={ea:G(a),Na:Ea(a),la:G(a),Ja:Ea(a),za:a.o(),na:a.o()};try{P(d.la>0),P([0,128].includes(d.ea)),P(d.na>0)}catch{d=null}d&&b.push(d)}return b},Ha=(a,b)=>{z(a,446);let c=0;for(;c<4&&c<b.length;){const d=b[c];K(a,d.ea);Fa(a,d.Na);K(a,d.la);Fa(a,d.Ja);a.u(d.za);
a.u(d.na);c++}Da(a,(4-c)*16);L(a,43605)},Ia=a=>{a={G:D(a,11),H:G(a),ja:G(a),L:G(a),K:H(a),J:H(a),M:H(a),F:H(a),O:H(a),N:H(a),A:H(a),B:a.o()};a.G[0]===5&&(a.G[0]=229);return a},Ja=(a,b,c)=>{c.G[0]===229&&(c.G[0]=5);L(L(L(L(L(L(L(K(K(K(I(z(a,b),c.G),c.H),c.ja),c.L),c.K),c.J),c.M),c.F),c.O),c.N),c.A).u(c.B)},Ka=a=>{const b=new Date;return{G:a,H:8,ja:0,L:0,K:0,J:0,M:0,F:0,O:x(b),N:v(b),A:0,B:0}},La=(a,b)=>({G:a,H:16,ja:0,L:b.L,K:b.K,J:b.J,M:b.M,F:b.F,O:b.O,N:b.N,A:b.A,B:0}),Ma=(a,b)=>{const c=v(b),d=
x(b);return{G:a,H:0,ja:0,L:b?Math.floor((b.getSeconds()%2*1E3+Number(b.getMilliseconds()))/10):0,K:d,J:c,M:c,F:0,O:d,N:c,A:0,B:0}};const S=(a,b,c,d)=>{const e=a===0,f=a===3,g=a===4;return{pa:b,P:c,l:d,C:d.F<<16|d.A,aa:e,Xa:a===1,oa:f,da:g,Ga:e||f,Ha:f||g,gb:a===5,Ya:a===6,R:b,Z:c,Fa:1}},Na=Ma(new Uint8Array(11),null),Oa=S(0,"",0,Na),Pa=t(". "),Qa=t(".. "),Ra=(a,b,c,d)=>{if(b===0)return S(6,"",c,Na);if(b===229)return S(5,"",c,Na);a=Ia(a);b=a.G;var e=a.H;return(e&8)>0?S(1,d.decode(b).trimEnd(),c,a):(e=(e&16)>0)&&b.every((f,g)=>f===Pa[g])?S(2,".",c,a):e&&b.every((f,g)=>f===Qa[g])?S(2,"..",c,a):b.every(ha)&&(d=oa(b,
d))&&!d.startsWith(" ")?S(e?3:4,d,c,a):null},T=(a,b,c)=>{const d=new Uint8Array(32);Ja(new O(d),0,c);y(a,b,d)},Sa=(a,b)=>{a=a.toUpperCase();return a===b.pa||a===b.R.toUpperCase()},Ta=(a,b,c)=>{if(b.length&&(b[b.length-1].W&63)===1){const d=fa(a.l.G);b.every(e=>e.ra===d)&&(a.R=sa(b),a.Z=c,a.Fa=b.length+1)}};
class Ua{constructor(a,b,c){this.j=a;this.X=b;this.D=c}g(a){const b=this.X,c=Aa(this.j,this.D[0]+a+(a>>1));return a&1?c>>4:c&b.ha}h(a,b){const c=this.j,d=this.D;for(let f=0;f<d.length;f++){const g=d[f]+a+(a>>1);var e=Aa(c,g);e=a&1?b<<4|e&15:e&61440|b;y(c,g,new Uint8Array([e,e>>>8]))}}m(){return 2}S(){}}
class Va{constructor(a,b){this.j=a;this.D=b}g(a){return Aa(this.j,this.D[0]+a*2)}h(a,b){const c=this.j,d=this.D;for(let e=0;e<d.length;e++)y(c,d[e]+a*2,new Uint8Array([b,b>>>8]))}m(){return 2}S(){}}
class Wa{constructor(a,b,c,d){this.j=a;this.X=b;this.D=c;this.Ra=d}g(a){const b=this.X;return this.j.o(this.D[0]+a*4)&b.ha}h(a,b){const c=this.j,d=this.D;for(let e=0;e<d.length;e++){const f=d[e]+a*4,g=c.o(f);c.u(f,g&4026531840|b)}}m(){const a=this.X,b=this.j.o(this.Ra);return b>=2&&b<=a.U?b:2}S(a){this.j.u(this.Ra,a)}}function Xa(a,b){const c=a.h.l;a.h.C=b;c.F=b>>>16;c.A=b&65535;b=a.h;T(a.m.j,b.P,b.l)}
class cb{constructor(a,b){this.m=a;this.X=a.g.ca;this.h=b;this.S=0;this.g=b.C;this.D=this.j=0}rewind(){this.S=0;this.g=this.h.C;this.D=this.j=0}skipClus(){const a=this.m,b=this.X;let c=Math.min(b,Math.max(0,this.h.l.B-this.j));c&&(this.g>=2&&this.g<=a.g.U?(this.S=this.g,this.g=a.h.g(this.g),this.j+=b):c=0);return c}readClus(a){const b=this.m,c=this.X;let d=Math.min(c,Math.max(0,this.h.l.B-this.j));if(d){const e=U(b,this.g);e?(a.set(b.j.g.read(e,d)),this.S=this.g,this.g=b.h.g(this.g),this.j+=c):d=
0}return d}writeClus(a){const b=this.m,c=this.X;var d=this.h;const e=Math.min(c,a.length);var f=U(b,this.g);if(!f){f=db(b);if(!f)return 0;d.C?b.h.h(this.S,f):Xa(this,f);this.g=f;f=U(b,f);d.l.B=this.j+e;d=this.h;T(this.m.j,d.P,d.l)}y(b.j,f,a.subarray(0,e));this.D=this.j+e;this.S=this.g;this.g=b.h.g(this.g);this.j+=c;return e}readData(){this.rewind();var a=this.h.l.B;const b=new Uint8Array(a);if(a){let c=b;for(;a=this.readClus(c);)c=c.subarray(a)}return b}writeData(a){this.rewind();var b;let c=a;for(;c.length&&
(b=this.writeClus(c));)c=c.subarray(b);eb(this.m,this.g);this.h.C===this.g&&Xa(this,0);this.h.l.B=this.D;b=this.h;T(this.m.j,b.P,b.l);return a.length-c.length}}function fb(a,b,c){let d=a.g;b=ja(b);const e=[];let f=0;for(;f<b.length&&d;)(d=c(d,b[f],f===b.length-1))&&e.push(d.R),f++;return d?new gb(a.h,(a.g.aa?"":a.j)+"/"+e.join("/"),d):null}function hb(a,b,c){return fb(a,b,(d,e,f)=>ib(a.h,d,e,c&&f))}
function jb(a,b){if(a.g.da)return 0;const c=ja(a.j);b=ja(b);var d=a.h.root,e=d;for(a=0;;){if(a===c.length)return 1;if(a===b.length)return 0;const f=c[a],g=b[a];d=d.findFirst(h=>Sa(f,h.g));e=e.findFirst(h=>Sa(g,h.g));if(!d||!e||d.g.Z!==e.g.Z)return 0;a++}}
class gb{constructor(a,b,c){this.h=a;this.j=b;this.g=c}getName(){return this.g.R}getShortName(){return this.g.pa}getAbsolutePath(){return this.j}isRegularFile(){return this.g.da}isDirectory(){return this.g.Ga}length(){const a=this.listFiles();if(a){let b=0;for(let c=0;c<a.length;c++)b+=a[c].length();return b}return this.g.l.B}getSizeOnDisk(){const a=this.h,b=this.g;let c=0;kb(a,b,d=>{c+=lb(a,d.C)});b.aa&&(c+=lb(a,mb(a,a.g.ka)));return c*a.g.ca}getLastModified(){const a=this.g.l;return va(a.N,a.O,
0)}setLastModified(a){const b=this.g.l;b.O=x(a);b.N=v(a);a=this.g;T(this.h.j,a.P,a.l)}getCreationTime(){const a=this.g.l;return va(a.J,a.K,a.L)}setCreationTime(a){const b=this.g.l;b.L=a?Math.floor((a.getSeconds()%2*1E3+Number(a.getMilliseconds()))/10):0;b.K=x(a);b.J=v(a);a=this.g;T(this.h.j,a.P,a.l)}getLastAccessTime(){var a=this.g.l.M;return a?new Date(1980+(a>>9&127),Math.max(0,(a>>5&15)-1),Math.max(1,a&31)):null}setLastAccessTime(a){this.g.l.M=v(a);a=this.g;T(this.h.j,a.P,a.l)}findFirst(a){let b=
null;return nb(this.h,this.g,c=>a(b=new gb(this.h,(this.g.aa?"":this.j)+"/"+c.R,c)))?b:null}findAll(a){if(!this.g.Ga)return null;const b=[];this.findFirst(c=>{a(c)&&b.push(c);return!1});return b}listFiles(){return this.findAll(()=>!0)}open(){return this.g.da?new cb(this.h,this.g):null}delete(){var a=this.g;const b=this.h;kb(b,a,c=>{eb(b,c.C);ob(this.h,c)});if(a.aa&&(a=mb(b,b.g.ka))){const c=this.h.getLabel();eb(b,a);pb(b,a);b.h.h(a,this.h.g.ha);this.h.setLabel(c)}}getFile(a){return fb(this,a,(b,c)=>
nb(this.h,b,d=>Sa(c,d)))}makeFile(a){return hb(this,a,!0)}makeDir(a){return hb(this,a,!1)}moveTo(a){const b=this.g;if(b.aa)return null;a.startsWith("/")||a.startsWith("\\")||(a=this.j.substring(0,this.j.length-b.R.length)+a);if(jb(this,a))return null;var c=this.h.root.getFile(a);if(c&&c.g.da)return null;var d=!b.oa;a=c?hb(c,b.R,d):hb(this.h.root,a,d);if(!a)return null;c=a.g;if(b.Z===c.Z)return a;eb(this.h,c.C);d=b.l;const e=c.l;c.C=b.C;e.L=d.L;e.K=d.K;e.J=d.J;e.M=d.M;e.F=d.F;e.O=d.O;e.N=d.N;e.A=d.A;
e.B=d.B;T(this.h.j,c.P,e);ob(this.h,b);return a}}function U(a,b){return b>=2&&b<=a.g.U?a.bs.v.I*(a.g.ia+(b-2)*a.bs.v.$):0}function db(a){const b=a.h.m();let c=b;for(;c<=a.g.U&&a.h.g(c)!==0;)c++;if(c>a.g.U){for(c=2;c<b&&a.h.g(c)!==0;)c++;if(c>=b)return 0}a.h.S(c+1);a.h.h(c,a.g.ha);return c}function eb(a,b){for(;b>=2&&b<=a.g.U;){const c=a.h.g(b);a.h.h(b,0);b=c}}function kb(a,b,c){let d=qb(a,b);for(;d;){const e=rb(a,d);d.Ha&&kb(a,d,c);d=e}b.Ha&&c(b)}
function lb(a,b){let c=0;for(;b>=2&&b<=a.g.U;)c++,b=a.h.g(b);return c}function mb(a,b){b=Math.floor(b/a.bs.v.I)-a.g.ia;return b<0?0:2+Math.floor(b/a.bs.v.$)}function nb(a,b,c){return sb(a,b,d=>d.Ha&&c(d))}function ob(a,b){const c=a.j;let d=b.Z;for(let e=0;e<b.Fa&&d>0;e++)y(c,d,new Uint8Array([229])),d=tb(a,d)??ub(a,d)}function pb(a,b){b=U(a,b);y(a.j,b,(new Uint8Array(a.g.ca)).fill(0));return b}
function ib(a,b,c,d){if(!b.Ga)return null;c=ia(c);if(!c||c.length>255)return null;const e=new Set,f=c.toUpperCase();var g=nb(a,b,m=>{var l=m.pa.toUpperCase();e.add(l);l=f===l;l||(l=m.R.toUpperCase(),e.add(l),l=f===l);return l});if(g)return g.da&&d||g.oa&&!d?g:null;g=a.m;let h=c,k=qa(h,g);k||c===(h=h.toUpperCase())||(k=qa(h,g));k||=qa(h=ua(c,g,e),g);return k?vb(a,b,d,h,c,k):null}function wb(a){return sb(a,Oa,b=>b.Xa)}
function xb(a,b,c){let d=0,e=0;var f=a.j,g=a.g.ka;b.oa&&(g=U(a,b.C));for(b=g;g;){b=g;const h=f.g.read(g,1)[0];if(h===0||h===229){if(e===0&&(d=g),e++,e>=c)return d}else e=0;g=tb(a,g)??ub(a,g)}f=mb(a,b);if(!f)return 0;g=Math.ceil((c-e)*32/a.g.ca);c=db(a);if(!c)return 0;pb(a,c);a.h.h(f,c);if(g===2){f=db(a);if(!f)return 0;pb(a,f);a.h.h(c,f)}return e>0?d:U(a,c)}function sb(a,b,c){for(b=qb(a,b);b&&!c(b);)b=rb(a,b);return b}function qb(a,b){return b.aa?yb(a,a.g.ka):b.oa&&(b=U(a,b.C))?yb(a,b):null}
function rb(a,b){b=b.P;return b>0&&(b=tb(a,b)??ub(a,b))?(a=yb(a,b),a?.Ya?null:a):null}
function vb(a,b,c,d,e,f){const g=[];if(e!==d){a:{for(var h=0,k=0;h<e.length;){var m=e.charCodeAt(h++);var l=m;if(!(l>255||l>96&&l<123||ha(l)||ea.includes(l))){l=null;break a}u[k++]=m;m>>=8;u[k++]=m}if(k%26!==0)for(u[k++]=0,u[k++]=0;k%26!==0;)u[k++]=255,u[k++]=255;l=u.subarray(0,k)}if(!l)return null;h=fa(f);for(k=0;k<l.length;)g.push({W:1+g.length,va:l.subarray(k,k+=10),H:15,Qa:0,ra:h,wa:l.subarray(k,k+=12),A:0,xa:l.subarray(k,k+=4)});l=g[g.length-1];l.W|=64}l=g.length+1;h=xb(a,b,l);if(!h)return null;
f=Ma(f,new Date);if(!c){m=db(a);if(!m)return null;k=pb(a,m);f.A=m&65535;f.F=m>>>16;f.H=16;m=new Uint8Array(64);var n=new O(m);Ja(n,0,La(Pa,f));Ja(n,32,La(Qa,b.l));y(a.j,k,m)}b=h;k=g.length;for(n=0;n<k;n++){const p=new Uint8Array(32);m=g[k-1-n];I(L(I(K(K(K(I(K(z(new O(p),0),m.W),m.va),m.H),m.Qa),m.ra),m.wa),m.A),m.xa);y(a.j,b,p);b=tb(a,b)??ub(a,b)}T(a.j,b,f);a=S(c?4:3,d,b,f);a.R=e;a.Z=h;a.Fa=l;return a}
function tb(a,b){b+=32;var c=a.bs.v.I;const d=a.bs.v.$;a=a.g.ia;if(b%c!==0)return b;c=b/c;return c<a?b:c===a?0:(c-a)%d!==0?b:null}function ub(a,b){b=a.h.g(1+((b+32)/a.bs.v.I-a.g.ia)/a.bs.v.$);return U(a,b)}
function yb(a,b){const c=a.j,d=[];let e=b,f=0;for(;e;){var g=c.g.read(e,32),h=new O(g);g=g[0];var k;if(k=g!==0&&g!==229)k=G(A(h,11))===15,A(h,-12);if(k)h={W:G(h),va:D(h,10),H:G(h),Qa:G(h),ra:G(h),wa:D(h,12),A:H(h),xa:D(h,4)},h.W&64?(d.length&&(f+=d.length),d.length=0,d.push(h)):d.length?(d[d.length-1].W&63)===(h.W&63)+1?d.push(h):(f+=d.length,d.length=0):f++;else{if(h=Ra(h,g,e,a.m))return Ta(h,d,b),h;f++}e=tb(a,e)??ub(a,e)}return null}
class zb{constructor(a,b,c,d,e){this.j=a;this.bs=b;this.m=e;this.g=c;this.root=new gb(this,"/",Oa);this.h=d}getName(){return"FAT"+this.g.T}getLabel(){return wb(this)?.pa??this.m.decode(this.bs.Wa).trimEnd()}setLabel(a){var b=wb(this);if(a){var c=this.m;const d=(new Uint8Array(11)).fill(32);a&&d.set(c.encode(a.substring(0,11)).subarray(0,11));a=Ka(d);(b=b?.P??xb(this,Oa,1))&&T(this.j,b,a)}else b&&ob(this,b)}getOEMName(){return this.m.decode(this.bs.Ua).trimEnd()}getId(){return this.bs.Va}getSizeOfCluster(){return this.g.ca}getCountOfClusters(){return this.g.fa}getFreeClusters(){let a=
0;for(let b=2;b<=this.g.U;b++)this.h.g(b)===0&&a++;return a}getRoot(){return this.root}};class Ab{constructor(a,b){this.g=a;this.h=b}capacity(){return this.g.g.capacity}getFileSystem(){a:{var a=this.g,b=this.h;if(a.g.capacity<512)var c=null;else{try{var d=a.g.read(0,512),e=new O(d);P(e.g.length>=512);z(e,0);const B=D(e,3),M=D(e,8),q={I:H(e),$:G(e),Y:H(e),V:G(e),Ca:H(e),Oa:H(e),ua:G(e),ga:H(e),Ea:H(e),ya:H(e),eb:e.o(),Pa:e.o(),Ka:-1,Sa:-1,Ta:-1,Aa:-1,ta:-1,Ia:-1};P([512,1024,2048,4096].includes(q.I));P([1,2,4,8,16,32,64,128].includes(q.$));P(q.Y>0);P(q.V>0);P((q.Ca<<5)%q.I===0);P(q.Ca===
0||q.ga>0);P(q.Oa>0||q.Pa>65535);q.ga===0&&(q.Ka=e.o(),q.Sa=H(e),q.Ta=H(e),q.Aa=e.o(),q.ta=H(e),q.Ia=H(e),A(e,12),P(q.Aa>=2),P(q.Ia>=0),P(q.ta>0));var f={hb:B,Ua:M,v:q,bb:G(e),fb:G(e),$a:G(e),Va:e.o(),Wa:D(e,11),cb:D(e,8),Za:D(e,510-e.i)};const r=f.v;var g=r.ga===0;const C=r.I,E=r.$;var h=r.Y;const w=r.V,J=r.Ca;var k=r.Oa;const Q=r.ga;var m=r.Pa;const ka=r.Ka,R=r.Aa,V=g?0:Math.ceil((J<<5)/C);e=g?ka:Q;k=k?k:m;m=k-(h+e*w+V);const W=Math.floor(m/E);d=g?32:W<4087?12:16;h+=e*w;var l={ba:e,ma:k,ab:m,ca:C*
E,fa:W,T:d,U:W+1,ia:h+V,ka:C*(h+(g?(R-2)*E:0)),ha:(1<<Math.min(28,d))-1};const N=Array(f.v.V);for(g=0;g<f.v.V;g++)N[g]=(f.v.Y+g*l.ba)*f.v.I;let X;if(l.T===12)X=new Ua(a,l,N);else if(l.T===16)X=new Va(a,N);else if(l.T===32){const la=f.v.I*f.v.ta;g=la+492;var n=a.g.read(la,512);var p=new O(n);const ma=p.o(),Y=A(p,480).o();p.o();p.o();const F=A(p,12).o();P(ma===1096897106&&Y===1631679090&&F===2857697280);X=new Wa(a,l,N,g)}else throw new ca;c=new zb(a,f,l,X,b);break a}catch(B){if(B.name==="ValidationError"){c=
null;break a}throw B;}c=void 0}}return c}getPartitions(){if(this.g.g.capacity<512)return[];var a=this.g.g.read(0,512);a=new O(a);try{return Ga(a).map(({ea:b,la:c,za:d,na:e})=>({active:b===128,type:c,relativeSectors:d,totalSectors:e}))}catch(b){if(b.name==="ValidationError")return[];throw b;}}write(a){const b=this.g,c=a.bytsPerSec,d=a.zeroRegions;a=a.dataSectors;for(const {i:e,count:f}of d)y(b,c*e,(new Uint8Array(c*f)).fill(0));for(const {i:e,data:f}of a)y(b,c*e,f)}};const Bb=a=>({capacity:a.length,read:(b,c)=>a.slice(b,b+c),write:(b,c)=>a.set(c,b)}),Cb=(a,b)=>{const c=a.relativeSectors*512,d=b.read,e=b.write;a={capacity:a.totalSectors*512,read:(f,g)=>d(c+f,g)};e&&(a.write=(f,g)=>e(c+f,g));return a};const Db=t("LIBMNTJS"),Eb=t("Non-system disk or disk error\r\nreplace and strike any key when ready\r\n"),Fb=t("NO NAME "),Gb=new Map([[160,[254,40,1,8,0,1,4]],[180,[252,40,1,9,0,2,4]],[320,[255,40,2,8,1,1,7]],[360,[253,40,2,9,1,2,7]],[720,[249,80,2,9,1,3,7]],[1200,[249,80,2,15,0,7,14]],[1440,[240,80,2,18,0,9,14]],[2880,[240,80,2,36,1,9,15]]]),Z=(a,b,c,d)=>Number.isInteger(d)&&(d=Number(d),d>=a&&d<=b)?d:c,Hb=(a,b)=>{a+=2;let c=12;b===32?c-=5:b===16?c-=4:(a*=3,c-=2);return(a>>>c)+((a&(1<<c)-1)===
0?0:1)},Ib=(a,b)=>{var c=Number.MAX_SAFE_INTEGER;c=a=Z(0,c,c,a);var d=b?.type,e=32;d==="FAT12"?e=12:d==="FAT16"?e=16:d==="FAT32"?e=32:c<=4194304?e=12:c<536870912&&(e=16);c=e;d=Math.min(4294967295,Math.floor(a/512));a=b?.numFATs===1?1:2;e=0;let f=32;c!==32&&(e=Z(1,512,512,b?.rootEntCnt),e=(e>>4)+((e&15)===0?0:1),f=1);var g=1,h=268435438;c===12?(g=0,h=4078):c===16&&(g=4087,h=65518);var k=d-f-e;if(k<a)return null;var m=Z(0,16,16,b?.compat);g+=m;h-=m;a:{m=h;b=b?.secPerClus;if(Number.isInteger(b)&&(b=
[1,2,4,8,16,32,64,128].indexOf(Number(b)),b>=0))break a;if(c===32)b=d<=532480?0:3;else{b=Hb(m,c);b=k-a*b;for(var l=0;l<6&&m<b;)l++,m*=2;b=l}}l=1<<b;m=Math.ceil((k+(1<<b+1))/((1<<b+9+3)/c+a));k=Math.floor((k-m*a)/l);if(k<g)return null;k>h&&(k=h);m=Hb(k,c);var n=f+m*a+e;h=d-(n+k*l);n%=l;n=n===0?0:l-n;let p=0;if(n>h){k--;h+=l;if(k<g)return null;g=Hb(k,c);p=(m-g)*a;m=g}d-=h-n;return{T:c,qa:9,Da:b,Y:f+(n+p),V:a,Ba:e,ba:m,ma:d,fa:k,ua:248,ya:255,Ea:63}};ns.fdisk=a=>{const b=new Uint8Array(512);Ha(new O(b),a.map(({active:c,type:d,relativeSectors:e,totalSectors:f})=>{const g={sa:0,La:0,Ma:0};return{ea:c?128:0,Na:g,la:d,Ja:g,za:e,na:f}}));return{bytsPerSec:512,zeroRegions:[],dataSectors:[{i:0,data:b}]}};
ns.mkfsvfat=(a,b)=>{var c=Gb.get(a/1024);if(c){const [Jb,Kb,Ya,Za,$a,ab,bb]=c;a=Kb*Ya*Za;a={T:12,qa:9,Da:$a,Y:1,V:2,Ba:bb,ba:ab,ma:a,fa:a-(1+ab*2+bb)>>$a,ua:Jb,ya:Ya,Ea:Za}}else a=Ib(a,b);var d=a;if(!d)return null;a=d.T;c=d.qa;const e=d.Da,f=d.Y,g=d.V,h=d.Ba,k=d.ba,m=d.ma,l=d.fa;var n=d.T,p=d.qa,B=d.Da,M=d.Y,q=d.V,r=d.ba,C=d.ma,E=n===32,w=E?420:448;const J=1<<p;p=d.Ba<<p-5;var Q=new Uint8Array(3),ka=(new Uint8Array(8)).fill(32),R=new Date;B=1<<B;var V=C>65535?0:C,W=Z(0,255,d.ua,b?.media),N=E?0:r,
X=Z(0,65535,d.Ea,b?.secPerTrk);d=Z(0,65535,d.ya,b?.numHeads);var la=Z(0,4294967295,0,b?.hiddSec),ma=C>65535?C:0;C=Z(0,4294967295,(v(R)<<16|x(R))>>>0,b?.id);R=(new Uint8Array(8)).fill(32);var Y=new Uint8Array(w);ka.set((b?.oemName??Db).subarray(0,8));R.set(t("FAT"+n));if((n=b?.bs)&&n.length>=512)Q.set(n.subarray(0,3)),Y.set(n.subarray(510-w,510));else{n=wa;var F=ya;w=510-w;E&&(n=xa,F=za);Q.set(n);Y.set(F);Y.set((b?.message??Eb).subarray(0,509-w-F.length),F.length)}F=(n=a===32)?r:N;w=M+F*q+(n?0:Math.ceil((p<<
5)/J));const Lb=Math.floor(((V?V:ma)-w)/B);E=[];E.push({i:0,count:w+(n?B:0)});w=[];const Ca=new Uint8Array(J);var na=new O(Ca);z(na,0);const Mb=N===0;L(L(L(K(L(L(K(L(K(L(I(I(na,Q),ka),J),B),M),q),p),V),W),N),X),d).u(la).u(ma);Mb&&A(L(L(L(L(na.u(r),0),0).u(2),1),6),12);L(I(I(I(K(K(K(na,0),0),41).u(C),Fb),R),Y),43605);w.push({i:0,data:Ca});r=new Uint8Array(J);r[0]=W;for(p=0;p<a/4-1;p++)r[p+1]=255;n&&(r[8]=255,r[9]=255,r[10]=255,r[11]=15,p=new Uint8Array(J),Q=Lb-1,Da(Da((new O(p)).u(1096897106),480).u(1631679090).u(Q).u(2),
12).u(2857697280),w.push({i:1,data:p}),w.push({i:6,data:Ca}),w.push({i:7,data:p}));for(p=0;p<q;p++)w.push({i:M+p*F,data:r});b?.label&&(r=new Uint8Array(J),M=M+F*q+(n?0*B:0),q=(new Uint8Array(11)).fill(32),q.set(b.label.subarray(0,11)),Ja(new O(r),0,Ka(q)),w.push({i:M,data:r}));return{sectors:{bytsPerSec:J,zeroRegions:E,dataSectors:w},id:C,type:"FAT"+a,totSec:m,rsvdSecCnt:f,numFATs:g,fatSz:k,rootDirSectors:h,countOfClusters:l,secPerClus:1<<e,bytsPerSec:1<<c}};
ns.mount=(a,b)=>{a instanceof Uint8Array&&(a=Bb(a));const c=b?.partition;c&&(a=Cb(c,a));return new Ab(new Ba(a),b?.codepage??ba)};
export const { fdisk, mkfsvfat, mount } = ns;