@volter/browser-substrate 0.1.114 → 0.1.116
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/package-packs.js +4 -4
- package/dist/cli/package-packs.js.map +1 -1
- package/dist/shell/assets/browser-opfs-filesystem-worker-CivfnvV7.js +3 -0
- package/dist/shell/assets/{browser-sandbox-bridge-CmMlTDpO.js → browser-sandbox-bridge-BOyO6Vq0.js} +2 -2
- package/dist/shell/assets/filesystem-host-B-fDKRNE.js +3 -0
- package/dist/shell/assets/{filesystem-host-D98WfBoD.js → filesystem-host-Cngy2ePX.js} +1 -1
- package/dist/shell/assets/filesystem-worker-BQAYsjDk.js +5 -0
- package/dist/shell/assets/{fork-worker-hBikLg_q.js → fork-worker-BOu5dHuR.js} +1 -1
- package/dist/shell/assets/{node-execution-worker-961b76ab350a1c3c.js → node-execution-worker-e4ab9bf7f09262f8.js} +7 -7
- package/dist/shell/assets/{runtime-worker-DiqY2fQ4.js → runtime-worker-DH_89R1c.js} +19 -8
- package/dist/shell/assets/{sandbox-qgjYY5Gr.js → sandbox-C41DorhH.js} +1 -1
- package/dist/shell/assets/{shell-C0qfPTpQ.js → shell-CdIq-SFl.js} +4 -4
- package/dist/shell/assets/worker-BCIFrV5h.js +816 -0
- package/dist/shell/assets/worker-program-worker-BEQYJYct.js +27 -0
- package/dist/shell/bundler-worker.js +5 -5
- package/dist/shell/index.html +2 -2
- package/dist/shell/node-execution-worker.js +25 -9
- package/dist/shell/python-execution-worker.js +24 -8
- package/dist/shell/python-runtime-snapshot.bin +0 -0
- package/dist/shell/python-runtime-snapshot.json +1 -1
- package/dist/shell/rolldown/factory.mjs +20 -9
- package/dist/shell/sandbox.html +2 -2
- package/package.json +1 -1
- package/dist/shell/assets/browser-opfs-filesystem-worker-TLQsaODy.js +0 -3
- package/dist/shell/assets/filesystem-host-EfkgP9Jh.js +0 -3
- package/dist/shell/assets/filesystem-worker-51BLqPs5.js +0 -5
- package/dist/shell/assets/worker-BZ-Txq9L.js +0 -816
- package/dist/shell/assets/worker-program-worker-B_u8gbzh.js +0 -27
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const dn=["file","directory","symlink"],to=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u,ro=new TextEncoder,no=new TextDecoder;function Yi(i){let e=2166136261;for(let t=0;t<i.length;t+=1)e^=i.charCodeAt(t),e=Math.imul(e,16777619);return e>>>0}function Gn(i,e){const t=[...i.keys()];for(const B of t)if(to.test(B))throw new Error("A path in the store is not well-formed UTF-16.");const r=new Map;for(let B=0;B<t.length;B+=1)r.set(t[B],B);for(const B of e.keys())r.has(B)||(r.set(B,t.length),t.push(B));const n=t.length,s=new Map,o=new Uint32Array(n);let a=0;for(let B=0;B<n;B+=1){const F=t[B];let q=!0;for(let Z=0;Z<F.length;Z+=1)if(F.charCodeAt(Z)>=128){q=!1;break}q||s.set(B,ro.encode(F)),o[B]=q?F.length:s.get(B).length,a+=o[B]}let f=0;for(const B of e.values())f+=B.size;let y=1;for(;y<n*2;)y<<=1;const g=24,p=fn(g+n*6*4,8),E=p+n*3*8,I=E+y*4,M=I+f*4,k=new SharedArrayBuffer(fn(M+a,8));new Uint32Array(k,0,6).set([2019846480,n,y,f,a,i.size]);const R=new Uint32Array(k,g,n*6),x=new Float64Array(k,p,n*3),U=new Uint32Array(k,E,y),H=new Uint32Array(k,I,f),oe=new Uint8Array(k,M,a);let he=0,_e=0;for(let B=0;B<n;B+=1){const F=t[B],q=B*6,Z=s.get(B);if(Z)oe.set(Z,he);else for(let Q=0;Q<F.length;Q+=1)oe[he+Q]=F.charCodeAt(Q);const Ye=o[B];R[q+0]=he,R[q+1]=Ye,he+=Ye;let tt=Z?0:32;const _=i.get(F);if(_){tt|=1|dn.indexOf(_.type)<<3,_.pack&&(tt|=4),R[q+3]=_.mode;const Q=B*3;x[Q+0]=_.mtimeMs,x[Q+1]=_.offset,x[Q+2]=_.length}const ae=e.get(F);if(ae){tt|=2,R[q+4]=_e,R[q+5]=ae.size;for(const Q of ae){const rt=r.get(`${F}/${Q}`);if(rt===void 0)throw new Error(`The store's children name ${F}/${Q}, which its index does not hold.`);H[_e++]=rt}}R[q+2]=tt;let be=Yi(F)&y-1;for(;U[be]!==0;)be=be+1&y-1;U[be]=B+1}if(_e!==f)throw new Error("The shared index's children did not add up.");return k}function fn(i,e){return Math.ceil(i/e)*e}class Be{buffer;count;entryCount;records;numbers;table;childList;strings;mask;constructor(e){const t=new Uint32Array(e,0,6);if(t[0]!==2019846480)throw new Error("Not a shared store index.");const[,r,n,s,o,a]=t;this.buffer=e,this.count=r,this.entryCount=a;const f=24,y=fn(f+r*6*4,8),g=y+r*3*8,p=g+n*4,E=p+s*4;this.records=new Uint32Array(e,f,r*6),this.numbers=new Float64Array(e,y,r*3),this.table=new Uint32Array(e,g,n),this.childList=new Uint32Array(e,p,s),this.strings=new Uint8Array(e,E,o),this.mask=n-1}find(e){let t=Yi(e)&this.mask;for(;;){const r=this.table[t];if(r===0)return-1;if(this.pathIs(r-1,e))return r-1;t=t+1&this.mask}}entry(e){const t=e*6,r=this.records[t+2];if(!(r&1))return;const n=e*3,s={type:dn[r>>>3&3],mode:this.records[t+3],mtimeMs:this.numbers[n+0],offset:this.numbers[n+1],length:this.numbers[n+2]};return r&4&&(s.pack="packages"),s}typeAt(e){const t=this.records[e*6+2];return t&1?dn[t>>>3&3]:void 0}hasEntry(e){return(this.records[e*6+2]&1)!==0}childNames(e){const t=e*6;if(!(this.records[t+2]&2))return;const r=this.records[t+4],n=this.records[t+1]+1,s=[];for(let o=0;o<this.records[t+5];o+=1){const a=this.childList[r+o]*6;s.push(this.decode(this.records[a+0]+n,this.records[a+1]-n,(this.records[a+2]&32)!==0))}return s}path(e){const t=e*6;return this.decode(this.records[t+0],this.records[t+1],(this.records[t+2]&32)!==0)}decode(e,t,r){if(!r)return no.decode(this.strings.slice(e,e+t));let n="";for(let s=e,o=e+t;s<o;s+=4096)n+=String.fromCharCode.apply(null,this.strings.subarray(s,Math.min(o,s+4096)));return n}pathIs(e,t){const r=e*6,n=this.records[r+0],s=this.records[r+1];if(!(this.records[r+2]&32))return this.path(e)===t;if(s!==t.length)return!1;for(let o=0;o<s;o+=1)if(this.strings[n+o]!==t.charCodeAt(o))return!1;return!0}}const ye=Symbol("deleted");function Wi(i,e){return i===e||!!i&&!!e&&i.type===e.type&&i.offset===e.offset&&i.length===e.length&&i.pack===e.pack&&i.mode===e.mode&&i.mtimeMs===e.mtimeMs&&i.capacity===e.capacity}class Qe{base;overlay=new Map;delta=0;constructor(e){this.base=e}get[Symbol.toStringTag](){return"Map"}get size(){return this.base.entryCount+this.delta}get(e){const t=this.overlay.get(e);if(t!==void 0)return t===ye?void 0:t;const r=this.base.find(e);return r<0?void 0:this.base.entry(r)}typeOf(e){const t=this.overlay.get(e);if(t!==void 0)return t===ye?void 0:t.type;const r=this.base.find(e);return r<0?void 0:this.base.typeAt(r)}has(e){const t=this.overlay.get(e);if(t!==void 0)return t!==ye;const r=this.base.find(e);return r>=0&&this.base.hasEntry(r)}set(e,t){this.has(e)||(this.delta+=1);const r=this.base.find(e);return r>=0&&Wi(this.base.entry(r),t)?this.overlay.delete(e):this.overlay.set(e,t),this}delete(e){if(!this.has(e))return!1;const t=this.base.find(e);return t>=0&&this.base.hasEntry(t)?this.overlay.set(e,ye):this.overlay.delete(e),this.delta-=1,!0}clear(){throw new Error("A reader's index is not cleared; it is replaced.")}*entries(){for(const[e,t]of this.overlay)t!==ye&&(yield[e,t]);for(let e=0;e<this.base.count;e+=1){if(!this.base.hasEntry(e))continue;const t=this.base.path(e);this.overlay.has(t)||(yield[t,this.base.entry(e)])}}*keys(){for(const[e]of this.entries())yield e}*values(){for(const[,e]of this.entries())yield e}[Symbol.iterator](){return this.entries()}forEach(e,t){for(const[r,n]of this.entries())e.call(t,n,r,this)}*changed(){for(const[e,t]of this.overlay)t!==ye&&(yield[e,t])}*changes(){for(const[e,t]of this.overlay)yield[e,t===ye?null:t]}get overlaid(){return this.overlay.size}boundedChanges(){if(this.overlay.size>65536)return;const e=[];let t=0;for(const[r,n]of this.changes()){if(t+=r.length*2+128,t>8*1024*1024)return;e.push([r,n])}return e}}class Rt{base;overlay=new Map;constructor(e){this.base=e}get(e){const t=this.overlay.get(e);if(t!==void 0)return t===ye?void 0:t;const r=this.base.find(e),n=r<0?void 0:this.base.childNames(r);return n?new Set(n):void 0}mutable(e){const t=this.overlay.get(e);if(t!==void 0&&t!==ye)return t;const r=new Set(t===ye?[]:this.get(e)??[]);return this.overlay.set(e,r),r}delete(e){this.overlay.set(e,ye)}}function Kn(i){const e=i.lastIndexOf("/");return e<=0?"/":i.slice(0,e)}function ft(i){return i==="/"?"":i}const io="/opt/tree";function so(i){return`volter-tree-store-use:${i}`}function oo(i,e=globalThis.navigator?.locks){if(!e)return Promise.resolve();let t=Jn.get(e);t||Jn.set(e,t=new Map);let r=t.get(i);if(!r){r=new Promise((s,o)=>{e.request(so(i),{mode:"shared"},()=>(s(),new Promise(()=>{}))).catch(o)});const n=t;r.catch(()=>n.delete(i)),t.set(i,r)}return r}const Jn=new WeakMap;function ao(i,e){const t=new Be(i.index),r=new Qe(t),n=new Rt(t),s={childrenOf:a=>[...n.get(ft(a))??[]].sort(),descendants(a){const f=[],y=g=>{const p=r.get(g);p&&f.push([g,p]);for(const E of n.get(ft(g))??[])y(`${ft(g)}/${E}`)};return y(a),f}};if(i.store!==void 0){const a=e?.get(i.store),f=i.roots?.[0]??"/",y=i.storeRoot??f,g=E=>y+E.slice(f==="/"?0:f.length),p=E=>{const I=r.get(E);if(!I||I.type==="directory")throw new Error(`The shared layer holds no file at ${E}.`);if(!a)throw new Error(`${E} is in the store ${i.store}, which this realm did not open.`);return a};return{entries:r,read:E=>p(E).read(g(E)),readRange:(E,I,M)=>p(E).readRange(g(E),I,M),readsByRange:()=>!0,...s}}if(!i.bytes)throw new Error("A shared layer holds neither its bytes nor a store of them.");const o=new Uint8Array(i.bytes);return{entries:r,read(a){const f=r.get(a);if(!f||f.type==="directory")throw new Error(`The shared layer holds no file at ${a}.`);return o.slice(f.offset,f.offset+f.length)},view(a){const f=r.get(a);if(!f||f.type==="directory")throw new Error(`The shared layer holds no file at ${a}.`);return o.subarray(f.offset,f.offset+f.length)},readRange(a,f,y){const g=r.get(a);if(!g||g.type==="directory")throw new Error(`The shared layer holds no file at ${a}.`);const p=Math.min(Math.max(0,f),g.length);return o.slice(g.offset+p,g.offset+Math.min(g.length,p+Math.max(0,y)))},childrenOf:a=>[...n.get(ft(a))??[]].sort(),descendants(a){const f=[],y=g=>{const p=r.get(g);p&&f.push([g,p]);for(const E of n.get(ft(g))??[])y(`${ft(g)}/${E}`)};return y(a),f}}}function co(i){if(i.length===1)return i[0];const e=(o,a)=>{if(o===0)return!1;for(let f=Kn(a);;f=Kn(f)){for(let y=0;y<o;y+=1){const g=i[y].entries.get(f);if(g&&g.type!=="directory")return!0}if(f==="/")return!1}},t=o=>{for(let a=0;a<i.length;a+=1)if(i[a].entries.has(o)&&!e(a,o))return a;return-1},r=o=>i[t(o)],n={get:o=>r(o)?.entries.get(o),has:o=>t(o)>=0,get size(){let o=0;for(const a of n)o+=1;return o},*[Symbol.iterator](){const o=new Set;for(let a=0;a<i.length;a+=1)for(const[f,y]of i[a].entries)o.has(f)||t(f)!==a||(o.add(f),yield[f,y])},*entries(){yield*n[Symbol.iterator]()},*keys(){for(const[o]of n)yield o},*values(){for(const[,o]of n)yield o},forEach(o){for(const[a,f]of n)o(f,a,n)}},s=o=>{const a=r(o)?.entries.get(o);return a&&a.type!=="directory"?[]:i.filter((f,y)=>{const g=f.entries.get(o);return(!g||g.type==="directory")&&!e(y,o)})};return{entries:n,read:o=>{const a=r(o);if(!a)throw new Error(`No lower tree holds ${o}.`);return a.read(o)},view:o=>{const a=r(o);if(!a)throw new Error(`No lower tree holds ${o}.`);return a.view?a.view(o):a.read(o)},readRange:(o,a,f)=>{const y=r(o);if(!y)throw new Error(`No lower tree holds ${o}.`);if(y.readRange)return y.readRange(o,a,f);const g=y.read(o),p=Math.min(Math.max(0,a),g.byteLength);return g.slice(p,Math.min(g.byteLength,p+Math.max(0,f)))},readsByRange:o=>r(o)?.readsByRange?.(o)??!1,childrenOf:o=>[...new Set(s(o).flatMap(a=>a.childrenOf(o)))].sort(),descendants:o=>{const a=[],f=new Set;for(const g of i)for(const[p]of g.descendants(o)){if(f.has(p))continue;f.add(p);const E=n.get(p);E&&a.push([p,E])}const y=a.findIndex(([g])=>g===o);return y>0&&a.unshift(...a.splice(y,1)),a}}}function Xn(i,e,t){const r=[...i?[i]:[],...(e??[]).map(n=>ao(n,t))];return r.length===0?void 0:co(r)}const fo="supercode-browser-filesystems",Ce="packages",ho="state.json",qn="/image-range-worker.js",Zn="image-ranges.json",lo=2;function zr(i){const e=i;if(!e||e.version!==1||!Number.isSafeInteger(e.bytes)||e.bytes<0||!Array.isArray(e.parts)||e.image!==void 0&&(typeof e.image!="string"||!/^[a-f0-9]{16,64}$/u.test(e.image))||e.parts.length>1e5)throw new Error("Invalid immutable image ranges.");let t=0;for(const r of e.parts){if(!r||r.offset!==t||!Number.isSafeInteger(r.raw)||r.raw<0||!Number.isSafeInteger(r.bytes)||r.bytes<0||r.bytes>1024*1024*1024||r.raw>1024*1024*1024||typeof r.sha256!="string"||!/^[a-f0-9]{64}$/u.test(r.sha256)||typeof r.url!="string"||!/^\/substrate\/[A-Za-z0-9._/-]+$/u.test(r.url)||r.url.split("/").some(n=>n==="."||n===".."))throw new Error("Invalid immutable image part.");if(t+=r.raw,!Number.isSafeInteger(t))throw new Error("Immutable image ranges exceed the offset limit.")}if(t!==e.bytes)throw new Error("Immutable image ranges do not cover their reservation.");return e}const Qn=new Map;class uo{ranges;directory;identity;receiptKey;client;worker;port;prefetchers=[];state;completed;firstRead;closed=!1;ready=!1;startup;cancelStartup;sharedCompletion;constructor(e,t,r,n,s,o){if(this.ranges=e,this.directory=t,this.identity=r,this.receiptKey=s,this.client=o,typeof Worker>"u"||typeof SharedArrayBuffer>"u")throw new Error("This browser cannot materialize an immutable image during a synchronous read.");if(this.state=new Int32Array(o?.state??new SharedArrayBuffer(e.parts.length*Int32Array.BYTES_PER_ELEMENT)),this.state.length!==e.parts.length)throw new Error("The image reader's line has the wrong range count.");const a=e.parts.length,f=n??new SharedArrayBuffer((2*a+1)*Int32Array.BYTES_PER_ELEMENT);if(f.byteLength!==a*Int32Array.BYTES_PER_ELEMENT&&f.byteLength!==(2*a+1)*Int32Array.BYTES_PER_ELEMENT)throw new Error("The image completion seed has the wrong range count.");this.completed=new Int32Array(f,0,a),this.firstRead=f.byteLength>a*Int32Array.BYTES_PER_ELEMENT?new Int32Array(f,a*Int32Array.BYTES_PER_ELEMENT,a+1):void 0,this.sharedCompletion=n!==void 0;for(const y of e.parts)Object.freeze(y);Object.freeze(e.parts),Object.freeze(e)}get completionBuffer(){return this.completed.buffer}get verifiedRanges(){return this.ranges}async initialize(){if(this.closed)throw new Error("This immutable image reader is closed.");if(this.ready)return;if(this.startup)return this.startup;let e=!1;for(let t=0;t<this.completed.length;t+=1)if(Atomics.load(this.completed,t)!==2){e=!0;break}if(!e){this.ready=!0,this.client?.port.close();return}if(this.client){const t=this.port=this.client.port;t.onmessage=r=>{r.data?.type!=="closing"||this.port!==t||(t.close(),this.port=void 0,this.closed||this.startMaterializer().catch(n=>console.warn("This process's image reader could not start its own materializer after its line closed.",n)))},t.start(),this.ready=!0;return}return this.startMaterializer()}startMaterializer(){const e=Date.now(),t=new Worker(qn,{type:"module",name:"immutable-image-materializer"}),r=this.ready;return r||(this.worker=t),t.addEventListener("error",()=>this.fail()),t.addEventListener("messageerror",()=>this.fail()),this.startup=new Promise((n,s)=>{const o=()=>{clearTimeout(g),t.removeEventListener("message",y),t.removeEventListener("error",a),t.removeEventListener("messageerror",a),this.cancelStartup=void 0},a=()=>f(new Error("The immutable image materializer could not initialize; reload to retry.")),f=p=>{o(),t.terminate(),r||(this.closed=!0,this.fail()),s(p)},y=p=>{if(p.data?.identity===this.identity){if(p.data.type==="init-error"){f(new Error(`The immutable image materializer could not initialize: ${String(p.data.error)}`));return}p.data.type==="ready"&&(console.log(`[boot-trace] ${JSON.stringify({event:"materializer-ready",at:Date.now(),ms:Date.now()-e})}`),o(),this.ready=!0,this.worker=t,n())}},g=setTimeout(()=>f(new Error("The immutable image materializer did not initialize within 10 seconds; reload to retry.")),1e4);this.cancelStartup=f,t.addEventListener("message",y),t.addEventListener("error",a),t.addEventListener("messageerror",a);try{t.postMessage({type:"init",ranges:this.ranges,directory:this.directory,identity:this.identity,state:this.state.buffer,completed:this.completed.buffer,sharedCompletion:this.sharedCompletion,...this.receiptKey?{receiptKey:this.receiptKey}:{}})}catch(p){f(p instanceof Error?p:new Error(String(p)))}}),this.startup}readDigests(){const e=this.firstRead;if(!e)return;const t=this.ranges.parts.length,r=[];for(let n=0;n<t;n+=1){const s=Atomics.load(e,n),o=this.ranges.parts[n];s>0&&o.raw>0&&r.push([s,o.sha256])}return r.sort((n,s)=>n[0]-s[0]).map(([,n])=>n)}completedDigests(){const e=[];for(let t=0;t<this.completed.length;t+=1){const r=this.ranges.parts[t];r.raw>0&&Atomics.load(this.completed,t)===2&&e.push(r.sha256)}return e}prefetch(e,t=[]){if(this.closed||!this.ready||!this.worker)return{queued:0,done:Promise.resolve()};const r=new Map;for(let a=0;a<this.ranges.parts.length;a+=1){const f=this.ranges.parts[a];if(f.raw===0)continue;const y=r.get(f.sha256);y?y.push(a):r.set(f.sha256,[a])}const n=[];for(const a of new Set(e))for(const f of r.get(a)??[])Atomics.load(this.completed,f)!==2&&n.push(f);const s=t.length>0&&n.length>0?Math.min(t.length,8):Math.min(lo,Math.ceil(n.length/32)),o=[];for(let a=0;a<s;a+=1){const f=n.filter((E,I)=>I%s===a),y=new Worker(qn,{type:"module",name:"immutable-image-prefetch"});this.prefetchers.push(y);let g;o.push(new Promise(E=>{g=E}));const p=()=>{y.terminate(),this.prefetchers=this.prefetchers.filter(E=>E!==y),g()};y.addEventListener("error",p),y.addEventListener("messageerror",p),y.addEventListener("message",E=>{E.data?.identity===this.identity&&(E.data.type==="ready"?y.postMessage(t.length>0?{type:"prefetch-stream",url:t[a]}:{type:"prefetch",indices:f}):(E.data.type==="prefetched"||E.data.type==="init-error")&&p())}),y.postMessage({type:"init",ranges:this.ranges,directory:this.directory,identity:this.identity,state:new SharedArrayBuffer(this.state.byteLength),completed:this.completed.buffer,sharedCompletion:!0,...this.receiptKey?{receiptKey:this.receiptKey}:{}})}return{queued:n.length,done:Promise.all(o).then(()=>{})}}ensure(e,t){if(this.closed)throw new Error("This immutable image reader is closed.");if(!this.ready)throw new Error("This immutable image reader has not finished asynchronous initialization.");if(t===0||e>=this.ranges.bytes)return;const r=Math.min(e+t,this.ranges.bytes);let n=0,s=this.ranges.parts.length;for(;n<s;){const o=n+s>>>1,a=this.ranges.parts[o];a.offset+a.raw<=e?n=o+1:s=o}for(let o=n;o<this.ranges.parts.length;o+=1){const a=this.ranges.parts[o];if(a.offset>=r)break;const f=this.firstRead;if(f&&Atomics.load(f,o)===0&&Atomics.compareExchange(f,o,0,Atomics.add(f,this.ranges.parts.length,1)+1),Atomics.load(this.completed,o)===2)continue;const y=this.worker??this.port;if(!y)throw new Error("This immutable image reader's line closed and its own materializer is still starting; retry the read.");y.postMessage({type:"read",index:o});const g=performance.now(),p=g+3e4;for(;Atomics.load(this.state,o)===0;){const M=p-performance.now();if(M<=0||Atomics.wait(this.state,o,0,M)==="timed-out")throw this.close(),new Error(`The image's immutable part ${a.url} did not arrive within 30 seconds; reload to retry.`)}const E=performance.now()-g,I=Qn.get(this.identity)??{ranges:0,ms:0};if(I.ranges+=1,I.ms+=E,Qn.set(this.identity,I),console.log(`[boot-trace] ${JSON.stringify({event:"image-blocked",at:Date.now(),reader:this.identity,index:o,range:a.sha256.slice(0,16),ms:Math.round(E)})}`),Atomics.load(this.state,o)!==2)throw new Error(`The image's immutable part ${a.url} could not be verified or stored; see the worker error and reload to retry.`)}}lineForReader(){const e=this.worker??this.port;if(this.closed||!this.ready||!e)return;const t=new MessageChannel,r=new SharedArrayBuffer(this.ranges.parts.length*Int32Array.BYTES_PER_ELEMENT);return e.postMessage({type:"client",port:t.port1,state:r},[t.port1]),{port:t.port2,state:r}}fail(){for(let e=0;e<this.state.length;e+=1)Atomics.compareExchange(this.state,e,0,-1)===0&&Atomics.notify(this.state,e)}close(){if(this.closed)return;if(this.closed=!0,this.cancelStartup){this.cancelStartup(new Error("This immutable image reader closed during initialization."));return}this.fail(),this.port?.close();const e=this.worker;e&&(e.postMessage({type:"closing"}),setTimeout(()=>e.terminate(),250));for(const t of this.prefetchers)t.dispatchEvent(new Event("error"));this.prefetchers=[]}}const Yr="/packages",sr="supercode-browser-packages",qe=new TextEncoder,ht=new TextDecoder("utf-8",{fatal:!0}),yo=fo,or="generations",ei="atomic-staging",lt=ho,we="index.json",Wr="index-log.bin",ut="pack.bin",ar=8,ti=64*1024*1024,fe=1024*1024*1024,mo=.95,Hi=["/workspace","/home","/opt"],Ze=0,ri=1,Hr=1e6,ni=8*1024*1024,ii=250,wo=64*1024*1024,po=256*1024*1024,si=4*1024*1024,yt=493,cr=420;function hn(i,e={}){const t=e.limits?.maxBytes,r=e.limits?.maxEntries??Hr;if(t!==void 0&&(!Number.isSafeInteger(t)||t<1)||!Number.isSafeInteger(r)||r<1||r>Hr)throw new Error("Invalid OPFS workspace limits.");let n=Number.MAX_SAFE_INTEGER,s,o,a=!1,f=!1,y=!1,g,p=0,E=0,I,M,k,b=new Map,R=new dr,x,U,H,oe,he,_e,B=0,F,q=0;const Z=new Map,Ye=256*1024,tt=32;let _=0,ae,be=-1/0,Q=0,rt=0,D=0,$=0,ee=0,We=0,He=0,le,Ut,Ee,nt=!1,bt,gn=Promise.resolve(),it=0,J=!1,st=!1,X,Ve=0,Ae=!1;function zt(){if(!(!X||Ae)){if(D>2147483647){Yt();return}Atomics.store(X,ri,D)}}function Yt(){!X||Ae||(Ae=!0,(Atomics.load(X,Ze)&1)===0&&Atomics.add(X,Ze,1))}function Et(){Ve+=1,Ve===1&&X&&!Ae&&Atomics.add(X,Ze,1)}function At(){Ve-=1,!(Ve>0||!X||Ae)&&(zt(),Ae||Atomics.add(X,Ze,1))}function Sn(){if(f)throw new Error("A store open for reading follows its owner's clock; it has none of its own.");return X||(X=new Int32Array(new SharedArrayBuffer(2*Int32Array.BYTES_PER_ELEMENT)),X[Ze]=Ve>0||Ae?1:0,zt()),X.buffer}let ce;const ys=8*1024*1024;let bn=!1;function ms(c){if(f||!X||!k||nt||Ve>0||Ae||J)return;const d=Atomics.load(X,Ze);if(d&1)return;if(c?.overlays&&b instanceof Qe){const u=b.boundedChanges();if(u)return Mr({generation:k,index:b.base.buffer,changes:u,packBytes:_,logBytes:D,epoch:d,liveBytes:$,linked:p,linkedBytes:E})}if(ce&&ce.generation===k&&ce.epoch===d&&D>=ce.logBytes&&D-ce.logBytes<=(c?.current?0:ys))return Mr(ce);let h;try{h=Gn(b,gs())}catch(u){console.warn(`[pack-store] no reader seed: ${u instanceof Error?u.message:String(u)}`);return}return ce={generation:k,index:h,packBytes:_,logBytes:D,epoch:d,liveBytes:$,linked:p,linkedBytes:E},ps(h),Mr(ce)}function Mr(c){const d=e.packages?.imageCompletionSeed();return d?{...c,packagesImage:d}:c}function ws(){if(!(!H||!U||!k||nt||Ve>0||J))return{generation:k,rangesDigest:U,completed:H.completionBuffer,...H.receiptKey?{metadata:{ranges:H.verifiedRanges,receiptKey:H.receiptKey}}:{}}}function ps(c){const d=[];if(b instanceof Qe)for(const[u,l]of b.changed())l.capacity!==void 0&&d.push([u,l]);else for(const[u,l]of b)l.capacity!==void 0&&d.push([u,l]);const h=new Be(c);b=new Qe(h),R=new Rt(h);for(const[u,l]of d)b.set(u,l)}function gs(){if(R instanceof dr)return R.map;const c=new Map;for(const d of b.keys()){const h=Je(d);if(h===d)continue;let u=c.get(h);u||(u=new Set,c.set(h,u)),u.add(d.slice(h.length+1))}return c}function Ss(){!f||y||J||!F||Gt(D)}async function Wt(c){if(J)throw new Error("This OPFS workspace is closing.");it+=1;let d,h=!1;try{return await c()}catch(u){throw h=!0,d=u,u}finally{if(it-=1,J&&it===0)try{Hn()}catch(u){throw h?new AggregateError([d,u],"OPFS operation and deferred close both failed."):u}}}async function Ht(c){return Te(),it!==0?Promise.reject(new Error("Wait for the current OPFS storage operation before replacing its generation.")):(st=!0,Wt(async()=>{try{return await c()}finally{st=!1}}))}function bs(c){if(J)throw new Error("This OPFS workspace is closing.");const d=b.get(c);if(!d||d.type==="directory")throw new Error(`OPFS workspace file does not exist: ${c}`);return Vt(d)}function Es(c,d,h){if(J)throw new Error("This OPFS workspace is closing.");const u=b.get(c);if(!u||u.type==="directory")throw new Error(`OPFS workspace file does not exist: ${c}`);const l=Math.min(Math.max(0,d),u.length),m=Math.min(Math.max(0,h),u.length-l);if(u.pack){const w=e.packages;if(!w)throw new Error("This store has no shared package store to read from.");return w.readExtent(u.offset+l,m)}return jt(u.offset+l,m)}function Vt(c){if(c.pack){const d=e.packages;if(!d)throw new Error("This store has no shared package store to read from.");return d.readExtent(c.offset,c.length)}return jt(c.offset,c.length)}function jt(c,d){if(J)throw new Error("This OPFS workspace is closing.");const h=x;if(!h)throw new Error("OPFS filesystem worker is not initialized.");const u=new Uint8Array(d);if(d>0&&d<=Ye&&c>=0&&c+d<=q){let l=0;for(;l<d;){const m=c+l,w=Math.floor(m/Ye)*Ye;let S=Z.get(w);if(!S&&(S=new Uint8Array(Math.min(Ye,q-w)),H?.ensure(w,S.byteLength),h.read(S,{at:w})!==S.byteLength))throw new Error("An OPFS package range could not be read completely.");Z.delete(w),Z.set(w,S),Z.size>tt&&Z.delete(Z.keys().next().value);const A=m-w,N=Math.min(d-l,S.byteLength-A);u.set(S.subarray(A,A+N),l),l+=N}return u}if(H?.ensure(c,d),d>0&&h.read(u,{at:c})!==d)throw new Error("An OPFS workspace file could not be read completely.");return u}async function As(c,d={}){if(J&&o||!o&&it!==0)throw new Error("Wait for this OPFS workspace to finish closing before opening it again.");if(nt)throw new Error("This OPFS store is already opening a workspace.");if(o){if(M!==kn(c))throw new Error("Close this OPFS store before opening another workspace.");return b.size>0}nt=!0,J=!1;const h=new AbortController;bt=h;try{b=new Map,R=new dr,k=void 0,U=void 0,g=void 0,le=void 0,Ee=void 0,_=D=$=ee=p=E=0,Ie=void 0,We=He=Q=rt=0,be=-1/0,M=kn(c),f=d.readOnly===!0,he=f?d.imageCompletion:void 0,_e=f?d.imageLine:void 0,y=f&&d.extentsOnly===!0,a=d.shared===!0||f,s=void 0;try{const w=await i.navigator.storage.estimate?.();w?.quota&&(n=Math.max(0,Math.floor(w.quota*mo)-(w.usage??0)))}catch{}a||await Ls(h.signal),h.signal.throwIfAborted();const u=await Is();h.signal.throwIfAborted();try{const w=await u.getDirectoryHandle(yo,{create:!f});h.signal.throwIfAborted(),o=await w.getDirectoryHandle(M,{create:!f})}catch(w){if(h.signal.throwIfAborted(),f&&dt(w))return!1;throw w}h.signal.throwIfAborted();let l=nr(await Ke(o,lt));if(h.signal.throwIfAborted(),!l&&f)return await Or(),!1;if(!l&&a&&(await i.navigator.locks.request(sr,{mode:"exclusive",signal:h.signal},async()=>{h.signal.throwIfAborted(),l=nr(await Ke(o,lt)),h.signal.throwIfAborted(),l||(await Or(),await _n({files:[],pack:new ArrayBuffer(0)}),await bo(o))}),h.signal.throwIfAborted(),!l))return g=await ke(k,!1),h.signal.throwIfAborted(),!1;if(!l)return await Or(),h.signal.throwIfAborted(),!1;const m=async w=>{let S;try{S=await ke(w.generation,!1)}catch(O){throw h.signal.throwIfAborted(),dt(O)?new Error("The committed OPFS workspace generation is missing. Stored generations were retained.",{cause:O}):O}if(h.signal.throwIfAborted(),k=w.generation,B=w.initializedAt,U=w.imageRanges,g=S,y)return M===Ce&&i.navigator.locks?await i.navigator.locks.request(sr,{mode:"shared",signal:h.signal},async()=>{await ot(S),q=x.getSize()}):await ot(S),h.signal.throwIfAborted(),!0;const A=f?d.seed:void 0;if(A&&A.generation===w.generation){const O=new Be(A.index);return b=new Qe(O),R=new Rt(O),_=A.packBytes,A.changes&&An({packBytes:A.packBytes,changes:A.changes}),await ot(S),h.signal.throwIfAborted(),D=A.logBytes,{liveBytes:$,linked:p,linkedBytes:E}=A,ee=Math.max(0,_-$),bn=!0,b.size>0}const N=f?void 0:await Gs(S);if(h.signal.throwIfAborted(),N){const O=new Be(N.index);b=new Qe(O),R=new Rt(O),{packBytes:_,liveBytes:$,linked:p,linkedBytes:E}=N;const L=Atomics.load(new Int32Array(Sn()),Ze);ce={generation:k,index:N.index,packBytes:_,liveBytes:$,linked:p,linkedBytes:E,logBytes:0,epoch:L}}else b=Cr(await Ke(S,we)),h.signal.throwIfAborted(),ct(),_=Lr(b);await ot(S),h.signal.throwIfAborted();const T=N?await Ks(N):0;return h.signal.throwIfAborted(),T&&(Ie={generation:k,bytes:T},ce&&(ce.logBytes=T)),Gt(T,!!N),N?ee=Math.max(0,_-$):kt(),xn(),a&&!f&&!N&&b.size>=1e4&&(ve(),await Mt(S,b,{access:F,bytes:D,packBytes:_})),a||(x.truncate(_),await Fn(o,ei,!0),await xr(k),h.signal.throwIfAborted(),ee>wo&&ee>$&&await Bs()),h.signal.throwIfAborted(),b.size>0};return a&&!f?await i.navigator.locks.request(sr,{mode:"exclusive",signal:h.signal},async()=>{if(l=nr(await Ke(o,lt)),!l)throw new Error("The committed package store state is missing. Stored data was retained.");return m(l)}):await m(l)}catch(u){const l=[u];try{at()}catch(m){l.push(m)}try{I?.()}catch(m){l.push(m)}throw I=void 0,o=void 0,l.length>1?new AggregateError(l,"OPFS workspace open and cleanup failed."):u}finally{nt=!1,bt=void 0}}function ks(c){return Wt(()=>En(c?.whole===!0))}async function En(c=!1){if(y)throw new Error("A store opened for its extents alone has no index to follow.");if(f&&o){const m=nr(await Ke(o,lt));if(!m)throw new Error("The committed OPFS workspace state is missing. Stored data was retained.");if(m.generation!==k||c){const w=await ke(m.generation,!1),S=Cr(await Ke(w,we));_=Lr(S),m.generation!==k&&(k=m.generation,B=m.initializedAt,U=m.imageRanges,await ot(w)),k=m.generation,g=w,b=S,ct(),Gt(),kt();return}}const d=F;if(!d||!g)return;const h=d.getSize();let u=!1;h<D&&(b=Cr(await Ke(g,we)),ct(),_=Lr(b),D=0,u=!0);const l=D;Gt(D),(u||D!==l)&&kt()}async function Is(){let c;for(let d=0;d<10;d+=1){bt?.signal.throwIfAborted();try{return await i.navigator.storage.getDirectory()}catch(h){c=h,await new Promise(u=>setTimeout(u,200))}}throw c instanceof Error?c:new Error("This browser workspace's storage is unavailable.")}const Ns=1e4;async function ne(c,d){let h;const u=bt?.signal;for(let m=0;m<2;m+=1){u?.throwIfAborted();const w=c.createSyncAccessHandle({mode:"readwrite-unsafe"});let S,A,N=!1;try{const T=new Promise((L,V)=>{A=()=>V(u?.reason??new DOMException("Workspace open was cancelled.","AbortError")),u?.addEventListener("abort",A,{once:!0}),u?.aborted&&A()}),O=await Promise.race([w.then(L=>({access:L})).catch(L=>{h=L}),new Promise(L=>{S=setTimeout(()=>L(void 0),Ns)}),T]);if(u?.throwIfAborted(),O)return N=!0,O.access}finally{S!==void 0&&clearTimeout(S),A&&u?.removeEventListener("abort",A),N||w.then(T=>T.close(),()=>{}).catch(T=>console.error("Late workspace handle cleanup failed.",T))}if(h instanceof TypeError)throw new Error(`This browser cannot share a workspace's files between pages: its file access handles have no readwrite-unsafe mode (Chrome 121 or newer has one). ${h.message}`);await new Promise(T=>setTimeout(T,500))}const l=h instanceof Error?` (${h.message})`:"";throw new Error(`This browser workspace's ${d} is held by another page${l}.`)}async function ot(c){at();const d=await c.getFileHandle(ut);x=await ne(d,"store");try{if(x.getSize()<_)throw new Error("The committed OPFS workspace pack is incomplete. Stored data was retained.");const h=await c.getFileHandle(Wr);if(F=await ne(h,"record of changes"),D=F.getSize(),U){const u=he,l=u&&u.generation===k&&u.rangesDigest===U?u:void 0;let m,w;if(l?.metadata){if(m=zr(l.metadata.ranges),w=l.metadata.receiptKey,!/^[a-f0-9]{64}$/u.test(w))throw new Error("The owner's immutable receipt key is invalid.")}else{const A=await(await c.getFileHandle(Zn)).getFile(),N=new Uint8Array(await A.arrayBuffer());if(await Me(N)!==U)throw new Error("The committed immutable image ranges have changed. Stored data was retained.");m=zr(JSON.parse(ht.decode(N))),w=await Me(qe.encode(JSON.stringify(m)))}if(m.bytes>x.getSize())throw new Error("The immutable image reservation is incomplete. Stored data was retained.");const S=l?_e:void 0;S||_e?.port.close(),_e=void 0,H=new uo(m,c,`${M}.${k}`,l?.completed,w,S),console.log(`[boot-trace] ${JSON.stringify({event:"image-reader-open",at:Date.now(),reader:`${M}.${k}`,offered:u!==void 0,shared:l!==void 0,...u&&!l?{offeredGeneration:u.generation,generation:k,rangesMatch:u.rangesDigest===U}:{}})}`),await H.initialize(),oe=m.image}}catch(h){throw at(),h}}function at(){H?.close(),H=void 0,oe=void 0;const c=x,d=F;x=void 0,F=void 0,D=0,q=0,Z.clear();try{c?.close()}finally{d?.close()}}function Gt(c=0,d=!1){const h=F;if(!h)throw new Error("OPFS filesystem worker is not initialized.");const u=h.getSize();if(u<=c){D=u;return}const l=new Uint8Array(u-c);if(h.read(l,{at:c})!==l.byteLength)throw new Error("The OPFS workspace index log could not be read.");const m=x?.getSize()??1/0,w=new DataView(l.buffer);let S=0;const A=l.byteLength;for(;S+ar<=A;){const N=w.getUint32(S,!0),T=w.getUint32(S+4,!0),O=S+ar;if(N===0||N>ti||O+N>A)break;const L=l.subarray(O,O+N);if(zn(L)!==T)break;let V;try{V=qs(JSON.parse(ht.decode(L)))}catch{break}if(V.packBytes>m)break;An(V,d),S=O+N}S!==A&&!a&&h.truncate(c+S),D=c+S}function An(c,d=!1){for(const[h,u]of c.changes){const l=b.get(h);if(u&&Wi(l,u)){Jt(h);continue}d&&(l?.pack?(p-=1,E-=l.length):l&&($-=l.length),u?.pack?(p+=1,E+=u.length):u&&($+=u.length)),u===null?(b.delete(h),Nn(h)):(b.set(h,u),Jt(h))}_=Math.max(_,c.packBytes)}function kt(){$=0,p=0,E=0;for(const c of b.values())c.pack?(p+=1,E+=c.length):$+=c.length;ee=Math.max(0,_-$)}function Lr(c){let d=0;for(const h of c.values())h.pack||(d=Math.max(d,h.offset+h.length));return d}const Ms=5e3;async function Ls(c){if(!i.navigator.locks)return;if(!M)throw new Error("OPFS filesystem project is not initialized.");const d=new AbortController,h=setTimeout(()=>d.abort(),Ms);try{await new Promise((u,l)=>{i.navigator.locks.request(`supercode-browser-filesystem-${M}`,{mode:"exclusive",signal:c?AbortSignal.any([c,d.signal]):d.signal},async()=>{clearTimeout(h),u(),await new Promise(m=>{I=m})}).catch(()=>l(c?.aborted?c.reason:new Error("This browser workspace is already open in another tab.")))})}finally{clearTimeout(h)}}function kn(c){if(typeof c!="string"||!/^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/u.test(c))throw new Error("OPFS filesystem projectId is invalid.");return c}async function je(){if(!o)throw new Error("OPFS filesystem worker is not initialized.");return o}async function ke(c,d){return(await(await je()).getDirectoryHandle(or,{create:d})).getDirectoryHandle(c,{create:d})}async function Or(){let c;try{c=await(await je()).getDirectoryHandle(or)}catch(d){if(dt(d))return;throw d}for await(const d of c.entries())throw new Error("OPFS workspace state is missing but stored generations exist. Stored data was retained.")}async function xr(c){const d=await je();let h;try{h=await d.getDirectoryHandle(or)}catch(u){if(dt(u))return;throw u}for await(const[u]of h.entries())u!==c&&await Dn(h,u)}function Te(){if(J)throw new Error("This OPFS workspace is closing.");if(st)throw new Error("This OPFS workspace is replacing its generation; wait for that operation before writing.");if(f)throw new Error("This store is open for reading; its owner writes it.");if(Ee)throw Ee}async function Os(c){Yn(c)}let Pr=!1,Kt=0,Ie,_r=!1;function In(){if(Kt>0)return;const c=Ie&&Ie.generation===k&&Ie.bytes<=D?Ie.bytes:0;D-c>ni&&!Pr&&(Pr=!0,(a?i.navigator.locks.request(sr,{mode:"exclusive"},async()=>{if(!o||J)return;await En();const h=Ie,u=h&&h.generation===k&&h.bytes<=D?h.bytes:0;D-u>ni&&await Qt()}):Qt()).catch(h=>console.error("The workspace's log could not be checkpointed; it is replayed at the next open.",h)).finally(()=>{Pr=!1})),!a&&!_r&&ee>po&&ee>$&&(_r=!0,Wt(Cs).catch(d=>console.error("The workspace could not be compacted; it keeps its generation.",d)).finally(()=>{_r=!1}))}async function xs(c){Te(),Kt+=1;try{return await c()}finally{Kt-=1,Kt===0&&!J&&o&&In()}}function Ps(c,d){const h=Le(c.path);if(c.operation==="write"){if(b.get(h)?.type==="directory")throw new Error(`OPFS write target is a directory: ${h}`);if(!(c.content instanceof Uint8Array))throw new Error("OPFS write requires file content.");const l=c.content;if(l.byteLength>fe)throw new Error(`${h} is ${l.byteLength} bytes; an OPFS workspace file holds at most ${fe}.`);Xt(h,l.byteLength),Ge(h,d);const m=Zt(l);ie(h,{type:c.symlink?"symlink":"file",mode:c.mode??b.get(h)?.mode??cr,mtimeMs:c.mtimeMs??Date.now(),offset:m,length:l.byteLength},d);return}if(c.operation==="append"){const l=b.get(h);if(l&&l.type!=="file")throw new Error(`OPFS append target is not a file: ${h}`);if(!(c.content instanceof Uint8Array))throw new Error("OPFS append requires file content.");const m=c.content,w=(l?.length??0)+m.byteLength;if(w>fe)throw new Error(`${h} is ${w} bytes; an OPFS workspace file holds at most ${fe}.`);Xt(h,w),Ge(h,d);const S=c.mode??l?.mode??cr,A=c.mtimeMs??Date.now(),N=l&&!l.pack?l.capacity??l.length:0;if(M!==Ce&&l&&!l.pack&&l.length>0&&(w<=N||l.offset+N===_)){qt(l.offset+l.length,m),ie(h,{...l,mode:S,mtimeMs:A,length:w,capacity:Math.max(N,w)},d),ee-=Math.max(l.length,l.capacity??0),We-=1,He-=l.length;return}const T=new Uint8Array(w);l&&l.length>0&&T.set(Vt(l),0),T.set(m,w-m.byteLength);const O=Zt(T),L=Math.min(fe,Math.max(w,w*2,64*1024));L>w&&Pn(O+L),ie(h,{type:"file",mode:S,mtimeMs:A,offset:O,length:w,capacity:L},d);return}if(c.operation==="write-at"){const l=b.get(h);if(l&&l.type!=="file")throw new Error(`OPFS write target is not a file: ${h}`);if(!(c.content instanceof Uint8Array))throw new Error("OPFS write requires file content.");const m=c.content,w=c.position,S=l?.length??0;if(m.byteLength===0&&l)return;const A=m.byteLength===0?S:Math.max(S,w+m.byteLength);if(A>fe)throw new Error(`${h} is ${A} bytes; an OPFS workspace file holds at most ${fe}.`);Xt(h,A),Ge(h,d);const N=c.mode??l?.mode??cr,T=c.mtimeMs??Date.now(),O=l&&!l.pack?l.capacity??l.length:0;if(M!==Ce&&l&&!l.pack&&S>0&&(A<=O||l.offset+O===_)){if(w>S&&qt(l.offset+S,new Uint8Array(w-S)),Ut&&w<S){const de=Math.min(S,w+m.byteLength);Ut.push([l.offset+w,jt(l.offset+w,de-w)])}qt(l.offset+w,m),ie(h,{...l,mode:N,mtimeMs:T,length:A,capacity:Math.max(O,A)},d),A!==S&&(ee-=Math.max(l.length,l.capacity??0),We-=1,He-=l.length);return}const L=new Uint8Array(A);l&&S>0&&L.set(Vt(l),0),m.byteLength>0&&L.set(m,w);const V=Zt(L),j=Math.min(fe,Math.max(A,A*2,64*1024));j>A&&Pn(V+j),ie(h,{type:"file",mode:N,mtimeMs:T,offset:V,length:A,capacity:j},d);return}if(c.operation==="mkdir"){Ge(h,d);const l=b.get(h);if(l&&l.type!=="directory")throw new Error(`OPFS path is a file: ${h}`);ie(h,{type:"directory",mode:c.mode??l?.mode??yt,mtimeMs:c.mtimeMs??l?.mtimeMs??Date.now(),offset:0,length:0},d);return}if(c.operation==="remove"){Rr(h,d),Re().includes(h)&&ie(h,{type:"directory",mode:yt,mtimeMs:Date.now(),offset:0,length:0},d);return}if(c.operation==="link"){_s(h,On(c.source),d);return}if(c.operation==="rename"){Ts(h,Le(c.destination),d);return}const u=b.get(h);if(!u)throw new Error(`OPFS metadata target does not exist: ${h}`);ie(h,{...u,mode:c.mode??u.mode,mtimeMs:c.mtimeMs??u.mtimeMs},d)}function ie(c,d,h){const u=b.get(c);le&&!le.has(c)&&le.set(c,u);const l=u!==void 0&&u.type===d.type&&u.offset===d.offset&&u.length===d.length&&u.pack===d.pack;u&&!l&&(Mn(u),u.type!=="directory"&&d.type!=="directory"&&u.length>0&&!u.pack&&(We+=1,He+=u.length)),b.set(c,d),Jt(c),l||(d.pack?(p+=1,E+=d.length):$+=d.length),h.push([c,d])}function Jt(c){const d=Je(c);d!==c&&R.mutable(d).add(c.slice(d.length+1))}function Nn(c){const d=Je(c);R.get(d)?.has(c.slice(d.length+1))&&R.mutable(d).delete(c.slice(d.length+1)),R.delete(c)}function ct(){R=new dr;for(const c of b.keys())Jt(c)}function Tr(c){const d=[],h=u=>{const l=b.get(u);if(!l)return;d.push([u,l]);const m=R.get(u);if(m)for(const w of m)h(`${u}/${w}`)};return h(c),d}function Mn(c,d){if(c.pack){p-=1,E-=c.length;return}$-=c.length,ee+=Math.max(c.length,c.capacity??0)}function Ln(c,d){const h=b.get(c);h&&(le&&!le.has(c)&&le.set(c,h),b.delete(c),Nn(c),Mn(h),d.push([c,null]))}function _s(c,d,h){const u=e.packages;if(!u)throw new Error("This store has no shared package store to link from.");const l=On(d),m=u.descendants(l);if(m.length===0)throw new Error(`The shared package store does not hold ${d}.`);Ge(c,h),Rr(c,h),Ne(b.size+m.length);for(const[w,S]of m){const A=w===l?c:`${c}${w.slice(l.length)}`;ie(A,S.type==="directory"?{type:"directory",mode:S.mode,mtimeMs:S.mtimeMs,offset:0,length:0}:{type:S.type,mode:S.mode,mtimeMs:S.mtimeMs,offset:S.offset,length:S.length,pack:Ce},h)}}function Ge(c,d){const h=Je(c);if(h!==c&&b.get(h)?.type==="directory"){Ne(b.size+(b.has(c)?0:1));return}const u=[];let l=It(c)??Re()[0];if(b.has(l)||u.push(l),c!==l)for(const w of $r($n(Je(c)))){l=`${l}/${w}`;const S=b.get(l);if(S&&S.type!=="directory")throw new Error(`OPFS path parent is a file: ${l}`);S||u.push(l)}Ne(b.size+u.length+(b.has(c)?0:1));const m=Date.now();for(const w of u)ie(w,{type:"directory",mode:yt,mtimeMs:m,offset:0,length:0},d)}function Rr(c,d){for(const[h]of Tr(c))Ln(h,d)}function Ts(c,d,h){if(c===d)return;if(d.startsWith(`${c}/`))throw new Error("An OPFS rename cannot move a directory into itself.");const u=Tr(c);if(u.length===0){if(b.has(d))return;throw new Error(`OPFS rename source does not exist: ${c}`)}Ge(d,h),Rr(d,h);for(const[l]of u)Ln(l,h);for(const[l,m]of u)ie(`${d}${l.slice(c.length)}`,m,h);Ne(b.size)}function On(c){if(typeof c!="string"||!c.startsWith(`${Yr}/`)||c.includes("\0")||c.length>4096)throw new Error("Invalid shared store path.");return $r(c.slice(Yr.length+1)),c}function Re(){return M===Ce?[Yr]:Hi}function It(c){return Re().find(d=>c===d||c.startsWith(`${d}/`))}function vr(){return t!==void 0?t:(s??=$,Math.min(Number.MAX_SAFE_INTEGER,s+n))}function Fr(){return t!==void 0?"its configured limit":"the origin's storage quota"}function Xt(c,d){const h=b.get(c),u=h&&!h.pack?h.length:0,l=vr();if($-u+d>l){const m=a?"the origin's shared packages":"the project's own files";throw new Error(`OPFS workspace exceeds ${Fr()}: writing ${c} (${d} bytes) would take ${m} past ${l} bytes (${$} bytes held, ${u} replaced).`)}}function Ne(c){if(c>r)throw new Error("OPFS workspace exceeds its entry limit.")}function xn(){Ne(b.size);const c=vr();if($>c)throw new Error(`OPFS workspace exceeds ${Fr()}: ${a?"the origin's shared packages":"the project's own files"} hold ${$} bytes, past ${c}.`)}function qt(c,d){const h=x;if(!h)throw new Error("OPFS filesystem worker is not initialized.");let u=0;for(;u<d.byteLength;){const l=h.write(d.subarray(u),{at:c+u});if(l<=0)throw new Error("An OPFS workspace file could not be written completely.");u+=l}_=Math.max(_,c+d.byteLength)}function Pn(c){const d=x;if(!d)throw new Error("OPFS filesystem worker is not initialized.");c<=_||(d.truncate(c),_=c)}function Zt(c){const d=x;if(!d)throw new Error("OPFS filesystem worker is not initialized.");const h=_;let u=0;for(;u<c.byteLength;){const l=d.write(c.subarray(u),{at:h+u});if(l<=0)throw new Error("An OPFS workspace file could not be written completely.");u+=l}return _=h+c.byteLength,h}function Rs(c){const d=x;if(d.getSize()>=_&&c.getSize()>=D)return;d.flush(),c.flush();const h=d.getSize(),u=c.getSize();if(!(h>=_&&u>=D))throw Object.assign(new Error(`This browser is keeping less than the tab wrote (the store's pack holds ${h} of ${_} bytes, its log ${u} of ${D}): its storage is full, as a private window's is well below its quota.`),{name:"QuotaExceededError",code:"ENOSPC"})}function vs(c,d={}){const h=F;if(!h||!x)throw new Error("OPFS filesystem worker is not initialized.");if(c.length===0)return;const u=qe.encode(JSON.stringify({packBytes:_,changes:c}));if(u.byteLength>ti)throw new Error("An OPFS workspace index record exceeds its size limit.");const l=new Uint8Array(ar+u.byteLength),m=new DataView(l.buffer);m.setUint32(0,u.byteLength,!0),m.setUint32(4,zn(u),!0),l.set(u,ar);let w=0;for(;w<l.byteLength;){const S=h.write(l.subarray(w),{at:D+w});if(S<=0)throw new Error("The OPFS workspace index log could not be written completely.");w+=S}D+=l.byteLength,Rs(h),d.publish!==!1&&zt(),performance.now()-be>=ii?ve():ae===void 0&&(ae=setTimeout(ve,ii))}function ve(){if(ae!==void 0&&(clearTimeout(ae),ae=void 0),Ee)throw Ee;const c=performance.now();x?.flush(),F?.flush(),be=performance.now(),Q+=1,rt+=be-c}function Qt(){const c=gn,d=Wt(()=>c.catch(()=>{}).then(Fs));return gn=d,d}async function Fs(){if(Te(),!k)return;const c=k,d=F,h=await ke(c,!1);if(!d||d!==F||c!==k)throw new Error("OPFS workspace changed generations before its checkpoint could start.");ve();const u=D;if(await Mt(h,b,{access:d,bytes:u,packBytes:_}),c===k&&(Ie={generation:c,bytes:u}),d===F&&c===k&&u===D){Et();try{d.truncate(0),d.flush(),D=0,Ie={generation:c,bytes:0}}finally{At()}}}function _n(c){return Ht(()=>Ds(Dr(c)))}async function Ds(c){const d=crypto.randomUUID(),h=await ke(d,!0),u=await h.getFileHandle(ut,{create:!0}),l=await ne(u,"store"),m=new Map;let w=0;try{for(const A of c.files){let N=0,T=0;if(A.type!=="directory"){const O=new Uint8Array(c.pack,A.offset??0,A.length??0);N=w,T=O.byteLength;let L=0;for(;L<T;){const V=l.write(O.subarray(L),{at:N+L});if(V<=0)throw new Error("An OPFS workspace file could not be written completely.");L+=V}w+=T}m.set(A.path,{type:A.type,mode:A.mode??(A.type==="directory"?yt:cr),mtimeMs:A.mtimeMs??Date.now(),offset:N,length:T})}for(const A of Re())m.has(A)||m.set(A,{type:"directory",mode:yt,mtimeMs:Date.now(),offset:0,length:0});Ne(m.size),l.truncate(w),l.flush()}finally{l.close()}const S=await Mt(h,m);await er(d,h,m,w,S)}async function Bs(){await Tn(()=>!0)}async function Cs(){let c=!1,d=!1,h=!1;try{await $s(()=>{c=!0},()=>{d=!0},()=>{h=!0})}finally{c&&(d||h)?At():c&&Yt()}}async function $s(c,d,h){const u=crypto.randomUUID(),l=await ke(u,!0),m=await ne(await l.getFileHandle(ut,{create:!0}),"store");let w,S=!1;try{w=await ne(await l.getFileHandle(Wr,{create:!0}),"record of changes"),w.truncate(0);const A=new Uint8Array(si);let N=0;const T=z=>{if(z.pack)return{...z};if(z.type==="directory"||z.length===0)return{...z,offset:0,length:0};const te=x;if(!te)throw new Error("OPFS filesystem worker is not initialized.");const Xe=N;let ue=0;for(;ue<z.length;){const Lt=Math.min(A.byteLength,z.length-ue),Vn=A.subarray(0,Lt);if(H?.ensure(z.offset+ue,Lt),te.read(Vn,{at:z.offset+ue})!==Lt)throw new Error("An OPFS workspace file could not be read completely.");let ir=0;for(;ir<Lt;){const jn=m.write(Vn.subarray(ir),{at:Xe+ue+ir});if(jn<=0)throw new Error("An OPFS workspace file could not be written completely.");ir+=jn}ue+=Lt}N+=z.length;const{capacity:Ur,...eo}=z;return{...eo,offset:Xe}},O=new Map;let L=performance.now();for(const[z,te]of[...b]){if(J||st)return;b.get(z)===te&&(O.set(te,T(te)),performance.now()-L>8&&(await new Promise(Xe=>setTimeout(Xe,0)),L=performance.now()))}if(J||st||!x||!F)return;Et(),c();const V=new Map;for(const[z,te]of b)V.set(z,O.get(te)??T(te));m.truncate(N),m.flush(),w.flush(),ve();const j={pack:x,log:F};x=m,F=w,D=0,b=V,ct(),_=N,k=u,g=l,kt(),S=!0;const de=new Map(V);try{j.pack.close()}finally{j.log.close()}try{await Mt(l,de);const z={storageVersion:4,generation:u,initializedAt:Date.now()};await Nt(await je(),lt,z)}catch(z){throw Ee=new Error("The workspace moved to a compacted generation it could not record; it takes no more writes, which its next open would discard.",{cause:z}),Ee}d(),await xr(u)}finally{if(!S){h();try{m.close()}finally{w?.close()}await Dn(await(await je()).getDirectoryHandle(or),u)}}}async function Us(c){Te(),Et();try{await zs(c)}finally{At()}}async function zs(c){let d=!1;for(const[h,u]of b){if(!u.pack||u.length===0)continue;const l=c.get(u.offset);if(l===void 0)throw new Error(`The shared store no longer holds the bytes of ${h}.`);l!==u.offset&&(b.set(h,{...u,offset:l}),d=!0)}d&&await Qt()}function Tn(c){return Ht(()=>Ys(c))}async function Ys(c){const d=x;if(!d)throw new Error("OPFS filesystem worker is not initialized.");const h=new Map,u=crypto.randomUUID(),l=await ke(u,!0),m=await l.getFileHandle(ut,{create:!0}),w=await ne(m,"store"),S=new Map,A=new Uint8Array(si);let N=0;try{for(const[O,L]of b){if(!c(O,L))continue;if(L.pack){S.set(O,{...L});continue}if(L.type==="directory"||L.length===0){S.set(O,{...L,offset:0,length:0});continue}const V=N;h.set(L.offset,V);let j=0;for(;j<L.length;){const te=Math.min(A.byteLength,L.length-j),Xe=A.subarray(0,te);if(H?.ensure(L.offset+j,te),d.read(Xe,{at:L.offset+j})!==te)throw new Error("An OPFS workspace file could not be read completely.");let ue=0;for(;ue<te;){const Ur=w.write(Xe.subarray(ue),{at:V+j+ue});if(Ur<=0)throw new Error("An OPFS workspace file could not be written completely.");ue+=Ur}j+=te}N+=L.length;const{capacity:de,...z}=L;S.set(O,{...z,offset:V,length:L.length})}w.truncate(N),w.flush()}finally{w.close()}const T=await Mt(l,S);return await er(u,l,S,N,T),h}async function er(c,d,h,u,l,m){Et();try{await Ws(c,d,h,u,l,m)}finally{At()}}async function Ws(c,d,h,u,l,m){const w=await d.getFileHandle(Wr,{create:!0}),S=await ne(w,"record of changes");try{S.truncate(0),S.flush()}finally{S.close()}const A={storageVersion:m?5:4,generation:c,initializedAt:Date.now(),...m?{imageRanges:m}:{}};if(await Nt(await je(),lt,A),at(),k=c,B=A.initializedAt,U=m,l){const N=new Be(l.index);b=new Qe(N),R=new Rt(N),ce=void 0}else b=h,ct();_=u,g=d,await ot(d),l?({liveBytes:$,linked:p,linkedBytes:E}=l,ee=Math.max(0,_-$)):kt(),a||await xr(c)}async function Hs(c,d,h,u,l=!1){if(Te(),!a||M!==Ce)throw new Error("Only the shared package store can reserve immutable image extents.");if(_!==0||[...b.values()].some(O=>O.type!=="directory"))return!1;const m=zr(u);if(m.bytes!==c.packBytes||c.entries>Hr||c.liveBytes>c.packBytes||d.byteLength!==c.json.raw||h.byteLength!==c.binary.raw||!await rr(d,c.json.sha256,l)||!await rr(h,c.binary.sha256,l))throw new Error("The image's prepared metadata does not match its document.");const w=d.subarray(0,4096).indexOf(10);if(w<0)throw new Error("The prepared index has no bounded retained header.");const S=JSON.parse(`${ht.decode(d.subarray(0,w-1))}}`),A={packBytes:c.packBytes,liveBytes:c.liveBytes,linked:0,linkedBytes:0},N=S.retainedIndex;if(N.version!==1||N.digest!==await Rn(c.binary.sha256,A)||N.packBytes!==A.packBytes||N.liveBytes!==A.liveBytes||N.linked!==0||N.linkedBytes!==0)throw new Error("The prepared index's retained measures are inconsistent.");const T=new SharedArrayBuffer(h.byteLength);if(new Uint8Array(T).set(h),new Be(T).entryCount!==c.entries)throw new Error("The prepared index has the wrong number of entries.");return Ht(async()=>{const O=crypto.randomUUID(),L=await ke(O,!0),V=await L.getFileHandle(ut,{create:!0}),j=await ne(V,"immutable image reservation");try{j.truncate(c.packBytes),j.flush()}finally{j.close()}const de=qe.encode(JSON.stringify(m));return await Fe(L,Zn,de),await Fe(L,tr,h),await Fe(L,we,d),await er(O,L,new Map,c.packBytes,{index:T,...A},await Me(de)),!0})}async function Vs(c,d,h,u=!1,l){if(Te(),a||!e.packages||!l&&!e.packages.deferredImage)throw new Error("Prepared project paths require a verified shared image.");if(_!==0||[...b.values()].some(N=>N.type!=="directory"))return!1;if(d.byteLength!==c.json.raw||h.byteLength!==c.binary.raw||!await rr(d,c.json.sha256,u)||!await rr(h,c.binary.sha256,u))throw new Error("The image's prepared project does not match its descriptor.");const m=d.subarray(0,4096).indexOf(10);if(m<0)throw new Error("The prepared project has no bounded retained header.");const w=JSON.parse(`${ht.decode(d.subarray(0,m-1))}}`).retainedIndex,S={packBytes:0,liveBytes:0,linked:c.linked,linkedBytes:c.linkedBytes};if(w.version!==1||w.digest!==await Rn(c.binary.sha256,S)||w.packBytes!==0||w.liveBytes!==0||w.linked!==c.linked||w.linkedBytes!==c.linkedBytes)throw new Error("The prepared project's retained measures are inconsistent.");const A=new SharedArrayBuffer(h.byteLength);if(new Uint8Array(A).set(h),new Be(A).entryCount!==c.entries||c.entries>r)throw new Error("The prepared project has invalid entry bounds.");return Ht(async()=>{const N=crypto.randomUUID(),T=await ke(N,!0),O=await T.getFileHandle(ut,{create:!0}),L=await ne(O,"prepared project");try{L.truncate(0),L.flush()}finally{L.close()}if(await Fe(T,tr,h),await Fe(T,we,d),l&&!await l)return!1;if(!e.packages?.deferredImage)throw new Error("Prepared project paths require a verified shared image.");return await er(N,T,new Map,0,{index:A,...S}),!0})}async function js(){if(J)throw new Error("This OPFS workspace is closing.");if(!x)throw new Error("OPFS filesystem worker is not initialized.");const c=[],d=[...b.keys()].sort((w,S)=>Un(w)-Un(S)||(w<S?-1:1));let h=0;for(const w of b.values())w.type!=="directory"&&(h+=w.length);const u=new ArrayBuffer(h),l=new Uint8Array(u);let m=0;for(const w of d){const S=b.get(w);if(S.type==="directory"){c.push({path:w,type:"directory",mode:S.mode,mtimeMs:S.mtimeMs});continue}S.length>0&&l.set(Vt(S),m),c.push({path:w,type:S.type,offset:m,length:S.length,mode:S.mode,mtimeMs:S.mtimeMs}),m+=S.length}for(const w of[...Re()].reverse())b.has(w)||c.unshift({path:w,type:"directory",mode:yt,mtimeMs:Date.now()});return Dr({files:c,pack:u})}async function Nt(c,d,h){await Fe(c,d,qe.encode(JSON.stringify(h)))}async function Fe(c,d,h){const u=await(await je()).getDirectoryHandle(ei,{create:!0}),l=crypto.randomUUID(),m=await u.getFileHandle(l,{create:!0}),w=await ne(m,"index");try{let S=0;for(;S<h.byteLength;){const A=w.write(h.subarray(S),{at:S});if(A<=0)throw new Error("An OPFS workspace file could not be written completely.");S+=A}w.truncate(h.byteLength),w.flush()}finally{w.close()}try{await m.move(c,d)}finally{await Fn(u,l,!1)}}const tr="index.shared";async function Me(c){const d=await crypto.subtle.digest("SHA-256",c);return Array.from(new Uint8Array(d),h=>h.toString(16).padStart(2,"0")).join("")}async function rr(c,d,h){return h||await Me(c)===d}function Rn(c,d){const{packBytes:h,liveBytes:u,linked:l,linkedBytes:m,journalPrefix:w}=d;return Me(qe.encode(`${JSON.stringify({packBytes:h,liveBytes:u,linked:l,linkedBytes:m,...w?{journalPrefix:w}:{}})}:${c}`))}async function vn(c,d){const{packBytes:h,liveBytes:u,linked:l,linkedBytes:m,journalPrefix:w}=d;return Me(qe.encode(`${JSON.stringify({packBytes:h,liveBytes:u,linked:l,linkedBytes:m,...w?{journalPrefix:w}:{}})}:${await Me(c)}`))}async function Mt(c,d,h){const u=Xs(d);if(typeof SharedArrayBuffer>"u"||d.size<1e4){await Nt(c,we,u);return}const l=new Map(u.entries),m=new Map,w={packBytes:h?.packBytes??0,liveBytes:0,linked:0,linkedBytes:0};for(const[V,j]of l){const de=Je(V);if(de!==V){let z=m.get(de);z||(z=new Set,m.set(de,z)),z.add(V.slice(de.length+1))}j.pack?(w.linked+=1,w.linkedBytes+=j.length):(w.liveBytes+=j.length,w.packBytes=Math.max(w.packBytes,j.offset+j.length))}let S;try{S=Gn(l,m)}catch{await Nt(c,we,u);return}const A=JSON.stringify(u.entries),N=h?new Uint8Array(h.bytes):void 0;if(N&&h.access.read(N,{at:0})!==N.byteLength)throw new Error("The checkpoint's journal prefix could not be read completely.");const T=N?{bytes:N.byteLength,digest:await Me(N)}:void 0,O=new Uint8Array(S).slice(),L={version:T?2:1,digest:await vn(O,{...w,...T?{journalPrefix:T}:{}}),...w,...T?{journalPrefix:T}:{}};try{await Fe(c,tr,O)}catch{await Nt(c,we,{entries:JSON.parse(A)});return}return await Fe(c,we,qe.encode(`{"retainedIndex":${JSON.stringify(L)},
|
|
2
|
+
"entries":${A}}`)),{index:S,...w}}async function Gs(c){if(!(typeof SharedArrayBuffer>"u"))try{const d=await c.getFileHandle(we),h=await ne(d,"index");let u;try{const O=new Uint8Array(Math.min(512,h.getSize())),L=h.read(O,{at:0});u=ht.decode(O.subarray(0,L))}finally{h.close()}const l=u.split(`
|
|
3
|
+
`,1)[0];if(!l.startsWith('{"retainedIndex":')||!l.endsWith(","))return;const m=JSON.parse(l.slice(0,-1)+"}").retainedIndex;if(m.version!==1&&m.version!==2||!/^[a-f0-9]{64}$/u.test(m.digest)||![m.packBytes,m.liveBytes,m.linked,m.linkedBytes].every(O=>Number.isSafeInteger(O)&&O>=0)||m.version===1&&m.journalPrefix!==void 0||m.version===2&&(!m.journalPrefix||!Number.isSafeInteger(m.journalPrefix.bytes)||m.journalPrefix.bytes<0||!/^[a-f0-9]{64}$/u.test(m.journalPrefix.digest)))return;const w=await c.getFileHandle(tr),S=await ne(w,"index");let A;try{const O=S.getSize();if(O>256*1024*1024||(A=new Uint8Array(O),S.read(A,{at:0})!==O))return}finally{S.close()}if(await vn(A,m)!==m.digest)return;const N=new SharedArrayBuffer(A.byteLength);new Uint8Array(N).set(A);const T=new Be(N);return Ne(T.entryCount),{...m,index:N}}catch{return}}async function Ks(c){const d=c.journalPrefix;if(!d||!F||!x||d.bytes>F.getSize()||c.packBytes>x.getSize())return 0;const h=new Uint8Array(d.bytes);return F.read(h,{at:0})!==h.byteLength?0:await Me(h)===d.digest?d.bytes:0}async function Ke(c,d){let h;try{h=await c.getFileHandle(d)}catch(m){if(dt(m))return;throw m}let u;if(f){u=await(await h.getFile()).text();try{return JSON.parse(u)}catch(m){throw new Error(`Invalid OPFS workspace metadata (${d}). Stored data was retained.`,{cause:m})}}const l=await ne(h,"index");try{const m=l.getSize(),w=new Uint8Array(m);if(m>0&&l.read(w,{at:0})!==m)throw new Error("An OPFS workspace file could not be read completely.");u=ht.decode(w)}finally{l.close()}try{return JSON.parse(u)}catch(m){throw new Error(`Invalid OPFS workspace metadata (${d}). Stored data was retained.`,{cause:m})}}async function Fn(c,d,h){try{await c.removeEntry(d,{recursive:h})}catch(u){if(!dt(u))throw u}}async function Dn(c,d){try{await c.removeEntry(d,{recursive:!0})}catch{}}function Bn(c){if(!c||typeof c!="object"||Array.isArray(c))throw new Error("Invalid OPFS filesystem mutation.");if(c.operation!=="write"&&c.operation!=="append"&&c.operation!=="write-at"&&c.operation!=="mkdir"&&c.operation!=="remove"&&c.operation!=="rename"&&c.operation!=="metadata"&&c.operation!=="link")throw new Error("Invalid OPFS filesystem mutation.");if(Le(c.path),c.operation==="rename"&&Le(c.destination),(c.operation==="write"||c.operation==="append"||c.operation==="write-at")&&!(c.content instanceof Uint8Array))throw new Error("Invalid OPFS file content.");if(c.operation==="write-at"&&(!Number.isSafeInteger(c.position)||c.position<0))throw new Error("Invalid OPFS write position.");return Br(c),c}function Js(c){if(!Array.isArray(c)||c.length===0||c.length>128)throw new Error("Invalid OPFS filesystem mutation batch.");return c.map(d=>Bn(d))}function Dr(c){if(!c||!Array.isArray(c.files)||c.files.length>r||!(c.pack instanceof ArrayBuffer))throw new Error("Invalid OPFS workspace snapshot.");const d=new Set,h=new Map(Re().map(l=>[l,"directory"]));let u=0;for(const l of c.files){if(!l||typeof l!="object")throw new Error("Invalid OPFS workspace snapshot entry.");if(Le(l.path),l.type!=="file"&&l.type!=="directory"&&l.type!=="symlink"||d.has(l.path))throw new Error("Invalid or duplicate OPFS workspace entry.");if(d.add(l.path),h.set(l.path,l.type),Re().includes(l.path)&&l.type!=="directory")throw new Error("The OPFS workspace root must be a directory.");if(l.type!=="directory"){const m=l.offset??0,w=l.length??0;if(!Number.isSafeInteger(m)||!Number.isSafeInteger(w)||m<0||w<0||w>fe||m+w>c.pack.byteLength)throw new Error("Invalid OPFS workspace file.");if(u+=w,u>vr())throw new Error(`OPFS workspace exceeds ${Fr()}.`)}else if((l.offset??0)!==0||(l.length??0)!==0)throw new Error("An OPFS workspace directory cannot contain file bytes.");Br(l)}Ne(h.size);for(const l of c.files)if(!Re().includes(l.path)&&h.get(Je(l.path))!=="directory")throw new Error(`An OPFS workspace snapshot has no directory parent for ${l.path}.`);return c}function Br(c){if(c.mode!==void 0&&(!Number.isSafeInteger(c.mode)||c.mode<0||c.mode>4095))throw new Error("Invalid OPFS file mode.");if(c.mtimeMs!==void 0&&(typeof c.mtimeMs!="number"||!Number.isFinite(c.mtimeMs)||c.mtimeMs<0))throw new Error("Invalid OPFS modification time.")}function Xs(c){return{entries:[...c]}}function Cr(c){const d=new Map;if(c===void 0)throw new Error("The committed OPFS workspace index is missing. Stored data was retained.");if(!c||typeof c!="object"||!Array.isArray(c.entries))throw new Error("Invalid OPFS workspace index.");const h=c.entries;Ne(h.length);for(const u of h){if(!Array.isArray(u)||u.length!==2)throw new Error("Invalid OPFS workspace index entry.");const l=Le(u[0]);if(d.has(l))throw new Error("Duplicate OPFS workspace index entry.");d.set(l,Cn(u[1]))}return d}function Cn(c){if(!c||typeof c!="object"||Array.isArray(c))throw new Error("Invalid OPFS workspace index entry.");const d=c;if(d.type!=="file"&&d.type!=="directory"&&d.type!=="symlink")throw new Error("Invalid OPFS workspace index entry.");if(Br(d),d.mode===void 0||d.mtimeMs===void 0)throw new Error("Invalid OPFS workspace index entry.");if(!Number.isSafeInteger(d.offset)||d.offset<0||!Number.isSafeInteger(d.length)||d.length<0||d.length>fe)throw new Error("Invalid OPFS workspace index extent.");if(d.pack!==void 0&&d.pack!==Ce)throw new Error("Invalid OPFS workspace index entry.");return{type:d.type,mode:d.mode,mtimeMs:d.mtimeMs,offset:d.offset,length:d.length,...d.pack?{pack:d.pack}:{}}}function qs(c){if(!c||typeof c!="object"||Array.isArray(c))throw new Error("Invalid OPFS workspace index record.");const d=c;if(!Number.isSafeInteger(d.packBytes)||d.packBytes<0||!Array.isArray(d.changes))throw new Error("Invalid OPFS workspace index record.");const h=[];for(const u of d.changes){if(!Array.isArray(u)||u.length!==2)throw new Error("Invalid OPFS workspace index record.");h.push([Le(u[0]),u[1]===null?null:Cn(u[1])])}return{packBytes:d.packBytes,changes:h}}function nr(c){if(c===void 0)return;if(!c||typeof c!="object"||Array.isArray(c))throw new Error("Invalid OPFS workspace state. Stored data was retained.");const d=c;if(d.storageVersion!==4&&d.storageVersion!==5||d.storageVersion===5&&(typeof d.imageRanges!="string"||!/^[a-f0-9]{64}$/u.test(d.imageRanges))||d.storageVersion===4&&d.imageRanges!==void 0||typeof d.generation!="string"||!/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(d.generation)||typeof d.initializedAt!="number"||!Number.isFinite(d.initializedAt))throw new Error("Invalid or unsupported OPFS workspace state. Stored data was retained.");return d}function Le(c){if(typeof c!="string"||It(c)===void 0||c.includes("\0")||c.length>4096)throw new Error("Invalid OPFS workspace path.");return $n(c),c}function $n(c){const d=It(c);if(d===void 0)throw new Error("Invalid OPFS workspace path.");const h=c===d?"":c.slice(d.length+1);return $r(h),h}function $r(c){const d=c===""?[]:c.split("/");if(d.some(h=>!h||h==="."||h===".."||h.includes("\0")))throw new Error("Invalid OPFS workspace path segment.");return d}function Je(c){const d=c.slice(0,c.lastIndexOf("/"));return d===""||It(d)===void 0?It(c)??c:d}function Un(c){let d=1;for(let h=0;h<c.length;h+=1)c.charCodeAt(h)===47&&(d+=1);return d}function dt(c){return c instanceof DOMException&&c.name==="NotFoundError"}function zn(c){let d=2166136261;for(let h=0;h<c.byteLength;h+=1)d^=c[h],d=Math.imul(d,16777619);return d>>>0}typeof addEventListener=="function"&&addEventListener("close",()=>{x?.flush(),F?.flush(),at(),I?.()});function Yn(c,d={}){if(Te(),le)throw new Error("An OPFS mutation batch cannot be nested.");for(const h of c)Bn(h);return c.length?Wn(h=>{for(const u of c)Ps(u,h)},d):[]}function Zs(c,d,h={}){if(Te(),le)throw new Error("An OPFS mutation batch cannot be nested.");for(const u of d){if(Le(u.path),u.type!=="file"&&u.type!=="directory"&&u.type!=="symlink")throw new Error(`OPFS extent ${u.path} has no valid type.`);if(u.type==="directory")continue;const{offset:l,length:m}=u;if(l===void 0||m===void 0||!Number.isSafeInteger(l)||!Number.isSafeInteger(m)||l<0||m<0||l+m>c.byteLength)throw new Error(`OPFS extent ${u.path} lies outside its bytes.`);if(m>fe)throw new Error(`${u.path} is ${m} bytes; an OPFS workspace file holds at most ${fe}.`)}return d.length?Wn(u=>{const l=c.byteLength>0?Zt(c):_;for(const m of d){const w=Le(m.path);Ge(w,u);const S=b.get(w);if(m.type==="directory"){if(S&&S.type!=="directory")throw new Error(`OPFS path is a file: ${w}`);ie(w,{type:"directory",mode:m.mode,mtimeMs:m.mtimeMs,offset:0,length:0},u);continue}if(S?.type==="directory")throw new Error(`OPFS write target is a directory: ${w}`);Xt(w,m.length),ie(w,{type:m.type,mode:m.mode,mtimeMs:m.mtimeMs,offset:l+m.offset,length:m.length},u)}},h):[]}function Wn(c,d){if(!x||!F)throw new Error("OPFS filesystem worker is not initialized.");const h={packBytes:_,logBytes:D,liveBytes:$,deadBytes:ee,rewrites:We,rewrittenBytes:He,linked:p,linkedBytes:E},u=new Map;le=u;const l=[];Ut=l;const m=[];try{return c(m),xn(),vs(m,{publish:!d.durable}),d.durable&&(ve(),zt()),In(),m}catch(w){const S=X!==void 0&&!Ae&&Atomics.load(X,ri)!==h.logBytes;S&&Et();for(const[A,N]of u)N===void 0?b.delete(A):b.set(A,N);ct();try{for(let A=l.length-1;A>=0;A-=1)qt(l[A][0],l[A][1])}catch(A){w=new AggregateError([w,A],"OPFS could not restore bytes a failed batch wrote over.")}({packBytes:_,logBytes:D,liveBytes:$,deadBytes:ee,rewrites:We,rewrittenBytes:He,linked:p,linkedBytes:E}=h),ae!==void 0&&(clearTimeout(ae),ae=void 0);try{F.truncate(D),F.flush(),x.truncate(_),x.flush()}catch(A){throw Yt(),Ee=new AggregateError([w,A],"OPFS could not roll back a failed batch; reopen this workspace before writing again."),Ee}throw S&&At(),w}finally{le=void 0,Ut=void 0}}function Qs(){if(nt){bt?.abort(new DOMException("The workspace was closed while opening.","AbortError"));return}J||(J=!0,it===0&&Hn())}function Hn(){Yt();try{ve()}finally{try{at()}finally{const c=I;I=void 0,o=void 0;try{c?.()}finally{e.ownsPackages&&e.packages?.close()}}}}return{initialize:As,opened:()=>o!==void 0&&!J,stats:()=>({entries:b.size,liveBytes:$,deadBytes:ee,packBytes:_,rewrites:We,rewrittenBytes:He,linked:p,linkedBytes:E,flushes:Q,flushMs:rt}),applyNow:Yn,applyExtentsNow:Zs,close:Qs,readExtent:jt,descendants:Tr,retain:Tn,remapLinks:Us,childrenOf:c=>[...R.get(c)??[]].sort(),refresh:ks,follow:Ss,clock:Sn,readerSeed:ms,imageCompletionSeed:ws,imageLine:()=>H?.lineForReader()??e.packages?.imageLine(),imageStartupSet:()=>H?.readDigests()??H?.completedDigests()??[],prefetchImage:(c,d)=>H?.prefetch(c,d)??{queued:0,done:Promise.resolve()},seeded:()=>bn,get logBytes(){return D},checkpoint:Qt,deferMaintenance:xs,installPreparedImage:Hs,installPreparedProject:Vs,get deferredImage(){return oe},get imagePlacedAt(){return o&&U?B:void 0},get entries(){return b},get packBytes(){return _},read:bs,readRange:Es,snapshot:js,replace:_n,apply:Os,flush:()=>{if(J||!o)throw new Error("This OPFS workspace is not open.");if(st)throw new Error("Wait for the OPFS generation replacement before flushing it.");ve()},validateSnapshot:Dr,validateMutationBatch:Js}}async function go(i,e,t,r){const n=hn(i);await n.initialize(Ce,{readOnly:!0,extentsOnly:!0});const s=hn(i,{packages:n,ownsPackages:!0});let o;try{o=await s.initialize(e,{readOnly:!0,...t?{seed:t}:{}})}catch(a){throw s.close(),n.close(),a}if(!o&&!s.opened()){n.close();return}return s}const So="sweep.json";async function bo(i){const t=await(await i.getFileHandle(So,{create:!0})).createWritable();await t.write(JSON.stringify({at:Date.now()})),await t.close()}class dr{map=new Map;get(e){return this.map.get(e)}mutable(e){let t=this.map.get(e);return t||(t=new Set,this.map.set(e,t)),t}delete(e){this.map.delete(e)}}function re(){return typeof performance>"u"?Date.now():performance.timeOrigin+performance.now()}function xe(i){const e=i.toBase64;if(typeof e=="function")return e.call(i);let t="";for(let r=0;r<i.byteLength;r+=32768)t+=String.fromCharCode(...i.subarray(r,r+32768));return btoa(t)}function ze(i){const e=Uint8Array.fromBase64;if(typeof e=="function")return e(i);const t=atob(i),r=new Uint8Array(t.length);for(let n=0;n<t.length;n+=1)r[n]=t.charCodeAt(n);return r}class pr extends Map{names=new Map;static rooted(){const e=new pr;return e.set("/",No()),e}set(e,t){if(!this.has(e)&&e!=="/"){const r=$e(e);let n=this.names.get(r);n||(n=new Set,this.names.set(r,n)),n.add(e.slice(r==="/"?1:r.length+1))}return super.set(e,t)}delete(e){if(!super.delete(e))return!1;const t=$e(e),r=this.names.get(t);return r?.delete(e.slice(t==="/"?1:t.length+1)),r?.size===0&&this.names.delete(t),!0}clear(){super.clear(),this.names.clear()}namesIn(e){return[...this.names.get(e)??[]]}subtree(e){const t=[],r=[e];for(;r.length>0;){const n=r.shift(),s=this.get(n);if(s){t.push([n,s]);for(const o of this.names.get(n)??[])r.push(n==="/"?`/${o}`:`${n}/${o}`)}}return t}}class et{nodes=pr.rooted();lower;rangeBlocks=new Map;rangeBlockBytes=0;hidden=new Set;nextInode=2;mutationDepth=0;mutated=!1;mutationHandler;changedPaths;static fromSnapshot(e){const t=new et;return t.replaceSnapshot(e),t}static fromStore(e,t){const r=new et;return r.lower=e,r.mutate(()=>{const n=t.files.filter(s=>{const o=s,a=Y(o.path);if(a==="/")return!1;if(o.content!==void 0)return!0;const f=e.entries.get(a);return!f||o.type==="directory"!=(f.type==="directory")?!0:o.mode!==void 0&&o.mode!==(f.mode&4095)||o.mtimeMs!==void 0&&o.mtimeMs!==f.mtimeMs});for(const s of n.sort((o,a)=>fr(o.path)-fr(a.path))){const o=s,a=Y(o.path);if(o.type==="directory")r.node(a)||r.mkdirSync(a,{recursive:!0});else if(o.content!==void 0)r.writeFileSync(a,ze(o.content));else if(!r.node(a))continue;const f=r.node(a);f&&(o.mode!==void 0&&(f.mode=o.mode),o.mtimeMs!==void 0&&(f.atimeMs=f.mtimeMs=o.mtimeMs))}r.mutated=!1}),r}node(e){const t=this.nodes.get(e);if(t||!this.lower||e==="/")return t;if(this.isHidden(e))return;const r=this.lower.entries.get(e);if(!r)return;const n=this.lowerNode(e,r);return this.nodes.set(e,n),n}lowerNode(e,t){const r=this.lower;return t.type==="directory"?{type:"directory",fromStore:!0,mode:t.mode&4095,atimeMs:t.mtimeMs,mtimeMs:t.mtimeMs,ino:this.nextInode++}:{type:"file",fromStore:!0,load:()=>r.view?r.view(e):r.read(e),...r.readRange&&t.length>=Eo&&r.readsByRange?.(e)?{range:(n,s)=>this.readBlocks(e,t.length,n,s,(o,a)=>r.readRange(e,o,a))}:{},size:t.length,mode:t.mode&4095,atimeMs:t.mtimeMs,mtimeMs:t.mtimeMs,ino:this.nextInode++}}readBlocks(e,t,r,n,s){const o=Math.min(Math.max(0,r),t),a=Math.min(t,o+Math.max(0,n));if(a<=o)return new Uint8Array(0);if(a-o>ko)return s(o,a-o);const f=Math.floor(o/Ot),y=Math.floor((a-1)/Ot),g=new Uint8Array(a-o);for(let p=f;p<=y;p+=1){const E=`${p}:${e}`;let I=this.rangeBlocks.get(E);if(I)this.rangeBlocks.delete(E);else for(I=s(p*Ot,Ot),this.rangeBlockBytes+=I.byteLength;this.rangeBlockBytes>Ao&&this.rangeBlocks.size>0;){const[R,x]=this.rangeBlocks.entries().next().value;this.rangeBlocks.delete(R),this.rangeBlockBytes-=x.byteLength}this.rangeBlocks.set(E,I);const M=p*Ot,k=Math.max(o,M),b=Math.min(a,M+I.byteLength);b>k&&g.set(I.subarray(k-M,b-M),k-o)}return g}toStoreOverlaySnapshot(){if(!this.lower||this.hidden.size>0)return this.toSnapshot();const e=this.lower;return{files:[...this.nodes.entries()].filter(([r,n])=>{if(r==="/")return!1;const s=e.entries.get(r);return!(n.fromStore&&!n.dirty&&s&&n.mode===(s.mode&4095)&&n.mtimeMs===s.mtimeMs)}).map(([r,n])=>n.type==="directory"?{path:r,type:"directory",mode:n.mode,mtimeMs:n.mtimeMs}:n.load&&!n.dirty?this.sized(r,n):{path:r,type:"file",content:xe(n.content??new Uint8Array),mode:n.mode,mtimeMs:n.mtimeMs})}}isHidden(e){if(this.hidden.size===0)return!1;for(let t=e;t!=="/";t=$e(t))if(this.hidden.has(t))return!0;return!1}hide(e){this.lower?.entries.has(e)&&this.hidden.add(e)}unhide(e){if(!(!this.lower||!this.isHidden(e))){this.hidden.delete(e);for(const t of this.lower.childrenOf(e))this.hidden.add(e==="/"?`/${t}`:`${e}/${t}`)}}everyNode(){const e=[...this.nodes.entries()];if(!this.lower)return e;for(const[t,r]of this.lower.entries)t==="/"||this.nodes.has(t)||this.isHidden(t)||e.push([t,this.lowerNode(t,r)]);return e}setMutationHandler(e){this.mutationHandler=e,this.changedPaths=e?new Set:void 0}takeChangedPaths(){const e=this.changedPaths??new Set;return this.changedPaths=this.changedPaths?new Set:void 0,e}dropChangedPaths(e){if(this.changedPaths)for(const t of e)this.changedPaths.delete(Y(t))}writtenEntry(e,t=!1){const r=Y(e),n=this.node(r);if(!n)return;const s={mode:n.mode,mtimeMs:n.mtimeMs};return n.type==="directory"?{path:r,type:"directory",...s}:t?{path:r,type:"file",bytes:this.bytesOf(n).slice(),...s}:{path:r,type:"file",content:xe(this.bytesOf(n)),...s}}replaceSnapshot(e){this.mutate(()=>{const t=new Map(this.everyNode());this.lower=void 0,this.hidden.clear(),this.nodes=pr.rooted();for(const n of t.keys())this.markMutation(n);this.markMutation("/");const r=e.files.slice().sort((n,s)=>fr(n.path)-fr(s.path));for(const n of r){const s=n,o=Y(s.path);if(o!=="/")if(s.type==="directory")this.mkdirSync(o,{recursive:!0});else if(s.content!==void 0){this.writeFileSync(o,ze(s.content));const f=this.nodes.get(o);f&&(f.dirty=!1)}else{const f=t.get(o);this.mkdirSync($e(o),{recursive:!0}),f?.type==="file"&&this.nodes.set(o,f)}const a=this.node(o);a&&(s.mode!==void 0&&(a.mode=s.mode),s.mtimeMs!==void 0&&(a.atimeMs=a.mtimeMs=s.mtimeMs),this.markMutation(o))}})}toSnapshot(){return{files:[...this.nodes.entries()].map(([e,t])=>t.type==="directory"?{path:e,type:"directory",mode:t.mode,mtimeMs:t.mtimeMs}:t.load&&!t.dirty?this.sized(e,t):{path:e,type:"file",content:xe(t.content??new Uint8Array),mode:t.mode,mtimeMs:t.mtimeMs}).concat(this.untouchedStoreEntries())}}untouchedStoreEntries(){const e=[];if(!this.lower)return e;for(const[t,r]of this.lower.entries)t==="/"||this.nodes.has(t)||this.isHidden(t)||e.push(r.type==="directory"?{path:t,type:"directory",mode:r.mode&4095,mtimeMs:r.mtimeMs}:{path:t,type:"file",size:r.length,mode:r.mode&4095,mtimeMs:r.mtimeMs});return e}toWrittenSnapshot(){return{files:[...this.nodes.entries()].map(([e,t])=>t.type==="directory"?{path:e,type:"directory",mode:t.mode,mtimeMs:t.mtimeMs}:t.dirty?{path:e,type:"file",content:xe(t.content??new Uint8Array),mode:t.mode,mtimeMs:t.mtimeMs}:this.sized(e,t)).concat(this.untouchedStoreEntries())}}sized(e,t){return{path:e,type:"file",size:t.content?.byteLength??t.size??0,mode:t.mode,mtimeMs:t.mtimeMs}}existsSync(e){return this.node(Y(e))!==void 0}statSync(e){const t=Y(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);const n=r.content?.byteLength??r.size??0;return{isFile:()=>r.type==="file",isDirectory:()=>r.type==="directory",size:n,mode:r.mode,mtimeMs:r.mtimeMs,atimeMs:r.atimeMs,ctimeMs:r.mtimeMs,nlink:1,uid:1e3,gid:1e3,dev:1,ino:r.ino,rdev:0,blksize:4096,blocks:Math.ceil(n/512)}}lstatSync(e){return this.statSync(e)}async readFile(e){return this.readFileSync(e)}readFileSync(e){const t=Y(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such file, open '${t}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return this.bytesOf(r).slice()}linkTargetSync(e,t,r,n,s=!1){const o=this.node(s?e:Y(e));if(o?.type==="file"){if(o.link===void 0){const a=o.content?.byteLength??o.size??0;o.link=a<t||a>r?null:n(this.bytesOf(o))??null}return o.link??void 0}}bytesOf(e){return e.content===void 0&&e.load&&(e.content=e.load(),e.size=e.content.byteLength),e.content??new Uint8Array}viewRangeSync(e,t,r){const n=this.node(Y(e));if(!n)throw new Error(`ENOENT: no such file, open '${Y(e)}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${Y(e)}'`);return n.range&&n.content===void 0?n.range(t,r):this.bytesOf(n).subarray(t,t+r)}readRangeSync(e,t,r){const n=Y(e),s=this.node(n);if(!s)throw new Error(`ENOENT: no such file, open '${n}'`);if(s.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${n}'`);return s.range&&s.content===void 0?s.range(t,r):this.bytesOf(s).slice(t,t+r)}writeRangeSync(e,t,r){this.mutate(()=>{const n=Y(e);this.mkdirSync($e(n),{recursive:!0});const s=this.isHidden(n);this.unhide(n);const o=s?this.nodes.get(n):this.node(n);if(o?.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${n}'`);const a=o?this.bytesOf(o):new Uint8Array,f=t+r.byteLength;let y;if(f<=a.byteLength)y=o?.dirty?a:a.slice();else if(f<=a.buffer.byteLength-a.byteOffset&&o?.dirty)y=new Uint8Array(a.buffer,a.byteOffset,f),y.fill(0,a.byteLength,t);else{const g=this.takeSpare(f);y=new Uint8Array(g??new ArrayBuffer(Math.max(f,a.byteLength*2,4096)),0,f),y.set(a),g&&y.fill(0,a.byteLength,t),o?.dirty&&this.release(a)}y.set(r,t),this.nodes.set(n,{type:"file",content:y,dirty:!0,mode:o?.type==="file"?o.mode:420,atimeMs:re(),mtimeMs:re(),ino:o?.type==="file"?o.ino:this.nextInode++}),this.markMutation(n)})}truncateSync(e,t){this.mutate(()=>{const r=Y(e),n=this.node(r);if(!n)throw new Error(`ENOENT: no such file, truncate '${r}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, truncate '${r}'`);let s;if(t===0&&n.content===void 0)s=new Uint8Array;else{const o=this.bytesOf(n),a=o.buffer.byteLength-o.byteOffset;n.dirty&&t<=a&&(a<=Vr||t*4>=a)?(s=new Uint8Array(o.buffer,o.byteOffset,t),s.fill(0,o.byteLength)):(s=new Uint8Array(t),s.set(o.subarray(0,t)),n.dirty&&this.release(o))}this.nodes.set(r,{type:"file",content:s,dirty:!0,mode:n.mode,atimeMs:re(),mtimeMs:re(),ino:n.ino}),this.markMutation(r)})}spares=[];release(e){const t=e.buffer;if(!(t instanceof ArrayBuffer)||t.byteLength<Vr||t.byteLength>oi)return;this.spares.push(t);let r=this.spares.reduce((n,s)=>n+s.byteLength,0);for(;this.spares.length>Io||r>oi;)r-=this.spares.shift().byteLength}takeSpare(e){const t=Math.max(e*4,Vr*4);let r=-1;return this.spares.forEach((n,s)=>{n.byteLength>=e&&n.byteLength<=t&&(r<0||n.byteLength<this.spares[r].byteLength)&&(r=s)}),r<0?void 0:this.spares.splice(r,1)[0]}writeFileSync(e,t){this.mutate(()=>{const r=Y(e);this.mkdirSync($e(r),{recursive:!0});const n=this.isHidden(r);this.unhide(r);const s=n?this.nodes.get(r):this.node(r);s?.type==="file"&&s.dirty&&s.content&&this.release(s.content),this.nodes.set(r,{type:"file",content:typeof t=="string"?new TextEncoder().encode(t):t.slice(),dirty:!0,mode:s?.type==="file"?s.mode:420,atimeMs:re(),mtimeMs:re(),ino:s?.type==="file"?s.ino:this.nextInode++}),this.markMutation(r)})}mkdirSync(e,t){this.mutate(()=>{const r=Y(e);if(r==="/")return;if(!this.node(r)&&this.node($e(r))?.type==="directory"){this.unhide(r);const a=re();this.nodes.set(r,{type:"directory",mode:493,atimeMs:a,mtimeMs:a,ino:this.nextInode++}),this.markMutation(r);return}const n=r.slice(1).split("/");let s="";for(let o=0;o<n.length;o+=1){s+=`/${n[o]}`;const a=this.node(s);if(a?.type==="file")throw new Error(`ENOTDIR: not a directory, mkdir '${s}'`);if(a)continue;if(!t?.recursive&&o!==n.length-1)throw new Error(`ENOENT: no such directory, mkdir '${s}'`);this.unhide(s);const f=re();this.nodes.set(s,{type:"directory",mode:493,atimeMs:f,mtimeMs:f,ino:this.nextInode++}),this.markMutation(s)}})}readdirSync(e){const t=Y(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such directory, scandir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);const n=new Set(this.nodes.namesIn(t));if(this.lower&&!this.isHidden(t)){const s=t==="/"?[...new Set([...this.lower.childrenOf("/"),...Hi.filter(o=>this.lower.entries.has(o)).map(o=>o.slice(1))])]:this.lower.childrenOf(t);for(const o of s)this.isHidden(t==="/"?`/${o}`:`${t}/${o}`)||n.add(o)}return[...n]}unlinkSync(e){this.mutate(()=>{const t=Y(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such file, unlink '${t}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, unlink '${t}'`);r.dirty&&r.content&&this.release(r.content),this.nodes.delete(t),this.hide(t),this.markMutation(t)})}rmdirSync(e){this.mutate(()=>{const t=Y(e);if(t==="/")throw new Error("EPERM: cannot remove root directory");const r=this.node(t);if(!r)throw new Error(`ENOENT: no such directory, rmdir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, rmdir '${t}'`);if(this.readdirSync(t).length>0)throw new Error(`ENOTEMPTY: directory not empty, rmdir '${t}'`);this.nodes.delete(t),this.hide(t),this.markMutation(t)})}renameSync(e,t){this.mutate(()=>{const r=Y(e),n=Y(t);if(!this.node(r))throw new Error(`ENOENT: no such file or directory, rename '${r}'`);if(this.mkdirSync($e(n),{recursive:!0}),this.lower&&!this.isHidden(r))for(const[a]of this.lower.descendants(r))this.node(a);const o=this.nodes.subtree(r);for(const[a]of o)this.nodes.delete(a);this.hide(r),this.unhide(n);for(const[a,f]of o){if(f.type==="file"){const p=this.bytesOf(f);f.dirty||(f.content=p.slice()),f.dirty=!0}const y=`${n}${a.slice(r.length)}`,g=this.nodes.get(y);g?.type==="file"&&g.dirty&&g.content&&g!==f&&this.release(g.content),this.nodes.set(y,f),this.markMutation(a),this.markMutation(y)}})}reserveInodes(e){const t=this.nextInode;return this.nextInode+=e,t}restoreNodeSync(e,t){this.mutate(()=>{const r=Y(e);this.unhide(r);const n=this.nodes.get(r);n?.type==="file"&&n.dirty&&n.content&&this.release(n.content),this.nodes.set(r,t.directory?{type:"directory",mode:t.mode&4095,atimeMs:t.atimeMs,mtimeMs:t.mtimeMs,ino:t.ino}:{type:"file",content:t.content??new Uint8Array,dirty:!0,mode:t.mode&4095,atimeMs:t.atimeMs,mtimeMs:t.mtimeMs,ino:t.ino}),this.markMutation(r)})}chmodSync(e,t){this.mutate(()=>{const r=Y(e),n=this.node(r);if(!n)throw new Error(`ENOENT: no such file or directory, chmod '${r}'`);n.mode=t&4095,this.markMutation(r)})}utimesSync(e,t,r){this.mutate(()=>{const n=Y(e),s=this.node(n);if(!s)throw new Error(`ENOENT: no such file or directory, utimes '${n}'`);s.atimeMs=typeof t=="number"?t:Number(t),s.mtimeMs=typeof r=="number"?r:Number(r),this.markMutation(n)})}mutate(e){this.mutationDepth+=1;try{return e()}finally{this.mutationDepth-=1,this.mutationDepth===0&&this.mutated&&(this.mutated=!1,this.mutationHandler?.())}}markMutation(e){this.mutated=!0,this.changedPaths?.add(Y(e))}}const Eo=1<<20,Ot=64*1024,Ao=8*1024*1024,ko=1<<20,Vr=64*1024,Io=2,oi=32*1024*1024;function No(){const i=re();return{type:"directory",mode:493,atimeMs:i,mtimeMs:i,ino:1}}function Y(i){if(Mo(i))return i;const e=[];for(const t of`/${i}`.split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return`/${e.join("/")}`}function Mo(i){if(i.charCodeAt(0)!==47)return!1;if(i.length===1)return!0;let e=1;for(let t=1;t<=i.length;t+=1){if(t<i.length&&i.charCodeAt(t)!==47)continue;const r=t-e;if(r===0||i.charCodeAt(e)===46&&(r===1||r===2&&i.charCodeAt(e+1)===46))return!1;e=t+1}return!0}function $e(i){return i.slice(0,i.lastIndexOf("/"))||"/"}function fr(i){let e=1;for(let t=0;t<i.length;t+=1)i.charCodeAt(t)===47&&(e+=1);return e}function Vi(i,e,t,r,n){return Atomics.wait(i,e,t,r)}function ai(i,e,t){const{appended:r,superseded:n}=t?Lo(i,e,t):{appended:new Map,superseded:new Set},s=[...e.removed].sort((a,f)=>hr(f)-hr(a));for(const a of s)i.existsSync(a)&&(i.statSync(a).isDirectory()?i.rmdirSync(a):i.unlinkSync(a));const o=[...e.files].filter(a=>!n.has(a.path)).sort((a,f)=>hr(a.path)-hr(f.path));for(const a of o){if(a.type==="directory")i.existsSync(a.path)&&!i.statSync(a.path).isDirectory()&&i.unlinkSync(a.path),i.mkdirSync(a.path,{recursive:!0});else if(Bt(a)){i.existsSync(a.path)&&i.statSync(a.path).isDirectory()&&i.rmdirSync(a.path);const f=a.path.slice(0,a.path.lastIndexOf("/"))||"/";f!=="/"&&!i.existsSync(f)&&i.mkdirSync(f,{recursive:!0});const y=i.existsSync(a.path)?i.statSync(a.path).mode:void 0,g=y!==void 0&&(y&128)===0;g&&i.chmodSync?.(a.path,y&4095|128),i.writeFileSync(a.path,r.get(a.path)??Ct(a)),g&&a.mode===void 0&&i.chmodSync?.(a.path,y&4095)}else if(!i.existsSync(a.path)||i.statSync(a.path).isDirectory())continue;a.mode!==void 0&&i.chmodSync?.(a.path,a.mode),a.mtimeMs!==void 0&&i.utimesSync?.(a.path,new Date(a.mtimeMs),new Date(a.mtimeMs))}}function Lo(i,e,t){const r=new Map,n=new Set,s=t.byPath,o=s instanceof Map?s:new Map(t.files.map(y=>[y.path,y])),a=new Map(e.files.map(y=>[y.path,y])),f=new Set([...e.files.map(y=>y.path),...e.removed]);for(const y of f){const g=o.get(y),p=ji(i,y);if(g!==void 0&&Gr(g,a.get(y))||p===void 0&&a.get(y)!==void 0)continue;const E=a.get(y);if(!(p!==void 0&&E!==void 0&&E.type===p.type&&(G(E).mtimeMs??0)>(G(p).mtimeMs??0))&&!(g!==void 0&&p!==void 0&&g.type===p.type&&(G(p).mtimeMs??0)<(G(g).mtimeMs??0))&&!Gr(g,p)&&!Gr(a.get(y),p)){if(xo(g,p,a.get(y)))continue;const I=Oo(i,y,g,p,a.get(y),t.bytesOf?.bind(t));if(I){r.set(y,I);continue}const M=a.get(y);if(g!==void 0&&p!==void 0&&M!==void 0&&M.type===p.type&&(G(M).mtimeMs??0)>=(G(g).mtimeMs??0)&&(G(p).mtimeMs??0)>(G(M).mtimeMs??0)&&(G(p).mtimeMs??0)>(G(g).mtimeMs??0)){n.add(y);continue}throw new Error(`Browser filesystem write conflict at ${y}. ${JSON.stringify({base:jr(g),current:jr(p),proposed:jr(a.get(y))})}`)}}return{appended:r,superseded:n}}function Oo(i,e,t,r,n,s){if(t?.type!=="file"||r?.type!=="file"||n?.type!=="file"||!Bt(n)||!i.readFileSync||G(r).mode!==G(n).mode)return;const o=Bt(t)?Ct(t):s?.(e);if(!o||o.length===0)return;const a=Ct(n),f=i.readFileSync(e),y=typeof f=="string"?new TextEncoder().encode(f):f,g=E=>E.length>=o.length&&Gi(E.subarray(0,o.length),o);if(a.length<=o.length||!g(a)||!g(y))return;const p=new Uint8Array(y.length+a.length-o.length);return p.set(y,0),p.set(a.subarray(o.length),y.length),p}function jr(i){return i?{type:i.type,...G(i)}:null}function xo(i,e,t){return e?.type!=="directory"||t?.type!=="directory"?!1:i===void 0?G(e).mode===G(t).mode:G(e).mode===G(t).mode&&i.type==="directory"&&G(i).mode===G(e).mode}function hr(i){let e=1;for(let t=0;t<i.length;t+=1)i.charCodeAt(t)===47&&(e+=1);return e}function ji(i,e){if(!i.existsSync(e))return;const t=i.statSync(e),r={...t.mode!==void 0?{mode:t.mode}:{},...t.mtimeMs!==void 0?{mtimeMs:t.mtimeMs}:{}};return t.isDirectory()?{path:e,type:"directory",...r}:{path:e,type:"file",...t.size!==void 0?{size:t.size}:{},...r}}function Gr(i,e){return i===void 0?e===void 0:e!==void 0&&i.type===e.type&&Po(i,e)&&G(i).mode===G(e).mode&&G(i).mtimeMs===G(e).mtimeMs}function G(i){const e=i;return{...e.mode===void 0?{}:{mode:e.mode&4095},...e.mtimeMs===void 0?{}:{mtimeMs:e.mtimeMs}}}function Po(i,e){return i.type!=="file"||e.type!=="file"?!0:i.content!==void 0&&e.content!==void 0?i.content===e.content:Bt(i)&&Bt(e)?Gi(Ct(i),Ct(e)):ci(i)===ci(e)}function ci(i){if(i.size!==void 0)return i.size;if(i.bytes!==void 0)return i.bytes.byteLength;if(i.content===void 0)return;const e=i.content.endsWith("==")?2:i.content.endsWith("=")?1:0;return Math.floor(i.content.length*3/4)-e}function Bt(i){return i!==void 0&&(i.bytes!==void 0||i.content!==void 0)}function Ct(i){return i.bytes??(i.content===void 0?void 0:ze(i.content))}function Gi(i,e){if(i===e)return!0;if(i.byteLength!==e.byteLength)return!1;let t=0;if(i.byteOffset%4===0&&e.byteOffset%4===0){const r=i.byteLength>>>2,n=new Uint32Array(i.buffer,i.byteOffset,r),s=new Uint32Array(e.buffer,e.byteOffset,r);for(let o=0;o<r;o+=1)if(n[o]!==s[o])return!1;t=r<<2}for(;t<i.byteLength;t+=1)if(i[t]!==e[t])return!1;return!0}const di=0,fi=1,Se=2,gr=3,Sr=4,Ki=5,Ji=6;function _o(i){const e=$t(i),t=i.role==="reader"?gr:Sr;Atomics.sub(e,t,1)<=1&&Atomics.store(e,t,0),Atomics.add(e,i.role==="reader"?Ji:Ki,1),Atomics.notify(e,Se)}function To(i,e){const t=$t(i),r=Atomics.load(t,Se);let n=0;return i.role==="reader"?(e&1&&(r>0||Atomics.load(t,Sr)===0)&&(n|=1),Atomics.load(t,Sr)===0&&(n|=16)):(e&4&&Atomics.load(t,gr)>0&&r<Fo(i)&&(n|=4),Atomics.load(t,gr)===0&&(n|=16)),n}function Xi(i,e){if(i.role!=="reader")return-9n;if(e===0)return new Uint8Array;const t=$t(i),r=qi(i),n=Atomics.load(t,Se);if(n===0)return Atomics.load(t,Sr)===0?new Uint8Array:-11n;const s=Math.min(Math.max(0,e),n),o=Atomics.load(t,di),a=Math.min(s,r.byteLength-o),f=new Uint8Array(s);return f.set(r.subarray(o,o+a)),a<s&&f.set(r.subarray(0,s-a),a),Atomics.store(t,di,(o+s)%r.byteLength),Atomics.sub(t,Se,s),s>0&&Atomics.add(t,Ji,1),Atomics.notify(t,Se),f}function Ro(i,e){const t=$t(i);for(;;){const r=Xi(i,e);if(r!==-11n)return r;Vi(t,Se,0,50)}}function vo(i,e){if(i.role!=="writer")return-9n;const t=$t(i),r=qi(i);let n=0;for(;n<e.byteLength;){if(Atomics.load(t,gr)===0)return n>0?BigInt(n):-32n;const s=Atomics.load(t,Se),o=r.byteLength-s;if(o===0){Vi(t,Se,s,50);continue}const a=Atomics.load(t,fi),f=Math.min(e.byteLength-n,o,r.byteLength-a);r.set(e.subarray(n,n+f),a),Atomics.store(t,fi,(a+f)%r.byteLength),Atomics.add(t,Se,f),Atomics.add(t,Ki,1),Atomics.notify(t,Se),n+=f}return BigInt(n)}const hi=new WeakMap;function $t(i){const e=i.controlOffset??0;let t=hi.get(i.control);t||(t=new Map,hi.set(i.control,t));let r=t.get(e);return r||(r=new Int32Array(i.control,e,8),t.set(e,r)),r}function Fo(i){return i.payloadLength??i.payload.byteLength-(i.payloadOffset??0)}function qi(i){const e=i.payloadOffset??0,t=i.payloadLength??i.payload.byteLength-e;return new Uint8Array(i.payload,e,t)}class Zi{nextId=1;pipeMetadata;constructor(e=new SharedArrayBuffer(65536*3*4)){this.pipeMetadata=new Int32Array(e)}descriptions=new Map;create(e,t,r){for(;this.nextId<65536&&this.descriptions.has(this.nextId);)this.nextId++;if(this.nextId>=65536){for(this.nextId=1;this.descriptions.has(this.nextId);)this.nextId++;if(this.nextId>=65536)throw new Error("EMFILE")}const n={id:this.nextId++,kind:e,value:t,references:0,release:r};return this.descriptions.set(n.id,n),e==="special"&&typeof t=="object"&&t!==null&&"stdio"in t&&Atomics.store(this.pipeMetadata,n.id*3+2,Number(t.stdio)+1),n}get(e){return this.descriptions.get(e)}retain(e){const t=this.descriptions.get(e);if(!t)throw new Error(`Unknown open description ${e}`);t.references++}release(e){const t=this.descriptions.get(e);if(!t||t.references<=0)throw new Error(`Unbalanced description release ${e}`);--t.references===0&&(this.descriptions.delete(e),Atomics.store(this.pipeMetadata,e*3,0),Atomics.store(this.pipeMetadata,e*3+1,0),Atomics.store(this.pipeMetadata,e*3+2,0),t.release?.())}}class Ir{registry;entries=[];named=new Map;sharedEntries;constructor(e,t=new SharedArrayBuffer(65536*4)){this.registry=e,this.sharedEntries=new Int32Array(t)}get(e){const t=this.entries[e];return t&&this.registry.get(t.description)}set(e,t,r=0){this.registry.retain(t.id),this.close(e),this.entries[e]={description:t.id,flags:r},this.named.set(t.id,(this.named.get(t.id)??0)+1),Atomics.store(this.sharedEntries,e,t.id)}close(e){const t=this.entries[e];if(!t)return!1;delete this.entries[e];const r=(this.named.get(t.description)??1)-1;return r>0?this.named.set(t.description,r):this.named.delete(t.description),Atomics.store(this.sharedEntries,e,0),this.registry.release(t.description),!0}names(e){return this.named.has(e)}copy(){const e=new Ir(this.registry);return this.entries.forEach((t,r)=>{t&&e.set(r,this.registry.get(t.description),t.flags)}),e}exec(){this.entries.forEach((e,t)=>{e&&e.flags&1&&this.close(t)})}exit(){this.entries.forEach((e,t)=>{e&&this.close(t)})}view(e,t){return new Do(this,e,t)}}class Do{table;kind;release;constructor(e,t,r){this.table=e,this.kind=t,this.release=r}resolvedEntries=[];resolvedValues=[];resolvedOwn=[];resolve(e){const t=this.table.entries[e];if(t===void 0)return this.resolvedEntries[e]!==void 0&&(this.resolvedEntries[e]=void 0,this.resolvedValues[e]=void 0),!1;if(this.resolvedEntries[e]!==t){const r=this.table.registry.get(t.description),n=r?.kind===this.kind;this.resolvedEntries[e]=t,this.resolvedValues[e]=n?r.value:void 0,this.resolvedOwn[e]=n}return this.resolvedOwn[e]}get(e){return this.resolve(e)?this.resolvedValues[e]:void 0}has(e){return this.resolve(e)}set(e,t){const r=this.table.registry.create(this.kind,t,()=>this.release?.(t));this.table.set(e,r)}delete(e){return this.has(e)?(this.resolvedEntries[e]=void 0,this.resolvedValues[e]=void 0,this.table.close(e)):!1}*values(){for(let e=0;e<this.table.entries.length;e++)this.has(e)&&(yield this.get(e))}}const li=1e4,Bo=19999,ui=64*1024,Kr=8,yi=3,mi=4,Jr=2048,Xr=524288,Co=0,$o=1,Uo=2,zo=3,Yo=4,wi=1030,Wo=1,Ho=4096,Vo=new WeakMap,pi=new WeakMap;let gi,Si;function jo(i,e){if(!Number.isSafeInteger(e)||e<0||e>=65536)return 0;let t=i===gi?Si:pi.get(i);t||(t={table:new Int32Array(i.table),descriptions:new Int32Array(i.descriptions)},pi.set(i,t)),gi=i,Si=t;const r=Atomics.load(t.table,e);return Atomics.load(t.descriptions,r*3)}class Go{memory;state;remote;table;slots;constructor(e,t,r,n){this.memory=e,this.state=t,this.remote=n,this.table=r??Vo.get(t.table),this.slots=new Int32Array(t.slots)}isPipeFd(e){return this.entry(e)!==0}exportBrowserProcessPipe(e){const t=this.entry(e);return t===0?void 0:this.handle(t)}pollDescriptor(e,t){const r=this.entry(e);return r===0?void 0:To(this.handle(r),t)}ioctl(e,t){if(this.isPipeFd(e))return t===21537||t===21585||t===21584?0n:-25n}imports(e={}){const t=(n,s)=>e[n]?.(...s)??-38n,r={...e,SYS_pipe:n=>this.pipe(Number(n),0),SYS_pipe2:(n,s)=>this.pipe(Number(n),Number(s)),SYS_close:n=>this.isPipeFd(Number(n))?this.close(Number(n)):e.SYS_close?.(n)??-38n,SYS_read:(n,s,o)=>this.isPipeFd(Number(n))?this.read(Number(n),Number(s),Number(o)):e.SYS_read?.(n,s,o)??-38n,SYS_pread64:(n,s,o,a)=>this.isPipeFd(Number(n))?-29n:e.SYS_pread64?.(n,s,o,a)??-38n,SYS_write:(n,s,o)=>this.isPipeFd(Number(n))?this.write(Number(n),Number(s),Number(o)):e.SYS_write?.(n,s,o)??-38n,SYS_pwrite64:(n,s,o,a)=>this.isPipeFd(Number(n))?-29n:e.SYS_pwrite64?.(n,s,o,a)??-38n,SYS_preadv:(n,s,o,a,f)=>this.isPipeFd(Number(n))?-29n:e.SYS_preadv?.(n,s,o,a,f)??-38n,SYS_pwritev:(n,s,o,a,f)=>this.isPipeFd(Number(n))?-29n:e.SYS_pwritev?.(n,s,o,a,f)??-38n,SYS_readv:(n,s,o)=>this.isPipeFd(Number(n))?this.readv(Number(n),Number(s),Number(o)):e.SYS_readv?.(n,s,o)??-38n,SYS_writev:(n,s,o)=>this.isPipeFd(Number(n))?this.writev(Number(n),Number(s),Number(o)):e.SYS_writev?.(n,s,o)??-38n,SYS_lseek:(n,s,o)=>this.isPipeFd(Number(n))?-29n:e.SYS_lseek?.(n,s,o)??-38n,SYS_fstat:(n,s)=>this.isPipeFd(Number(n))?this.fstat(Number(s)):e.SYS_fstat?.(n,s)??-38n,SYS_dup:n=>this.isPipeFd(Number(n))?this.duplicate(Number(n)):e.SYS_dup?.(n)??-38n,SYS_dup2:(n,s)=>this.isPipeFd(Number(n))?this.duplicate(Number(n),Number(s),3,!1,e):e.SYS_dup2?.(n,s)??-38n,SYS_dup3:(n,s,o)=>this.isPipeFd(Number(n))?Number(n)===Number(s)||(Number(o)&~Xr)!==0?-22n:this.duplicate(Number(n),Number(s),3,!!(Number(o)&Xr),e):e.SYS_dup3?.(n,s,o)??-38n,SYS_fcntl:(n,s,o)=>this.isPipeFd(Number(n))?this.fcntl(Number(n),Number(s),Number(BigInt.asIntN(32,BigInt(o))),e):e.SYS_fcntl?.(n,s,o)??-38n,SYS_poll:(n,s,o)=>this.poll(Number(n),Number(s),Number(o),()=>t("SYS_poll",[n,s,o]))};if(this.remote)for(const n of["SYS_pipe","SYS_pipe2","SYS_close","SYS_dup","SYS_dup2","SYS_dup3","SYS_fcntl"]){const s=r[n];r[n]=(...o)=>n==="SYS_pipe"||n==="SYS_pipe2"||this.isPipeFd(Number(o[0]))?this.remote.syscall(n,o):s(...o)}return r}pipe(e,t){if((t&-526337)!==0)return-22n;if(!this.validRange(e,8))return-14n;const r=this.allocateSlot();if(r<0)return-24n;const n=this.control(r);n.fill(0),Atomics.store(n,yi,1),Atomics.store(n,mi,1);const s=this.allocateDescriptor(r+1),o=s>=0?this.allocateDescriptor(-(r+1)):-1;if(s<0||o<0)return s>=0&&this.table.close(s),Atomics.store(this.slots,r,0),-24n;for(const f of[s,o])this.table.entries[f].flags=t&Xr?1:0,Atomics.store(new Int32Array(this.state.descriptions),this.table.entries[f].description*3+1,t&Jr);const a=this.view();return a.setInt32(e,s,!0),a.setInt32(e+4,o,!0),0n}read(e,t,r){if(!Number.isSafeInteger(r)||r<0||!this.validRange(t,r))return-22n;const s=(this.statusFlags(e)&Jr?Xi:Ro)(this.handle(this.entry(e)),r);return typeof s=="bigint"?s:(this.bytes().set(s,t),BigInt(s.byteLength))}write(e,t,r){return!Number.isSafeInteger(r)||r<0||!this.validRange(t,r)?-22n:vo(this.handle(this.entry(e)),this.bytes().slice(t,t+r))}readv(e,t,r){if(!Number.isSafeInteger(r)||r<0||r>1024||!this.validRange(t,r*8))return-22n;let n=0n;for(let s=0;s<r;s+=1){const o=t+s*8,a=this.read(e,this.view().getUint32(o,!0),this.view().getUint32(o+4,!0));if(a<0n)return n>0n?n:a;if(n+=a,a<BigInt(this.view().getUint32(o+4,!0)))break}return n}writev(e,t,r){if(!Number.isSafeInteger(r)||r<0||r>1024||!this.validRange(t,r*8))return-22n;let n=0n;for(let s=0;s<r;s+=1){const o=t+s*8,a=this.write(e,this.view().getUint32(o,!0),this.view().getUint32(o+4,!0));if(a<0n)return n>0n?n:a;n+=a}return n}fstat(e){if(!this.validRange(e,144))return-14n;const t=this.view();for(let r=0;r<144;r+=4)t.setUint32(e+r,0,!0);return t.setBigUint64(e+16,1n,!0),t.setUint32(e+24,Ho|438,!0),t.setUint32(e+28,1e3,!0),t.setUint32(e+32,1e3,!0),t.setBigInt64(e+56,4096n,!0),0n}statusFlags(e){const t=Atomics.load(new Int32Array(this.state.table),e);return Atomics.load(new Int32Array(this.state.descriptions),t*3+1)}fcntl(e,t,r,n){if(t===Co||t===wi)return this.duplicate(e,void 0,Math.max(3,r),t===wi,n);const s=this.table.entries[e];return t===$o?BigInt(s.flags):t===Uo?(s.flags=r&Wo,0n):t===zo?BigInt(this.statusFlags(e)|(this.entry(e)<0?1:0)):t===Yo?(Atomics.store(new Int32Array(this.state.descriptions),s.description*3+1,r&Jr),0n):-22n}duplicate(e,t,r=li,n=!1,s={}){const o=this.table.get(e);if(!o)return-9n;if(t===e)return BigInt(e);const a=t===void 0?this.freeDescriptor(r):t;return a<0||a>=65536?-9n:(this.table.set(a,o,n?1:0),BigInt(a))}close(e){return this.table.close(e)?0n:-9n}poll(e,t,r,n){if(!Number.isSafeInteger(t)||t<0||t>65536||!this.validRange(e,t*8))return-22n;const s=n();let o=typeof s=="bigint"?Number(s):typeof s=="number"?s:0;o<0&&(o=0);for(let a=0;a<t;a+=1){const f=e+a*8,y=this.view().getInt32(f,!0),g=this.pollDescriptor(y,this.view().getInt16(f+4,!0));g!==void 0&&(this.view().getInt16(f+6,!0)!==0&&(o-=1),this.view().setInt16(f+6,g,!0),g!==0&&(o+=1))}return BigInt(o)}allocateSlot(){for(let e=0;e<this.slots.length;e+=1)if(Atomics.compareExchange(this.slots,e,0,1)===0)return e;return-1}freeDescriptor(e){for(let t=Math.max(3,e);t<=Bo;t++)if(!this.table.get(t))return t;return-1}allocateDescriptor(e,t=li){const r=this.freeDescriptor(t);if(r<0)return r;const n=Math.abs(e)-1,s=this.table.registry.create("pipe",{pipe:n,side:e>0?"reader":"writer"},()=>{_o(this.handle(e));const o=this.control(n);Atomics.load(o,yi)===0&&Atomics.load(o,mi)===0&&Atomics.store(this.slots,n,0)});return Atomics.store(this.table.registry.pipeMetadata,s.id*3,e),this.table.set(r,s),r}entry(e){return jo(this.state,e)}handle(e){const t=Math.abs(e)-1;return{control:this.state.controls,payload:this.state.payloads,role:e>0?"reader":"writer",controlOffset:t*Kr*Int32Array.BYTES_PER_ELEMENT,payloadOffset:t*ui,payloadLength:ui}}control(e){return new Int32Array(this.state.controls,e*Kr*Int32Array.BYTES_PER_ELEMENT,Kr)}bytes(){return new Uint8Array(this.memory().buffer)}view(){return new DataView(this.memory().buffer)}validRange(e,t){return Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&e>=0&&t>=0&&e+t<=this.memory().buffer.byteLength}}function Ko(i){if(!i||typeof i!="object"||Object.keys(i).some(t=>t!=="writableRoots")||!Array.isArray(i.writableRoots)||i.writableRoots.length>128)throw new TypeError("Invalid process filesystem policy: expected up to 128 writableRoots.");const e=[...new Set(Array.from(i.writableRoots,Qi))].sort();return Object.freeze({writableRoots:Object.freeze(e.filter(t=>!e.some(r=>r!==t&&es(t,r))))})}function Jo(i,e){const t=Ko(e),r=n=>t.writableRoots.some(s=>es(n,s));return n=>{const s=Qi(n);r(s)||qr(s);let o="";for(const a of s.split("/").filter(Boolean)){o+=`/${a}`;try{i.lstatSync(o).isSymbolicLink()&&qr(s)}catch(f){if(f.code!=="ENOENT")throw f;r(o)||qr(o)}}return s}}function Qi(i){if(typeof i!="string"||!i.startsWith("/")||i.includes("\0")||i.length>8192)throw new TypeError("Filesystem policy paths must be absolute paths without NUL bytes.");const e=[];for(const t of i.split("/"))t===".."?e.pop():t&&t!=="."&&e.push(t);return`/${e.join("/")}`}function es(i,e){return e==="/"||i===e||i.startsWith(`${e}/`)}function qr(i){throw Object.assign(new Error(`EACCES: process filesystem policy denies mutation of '${i}'`),{code:"EACCES",path:i})}class Xo{bytes;offset=0;constructor(e){this.bytes=e}read(e){const t=this.bytes.slice(this.offset,this.offset+Math.max(0,e));return this.offset+=t.byteLength,t}poll(){return this.offset<this.bytes.byteLength}wait(){return this.poll()}available(){return Math.max(0,this.bytes.byteLength-this.offset)}}const K=new TextEncoder().encode("\0supercode-wali-symlink-v1\0"),ts=40,br=4096;function qo(i,e,t){if(i.existsSync(t))throw Er("EEXIST");const r=new TextEncoder().encode(e);if(r.byteLength>=br)throw Er("ENAMETOOLONG");const n=new Uint8Array(K.byteLength+r.byteLength);n.set(K),n.set(r,K.byteLength),i.writeFileSync(t,n)}function mr(i,e){if(i.linkTargetSync)return i.linkTargetSync(e,K.byteLength,K.byteLength+br,rs);if(!i.existsSync(e))return;const t=i.statSync(e);if(!t.isFile()||t.size<K.byteLength||t.size>K.byteLength+br)return;if(i.readRangeSync){const n=i.readRangeSync(e,0,K.byteLength);for(let s=0;s<K.byteLength;s+=1)if(n[s]!==K[s])return}const r=i.readFileSync(e);if(!(r.byteLength<K.byteLength)){for(let n=0;n<K.byteLength;n+=1)if(r[n]!==K[n])return;return new TextDecoder("utf-8",{fatal:!0}).decode(r.subarray(K.byteLength,ns(r)))}}function rs(i){if(!(i.byteLength<K.byteLength)){for(let e=0;e<K.byteLength;e+=1)if(i[e]!==K[e])return;return new TextDecoder("utf-8",{fatal:!0}).decode(i.slice(K.byteLength,ns(i)))}}function ns(i){const e=i.indexOf(0,K.byteLength);return e<0?i.byteLength:e}function Zo(i,e,t=!0){if(i.linkTargetSync&&ea(e))return Qo(i,e,t);let r=e;for(let n=0;n<ts;n+=1){const s=r.split("/").filter(Boolean);let o=!1;for(let a=0;a<s.length&&!(!t&&a===s.length-1);a+=1){const f=`/${s.slice(0,a+1).join("/")}`,y=mr(i,f);if(y===void 0)continue;const g=`/${s.slice(0,a).join("/")}`,p=y.startsWith("/")?gt(y):gt(`${g}/${y}`);r=gt(`${p}/${s.slice(a+1).join("/")}`),o=!0;break}if(!o)return r}throw Er("ELOOP")}function Qo(i,e,t){let r=e;for(let n=0;n<ts;n+=1){let s=!1,o=1;for(;o<=r.length;){const a=r.indexOf("/",o),f=a===-1;if(!t&&f)break;const y=f?r:r.slice(0,a),g=y.length>1?i.linkTargetSync(y,K.byteLength,K.byteLength+br,rs,!0):void 0;if(g!==void 0){const p=y.slice(0,y.lastIndexOf("/"))||"/",E=g.startsWith("/")?gt(g):gt(`${p}/${g}`);r=gt(f?E:`${E}/${r.slice(a+1)}`),s=!0;break}if(f)break;o=a+1}if(!s)return r}throw Er("ELOOP")}function ea(i){if(i.charCodeAt(0)!==47)return!1;if(i.length===1)return!0;let e=1;for(let t=1;t<=i.length;t+=1){const r=t<i.length?i.charCodeAt(t):47;if(r===92)return!1;if(r!==47)continue;const n=t-e;if(n===0||i.charCodeAt(e)===46&&(n===1||n===2&&i.charCodeAt(e+1)===46))return!1;e=t+1}return!0}function gt(i){const e=[];for(const t of i.replaceAll("\\","/").split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return`/${e.join("/")}`}function Er(i){return Object.assign(new Error(i),{code:i})}const ta=1463897161,ra=1,na=2,ia=3,sa=4,vt=5e4,ln=4096,oa=1<<24,is=827479120;function Ft(i){return i>=vt&&i<vt+ln}function aa(i,e=[]){const t=new TextEncoder,r=i.map(I=>t.encode(I.path)),n=e.map(I=>t.encode(I.path));let s=12;i.forEach((I,M)=>{s+=4+r[M].byteLength+4+4+8+8+8+4+(I.directory?0:I.content.byteLength)}),e.forEach((I,M)=>{s+=16+n[M].byteLength+4+8+4});const o=new Uint8Array(s),a=new DataView(o.buffer);let f=0;const y=I=>{a.setUint32(f,I,!0),f+=4},g=I=>{a.setFloat64(f,I,!0),f+=8},p=I=>{a.setBigUint64(f,BigInt(I),!0),f+=8},E=I=>{o.set(I,f),f+=I.byteLength};return y(is),y(i.length),y(e.length),i.forEach((I,M)=>{y(r[M].byteLength),E(r[M]),y(I.directory?1:0),y(I.mode),g(I.atimeMs),g(I.mtimeMs),p(I.ino);const k=I.directory?new Uint8Array:I.content;y(k.byteLength),E(k)}),e.forEach((I,M)=>{y(I.fd),y(I.group),y(I.closeOnExec?1:0),y(n[M].byteLength),E(n[M]),y(I.flags>>>0),g(I.position),y(I.directory?1:0)}),o}function ca(i,e){const t=new DataView(i.buffer,i.byteOffset,i.byteLength),r=new TextDecoder("utf-8",{fatal:!0});let n=0;const s=k=>{if(k<0||n+k>i.byteLength)throw xt()},o=()=>{s(4);const k=t.getUint32(n,!0);return n+=4,k},a=()=>{s(8);const k=t.getFloat64(n,!0);return n+=8,k},f=()=>{s(8);const k=Number(t.getBigUint64(n,!0));return n+=8,k},y=k=>{s(k);const b=i.slice(n,n+k);return n+=k,b},g=()=>{const k=r.decode(y(o()));if(k!==e&&!k.startsWith(`${e}/`))throw xt();return k};if(o()!==is)throw xt();const p=o(),E=o(),I=[];for(let k=0;k<p;k+=1){const b=g(),R=o()===1,x=o(),U=a(),H=a(),oe=f(),he=y(o());I.push({path:b,directory:R,mode:x,atimeMs:U,mtimeMs:H,ino:oe,content:he})}const M=[];for(let k=0;k<E;k+=1){const b=o(),R=o(),x=o()===1,U=g(),H=o()|0,oe=a(),he=o()===1;if(!Ft(b)||!Ft(R)||R>b||!Number.isSafeInteger(oe)||oe<0)throw xt();M.push({fd:b,group:R,closeOnExec:x,path:U,flags:H,position:oe,directory:he})}if(n!==i.byteLength)throw xt();return{nodes:I,descriptors:M}}function xt(){return Object.assign(new Error("EINVAL: the private tree handed back is not one"),{errnoName:"EINVAL"})}let bi=!1;const Zr=-100,De=3,Ei=1,da=2,Qr=64,fa=128,ha=512,Pt=1024,la=2048,ua=65536,en=0,Ai=1,ki=2,Ii=524288,tn=5,ya=6,Ni=7,lr=36,ma=37,Mi=38,rn=2,Li=0,Oi=1,wa=1,pa=2,ga=4,Sa=8,mt=256,xi=512,ba=0x3fffffffn,Ea=0x3ffffffen,Aa=32768,ka=16384,Ia=40960;class Ar{options;descriptors;files;specialDescriptors;stdioAliases;descriptorStatusFlags=new Map;stdin;nextDescription=1;cwd;guestFilesystem;assertWritable;privateTree;privateTreeDeclined=!1;constructor(e){this.options=e,this.descriptors=e.descriptors??new Ir(new Zi),this.files=this.descriptors.view("file"),this.specialDescriptors=this.descriptors.view("special",r=>r.close?.()),this.stdioAliases=this.descriptors.view("stdio"),this.cwd=wt("/",e.cwd);const t=e.filesystem;if(this.assertWritable=e.filesystemPolicy?Jo({lstatSync:r=>{if(!t)throw P("ENOSYS");const n=t.lstatSync?.(r)??t.statSync(r);return{isSymbolicLink:()=>n.isSymbolicLink?.()===!0||mr(t,r)!==void 0}}},e.filesystemPolicy):r=>r,this.guestFilesystem=t&&e.filesystemPolicy?{existsSync:t.existsSync.bind(t),statSync:t.statSync.bind(t),...t.lstatSync?{lstatSync:t.lstatSync.bind(t)}:{},readFileSync:t.readFileSync.bind(t),readFile:t.readFile.bind(t),readdirSync:t.readdirSync.bind(t),writeFileSync:(r,n)=>t.writeFileSync(this.assertWritable(r),n),...t.readRangeSync?{readRangeSync:t.readRangeSync.bind(t)}:{},...t.linkTargetSync?{linkTargetSync:t.linkTargetSync.bind(t)}:{},...t.viewRangeSync?{viewRangeSync:t.viewRangeSync.bind(t)}:{},...t.writeRangeSync?{writeRangeSync:(r,n,s)=>t.writeRangeSync(this.assertWritable(r),n,s)}:{},...t.truncateSync?{truncateSync:(r,n)=>t.truncateSync(this.assertWritable(r),n)}:{},mkdirSync:(r,n)=>t.mkdirSync(this.assertWritable(r),n),unlinkSync:r=>t.unlinkSync(this.assertWritable(r)),rmdirSync:r=>t.rmdirSync(this.assertWritable(r)),renameSync:(r,n)=>t.renameSync(this.assertWritable(r),this.assertWritable(n)),...t.chmodSync?{chmodSync:(r,n)=>t.chmodSync(this.assertWritable(r),n)}:{},...t.utimesSync?{utimesSync:(r,n,s)=>t.utimesSync(this.assertWritable(r),n,s)}:{},...t.reserveInodes?{reserveInodes:t.reserveInodes.bind(t)}:{},...t.restoreNodeSync?{restoreNodeSync:(r,n)=>t.restoreNodeSync(this.assertWritable(r),n)}:{}}:t,this.stdin="read"in e.stdin?e.stdin:new Xo(e.stdin),e.descriptors){if(this.descriptors.entries.length===0&&!e.descriptorState)for(const r of[0,1,2])this.specialDescriptors.set(r,{stdio:r})}else for(const r of[0,1,2])this.specialDescriptors.set(r,{stdio:r})}ownsFile(e){return this.files.has(e)}imports(){return{SYS_open:(e,t,r)=>this.open(this.readCString(Number(e)),Number(t),Number(r)),SYS_openat:(e,t,r,n)=>this.openAt(Number(e),this.readCString(Number(t)),Number(r),Number(n)),SYS_close:e=>this.close(Number(e)),SYS_read:(e,t,r)=>this.read(Number(e),Number(t),Number(r)),SYS_pread64:(e,t,r,n)=>this.pread(Number(e),Number(t),Number(r),Number(n)),SYS_write:(e,t,r)=>this.write(Number(e),Number(t),Number(r)),SYS_pwrite64:(e,t,r,n)=>this.pwrite(Number(e),Number(t),Number(r),Number(n)),SYS_readv:(e,t,r)=>this.readv(Number(e),Number(t),Number(r)),SYS_writev:(e,t,r)=>this.writev(Number(e),Number(t),Number(r)),SYS_preadv:(e,t,r,n,s)=>this.preadv(Number(e),Number(t),Number(r),Pi(n,s)),SYS_pwritev:(e,t,r,n,s)=>this.pwritev(Number(e),Number(t),Number(r),Pi(n,s)),SYS_lseek:(e,t,r)=>this.lseek(Number(e),Number(t),Number(r)),SYS_ftruncate:(e,t)=>this.ftruncate(Number(e),Number(t)),SYS_fstat:(e,t)=>this.fstat(Number(e),Number(t)),SYS_stat:(e,t)=>this.stat(this.readCString(Number(e)),Number(t),!1),SYS_lstat:(e,t)=>this.stat(this.readCString(Number(e)),Number(t),!0),SYS_newfstatat:(e,t,r,n)=>this.statAt(Number(e),this.readCString(Number(t)),Number(r),Number(n)),SYS_access:e=>this.access(this.readCString(Number(e))),SYS_faccessat:(e,t)=>this.accessAt(Number(e),this.readCString(Number(t))),SYS_faccessat2:(e,t)=>this.accessAt(Number(e),this.readCString(Number(t))),SYS_chmod:(e,t)=>this.chmod(this.readCString(Number(e)),Number(t)),SYS_fchmod:(e,t)=>this.fchmod(Number(e),Number(t)),SYS_fchmodat:(e,t,r,n)=>this.chmodAt(Number(e),this.readCString(Number(t)),Number(r),Number(n)),SYS_chdir:e=>this.chdir(this.readCString(Number(e))),SYS_fchdir:e=>this.fchdir(Number(e)),SYS_getcwd:(e,t)=>this.getcwd(Number(e),Number(t)),SYS_mkdir:(e,t)=>this.mkdir(this.readCString(Number(e)),Number(t)),SYS_mkdirat:(e,t,r)=>this.mkdirAt(Number(e),this.readCString(Number(t)),Number(r)),SYS_statfs:(e,t)=>this.statfs(this.readCString(Number(e)),Number(t)),SYS_fstatfs:(e,t)=>this.fstatfs(Number(e),Number(t)),SYS_inotify_init:()=>this.inotifyInit(),SYS_inotify_init1:()=>this.inotifyInit(),SYS_inotify_add_watch:(e,t)=>this.inotifyAddWatch(Number(e),this.readCString(Number(t))),SYS_inotify_rm_watch:e=>this.specialDescriptors.has(Number(e))?0n:-9n,SYS_rmdir:e=>this.mutate(()=>this.fs().rmdirSync(this.resolveFilesystemPath(this.resolve(this.readCString(Number(e))),!1))),SYS_unlink:e=>this.mutate(()=>this.fs().unlinkSync(this.resolveFilesystemPath(this.resolve(this.readCString(Number(e))),!1))),SYS_unlinkat:(e,t,r)=>this.unlinkAt(Number(e),this.readCString(Number(t)),Number(r)),SYS_rename:(e,t)=>this.rename(this.readCString(Number(e)),this.readCString(Number(t))),SYS_utimensat:(e,t,r,n)=>this.utimensat(Number(e),Number(t),Number(r),Number(n)),SYS_symlink:(e,t)=>this.symlink(this.readCString(Number(e)),this.readCString(Number(t)),Zr),SYS_symlinkat:(e,t,r)=>this.symlink(this.readCString(Number(e)),this.readCString(Number(r)),Number(t)),SYS_readlink:(e,t,r)=>this.readlink(this.readCString(Number(e)),Number(t),Number(r),Zr),SYS_readlinkat:(e,t,r,n)=>this.readlink(this.readCString(Number(t)),Number(r),Number(n),Number(e)),SYS_dup:e=>this.dup(Number(e)),SYS_dup2:(e,t)=>this.dup(Number(e),Number(t)),SYS_dup3:(e,t,r)=>{const n=Number(r);return(n&~Ii)!==0||Number(e)===Number(t)?-22n:this.markCloseOnExec(this.dup(Number(e),Number(t)),n)},SYS_fcntl:(e,t,r)=>this.fcntl(Number(e),Number(t),La(r)),SYS_poll:(e,t,r)=>this.poll(Number(e),Number(t),Number(r)),SYS_getdents64:(e,t,r)=>this.getdents64(Number(e),Number(t),Number(r)),SYS_fsync:e=>this.hasFd(Number(e))?0n:-9n,SYS_fdatasync:e=>this.hasFd(Number(e))?0n:-9n,SYS_flock:(e,t)=>this.flock(Number(e),Number(t)),SYS_prctl:(e,t,r,n)=>Number(e)===ta?this.privateTreeCall(Number(t),Number(r),Number(n)):0n}}writeEnvironmentFile(e,t){if(!this.options.filesystem||Object.keys(e).length===0)return;const r=`/tmp/.browser-runtime-wali-env-${t}-${crypto.randomUUID()}`;try{this.options.filesystem.mkdirSync("/tmp",{recursive:!0})}catch{}const n=[],s=[];for(const[o,a]of Object.entries(e)){if(!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(o)||/[\u0000\r\n]/u.test(a)){n.push(o);continue}s.push(`${o}=${a}`)}return n.length>0&&!bi&&(bi=!0,console.warn(`[WALI] environment entries a process cannot receive were dropped: ${n.join(", ")}`)),this.options.filesystem.writeFileSync(r,`${s.join(`
|
|
4
|
+
`)}
|
|
5
|
+
`),this.options.filesystem.chmodSync?.(r,384),r}copyCString(e,t,r){const n=new TextEncoder().encode(`${t}\0`);return r<n.byteLength?0:(this.copyIn(e,n),1)}readForMapping(e,t,r){const n=this.files.get(e);if(!n||n.directory||t<0||r<0)return;const s=this.fs();return s.readRangeSync?s.readRangeSync(n.path,t,r):s.readFileSync(n.path).slice(t,t+r)}mappingPath(e){const t=this.files.get(e);return t&&!t.directory?t.path:void 0}writeForMapping(e,t,r){try{if(!Number.isSafeInteger(t)||t<0||!this.fs().existsSync(e)||!this.fs().statSync(e).isFile())return!1;const s=this.fs().readFileSync(e),o=new Uint8Array(Math.max(s.byteLength,t+r.byteLength));return o.set(s),o.set(r,t),this.fs().writeFileSync(e,o),!0}catch{return!1}}markCloseOnExecNumber(e,t){return t&Ii&&(this.descriptors.entries[e].flags=1),e}markCloseOnExec(e,t){return e>=0n&&this.markCloseOnExecNumber(Number(e),t),e}allocateSpecial(e,t=3){const r=this.allocateFd(Math.max(t,this.options.specialDescriptorMinimum??3));return this.specialDescriptors.set(r,e),r}exportBrowserProcessPipe(e){return this.specialDescriptors.get(e)?.browserProcessPipe}copyForFork(e){return new Ar({...this.options,cwd:this.cwd,memory:e,descriptors:this.descriptors.copy()})}copyForExec(e,t){const r=this.descriptors.copy();return t&&t.map(s=>this.descriptors.get(s)).forEach((s,o)=>{s&&t[o]!==o&&r.set(o,s)}),r.exec(),new Ar({...this.options,cwd:this.cwd,memory:e,descriptors:r})}currentWorkingDirectory(){return this.cwd}ioctl(e,t){if(this.hasFd(e)&&(t===21537||t===21585||t===21584))return 0n}pollDescriptor(e,t){if(e<0||!this.hasFd(e))return 32;const r=this.specialDescriptors.get(e);if(r&&r.stdio===void 0)return r.poll?.(t)??0;const n=this.stdioFd(e);let s=0;return t&1&&n===0&&this.stdin.poll()&&(s|=1),t&4&&n!==0&&(s|=4),s}fs(){if(!this.guestFilesystem)throw P("ENOSYS");return this.guestFilesystem}viewedBuffer;viewedBytes=new Uint8Array;viewedData=new DataView(new ArrayBuffer(0));memoryBytes(){return this.viewMemory(),this.viewedBytes}memoryView(){return this.viewMemory(),this.viewedData}viewMemory(){const e=this.options.memory().buffer;e!==this.viewedBuffer&&(this.viewedBuffer=e,this.viewedBytes=new Uint8Array(e),this.viewedData=new DataView(e))}copyOut(e,t){return pe(this.options.memory(),e,t),this.memoryBytes().slice(e,e+t)}copyIn(e,t){pe(this.options.memory(),e,t.byteLength),this.memoryBytes().set(t,e)}readCString(e){const t=this.memoryBytes();if(!Number.isSafeInteger(e)||e<0||e>=t.byteLength)throw new WebAssembly.RuntimeError("WALI string pointer is out of bounds.");const r=t.indexOf(0,e);if(r<0||r-e>1048576)throw new WebAssembly.RuntimeError("WALI string is not null terminated.");let n="";for(let s=e;s<r;s+=1){const o=t[s];if(o>=128)return Pa.decode(t.slice(e,r));n+=String.fromCharCode(o)}return n}resolve(e){return wt(this.cwd,e)}resolveAt(e,t){if(t.startsWith("/"))return wt("/",t);if(e===Zr)return this.resolve(t);const r=this.files.get(e);if(!r?.directory)throw P("ENOTDIR");return wt(r.path,t)}open(e,t,r){try{return BigInt(this.openResolved(this.resolveFilesystemPath(this.resolve(e)),t,r))}catch(n){return W(n)}}openAt(e,t,r,n){try{return BigInt(this.openResolved(this.resolveFilesystemPath(this.resolveAt(e,t)),r,n))}catch(s){return W(s)}}openResolved(e,t,r){if(e==="/dev/null")return this.markCloseOnExecNumber(this.allocateSpecial({read:()=>new Uint8Array,write:p=>BigInt(p.byteLength),poll:p=>(p&1?1:0)|(p&4?4:0),fcntl:p=>p===3?BigInt(t):[1,2,4].includes(p)?0n:-22n}),t);if(e==="/dev/urandom"||e==="/dev/random")return this.markCloseOnExecNumber(this.allocateSpecial({read:p=>{if(!Number.isSafeInteger(p)||p<0)return-22n;const E=new Uint8Array(p);for(let I=0;I<E.byteLength;I+=65536)crypto.getRandomValues(E.subarray(I,Math.min(I+65536,E.byteLength)));return E},write:p=>BigInt(p.byteLength),poll:p=>(p&1?1:0)|(p&4?4:0),fcntl:p=>p===3?BigInt(t):[1,2,4].includes(p)?0n:-22n}),t);const n=this.fs();let s=n.linkTargetSync?Oa(n,e):n.existsSync(e)?n.statSync(e):void 0;const o=s!==void 0;if(((t&De)!==0||!o&&t&Qr)&&this.assertWritable(e),!o&&!(t&Qr))throw P("ENOENT");if(o&&t&Qr&&t&fa)throw P("EEXIST");o||(n.writeFileSync(e,new Uint8Array),n.chmodSync?.(e,r&4095),this.options.fileLocks?.created?.(e),s=n.statSync(e));const a=s;if(t&ua&&!a.isDirectory())throw P("ENOTDIR");if(a.isDirectory()&&(t&De)!==0)throw P("EISDIR");const f=(t&ha)!==0&&(t&De)!==0&&a.isFile();f&&(n.truncateSync?n.truncateSync(e,0):n.writeFileSync(e,new Uint8Array));const y=this.allocateFd(),g=a.isDirectory();return this.files.set(y,{path:e,flags:t,position:t&Pt&&!f&&a.isFile()?a.size:0,directory:g,description:this.nextDescription++}),this.descriptors.entries[y].flags=t&524288?1:0,y}allocateFd(e=3){const t=this.options.descriptorMaximum??65535;for(let r=Math.max(e,0);r<=t;r+=1){if(Ft(r)){r=vt+ln-1;continue}if(!(this.descriptors.get(r)||this.files.has(r)||this.specialDescriptors.has(r)||this.stdioFd(r)!==void 0))return r}throw P("EMFILE")}close(e){if(this.stdioAliases.delete(e))return this.descriptorStatusFlags.delete(e),this.setSharedStdioAlias(e,void 0),0n;if(this.specialDescriptors.get(e))return this.specialDescriptors.delete(e),0n;const r=this.files.get(e);if(!r)return-9n;const n=this.descriptors.get(e);return this.files.delete(e),this.releasePosixLocks(r.path),this.lockingOwners.size>0&&(!n||!this.descriptors.names(n.id))&&(this.releaseLockOwner(this.lockOwner("ofd",r)),this.releaseLockOwner(this.lockOwner("flock",r))),0n}read(e,t,r){try{if(r<0)throw P("EINVAL");if(this.stdioFd(e)===0){if(this.statusFlags(e)&la&&!this.stdin.poll())return-11n;const f=this.stdin.read(r);return this.copyIn(t,f),BigInt(f.byteLength)}const n=this.specialDescriptors.get(e);if(n){const f=n.read?.(r);if(f===void 0)throw P("EBADF");if(typeof f=="bigint")return f;const y=f.subarray(0,r);return this.copyIn(t,y),BigInt(y.byteLength)}const s=this.files.get(e);if(!s)throw P("EBADF");if(s.directory)throw P("EISDIR");if((s.flags&De)===Ei)throw P("EBADF");const o=this.fs(),a=o.viewRangeSync?o.viewRangeSync(s.path,s.position,r):o.readRangeSync?o.readRangeSync(s.path,s.position,r):o.readFileSync(s.path).subarray(s.position,s.position+r);return this.copyIn(t,a),s.position+=a.byteLength,BigInt(a.byteLength)}catch(n){return W(n)}}write(e,t,r){try{const n=this.stdioFd(e);if(n===1||n===2)return this.options.emit(n,this.copyOut(t,r));const s=this.specialDescriptors.get(e);if(s)return s.write?.(this.copyOut(t,r))??-9n;const o=this.files.get(e);if(!o)throw P("EBADF");if(o.directory)throw P("EISDIR");if((o.flags&De)===0)throw P("EBADF");const a=this.fs();if(a.writeRangeSync)return o.flags&Pt&&(o.position=a.statSync(o.path).size),pe(this.options.memory(),t,r),a.writeRangeSync(o.path,o.position,this.memoryBytes().subarray(t,t+r)),o.position+=r,BigInt(r);const f=this.copyOut(t,r),y=a.readFileSync(o.path);o.flags&Pt&&(o.position=y.byteLength);const g=Math.max(y.byteLength,o.position+f.byteLength),p=new Uint8Array(g);return p.set(y),p.set(f,o.position),a.writeFileSync(o.path,p),o.position+=f.byteLength,BigInt(f.byteLength)}catch(n){return W(n)}}pread(e,t,r,n){const s=this.files.get(e);if(!s)return-9n;if(s.directory||!Number.isSafeInteger(n)||n<0)return-22n;const o=s.position;s.position=n;try{return this.read(e,t,r)}finally{s.position=o}}pwrite(e,t,r,n){const s=this.files.get(e);if(!s)return-9n;if(s.directory||!Number.isSafeInteger(n)||n<0)return-22n;const o=s.position,a=s.flags;s.position=n,s.flags&=~Pt;try{return this.write(e,t,r)}finally{s.position=o,s.flags=a}}preadv(e,t,r,n){const s=this.files.get(e);if(!s)return-9n;if(s.directory||!Number.isSafeInteger(n)||n<0)return-22n;const o=s.position;s.position=n;try{return this.readv(e,t,r)}finally{s.position=o}}pwritev(e,t,r,n){const s=this.files.get(e);if(!s)return-9n;if(s.directory||!Number.isSafeInteger(n)||n<0)return-22n;const o=s.position,a=s.flags;s.position=n,s.flags&=~Pt;try{return this.writev(e,t,r)}finally{s.position=o,s.flags=a}}readv(e,t,r){let n=0n;for(let s=0;s<r;s+=1){const o=t+s*8;pe(this.options.memory(),o,8);const a=this.read(e,this.memoryView().getUint32(o,!0),this.memoryView().getUint32(o+4,!0));if(a<0n)return n>0n?n:a;if(n+=a,a===0n)break}return n}writev(e,t,r){let n=0n;for(let s=0;s<r;s+=1){const o=t+s*8;pe(this.options.memory(),o,8);const a=this.write(e,this.memoryView().getUint32(o,!0),this.memoryView().getUint32(o+4,!0));if(a<0n)return n>0n?n:a;n+=a}return n}getdents64(e,t,r){try{const n=this.files.get(e);if(!n)throw P("EBADF");if(!n.directory)throw P("ENOTDIR");const s=[".","..",...this.fs().readdirSync(n.path)];let o=0;for(;n.position<s.length;){const a=s[n.position],f=new TextEncoder().encode(a),y=Ma(19+f.byteLength+1,8);if(y>r-o){if(o===0)throw P("EINVAL");break}const g=t+o;pe(this.options.memory(),g,y);const p=a==="."?n.path:a===".."?wt(n.path,".."):wt(n.path,a),E=this.fs().statSync(p);this.memoryView().setBigUint64(g,BigInt(n.position+1),!0),this.memoryView().setBigInt64(g+8,BigInt(n.position+1),!0),this.memoryView().setUint16(g+16,y,!0),this.memoryView().setUint8(g+18,E.isDirectory()?4:8),this.memoryBytes().fill(0,g+19,g+y),this.memoryBytes().set(f,g+19),n.position+=1,o+=y}return BigInt(o)}catch(n){return W(n)}}lseek(e,t,r){try{const n=this.files.get(e);if(!n)throw P("EBADF");if(n.directory)throw P("EINVAL");const s=r===en?0:r===Ai?n.position:r===ki?this.fs().statSync(n.path).size:void 0;if(s===void 0||!Number.isSafeInteger(t)||s+t<0||!Number.isSafeInteger(s+t))throw P("EINVAL");return n.position=s+t,BigInt(n.position)}catch(n){return W(n)}}ftruncate(e,t){try{const r=this.files.get(e);if(!r)throw P("EBADF");if(r.directory)throw P("EISDIR");if((r.flags&De)===0)throw P("EBADF");if(!Number.isSafeInteger(t)||t<0)throw P("EINVAL");const n=this.fs();if(n.truncateSync)return n.statSync(r.path).size!==t&&n.truncateSync(r.path,t),0n;const s=n.readFileSync(r.path);if(s.byteLength===t)return 0n;const o=new Uint8Array(t);return o.set(s.subarray(0,t)),this.fs().writeFileSync(r.path,o),0n}catch(r){return W(r)}}stat(e,t,r){try{const n=this.resolveFilesystemPath(this.resolve(e),!r),s=this.fs();if(!s.linkTargetSync&&!s.existsSync(n))throw P("ENOENT");const o=r?this.readSymlink(n):void 0;return ur(this.memoryView(),t,o===void 0?r&&s.lstatSync?s.lstatSync(n):s.statSync(n):Ti(o)),0n}catch(n){return W(n)}}statAt(e,t,r,n){try{if(n&~mt)throw P("EINVAL");const s=!!(n&mt),o=this.resolveFilesystemPath(this.resolveAt(e,t),!s),a=this.fs();if(!a.linkTargetSync&&!a.existsSync(o))throw P("ENOENT");const f=s?this.readSymlink(o):void 0;return ur(this.memoryView(),r,f===void 0?a.statSync(o):Ti(f)),0n}catch(s){return W(s)}}fstat(e,t){try{if(this.stdioFd(e)!==void 0)return ur(this.memoryView(),t,xa()),0n;const r=this.files.get(e);if(!r)throw P("EBADF");return ur(this.memoryView(),t,this.fs().statSync(r.path)),0n}catch(r){return W(r)}}access(e){try{return this.fs().existsSync(this.resolveFilesystemPath(this.resolve(e)))?0n:-2n}catch(t){return W(t)}}accessAt(e,t){try{return this.fs().existsSync(this.resolveFilesystemPath(this.resolveAt(e,t)))?0n:-2n}catch(r){return W(r)}}chmod(e,t){try{const r=this.resolveFilesystemPath(this.resolve(e));return this.fs().existsSync(r)?(this.fs().chmodSync?.(r,t&4095),0n):-2n}catch(r){return W(r)}}chmodAt(e,t,r,n){try{if(n&~mt)throw P("EINVAL");const s=this.resolveFilesystemPath(this.resolveAt(e,t),!(n&mt));return this.fs().existsSync(s)?(this.fs().chmodSync?.(s,r&4095),0n):-2n}catch(s){return W(s)}}fchmod(e,t){if(this.stdioFd(e)!==void 0||this.specialDescriptors.has(e))return 0n;const r=this.files.get(e);if(!r)return-9n;try{return this.fs().chmodSync?.(r.path,t&4095),0n}catch(n){return W(n)}}chdir(e){try{const t=this.resolveFilesystemPath(this.resolve(e));if(!this.fs().statSync(t).isDirectory())throw P("ENOTDIR");return this.cwd=t,0n}catch(t){return W(t)}}fchdir(e){const t=this.files.get(e);return t?t.directory?(this.cwd=t.path,0n):-20n:-9n}getcwd(e,t){const r=new TextEncoder().encode(`${this.cwd}\0`);return r.byteLength>t?-34n:(this.copyIn(e,r),BigInt(r.byteLength))}mkdir(e,t){return this.mutate(()=>{const r=this.resolveFilesystemPath(this.resolve(e),!1);this.fs().mkdirSync(r),this.fs().chmodSync?.(r,t&4095)})}mkdirAt(e,t,r){try{const n=this.resolveFilesystemPath(this.resolveAt(e,t),!1);return this.fs().mkdirSync(n),this.fs().chmodSync?.(n,r&4095),0n}catch(n){return W(n)}}statfs(e,t){try{if(!this.fs().existsSync(this.resolveFilesystemPath(this.resolve(e))))throw P("ENOENT");return Ri(this.memoryView(),t),0n}catch(r){return W(r)}}fstatfs(e,t){return this.hasFd(e)?(Ri(this.memoryView(),t),0n):-9n}inotifyInit(){return BigInt(this.allocateSpecial({read:()=>-11n,poll:()=>0,fcntl:e=>e===3||[1,2,4].includes(e)?0n:-22n}))}inotifyAddWatch(e,t){if(!this.specialDescriptors.has(e))return-9n;try{return this.fs().existsSync(this.resolveFilesystemPath(this.resolve(t)))?1n:-2n}catch(r){return W(r)}}unlinkAt(e,t,r){try{if(r&~xi)throw P("EINVAL");const n=this.resolveFilesystemPath(this.resolveAt(e,t),!1);return r&xi?this.fs().rmdirSync(n):this.fs().unlinkSync(n),0n}catch(n){return W(n)}}rename(e,t){return this.mutate(()=>{const r=this.resolveFilesystemPath(this.resolve(e),!1),n=this.resolveFilesystemPath(this.resolve(t),!1);if(this.privateTree&&(_t(this.privateTree.root,r)||_t(this.privateTree.root,n)))throw P("EREMOTE");const s=this.fs();if(s.existsSync(r)){if(r===n)return;const o=s.statSync(r).isDirectory();if(o&&n.startsWith(`${r}/`))throw P("EINVAL");if(s.existsSync(n)){const a=s.statSync(n).isDirectory();if(o&&!a)throw P("ENOTDIR");if(!o&&a)throw P("EISDIR");if(o&&s.readdirSync(n).length>0)throw P("ENOTEMPTY")}}s.renameSync(r,n)})}utimensat(e,t,r,n){try{if(n&~mt)throw P("EINVAL");const s=t===0?this.files.get(e):void 0;if(t===0&&!s)throw P("EBADF");const o=s?.path??this.resolveAt(e,this.readCString(t)),a=this.resolveFilesystemPath(o,!(n&mt)),f=this.fs(),y=f.statSync(a),g=re(),p=(M,k)=>{if(r===0)return g;const b=r+M*16;pe(this.options.memory(),b,16);const R=this.memoryView().getBigInt64(b,!0),x=this.memoryView().getBigInt64(b+8,!0);if(x===ba)return g;if(x===Ea)return k;if(x<0||x>=1000000000n)throw P("EINVAL");const U=Number(R)*1e3+Number(x)/1e6;if(!Number.isFinite(U))throw P("EINVAL");return U},E=p(0,y.atimeMs??y.mtimeMs??g),I=p(1,y.mtimeMs??g);return f.utimesSync?f.utimesSync(a,new Date(E),new Date(I)):y.isFile()&&f.writeFileSync(a,f.readFileSync(a)),0n}catch(s){return W(s)}}readlink(e,t,r,n){try{if(!Number.isSafeInteger(r)||r<0)throw P("EINVAL");const s=this.resolveAt(n,e);if(this.privateTree&&_t(s,this.privateTree.root))throw P("EREMOTE");let o;s==="/proc/self/exe"&&(o=this.options.executablePath??"/usr/bin/wali-program");const a=/^\/proc\/self\/fd\/(\d+)$/u.exec(s);if(!o&&a){const y=this.files.get(Number(a[1]));y&&(o=y.path)}if(o??=this.readSymlink(s),!o)return this.fs().existsSync(s)?-22n:-2n;const f=new TextEncoder().encode(o).subarray(0,r);return this.copyIn(t,f),BigInt(f.byteLength)}catch(s){return W(s)}}symlink(e,t,r){try{const n=this.resolveFilesystemPath(this.resolveAt(r,t),!1);return qo(this.fs(),e,n),0n}catch(n){return W(n)}}resolveFilesystemPath(e,t=!0){const r=Zo(this.fs(),e,t);if(this.privateTree&&_t(r,this.privateTree.root))throw P("EREMOTE");return r}readSymlink(e){return mr(this.fs(),e)}dup(e,t,r=3){const n=this.options.descriptorMaximum??65535,s=this.stdioFd(e);if(s!==void 0){const a=t??this.allocateFd(r);return a<0||a>n&&!Ft(a)?-9n:(a===e||(this.descriptors.set(a,this.descriptors.get(e)),this.descriptorStatusFlags.set(a,this.statusFlags(e)),this.setSharedStdioAlias(a,s)),BigInt(a))}if(!this.descriptors.get(e))return-9n;const o=t??this.allocateFd(r);return o<0||o>n&&!Ft(o)?-9n:(o===e||(this.close(o),this.descriptors.set(o,this.descriptors.get(e))),BigInt(o))}fcntl(e,t,r){if(!this.hasFd(e))return-9n;const n=this.specialDescriptors.get(e);if(n&&n.stdio===void 0&&t!==1&&t!==2)return t===0||t===1030?n.duplicate?.(Math.max(r,3),t===1030)??-22n:n.fcntl?.(t,r)??-22n;const s=this.files.get(e);if(t===0||t===1030){const o=this.dup(e,void 0,Math.max(r,3));return o>=0n&&t===1030&&(this.descriptors.entries[Number(o)].flags=1),o}if(t===1)return BigInt(this.descriptors.entries[e]?.flags??0);if(t===2){const o=this.descriptors.entries[e];return o&&(o.flags=r&1),0n}if(t===3)return BigInt(this.statusFlags(e));if(t===4){if(this.stdioFd(e)!==void 0)this.descriptorStatusFlags.set(e,r);else{const a=this.files.get(e);a&&(a.flags=a.flags&De|r&~De)}return 0n}return t===tn||t===lr||t===ya||t===Ni||t===ma||t===Mi?s?this.recordLock(s,t,r):-9n:-22n}recordLock(e,t,r){try{const n=this.readRecordLock(e,r),s=t>=lr?"ofd":"posix",o=this.lockOwner(s,e),a=this.options.fileLocks;if(!a||!o)return(t===tn||t===lr)&&this.memoryView().setInt16(r,rn,!0),0n;if(n.mode===void 0)return BigInt(a.request({operation:"unlock",owner:o,namespace:s,path:e.path,range:n.range}).result);if(t===tn||t===lr){const g=a.request({operation:"query",owner:o,namespace:s,path:e.path,range:n.range,mode:n.mode,pid:this.options.pid??1});return g.result<0?BigInt(g.result):(g.conflict?this.writeRecordLock(r,g.conflict.mode,g.conflict,g.conflict.pid):this.memoryView().setInt16(r,rn,!0),0n)}const f=t===Ni||t===Mi,y=a.request({operation:"set",owner:o,namespace:s,path:e.path,range:n.range,mode:n.mode,pid:this.options.pid??1,blocking:f}).result;return y>=0&&this.heldLock(s,o,e.path),BigInt(y)}catch(n){return W(n)}}readRecordLock(e,t){pe(this.options.memory(),t,28);const r=this.memoryView(),n=r.getInt16(t,!0),s=r.getInt16(t+2,!0),o=_i(r.getBigInt64(t+8,!0)),a=_i(r.getBigInt64(t+16,!0)),f=s===en?0:s===Ai?e.position:s===ki?this.fs().statSync(e.path).size:void 0;if(f===void 0)throw P("EINVAL");let y=f+o,g;if(a<0?(g=y,y+=a):a>0&&(g=y+a),!Number.isSafeInteger(y)||y<0||g!==void 0&&(!Number.isSafeInteger(g)||g<=y))throw P("EINVAL");const p=n===Li?"read":n===Oi?"write":n===rn?void 0:!1;if(p===!1)throw P("EINVAL");return{...p?{mode:p}:{},range:{start:y,...g===void 0?{}:{end:g}}}}writeRecordLock(e,t,r,n){const s=this.memoryView();s.setInt16(e,t==="read"?Li:Oi,!0),s.setInt16(e+2,en,!0),s.setBigInt64(e+8,BigInt(r.start),!0),s.setBigInt64(e+16,BigInt(r.end===void 0?0:r.end-r.start),!0),s.setInt32(e+24,n,!0)}flock(e,t){const r=this.files.get(e);if(!r)return this.hasFd(e)?0n:-9n;const n=this.options.fileLocks,s=this.lockOwner("flock",r);if(!n||!s)return 0n;if(t&Sa)return BigInt(n.request({operation:"unlock",owner:s,namespace:"flock",path:r.path,range:{start:0}}).result);const o=t&pa?"write":t&wa?"read":void 0;if(!o||t&-16)return-22n;const a=n.request({operation:"set",owner:s,namespace:"flock",path:r.path,range:{start:0},mode:o,pid:this.options.pid??1,blocking:!(t&ga)}).result;return a>=0&&this.heldLock("flock",s,r.path),BigInt(a)}posixLockedPaths=new Set;lockingOwners=new Set;heldLock(e,t,r){e==="posix"?this.posixLockedPaths.add(r):this.lockingOwners.add(t)}lockOwner(e,t){const r=this.options.lockOwner;if(r)return e==="posix"?`${r}:posix`:`${r}:${e}:${t.description}`}releasePosixLocks(e){const t=this.options.lockOwner?`${this.options.lockOwner}:posix`:void 0;!t||!this.options.fileLocks||!this.posixLockedPaths.delete(e)||this.options.fileLocks.request({operation:"unlock",owner:t,namespace:"posix",path:e,range:{start:0}})}releaseLockOwner(e){e&&this.options.fileLocks&&this.lockingOwners.delete(e)&&this.options.fileLocks.request({operation:"release-owner",owner:e})}poll(e,t,r){if(!Number.isSafeInteger(t)||t<0||!Number.isSafeInteger(r))return-22n;const n=()=>{let o=0;for(let a=0;a<t;a+=1){const f=e+a*8;pe(this.options.memory(),f,8);const y=this.memoryView().getInt32(f,!0),g=this.memoryView().getInt16(f+4,!0),p=this.pollDescriptor(y,g);this.memoryView().setInt16(f+6,p,!0),p!==0&&(o+=1)}return o},s=n();return s!==0||r===0?BigInt(s):(this.stdin.wait?.(r),BigInt(n()))}hasFd(e){return this.descriptors.get(e)!==void 0}stdioFd(e){if(this.options.descriptorState){const t=this.options.descriptorState;if(e<0||e>=65536)return;const r=Atomics.load(new Int32Array(t.table),e),n=Atomics.load(new Int32Array(t.descriptions),r*3+2)-1;return n>=0&&n<=2?n:void 0}return this.specialDescriptors.get(e)?.stdio}setSharedStdioAlias(e,t){e<0||e>=(this.options.stdioAliasRegistry?.length??0)||Atomics.store(this.options.stdioAliasRegistry,e,t??-1)}statusFlags(e){const t=this.descriptorStatusFlags.get(e);if(t!==void 0)return t;const r=this.stdioFd(e);return r!==void 0?r===0?0:Ei:this.files.get(e)?.flags??da}mutate(e){try{return e(),0n}catch(t){return W(t)}}privateTreeCall(e,t,r){try{if(e===ra)return this.adoptPrivateTree(t,r);if(e===na)return this.releasePrivateTree(t,r);if(e===ia)return this.confirmPrivateTree();if(e===sa){const n=this.privateTree?.handed;if(!n)return-22n;const s=this.fs();for(const o of n)s.existsSync(o.path)||(s.restoreNodeSync?s.restoreNodeSync(o.path,o):(o.directory?s.mkdirSync(o.path,{recursive:!0}):s.writeFileSync(o.path,o.content),s.chmodSync?.(o.path,o.mode&4095),s.utimesSync?.(o.path,new Date(o.atimeMs),new Date(o.mtimeMs))));return this.privateTree=void 0,0n}return-22n}catch(n){return W(n)}}adoptPrivateTree(e,t){const r=R=>(this.privateTreeDeclined||(this.privateTreeDeclined=!0,this.options.onDiagnostic?.(`[WALI] the private tree is not the program's (ADR-0047): ${R}; its file calls cross into the kernel.`)),0n);if(this.privateTree)return r("it is held already");const n=this.options.privateRoots?.[0];if(!n)return r("the run names no private root");if(n==="/")return r("the root is the whole filesystem");if(this.options.privateTreeAdoptable&&!this.options.privateTreeAdoptable())return r("a forked process shares the filesystem");const s=this.fs();for(let R=0;R<this.descriptors.entries.length;R+=1){const x=this.files.get(R);if(x&&_t(x.path,n))return r(`a descriptor is open under ${n}`)}try{this.assertWritable(`${n}/.wali-private-tree`)}catch{return r(`the run's filesystem grant does not allow writes under ${n}`)}if(s.existsSync(n)&&(!s.statSync(n).isDirectory()||mr(s,n)!==void 0))return r(`${n} is not a directory`);s.existsSync(n)||s.mkdirSync(n,{recursive:!0});const o=[],a=R=>{const x=s.statSync(R),U=x.isDirectory();if(o.push({path:R,directory:U,mode:x.mode??(U?493:420),atimeMs:x.atimeMs??x.mtimeMs??0,mtimeMs:x.mtimeMs??0,ino:x.ino??1,content:U?new Uint8Array:s.readFileSync(R)}),U)for(const H of s.readdirSync(R))a(`${R==="/"?"":R}/${H}`)};a(n);const f=aa(o),y=new TextEncoder,g=y.encode(n),p=y.encode(this.cwd),E=20+g.byteLength+4+p.byteLength+f.byteLength;if(E>t)return r(`what ${n} already holds is larger than the libc's ${t}-byte reply`);const I=s.reserveInodes?.(oa)??2**40,M=new Uint8Array(E),k=new DataView(M.buffer);let b=0;return k.setUint32(b,vt,!0),b+=4,k.setUint32(b,ln,!0),b+=4,k.setBigUint64(b,BigInt(I),!0),b+=8,k.setUint32(b,g.byteLength,!0),b+=4,M.set(g,b),b+=g.byteLength,k.setUint32(b,p.byteLength,!0),b+=4,M.set(p,b),b+=p.byteLength,M.set(f,b),this.copyIn(e,M),this.privateTree={root:n,handed:o},BigInt(vt)}confirmPrivateTree(){const e=this.privateTree;if(!e?.handed)return-22n;const t=this.fs();for(const r of e.handed.slice(1).reverse())r.directory?t.rmdirSync(r.path):t.unlinkSync(r.path);return e.handed=void 0,0n}releasePrivateTree(e,t){const r=this.privateTree;if(!r||r.handed)return-22n;pe(this.options.memory(),e,t);const{nodes:n,descriptors:s}=ca(this.copyOut(e,t),r.root),o=this.fs();for(const a of n)a.directory||this.options.fileLocks?.created?.(a.path),o.restoreNodeSync?o.restoreNodeSync(a.path,a):(a.directory?o.mkdirSync(a.path,{recursive:!0}):o.writeFileSync(a.path,a.content),o.chmodSync?.(a.path,a.mode&4095),o.utimesSync?.(a.path,new Date(a.atimeMs),new Date(a.mtimeMs)));for(const a of s){if(this.descriptors.get(a.fd)&&this.descriptors.close(a.fd),a.group===a.fd)this.files.set(a.fd,{path:a.path,flags:a.flags,position:a.position,directory:a.directory,description:this.nextDescription++});else{const f=this.descriptors.get(a.group);if(!f)throw P("EINVAL");this.descriptors.set(a.fd,f)}this.descriptors.entries[a.fd].flags=a.closeOnExec?1:0}return this.privateTree=void 0,0n}}function Pi(i,e){return Number(e===void 0?i:(BigInt(e)&0xffffffffn)<<32n|BigInt(i)&0xffffffffn)}function _t(i,e){return i===e||i.startsWith(e==="/"?"/":`${e}/`)}function wt(i,e){if(!e)return i;if(Na(e))return e;const t=[],r=e.startsWith("/")?e:`${i}/${e}`;for(const n of r.replaceAll("\\","/").split("/"))!n||n==="."||(n===".."?t.pop():t.push(n));return`/${t.join("/")}`}function Na(i){if(i.charCodeAt(0)!==47)return!1;if(i.length===1)return!0;let e=1;for(let t=1;t<=i.length;t+=1){const r=t<i.length?i.charCodeAt(t):47;if(r===92)return!1;if(r!==47)continue;const n=t-e;if(n===0||i.charCodeAt(e)===46&&(n===1||n===2&&i.charCodeAt(e+1)===46))return!1;e=t+1}return!0}function Ma(i,e){return Math.ceil(i/e)*e}function La(i){return Number(BigInt.asIntN(32,typeof i=="bigint"?i:BigInt(i)))}function _i(i){const e=Number(i);if(!Number.isSafeInteger(e))throw P("EINVAL");return e}function pe(i,e,t){if(!Number.isSafeInteger(e)||!Number.isSafeInteger(t)||e<0||t<0||e+t>i.buffer.byteLength)throw new WebAssembly.RuntimeError("WALI filesystem memory access is out of bounds.")}function Oa(i,e){try{return i.statSync(e)}catch(t){if(/\bENOENT\b/u.test(t instanceof Error?t.message:String(t)))return;throw t}}function ur(i,e,t){if(e<0||e+144>i.byteLength)throw new WebAssembly.RuntimeError("WALI stat pointer is out of bounds.");Oe(i,e,t.dev??1),Oe(i,e+8,t.ino??1),Oe(i,e+16,t.nlink??1);const r=t.isSymbolicLink?.()?Ia:t.isDirectory()?ka:Aa;i.setUint32(e+24,r|(t.mode??(t.isDirectory()?493:420)),!0),i.setUint32(e+28,t.uid??1e3,!0),i.setUint32(e+32,t.gid??1e3,!0),i.setUint32(e+36,0,!0),Oe(i,e+40,t.rdev??0),Oe(i,e+48,t.size),Oe(i,e+56,t.blksize??4096),Oe(i,e+64,t.blocks??Math.ceil(t.size/512)),nn(i,e+72,t.atimeMs??t.mtimeMs??re()),nn(i,e+88,t.mtimeMs??re()),nn(i,e+104,t.ctimeMs??t.mtimeMs??re());for(let n=120;n<144;n+=4)i.setUint32(e+n,0,!0)}function Oe(i,e,t){i.setUint32(e,t>>>0,!0),i.setUint32(e+4,Math.floor(t/4294967296)>>>0,!0)}function Ti(i){return{isFile:()=>!1,isDirectory:()=>!1,isSymbolicLink:()=>!0,size:new TextEncoder().encode(i).byteLength,mode:511}}function Ri(i,e){if(e<0||e+120>i.byteLength)throw new WebAssembly.RuntimeError("WALI statfs pointer is out of bounds.");for(let t=0;t<120;t+=4)i.setUint32(e+t,0,!0);i.setBigInt64(e,0x01021994n,!0),i.setBigInt64(e+8,4096n,!0),i.setBigUint64(e+16,262144n,!0),i.setBigUint64(e+24,196608n,!0),i.setBigUint64(e+32,196608n,!0),i.setBigUint64(e+40,1048576n,!0),i.setBigUint64(e+48,1048000n,!0),i.setBigUint64(e+64,255n,!0),i.setBigUint64(e+72,4096n,!0)}function nn(i,e,t){const r=Math.floor(t/1e3);Oe(i,e,r),Oe(i,e+8,Math.min(999999999,Math.floor((t-r*1e3)*1e6)))}function xa(){return{isFile:()=>!1,isDirectory:()=>!1,size:0,mode:8630,mtimeMs:re()}}const Pa=new TextDecoder("utf-8",{fatal:!0}),vi=new Map;function P(i){let e=vi.get(i);return e||(e=Object.assign(new Error(i),{errnoName:i}),vi.set(i,e)),e}const _a={EPERM:1n,ENOENT:2n,EIO:5n,EBADF:9n,EAGAIN:11n,ENOMEM:12n,EACCES:13n,EFAULT:14n,EBUSY:16n,EEXIST:17n,EXDEV:18n,ENOTDIR:20n,EISDIR:21n,EINVAL:22n,EMFILE:24n,ENOSPC:28n,ESPIPE:29n,EROFS:30n,ERANGE:34n,ENOSYS:38n,ENOTEMPTY:39n,ELOOP:40n,ENAMETOOLONG:36n,EREMOTE:66n};function W(i){const t=(typeof i=="object"&&i!==null?"errnoName"in i?String(i.errnoName):"code"in i?String(i.code):void 0:void 0)??/\b(E[A-Z]+)\b/u.exec(i instanceof Error?i.message:String(i))?.[1]??"",r=_a;if(t in r)return-r[t];if(i instanceof WebAssembly.RuntimeError||i instanceof RangeError)throw i;return-5n}const Fi=-4,sn=3;class St{channel;control;payload;encoder=new TextEncoder;decoder=new TextDecoder("utf-8",{fatal:!0});nextRequestId=1;constructor(e){this.channel=e,this.control=new Int32Array(e.control),this.payload=new Uint8Array(e.payload)}static waited={calls:0,ms:0};request(e){const t=performance.now();try{return this.requestNow(e)}finally{St.waited.calls+=1,St.waited.ms+=performance.now()-t}}requestNow(e){if(Atomics.load(this.control,sn))return{result:Fi};const t=this.encoder.encode(JSON.stringify(e));if(t.byteLength>this.payload.byteLength)return{result:-90};if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent file-lock RPC on one channel.");const r=this.nextRequestId;this.nextRequestId=r>=1073741821?1:r+2,this.control.fill(0,0,sn),this.payload.set(t),Atomics.store(this.control,1,t.byteLength),Atomics.store(this.control,0,r);try{for(this.channel.port.postMessage(r);Atomics.load(this.control,0)!==r+1;){if(Atomics.load(this.control,sn))return{result:Fi};const o=Atomics.load(this.control,0);o!==r+1&&Atomics.wait(this.control,0,o)}const n=Atomics.load(this.control,2);if(n<1||n>this.payload.byteLength)return{result:-5};const s=JSON.parse(this.decoder.decode(this.payload.slice(0,n)));return!s||!Number.isSafeInteger(s.result)?{result:-5}:s}finally{Atomics.store(this.control,0,0)}}}var Ue;(function(i){i[i.Inspect=1]="Inspect",i[i.Read=2]="Read",i[i.WriteStart=3]="WriteStart",i[i.WriteChunk=4]="WriteChunk",i[i.WriteFinish=5]="WriteFinish",i[i.Remove=6]="Remove"})(Ue||(Ue={}));const yr=512*1024,Di=256*1024*1024,Bi=5,Ta=new TextEncoder,Ra=new TextDecoder("utf-8",{fatal:!0});class va{channel;control;payload;nextRequestId=1;constructor(e){this.channel=e,this.control=new Int32Array(e.control),this.payload=new Uint8Array(e.payload)}pull(e){const t=this.call(Ue.Inspect,{path:e});if(!t.exists)return;const r=un(t.length,0,Di),n=new Uint8Array(r);for(let s=0;s<r;s+=yr){const o=Math.min(yr,r-s),a=this.call(Ue.Read,{path:e,offset:s,length:o}),f=ze(a.content);if(f.byteLength!==o)throw new Error("Invalid coherent file response.");n.set(f,s)}return{bytes:n,...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},parents:ss(e,t.parents)}}push(e,t){if(!t){this.call(Ue.Remove,{path:e});return}if(t.bytes.byteLength>Di)throw new Error("Coherent file exceeds 256 MiB.");this.call(Ue.WriteStart,{path:e,length:t.bytes.byteLength,...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},...t.parents===void 0?{}:{parents:t.parents}});for(let r=0;r<t.bytes.byteLength;r+=yr){const n=t.bytes.subarray(r,r+yr);this.call(Ue.WriteChunk,{offset:r,content:xe(n)})}this.call(Ue.WriteFinish)}call(e,t={}){const r=()=>{if(Atomics.load(this.control,Bi))throw Object.assign(new Error("Browser file coherence was cancelled."),{errno:125})};r();const n=Ta.encode(JSON.stringify(t));if(n.byteLength>this.payload.byteLength)throw new Error("File-coherence request is too large.");if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent file-coherence RPC on one channel.");const s=this.nextRequestId;this.nextRequestId=s>=1073741821?1:s+2,this.control.fill(0,0,Bi),this.payload.set(n),Atomics.store(this.control,1,e),Atomics.store(this.control,3,n.byteLength),Atomics.store(this.control,0,s);try{for(this.channel.port.postMessage(s);Atomics.load(this.control,0)!==s+1;){r();const y=Atomics.load(this.control,0);y!==s+1&&Atomics.wait(this.control,0,y)}const o=Atomics.load(this.control,2),a=un(Atomics.load(this.control,4),0,this.payload.byteLength),f=a===0?void 0:JSON.parse(Ra.decode(this.payload.slice(0,a)));if(o<0)throw Object.assign(new Error(`Browser file coherence failed with ${o}.`),{errno:-o});return f}finally{Atomics.store(this.control,0,0)}}}function Ci(i){const e=i.replace(/-(?:journal|shm|wal)$/u,"");return[e,`${e}-journal`,`${e}-wal`,`${e}-shm`]}function Fa(i,e){return wn(e).flatMap(t=>{if(!i.existsSync(t))return[];const r=i.statSync(t);if(!r.isDirectory())throw Pe("A coherent file parent must be a directory.");return[{path:t,...os({mode:r.mode,mtimeMs:r.mtimeMs})}]})}function Da(i,e,t){const r=new Map(ss(e,t).map(n=>[n.path,n]));for(const n of wn(e)){if(i.existsSync(n)){if(!i.statSync(n).isDirectory())throw Pe("A coherent file parent must be a directory.");continue}i.mkdirSync(n);const s=r.get(n);s?.mode!==void 0&&i.chmodSync?.(n,s.mode),s?.mtimeMs!==void 0&&i.utimesSync?.(n,new Date(s.mtimeMs),new Date(s.mtimeMs))}}function ss(i,e){if(e===void 0)return[];const t=new Set(wn(i));if(!Array.isArray(e)||e.length>t.size)throw Pe("Invalid coherent file parents.");return e.map(r=>{if(typeof r!="object"||r===null)throw Pe("Invalid coherent file parent.");const n=r,s=as(n.path);if(!t.delete(s))throw Pe("Coherent metadata must name distinct ancestors of its file.");return{path:s,...os(n)}})}function wn(i){const e=[];for(const t of as(i).split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return e.slice(0,-1).map((t,r)=>`/${e.slice(0,r+1).join("/")}`)}function os(i){const e=i.mode===void 0?void 0:un(i.mode,0,65535),t=i.mtimeMs===void 0?void 0:Ca(i.mtimeMs);return{...e===void 0?{}:{mode:e},...t===void 0?{}:{mtimeMs:t}}}function as(i){const e=Ba(i);if(!e.startsWith("/")||e.length>4096||e.includes("\0"))throw Pe("Invalid coherent file path.");return e}function Ba(i){if(typeof i!="string")throw Pe("Expected a string.");return i}function un(i,e,t){if(!Number.isSafeInteger(i)||i<e||i>t)throw Pe("Expected a bounded integer.");return i}function Ca(i){if(typeof i!="number"||!Number.isFinite(i))throw Pe("Expected a finite number.");return i}function Pe(i){return Object.assign(new Error(i),{errno:22})}class $a{locks;coherence;filesystem;held=[];locallyCreated=new Set;constructor(e,t,r){this.locks=e,this.coherence=t,this.filesystem=r}created(e){this.locallyCreated.add(e)}request(e){if(e.operation==="query")return this.locks.request(e);if(e.operation==="set"){const s=!this.held.some(a=>a.path===e.path),o=this.locks.request(e);if(o.result<0)return o;if(s)try{this.refresh(e.path)}catch(a){throw this.locks.request({operation:"unlock",owner:e.owner,namespace:e.namespace,path:e.path,range:e.range}),a}return this.install(e.owner,e.namespace,e.path,e.range),o}if(e.operation==="unlock"){const s=this.without(e.owner,e.namespace,e.path,e.range);this.held.some(a=>a.path===e.path)&&!s.some(a=>a.path===e.path)&&this.publish(e.path);const o=this.locks.request(e);return o.result>=0&&this.replaceHeld(s),o}const t=this.held.filter(s=>s.owner!==e.owner),r=new Set(this.held.filter(s=>s.owner===e.owner).map(s=>s.path));for(const s of r)t.some(o=>o.path===s)||this.publish(s);const n=this.locks.request(e);return n.result>=0&&this.replaceHeld(t),n}refresh(e){const t=performance.now();try{this.refreshNow(e)}finally{St.waited.ms+=performance.now()-t}}publish(e){const t=performance.now();try{this.publishNow(e)}finally{St.waited.ms+=performance.now()-t}}refreshNow(e){for(const t of Ci(e)){const r=this.coherence.pull(t);if(!r&&this.locallyCreated.delete(t)){this.coherence.push(t,this.readLocal(t)),this.filesystem.dropChangedPaths?.([t]);continue}this.locallyCreated.delete(t),this.writeLocal(t,r),this.filesystem.dropChangedPaths?.([t])}}publishNow(e){for(const t of Ci(e))this.coherence.push(t,this.readLocal(t)),this.filesystem.dropChangedPaths?.([t])}readLocal(e){if(!this.filesystem.existsSync(e))return;const t=this.filesystem.statSync(e);if(!t.isDirectory())return{bytes:this.filesystem.readFileSync(e),...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},parents:Fa(this.filesystem,e)}}writeLocal(e,t){if(!t){this.filesystem.existsSync(e)&&!this.filesystem.statSync(e).isDirectory()&&this.filesystem.unlinkSync(e);return}Da(this.filesystem,e,t.parents),this.filesystem.writeFileSync(e,t.bytes),t.mode!==void 0&&this.filesystem.chmodSync?.(e,t.mode),t.mtimeMs!==void 0&&this.filesystem.utimesSync?.(e,new Date(t.mtimeMs),new Date(t.mtimeMs))}install(e,t,r,n){const s=this.without(e,t,r,n);s.push({owner:e,namespace:t,path:r,...n}),this.replaceHeld(s)}without(e,t,r,n){return this.held.flatMap(s=>s.owner===e&&s.namespace===t&&s.path===r&&Ua(s,n)?za(s,n):[s])}replaceHeld(e){this.held.splice(0,this.held.length,...e)}}function Ua(i,e){return i.start<(e.end??Number.POSITIVE_INFINITY)&&e.start<(i.end??Number.POSITIVE_INFINITY)}function za(i,e){const t=[];i.start<e.start&&t.push({...i,end:e.start});const r=i.end??Number.POSITIVE_INFINITY,n=e.end??Number.POSITIVE_INFINITY;return n<r&&t.push({...i,start:n,...i.end===void 0?{}:{end:i.end}}),t}const $i=1024*1024;var v;(function(i){i[i.Exists=1]="Exists",i[i.Stat=2]="Stat",i[i.Lstat=3]="Lstat",i[i.ReadFile=4]="ReadFile",i[i.WriteFile=5]="WriteFile",i[i.Mkdir=6]="Mkdir",i[i.Readdir=7]="Readdir",i[i.Unlink=8]="Unlink",i[i.Rmdir=9]="Rmdir",i[i.Rename=10]="Rename",i[i.Snapshot=11]="Snapshot",i[i.ReplaceSnapshot=12]="ReplaceSnapshot",i[i.Syscall=13]="Syscall",i[i.ReadForMapping=14]="ReadForMapping",i[i.SnapshotSize=15]="SnapshotSize",i[i.SnapshotChunk=16]="SnapshotChunk",i[i.ReplaceSnapshotStart=17]="ReplaceSnapshotStart",i[i.ReplaceSnapshotChunk=18]="ReplaceSnapshotChunk",i[i.MappingPath=19]="MappingPath",i[i.WriteForMapping=20]="WriteForMapping",i[i.FinalSnapshotSize=21]="FinalSnapshotSize",i[i.ImportPeerPatch=22]="ImportPeerPatch",i[i.ImportPeerPatchStart=23]="ImportPeerPatchStart",i[i.ImportPeerPatchChunk=24]="ImportPeerPatchChunk",i[i.PrepareSpawn=25]="PrepareSpawn",i[i.ReadRange=26]="ReadRange",i[i.WriteRange=27]="WriteRange",i[i.CopyForExec=28]="CopyForExec",i[i.CloseProcess=29]="CloseProcess",i[i.CopyForFork=30]="CopyForFork",i[i.GetCwd=31]="GetCwd",i[i.SyscallBinary=32]="SyscallBinary",i[i.ReadForMappingBinary=33]="ReadForMappingBinary",i[i.WriteForMappingBinary=34]="WriteForMappingBinary"})(v||(v={}));const Ya=`${io}/.volter-tree-complete`;async function Wa(i,e){const t=hn(i);try{if((await t.initialize(e,{readOnly:!0})||t.opened())&&t.entries.has(Ya))return t}catch(r){throw t.close(),r}t.close()}const Ui=new WeakMap;async function Ha(i,e){const t=[...new Set((i??[]).flatMap(o=>o.store===void 0?[]:[o.store]))];if(t.length===0)return;e??={navigator:globalThis.navigator};const r=e;let n=Ui.get(r.navigator);n||Ui.set(r.navigator,n=new Map);const s=new Map;for(const o of t){let a=n.get(o);a||(a=oo(o,r.navigator.locks).then(()=>Wa(r,o)),n.set(o,a));let f;try{f=await a}catch(y){throw n.delete(o),new Error(`The installed tree ${o} would not open: ${y instanceof Error?y.message:String(y)}`,{cause:y})}if(!f)throw n.delete(o),new Error(`The installed tree ${o} is not on this origin's disk to read.`);s.set(o,f)}return s}let C=new et,on,cs,pt,ds;const me=new Map;let Va=1,yn,mn,Dt;const fs=new TextEncoder,Nr=new TextDecoder,wr=[],ja=new Set;let zi=!1,an=0,Tt=[];const kr=Symbol("retry");async function Ga(i){const e={data:i};wr.length=0,ja.clear(),zi=!1,an=0,Tt=(i.privateRoots??[]).map(ec);{yn=void 0,mn=void 0;const t=await Ha(i.layers);if(i.store){if(on=await go({navigator:globalThis.navigator},i.store.projectId),!on)throw new Error("The project's store is not there to read.");C=et.fromStore(Xn(on,i.layers,t),i.snapshot)}else i.layers?C=et.fromStore(Xn(void 0,i.layers,t),i.snapshot):C=et.fromSnapshot(i.snapshot);Dt=(n,s)=>ai(C,n,s);const r=e.data.fileLocks?new St(e.data.fileLocks.channel):void 0;if(pt=i.sharedPipes,ds=i.memory,cs=new Ar({...pt?{descriptors:new Ir(new Zi(pt.descriptions),pt.table)}:{},filesystem:C,...i.filesystemPolicy?{filesystemPolicy:i.filesystemPolicy}:{},cwd:e.data.cwd,stdin:new Uint8Array,executablePath:e.data.executablePath,memory:()=>e.data.memory,emit:()=>-9n,descriptorMaximum:19999,pid:e.data.pid,...Tt.length?{privateRoots:Tt,privateTreeAdoptable:()=>me.size===0,onDiagnostic:n=>console.warn(n)}:{},...r&&e.data.fileLocks?{fileLocks:e.data.fileCoherence?new $a(r,new va(e.data.fileCoherence),C):r,lockOwner:e.data.fileLocks.owner}:{}}),e.data.updatePort){let n;const s=e.data.updatePort;s.start();const o=new Set,a=()=>{n&&clearTimeout(n),n=void 0;const p=C.takeChangedPaths();if(Tt.length>0)for(const M of p)Tt.some(k=>tc(M,k))&&p.delete(M);if(p.size===0)return;for(const M of p)o.add(M);const E=[],I=[];for(const M of p){const k=C.writtenEntry(M,!0);k?E.push(k):I.push(M)}(E.length>0||I.length>0)&&(s.postMessage({type:"filesystem",patch:{files:E,removed:I}},E.flatMap(M=>M.bytes?[M.bytes.buffer]:[])),f=!0)};let f=!1;mn=()=>{if(a(),!f)return;const p=new Int32Array(new SharedArrayBuffer(4));if(s.postMessage({type:"checkpoint",control:p.buffer}),Atomics.wait(p,0,0,3e4),Atomics.load(p,0)!==1)throw new Error("WALI filesystem spawn checkpoint failed.");f=!1};let y=!1,g=!1;yn=()=>{g||(a(),g=!0,s.postMessage({type:"finalized"}))},Dt=(p,E)=>{if(g)throw new Error("The WALI filesystem is finalized.");a(),y=!0;try{let I=E;if(E){const M=new Map(E.files.map(k=>[k.path,k]));for(const k of[...p.files.map(b=>b.path),...p.removed]){if(o.has(k))continue;const b=ji(C,k);b?M.set(k,b):M.delete(k)}I={files:[...M.values()]}}ai(C,p,I),C.takeChangedPaths(),s.postMessage({type:"imported",patch:p})}finally{y=!1}},s.onmessage=p=>{if(!(p.data.type!=="import"||g||zi)){an=p.data.sequence??an;try{Dt(p.data.patch,p.data.base)}catch(E){s.postMessage({type:"import-error",message:E instanceof Error?E.message:String(E)})}}},C.setMutationHandler(()=>{y||g||(n??=setTimeout(a,0))})}}}function hs(i){const e=new Int32Array(i.control),t=new Uint8Array(i.payload),r={process:i.process??0};if(wr.push({control:e,payload:t,state:r}),i.releasePort){const n=i.releasePort;n.onmessage=()=>{me.get(r.process)?.descriptors.descriptors.exit(),me.delete(r.process),n.postMessage(!0),n.close()},n.start()}if(r.process!==0&&i.sharedPipes){const n=me.get(r.process).descriptors.descriptors;n.sharedEntries=new Int32Array(i.sharedPipes.table),n.entries.forEach((s,o)=>{s&&Atomics.store(n.sharedEntries,o,s.description)})}return i.port.onmessage=n=>{if(typeof n.data!="number"&&"kind"in n.data){hs({...n.data,process:n.data.process??r.process});return}if(typeof n.data!="number"){const s=me.get(r.process);if(!s)throw new Error("Unknown inherited descriptor table");s.memory=n.data.memory;return}Ka(e,t,r,n.data)},i.port.start(),wr[wr.length-1]}async function Ka(i,e,t,r){if(Atomics.load(i,0)!==r)return;let n=-38,s=new Uint8Array;try{const o=Atomics.load(i,1);if(o===v.SyscallBinary){const E=Xa(e,t);if(E===kr)return;const I=BigInt(E instanceof Promise?await E:E);if(Atomics.compareExchange(i,0,r,-r)!==r)return;(t.view??=new DataView(e.buffer,e.byteOffset,e.byteLength)).setBigInt64(0,I,!0),Atomics.store(i,2,0),Atomics.store(i,4,8),Atomics.store(i,0,r+1),Atomics.notify(i,0);return}const a=Qa(o,e,t);if(a){if(a.output.byteLength>e.byteLength)throw Object.assign(new Error("EMSGSIZE"),{code:"EMSGSIZE"});if(Atomics.compareExchange(i,0,r,-r)!==r)return;e.set(a.output),Atomics.store(i,2,a.result),Atomics.store(i,4,a.output.byteLength),Atomics.store(i,0,r+1),Atomics.notify(i,0);return}const f=Atomics.load(i,3),y=f>0?JSON.parse(Nr.decode(e.slice(0,f))):{},g=Ja(o,y,t);if(g===kr)return;const p=g instanceof Promise?await g:g;s=p===void 0?new Uint8Array:fs.encode(JSON.stringify(p)),n=0}catch(o){n=Za(o)}s.byteLength>e.byteLength&&(n=-90,s=new Uint8Array),Atomics.compareExchange(i,0,r,-r)===r&&(s.byteLength>0&&e.set(s),Atomics.store(i,2,n),Atomics.store(i,4,s.byteLength),Atomics.store(i,0,r+1),Atomics.notify(i,0))}function pn(){return cs}function Ja(i,e,t){const r=t.process===0?pn():me.get(t.process)?.descriptors;if(i===v.GetCwd)return r?.currentWorkingDirectory();if(i===v.CopyForExec||i===v.CopyForFork){if(!r)throw new Error("Missing parent descriptor table");const s={descriptors:r[i===v.CopyForFork?"copyForFork":"copyForExec"](()=>{if(!s.memory)throw new Error("Child memory is not attached");return s.memory},Array.isArray(e.stdio)?e.stdio.map(se):void 0)},o=Va++;return me.set(o,s),{process:o}}if(i===v.CloseProcess){r?.descriptors.exit(),t.process!==0&&me.delete(t.process);return}const n=()=>ge(e.path);if(i===v.PrepareSpawn){mn?.();return}if(i===v.ImportPeerPatch){Dt(e.patch);return}if(i===v.Exists)return C.existsSync(n());if(i===v.Stat||i===v.Lstat){const s=i===v.Lstat?C.lstatSync(n()):C.statSync(n());return{file:s.isFile(),directory:s.isDirectory(),symbolicLink:s.isSymbolicLink?.(),size:s.size,mode:s.mode,mtimeMs:s.mtimeMs,atimeMs:s.atimeMs,ctimeMs:s.ctimeMs,nlink:s.nlink,uid:s.uid,gid:s.gid,dev:s.dev,ino:s.ino,rdev:s.rdev,blksize:s.blksize,blocks:s.blocks}}if(i===v.ReadFile)return{content:xe(C.readFileSync(n()))};if(i===v.WriteFile){C.writeFileSync(n(),ze(ge(e.content)));return}if(i===v.ReadRange){const s=se(e.offset),o=se(e.length),a=C.readRangeSync?C.readRangeSync(n(),s,o):C.readFileSync(n()).subarray(s,s+o);return{content:xe(a)}}if(i===v.WriteRange){const s=se(e.offset),o=ze(ge(e.content));if(C.writeRangeSync)C.writeRangeSync(n(),s,o);else{const a=C.existsSync(n())?C.readFileSync(n()):new Uint8Array,f=new Uint8Array(Math.max(a.byteLength,s+o.byteLength));f.set(a),f.set(o,s),C.writeFileSync(n(),f)}return}if(i===v.Mkdir){C.mkdirSync(n(),{recursive:e.recursive===!0});return}if(i===v.Readdir)return C.readdirSync(n());if(i===v.Unlink){C.unlinkSync(n());return}if(i===v.Rmdir){C.rmdirSync(n());return}if(i===v.Rename){C.renameSync(ge(e.from),ge(e.to));return}if(i===v.Snapshot)return C.toSnapshot();if(i===v.SnapshotSize||i===v.FinalSnapshotSize)return i===v.FinalSnapshotSize&&yn?.(),t.snapshot=fs.encode(JSON.stringify(C.toSnapshot())),{length:t.snapshot.byteLength};if(i===v.SnapshotChunk){const s=se(e.offset),o=se(e.length);if(!t.snapshot||s<0||o<0||o>$i||s+o>t.snapshot.byteLength)throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});const a=xe(t.snapshot.subarray(s,s+o));return s+o===t.snapshot.byteLength&&delete t.snapshot,{content:a}}if(i===v.ReplaceSnapshot){C.replaceSnapshot(e.snapshot);return}if(i===v.ReplaceSnapshotStart||i===v.ImportPeerPatchStart){const s=se(e.length);if(s<=0||s>256*1024*1024)throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});t.replacement={bytes:new Uint8Array(s),offset:0,peerPatch:i===v.ImportPeerPatchStart};return}if(i===v.ReplaceSnapshotChunk||i===v.ImportPeerPatchChunk){const s=se(e.offset),o=ze(ge(e.content)),a=t.replacement;if(!a||a.peerPatch!==(i===v.ImportPeerPatchChunk)||s!==a.offset||o.byteLength>$i||s+o.byteLength>a.bytes.byteLength)throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});if(a.bytes.set(o,s),a.offset+=o.byteLength,a.offset===a.bytes.byteLength){delete t.replacement;const f=JSON.parse(Nr.decode(a.bytes));a.peerPatch?Dt(f):C.replaceSnapshot(f)}return}if(i===v.Syscall){if(!r)throw Object.assign(new Error("EIO"),{code:"EIO"});const s=ge(e.name),o=ls(t,r)[s];if(!o)throw Object.assign(new Error("ENOSYS"),{code:"ENOSYS"});const a=Array.isArray(e.args)?e.args.map(y=>BigInt(ge(y))):[],f=us(s,o,a);return f===kr?kr:f instanceof Promise?f.then(y=>({result:String(y)})):{result:String(f)}}if(i===v.ReadForMapping){if(!r)throw Object.assign(new Error("EIO"),{code:"EIO"});const s=r.readForMapping(se(e.fd),se(e.offset),se(e.length));return s?{content:xe(s)}:{}}if(i===v.MappingPath){if(!r)throw Object.assign(new Error("EIO"),{code:"EIO"});const s=r.mappingPath(se(e.fd));return s?{path:s}:{}}if(i===v.WriteForMapping){if(!r)throw Object.assign(new Error("EIO"),{code:"EIO"});return{written:r.writeForMapping(ge(e.path),se(e.offset),ze(ge(e.content)))}}throw Object.assign(new Error("ENOSYS"),{code:"ENOSYS"})}function ls(i,e){const t=e.descriptors,r=i.handlers;if(r&&r.table===e&&r.entries===t.sharedEntries.buffer)return r.imports;const n=pt&&new Go(()=>i.process===0?ds:me.get(i.process).memory,{...pt,table:t.sharedEntries.buffer},t),s=n?n.imports(e.imports()):e.imports();return i.handlers={table:e,entries:t.sharedEntries.buffer,imports:s},s}function Xa(i,e){const t=e.process===0?pn():me.get(e.process)?.descriptors;if(!t)throw Object.assign(new Error("EIO"),{code:"EIO"});const r=e.view??=new DataView(i.buffer,i.byteOffset,i.byteLength),n=i[0],s=Nr.decode(i.slice(8+n*8,8+n*8+i[1])),o=[];for(let f=0;f<n;f+=1)o.push(r.getBigInt64(8+f*8,!0));const a=ls(e,t)[s];if(!a)throw Object.assign(new Error("ENOSYS"),{code:"ENOSYS"});return us(s,a,o)}function us(i,e,t){let r;if(i==="SYS_flock"){const n=Number(t[1]??0);(n&4)===0&&(n&8)===0&&(r=[...t],r[1]=BigInt(n|4))}else if(i==="SYS_fcntl"){const n=Number(t[1]??0);(n===7||n===38)&&(r=[...t],r[1]=BigInt(n===7?6:37))}return r?qa(e,r):e(...t)??0}async function qa(i,e){for(;;){const t=i(...e)??0;if(BigInt(t)!==-11n)return t;await new Promise(r=>setTimeout(r,5))}}function ge(i){if(typeof i!="string")throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});return i}function se(i){if(typeof i!="number"||!Number.isSafeInteger(i))throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});return i}function Za(i){const e=i instanceof Error?i.message:String(i),t=typeof i=="object"&&i!==null&&"code"in i?String(i.code):/\b(E[A-Z]+)\b/u.exec(e)?.[1]??"EIO";return-({ENOENT:2,EBADF:9,EACCES:13,EEXIST:17,ENOTDIR:20,EISDIR:21,EINVAL:22,EMFILE:24,ENOSPC:28,ESPIPE:29,ERANGE:34,ENOSYS:38,ENOTEMPTY:39,EMSGSIZE:90}[t]??5)}function Qa(i,e,t){if(i!==v.ReadForMappingBinary&&i!==v.WriteForMappingBinary)return;const r=t.process===0?pn():me.get(t.process)?.descriptors;if(!r)throw Object.assign(new Error("EIO"),{code:"EIO"});const n=t.view??=new DataView(e.buffer,e.byteOffset,e.byteLength);if(i===v.ReadForMappingBinary){const y=Math.min(n.getInt32(16,!0),e.byteLength),g=r.readForMapping(n.getInt32(0,!0),n.getFloat64(8,!0),y);return g?{result:0,output:g}:{result:1,output:new Uint8Array}}const s=n.getUint32(8,!0),o=n.getUint32(12,!0),a=Nr.decode(e.slice(16,16+s)),f=r.writeForMapping(a,n.getFloat64(0,!0),e.slice(16+s,16+s+o));return{result:0,output:new Uint8Array([f?1:0])}}function ec(i){return`/${i.split("/").filter(Boolean).join("/")}`}function tc(i,e){return e==="/"||i===e||i.startsWith(`${e}/`)}const cn=globalThis;cn.onmessage=i=>{if(i.data.kind==="initialize"){Ga(i.data).then(()=>cn.postMessage({kind:"ready"}),e=>cn.postMessage({kind:"error",message:e instanceof Error?e.message:String(e)}));return}hs(i.data)};
|