@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
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
const sn=["file","directory","symlink"],Zs=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u,Qs=new TextEncoder,eo=new TextDecoder;function $i(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 Wn(i,e){const t=[...i.keys()];for(const D of t)if(Zs.test(D))throw new Error("A path in the store is not well-formed UTF-16.");const r=new Map;for(let D=0;D<t.length;D+=1)r.set(t[D],D);for(const D of e.keys())r.has(D)||(r.set(D,t.length),t.push(D));const n=t.length,s=new Map,o=new Uint32Array(n);let a=0;for(let D=0;D<n;D+=1){const G=t[D];let q=!0;for(let be=0;be<G.length;be+=1)if(G.charCodeAt(be)>=128){q=!1;break}q||s.set(D,Qs.encode(G)),o[D]=q?G.length:s.get(D).length,a+=o[D]}let h=0;for(const D of e.values())h+=D.size;let y=1;for(;y<n*2;)y<<=1;const m=24,g=on(m+n*6*4,8),A=g+n*3*8,E=A+y*4,S=E+h*4,N=new SharedArrayBuffer(on(S+a,8));new Uint32Array(N,0,6).set([2019846480,n,y,h,a,i.size]);const F=new Uint32Array(N,m,n*6),R=new Float64Array(N,g,n*3),J=new Uint32Array(N,A,y),me=new Uint32Array(N,E,h),te=new Uint8Array(N,S,a);let re=0,$=0;for(let D=0;D<n;D+=1){const G=t[D],q=D*6,be=s.get(D);if(be)te.set(be,re);else for(let P=0;P<G.length;P+=1)te[re+P]=G.charCodeAt(P);const T=o[D];F[q+0]=re,F[q+1]=T,re+=T;let ne=be?0:32;const ae=i.get(G);if(ae){ne|=1|sn.indexOf(ae.type)<<3,ae.pack&&(ne|=4),F[q+3]=ae.mode;const P=D*3;R[P+0]=ae.mtimeMs,R[P+1]=ae.offset,R[P+2]=ae.length}const Ye=e.get(G);if(Ye){ne|=2,F[q+4]=$,F[q+5]=Ye.size;for(const P of Ye){const C=r.get(`${G}/${P}`);if(C===void 0)throw new Error(`The store's children name ${G}/${P}, which its index does not hold.`);me[$++]=C}}F[q+2]=ne;let _e=$i(G)&y-1;for(;J[_e]!==0;)_e=_e+1&y-1;J[_e]=D+1}if($!==h)throw new Error("The shared index's children did not add up.");return N}function on(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 h=24,y=on(h+r*6*4,8),m=y+r*3*8,g=m+n*4,A=g+s*4;this.records=new Uint32Array(e,h,r*6),this.numbers=new Float64Array(e,y,r*3),this.table=new Uint32Array(e,m,n),this.childList=new Uint32Array(e,g,s),this.strings=new Uint8Array(e,A,o),this.mask=n-1}find(e){let t=$i(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:sn[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?sn[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 eo.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 ue=Symbol("deleted");function Ui(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===ue?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===ue?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!==ue;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&&Ui(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,ue):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!==ue&&(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!==ue&&(yield[e,t])}*changes(){for(const[e,t]of this.overlay)yield[e,t===ue?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 _t{base;overlay=new Map;constructor(e){this.base=e}get(e){const t=this.overlay.get(e);if(t!==void 0)return t===ue?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!==ue)return t;const r=new Set(t===ue?[]:this.get(e)??[]);return this.overlay.set(e,r),r}delete(e){this.overlay.set(e,ue)}}function Hn(i){const e=i.lastIndexOf("/");return e<=0?"/":i.slice(0,e)}function ct(i){return i==="/"?"":i}const to="/opt/tree";function ro(i){return`volter-tree-store-use:${i}`}function no(i,e=globalThis.navigator?.locks){if(!e)return Promise.resolve();let t=Vn.get(e);t||Vn.set(e,t=new Map);let r=t.get(i);if(!r){r=new Promise((s,o)=>{e.request(ro(i),{mode:"shared"},()=>(s(),new Promise(()=>{}))).catch(o)});const n=t;r.catch(()=>n.delete(i)),t.set(i,r)}return r}const Vn=new WeakMap;function io(i,e){const t=new Be(i.index),r=new Qe(t),n=new _t(t),s={childrenOf:a=>[...n.get(ct(a))??[]].sort(),descendants(a){const h=[],y=m=>{const g=r.get(m);g&&h.push([m,g]);for(const A of n.get(ct(m))??[])y(`${ct(m)}/${A}`)};return y(a),h}};if(i.store!==void 0){const a=e?.get(i.store),h=i.roots?.[0]??"/",y=i.storeRoot??h,m=A=>y+A.slice(h==="/"?0:h.length),g=A=>{const E=r.get(A);if(!E||E.type==="directory")throw new Error(`The shared layer holds no file at ${A}.`);if(!a)throw new Error(`${A} is in the store ${i.store}, which this realm did not open.`);return a};return{entries:r,read:A=>g(A).read(m(A)),readRange:(A,E,S)=>g(A).readRange(m(A),E,S),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 h=r.get(a);if(!h||h.type==="directory")throw new Error(`The shared layer holds no file at ${a}.`);return o.slice(h.offset,h.offset+h.length)},view(a){const h=r.get(a);if(!h||h.type==="directory")throw new Error(`The shared layer holds no file at ${a}.`);return o.subarray(h.offset,h.offset+h.length)},readRange(a,h,y){const m=r.get(a);if(!m||m.type==="directory")throw new Error(`The shared layer holds no file at ${a}.`);const g=Math.min(Math.max(0,h),m.length);return o.slice(m.offset+g,m.offset+Math.min(m.length,g+Math.max(0,y)))},childrenOf:a=>[...n.get(ct(a))??[]].sort(),descendants(a){const h=[],y=m=>{const g=r.get(m);g&&h.push([m,g]);for(const A of n.get(ct(m))??[])y(`${ct(m)}/${A}`)};return y(a),h}}}function so(i){if(i.length===1)return i[0];const e=(o,a)=>{if(o===0)return!1;for(let h=Hn(a);;h=Hn(h)){for(let y=0;y<o;y+=1){const m=i[y].entries.get(h);if(m&&m.type!=="directory")return!0}if(h==="/")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[h,y]of i[a].entries)o.has(h)||t(h)!==a||(o.add(h),yield[h,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,h]of n)o(h,a,n)}},s=o=>{const a=r(o)?.entries.get(o);return a&&a.type!=="directory"?[]:i.filter((h,y)=>{const m=h.entries.get(o);return(!m||m.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,h)=>{const y=r(o);if(!y)throw new Error(`No lower tree holds ${o}.`);if(y.readRange)return y.readRange(o,a,h);const m=y.read(o),g=Math.min(Math.max(0,a),m.byteLength);return m.slice(g,Math.min(m.byteLength,g+Math.max(0,h)))},readsByRange:o=>r(o)?.readsByRange?.(o)??!1,childrenOf:o=>[...new Set(s(o).flatMap(a=>a.childrenOf(o)))].sort(),descendants:o=>{const a=[],h=new Set;for(const m of i)for(const[g]of m.descendants(o)){if(h.has(g))continue;h.add(g);const A=n.get(g);A&&a.push([g,A])}const y=a.findIndex(([m])=>m===o);return y>0&&a.unshift(...a.splice(y,1)),a}}}function jn(i,e,t){const r=[...i?[i]:[],...(e??[]).map(n=>io(n,t))];return r.length===0?void 0:so(r)}const oo="supercode-browser-filesystems",Ce="packages",ao="state.json",Gn="/image-range-worker.js",Kn="image-ranges.json",co=2;function Br(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 Jn=new Map;class fo{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,h=n??new SharedArrayBuffer((2*a+1)*Int32Array.BYTES_PER_ELEMENT);if(h.byteLength!==a*Int32Array.BYTES_PER_ELEMENT&&h.byteLength!==(2*a+1)*Int32Array.BYTES_PER_ELEMENT)throw new Error("The image completion seed has the wrong range count.");this.completed=new Int32Array(h,0,a),this.firstRead=h.byteLength>a*Int32Array.BYTES_PER_ELEMENT?new Int32Array(h,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(Gn,{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(m),t.removeEventListener("message",y),t.removeEventListener("error",a),t.removeEventListener("messageerror",a),this.cancelStartup=void 0},a=()=>h(new Error("The immutable image materializer could not initialize; reload to retry.")),h=g=>{o(),t.terminate(),r||(this.closed=!0,this.fail()),s(g)},y=g=>{if(g.data?.identity===this.identity){if(g.data.type==="init-error"){h(new Error(`The immutable image materializer could not initialize: ${String(g.data.error)}`));return}g.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())}},m=setTimeout(()=>h(new Error("The immutable image materializer did not initialize within 10 seconds; reload to retry.")),1e4);this.cancelStartup=h,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(g){h(g instanceof Error?g:new Error(String(g)))}}),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 h=this.ranges.parts[a];if(h.raw===0)continue;const y=r.get(h.sha256);y?y.push(a):r.set(h.sha256,[a])}const n=[];for(const a of new Set(e))for(const h of r.get(a)??[])Atomics.load(this.completed,h)!==2&&n.push(h);const s=t.length>0&&n.length>0?Math.min(t.length,8):Math.min(co,Math.ceil(n.length/32)),o=[];for(let a=0;a<s;a+=1){const h=n.filter((A,E)=>E%s===a),y=new Worker(Gn,{type:"module",name:"immutable-image-prefetch"});this.prefetchers.push(y);let m;o.push(new Promise(A=>{m=A}));const g=()=>{y.terminate(),this.prefetchers=this.prefetchers.filter(A=>A!==y),m()};y.addEventListener("error",g),y.addEventListener("messageerror",g),y.addEventListener("message",A=>{A.data?.identity===this.identity&&(A.data.type==="ready"?y.postMessage(t.length>0?{type:"prefetch-stream",url:t[a]}:{type:"prefetch",indices:h}):(A.data.type==="prefetched"||A.data.type==="init-error")&&g())}),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 h=this.firstRead;if(h&&Atomics.load(h,o)===0&&Atomics.compareExchange(h,o,0,Atomics.add(h,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 m=performance.now(),g=m+3e4;for(;Atomics.load(this.state,o)===0;){const S=g-performance.now();if(S<=0||Atomics.wait(this.state,o,0,S)==="timed-out")throw this.close(),new Error(`The image's immutable part ${a.url} did not arrive within 30 seconds; reload to retry.`)}const A=performance.now()-m,E=Jn.get(this.identity)??{ranges:0,ms:0};if(E.ranges+=1,E.ms+=A,Jn.set(this.identity,E),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(A)})}`),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 Cr="/packages",nr="supercode-browser-packages",qe=new TextEncoder,dt=new TextDecoder("utf-8",{fatal:!0}),ho=oo,ir="generations",Xn="atomic-staging",ft=ao,we="index.json",$r="index-log.bin",ht="pack.bin",sr=8,qn=64*1024*1024,fe=1024*1024*1024,Zn=10*1024*1024*1024,lo=16*1024*1024*1024,zi=["/workspace","/home","/opt"],Ze=0,Qn=1,Ur=1e6,ei=8*1024*1024,ti=250,uo=64*1024*1024,yo=256*1024*1024,ri=4*1024*1024,lt=493,or=420;function an(i,e={}){const t=e.limits?.maxBytes??Zn,r=e.limits?.maxEntries??Ur;if(!Number.isSafeInteger(t)||t<1||t>Zn||!Number.isSafeInteger(r)||r<1||r>Ur)throw new Error("Invalid OPFS workspace limits.");let n,s=!1,o=!1,a=!1,h,y=0,m=0,g,A,E,S=new Map,N=new ar,M,F,R,J,me,te,re=0,$,D=0;const G=new Map,q=256*1024,be=32;let T=0,ne,ae=-1/0,Ye=0,_e=0,P=0,C=0,Z=0,We=0,He=0,he,Ct,Ee,tt=!1,gt,yn=Promise.resolve(),rt=0,K=!1,nt=!1,X,Ve=0,Ae=!1;function $t(){if(!(!X||Ae)){if(P>2147483647){Ut();return}Atomics.store(X,Qn,P)}}function Ut(){!X||Ae||(Ae=!0,(Atomics.load(X,Ze)&1)===0&&Atomics.add(X,Ze,1))}function St(){Ve+=1,Ve===1&&X&&!Ae&&Atomics.add(X,Ze,1)}function bt(){Ve-=1,!(Ve>0||!X||Ae)&&($t(),Ae||Atomics.add(X,Ze,1))}function mn(){if(o)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,$t()),X.buffer}let ce;const hs=8*1024*1024;let wn=!1;function ls(c){if(o||!X||!E||tt||Ve>0||Ae||K)return;const d=Atomics.load(X,Ze);if(d&1)return;if(c?.overlays&&S instanceof Qe){const u=S.boundedChanges();if(u)return Ir({generation:E,index:S.base.buffer,changes:u,packBytes:T,logBytes:P,epoch:d,liveBytes:C,linked:y,linkedBytes:m})}if(ce&&ce.generation===E&&ce.epoch===d&&P>=ce.logBytes&&P-ce.logBytes<=(c?.current?0:hs))return Ir(ce);let f;try{f=Wn(S,ms())}catch(u){console.warn(`[pack-store] no reader seed: ${u instanceof Error?u.message:String(u)}`);return}return ce={generation:E,index:f,packBytes:T,logBytes:P,epoch:d,liveBytes:C,linked:y,linkedBytes:m},ys(f),Ir(ce)}function Ir(c){const d=e.packages?.imageCompletionSeed();return d?{...c,packagesImage:d}:c}function us(){if(!(!R||!F||!E||tt||Ve>0||K))return{generation:E,rangesDigest:F,completed:R.completionBuffer,...R.receiptKey?{metadata:{ranges:R.verifiedRanges,receiptKey:R.receiptKey}}:{}}}function ys(c){const d=[];if(S instanceof Qe)for(const[u,l]of S.changed())l.capacity!==void 0&&d.push([u,l]);else for(const[u,l]of S)l.capacity!==void 0&&d.push([u,l]);const f=new Be(c);S=new Qe(f),N=new _t(f);for(const[u,l]of d)S.set(u,l)}function ms(){if(N instanceof ar)return N.map;const c=new Map;for(const d of S.keys()){const f=Je(d);if(f===d)continue;let u=c.get(f);u||(u=new Set,c.set(f,u)),u.add(d.slice(f.length+1))}return c}function ws(){!o||a||K||!$||Vt(P)}async function zt(c){if(K)throw new Error("This OPFS workspace is closing.");rt+=1;let d,f=!1;try{return await c()}catch(u){throw f=!0,d=u,u}finally{if(rt-=1,K&&rt===0)try{Un()}catch(u){throw f?new AggregateError([d,u],"OPFS operation and deferred close both failed."):u}}}async function Yt(c){return Te(),rt!==0?Promise.reject(new Error("Wait for the current OPFS storage operation before replacing its generation.")):(nt=!0,zt(async()=>{try{return await c()}finally{nt=!1}}))}function ps(c){if(K)throw new Error("This OPFS workspace is closing.");const d=S.get(c);if(!d||d.type==="directory")throw new Error(`OPFS workspace file does not exist: ${c}`);return Wt(d)}function gs(c,d,f){if(K)throw new Error("This OPFS workspace is closing.");const u=S.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),w=Math.min(Math.max(0,f),u.length-l);if(u.pack){const p=e.packages;if(!p)throw new Error("This store has no shared package store to read from.");return p.readExtent(u.offset+l,w)}return Ht(u.offset+l,w)}function Wt(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 Ht(c.offset,c.length)}function Ht(c,d){if(K)throw new Error("This OPFS workspace is closing.");const f=M;if(!f)throw new Error("OPFS filesystem worker is not initialized.");const u=new Uint8Array(d);if(d>0&&d<=q&&c>=0&&c+d<=D){let l=0;for(;l<d;){const w=c+l,p=Math.floor(w/q)*q;let b=G.get(p);if(!b&&(b=new Uint8Array(Math.min(q,D-p)),R?.ensure(p,b.byteLength),f.read(b,{at:p})!==b.byteLength))throw new Error("An OPFS package range could not be read completely.");G.delete(p),G.set(p,b),G.size>be&&G.delete(G.keys().next().value);const k=w-p,I=Math.min(d-l,b.byteLength-k);u.set(b.subarray(k,k+I),l),l+=I}return u}if(R?.ensure(c,d),d>0&&f.read(u,{at:c})!==d)throw new Error("An OPFS workspace file could not be read completely.");return u}async function Ss(c,d={}){if(K&&n||!n&&rt!==0)throw new Error("Wait for this OPFS workspace to finish closing before opening it again.");if(tt)throw new Error("This OPFS store is already opening a workspace.");if(n){if(A!==Sn(c))throw new Error("Close this OPFS store before opening another workspace.");return S.size>0}tt=!0,K=!1;const f=new AbortController;gt=f;try{S=new Map,N=new ar,E=void 0,F=void 0,h=void 0,he=void 0,Ee=void 0,T=P=C=Z=y=m=0,Ie=void 0,We=He=Ye=_e=0,ae=-1/0,A=Sn(c),o=d.readOnly===!0,me=o?d.imageCompletion:void 0,te=o?d.imageLine:void 0,a=o&&d.extentsOnly===!0,s=d.shared===!0||o,s||await Is(f.signal),f.signal.throwIfAborted();const u=await Es();f.signal.throwIfAborted();try{const p=await u.getDirectoryHandle(ho,{create:!o});f.signal.throwIfAborted(),n=await p.getDirectoryHandle(A,{create:!o})}catch(p){if(f.signal.throwIfAborted(),o&&at(p))return!1;throw p}f.signal.throwIfAborted();let l=tr(await Ke(n,ft));if(f.signal.throwIfAborted(),!l&&o)return await Mr(),!1;if(!l&&s&&(await i.navigator.locks.request(nr,{mode:"exclusive",signal:f.signal},async()=>{f.signal.throwIfAborted(),l=tr(await Ke(n,ft)),f.signal.throwIfAborted(),l||(await Mr(),await Ln({files:[],pack:new ArrayBuffer(0)}),await po(n))}),f.signal.throwIfAborted(),!l))return h=await ke(E,!1),f.signal.throwIfAborted(),!1;if(!l)return await Mr(),f.signal.throwIfAborted(),!1;const w=async p=>{let b;try{b=await ke(p.generation,!1)}catch(O){throw f.signal.throwIfAborted(),at(O)?new Error("The committed OPFS workspace generation is missing. Stored generations were retained.",{cause:O}):O}if(f.signal.throwIfAborted(),E=p.generation,re=p.initializedAt,F=p.imageRanges,h=b,a)return A===Ce&&i.navigator.locks?await i.navigator.locks.request(nr,{mode:"shared",signal:f.signal},async()=>{await it(b),D=M.getSize()}):await it(b),f.signal.throwIfAborted(),!0;const k=o?d.seed:void 0;if(k&&k.generation===p.generation){const O=new Be(k.index);return S=new Qe(O),N=new _t(O),T=k.packBytes,k.changes&&gn({packBytes:k.packBytes,changes:k.changes}),await it(b),f.signal.throwIfAborted(),P=k.logBytes,{liveBytes:C,linked:y,linkedBytes:m}=k,Z=Math.max(0,T-C),wn=!0,S.size>0}const I=o?void 0:await Hs(b);if(f.signal.throwIfAborted(),I){const O=new Be(I.index);S=new Qe(O),N=new _t(O),{packBytes:T,liveBytes:C,linked:y,linkedBytes:m}=I;const L=Atomics.load(new Int32Array(mn()),Ze);ce={generation:E,index:I.index,packBytes:T,liveBytes:C,linked:y,linkedBytes:m,logBytes:0,epoch:L}}else S=vr(await Ke(b,we)),f.signal.throwIfAborted(),ot(),T=Nr(S);await it(b),f.signal.throwIfAborted();const _=I?await Vs(I):0;return f.signal.throwIfAborted(),_&&(Ie={generation:E,bytes:_},ce&&(ce.logBytes=_)),Vt(_,!!I),I?Z=Math.max(0,T-C):Et(),Nn(),s&&!o&&!I&&S.size>=1e4&&(ve(),await It(b,S,{access:$,bytes:P,packBytes:T})),s||(M.truncate(T),await _n(n,Xn,!0),await Lr(E),f.signal.throwIfAborted(),Z>uo&&Z>C&&await vs()),f.signal.throwIfAborted(),S.size>0};return s&&!o?await i.navigator.locks.request(nr,{mode:"exclusive",signal:f.signal},async()=>{if(l=tr(await Ke(n,ft)),!l)throw new Error("The committed package store state is missing. Stored data was retained.");return w(l)}):await w(l)}catch(u){const l=[u];try{st()}catch(w){l.push(w)}try{g?.()}catch(w){l.push(w)}throw g=void 0,n=void 0,l.length>1?new AggregateError(l,"OPFS workspace open and cleanup failed."):u}finally{tt=!1,gt=void 0}}function bs(c){return zt(()=>pn(c?.whole===!0))}async function pn(c=!1){if(a)throw new Error("A store opened for its extents alone has no index to follow.");if(o&&n){const w=tr(await Ke(n,ft));if(!w)throw new Error("The committed OPFS workspace state is missing. Stored data was retained.");if(w.generation!==E||c){const p=await ke(w.generation,!1),b=vr(await Ke(p,we));T=Nr(b),w.generation!==E&&(E=w.generation,re=w.initializedAt,F=w.imageRanges,await it(p)),E=w.generation,h=p,S=b,ot(),Vt(),Et();return}}const d=$;if(!d||!h)return;const f=d.getSize();let u=!1;f<P&&(S=vr(await Ke(h,we)),ot(),T=Nr(S),P=0,u=!0);const l=P;Vt(P),(u||P!==l)&&Et()}async function Es(){let c;for(let d=0;d<10;d+=1){gt?.signal.throwIfAborted();try{return await i.navigator.storage.getDirectory()}catch(f){c=f,await new Promise(u=>setTimeout(u,200))}}throw c instanceof Error?c:new Error("This browser workspace's storage is unavailable.")}const As=1e4;async function ie(c,d){let f;const u=gt?.signal;for(let w=0;w<2;w+=1){u?.throwIfAborted();const p=c.createSyncAccessHandle({mode:"readwrite-unsafe"});let b,k,I=!1;try{const _=new Promise((L,W)=>{k=()=>W(u?.reason??new DOMException("Workspace open was cancelled.","AbortError")),u?.addEventListener("abort",k,{once:!0}),u?.aborted&&k()}),O=await Promise.race([p.then(L=>({access:L})).catch(L=>{f=L}),new Promise(L=>{b=setTimeout(()=>L(void 0),As)}),_]);if(u?.throwIfAborted(),O)return I=!0,O.access}finally{b!==void 0&&clearTimeout(b),k&&u?.removeEventListener("abort",k),I||p.then(_=>_.close(),()=>{}).catch(_=>console.error("Late workspace handle cleanup failed.",_))}if(f 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). ${f.message}`);await new Promise(_=>setTimeout(_,500))}const l=f instanceof Error?` (${f.message})`:"";throw new Error(`This browser workspace's ${d} is held by another page${l}.`)}async function it(c){st();const d=await c.getFileHandle(ht);M=await ie(d,"store");try{if(M.getSize()<T)throw new Error("The committed OPFS workspace pack is incomplete. Stored data was retained.");const f=await c.getFileHandle($r);if($=await ie(f,"record of changes"),P=$.getSize(),F){const u=me,l=u&&u.generation===E&&u.rangesDigest===F?u:void 0;let w,p;if(l?.metadata){if(w=Br(l.metadata.ranges),p=l.metadata.receiptKey,!/^[a-f0-9]{64}$/u.test(p))throw new Error("The owner's immutable receipt key is invalid.")}else{const k=await(await c.getFileHandle(Kn)).getFile(),I=new Uint8Array(await k.arrayBuffer());if(await Me(I)!==F)throw new Error("The committed immutable image ranges have changed. Stored data was retained.");w=Br(JSON.parse(dt.decode(I))),p=await Me(qe.encode(JSON.stringify(w)))}if(w.bytes>M.getSize())throw new Error("The immutable image reservation is incomplete. Stored data was retained.");const b=l?te:void 0;b||te?.port.close(),te=void 0,R=new fo(w,c,`${A}.${E}`,l?.completed,p,b),console.log(`[boot-trace] ${JSON.stringify({event:"image-reader-open",at:Date.now(),reader:`${A}.${E}`,offered:u!==void 0,shared:l!==void 0,...u&&!l?{offeredGeneration:u.generation,generation:E,rangesMatch:u.rangesDigest===F}:{}})}`),await R.initialize(),J=w.image}}catch(f){throw st(),f}}function st(){R?.close(),R=void 0,J=void 0;const c=M,d=$;M=void 0,$=void 0,P=0,D=0,G.clear();try{c?.close()}finally{d?.close()}}function Vt(c=0,d=!1){const f=$;if(!f)throw new Error("OPFS filesystem worker is not initialized.");const u=f.getSize();if(u<=c){P=u;return}const l=new Uint8Array(u-c);if(f.read(l,{at:c})!==l.byteLength)throw new Error("The OPFS workspace index log could not be read.");const w=M?.getSize()??1/0,p=new DataView(l.buffer);let b=0;const k=l.byteLength;for(;b+sr<=k;){const I=p.getUint32(b,!0),_=p.getUint32(b+4,!0),O=b+sr;if(I===0||I>qn||O+I>k)break;const L=l.subarray(O,O+I);if(Bn(L)!==_)break;let W;try{W=Ks(JSON.parse(dt.decode(L)))}catch{break}if(W.packBytes>w)break;gn(W,d),b=O+I}b!==k&&!s&&f.truncate(c+b),P=c+b}function gn(c,d=!1){for(const[f,u]of c.changes){const l=S.get(f);if(u&&Ui(l,u)){Gt(f);continue}d&&(l?.pack?(y-=1,m-=l.length):l&&(C-=l.length),u?.pack?(y+=1,m+=u.length):u&&(C+=u.length)),u===null?(S.delete(f),En(f)):(S.set(f,u),Gt(f))}T=Math.max(T,c.packBytes)}function Et(){C=0,y=0,m=0;for(const c of S.values())c.pack?(y+=1,m+=c.length):C+=c.length;Z=Math.max(0,T-C)}function Nr(c){let d=0;for(const f of c.values())f.pack||(d=Math.max(d,f.offset+f.length));return d}const ks=5e3;async function Is(c){if(!i.navigator.locks)return;if(!A)throw new Error("OPFS filesystem project is not initialized.");const d=new AbortController,f=setTimeout(()=>d.abort(),ks);try{await new Promise((u,l)=>{i.navigator.locks.request(`supercode-browser-filesystem-${A}`,{mode:"exclusive",signal:c?AbortSignal.any([c,d.signal]):d.signal},async()=>{clearTimeout(f),u(),await new Promise(w=>{g=w})}).catch(()=>l(c?.aborted?c.reason:new Error("This browser workspace is already open in another tab.")))})}finally{clearTimeout(f)}}function Sn(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(!n)throw new Error("OPFS filesystem worker is not initialized.");return n}async function ke(c,d){return(await(await je()).getDirectoryHandle(ir,{create:d})).getDirectoryHandle(c,{create:d})}async function Mr(){let c;try{c=await(await je()).getDirectoryHandle(ir)}catch(d){if(at(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 Lr(c){const d=await je();let f;try{f=await d.getDirectoryHandle(ir)}catch(u){if(at(u))return;throw u}for await(const[u]of f.entries())u!==c&&await Tn(f,u)}function Te(){if(K)throw new Error("This OPFS workspace is closing.");if(nt)throw new Error("This OPFS workspace is replacing its generation; wait for that operation before writing.");if(o)throw new Error("This store is open for reading; its owner writes it.");if(Ee)throw Ee}async function Ns(c){Cn(c)}let Or=!1,jt=0,Ie,xr=!1;function bn(){if(jt>0)return;const c=Ie&&Ie.generation===E&&Ie.bytes<=P?Ie.bytes:0;P-c>ei&&!Or&&(Or=!0,(s?i.navigator.locks.request(nr,{mode:"exclusive"},async()=>{if(!n||K)return;await pn();const f=Ie,u=f&&f.generation===E&&f.bytes<=P?f.bytes:0;P-u>ei&&await qt()}):qt()).catch(f=>console.error("The workspace's log could not be checkpointed; it is replayed at the next open.",f)).finally(()=>{Or=!1})),!s&&!xr&&Z>yo&&Z>C&&(xr=!0,zt(Fs).catch(d=>console.error("The workspace could not be compacted; it keeps its generation.",d)).finally(()=>{xr=!1}))}async function Ms(c){Te(),jt+=1;try{return await c()}finally{jt-=1,jt===0&&!K&&n&&bn()}}function Ls(c,d){const f=Le(c.path);if(c.operation==="write"){if(S.get(f)?.type==="directory")throw new Error(`OPFS write target is a directory: ${f}`);if(!(c.content instanceof Uint8Array))throw new Error("OPFS write requires file content.");const l=c.content;if(l.byteLength>fe)throw new Error(`${f} is ${l.byteLength} bytes; an OPFS workspace file holds at most ${fe}.`);Kt(f,l.byteLength),Ge(f,d);const w=Xt(l);se(f,{type:c.symlink?"symlink":"file",mode:c.mode??S.get(f)?.mode??or,mtimeMs:c.mtimeMs??Date.now(),offset:w,length:l.byteLength},d);return}if(c.operation==="append"){const l=S.get(f);if(l&&l.type!=="file")throw new Error(`OPFS append target is not a file: ${f}`);if(!(c.content instanceof Uint8Array))throw new Error("OPFS append requires file content.");const w=c.content,p=(l?.length??0)+w.byteLength;if(p>fe)throw new Error(`${f} is ${p} bytes; an OPFS workspace file holds at most ${fe}.`);Kt(f,p),Ge(f,d);const b=c.mode??l?.mode??or,k=c.mtimeMs??Date.now(),I=l&&!l.pack?l.capacity??l.length:0;if(A!==Ce&&l&&!l.pack&&l.length>0&&(p<=I||l.offset+I===T)){Jt(l.offset+l.length,w),se(f,{...l,mode:b,mtimeMs:k,length:p,capacity:Math.max(I,p)},d),Z-=Math.max(l.length,l.capacity??0),We-=1,He-=l.length;return}const _=new Uint8Array(p);l&&l.length>0&&_.set(Wt(l),0),_.set(w,p-w.byteLength);const O=Xt(_),L=Math.min(fe,Math.max(p,p*2,64*1024));L>p&&Mn(O+L),se(f,{type:"file",mode:b,mtimeMs:k,offset:O,length:p,capacity:L},d);return}if(c.operation==="write-at"){const l=S.get(f);if(l&&l.type!=="file")throw new Error(`OPFS write target is not a file: ${f}`);if(!(c.content instanceof Uint8Array))throw new Error("OPFS write requires file content.");const w=c.content,p=c.position,b=l?.length??0;if(w.byteLength===0&&l)return;const k=w.byteLength===0?b:Math.max(b,p+w.byteLength);if(k>fe)throw new Error(`${f} is ${k} bytes; an OPFS workspace file holds at most ${fe}.`);Kt(f,k),Ge(f,d);const I=c.mode??l?.mode??or,_=c.mtimeMs??Date.now(),O=l&&!l.pack?l.capacity??l.length:0;if(A!==Ce&&l&&!l.pack&&b>0&&(k<=O||l.offset+O===T)){if(p>b&&Jt(l.offset+b,new Uint8Array(p-b)),Ct&&p<b){const de=Math.min(b,p+w.byteLength);Ct.push([l.offset+p,Ht(l.offset+p,de-p)])}Jt(l.offset+p,w),se(f,{...l,mode:I,mtimeMs:_,length:k,capacity:Math.max(O,k)},d),k!==b&&(Z-=Math.max(l.length,l.capacity??0),We-=1,He-=l.length);return}const L=new Uint8Array(k);l&&b>0&&L.set(Wt(l),0),w.byteLength>0&&L.set(w,p);const W=Xt(L),H=Math.min(fe,Math.max(k,k*2,64*1024));H>k&&Mn(W+H),se(f,{type:"file",mode:I,mtimeMs:_,offset:W,length:k,capacity:H},d);return}if(c.operation==="mkdir"){Ge(f,d);const l=S.get(f);if(l&&l.type!=="directory")throw new Error(`OPFS path is a file: ${f}`);se(f,{type:"directory",mode:c.mode??l?.mode??lt,mtimeMs:c.mtimeMs??l?.mtimeMs??Date.now(),offset:0,length:0},d);return}if(c.operation==="remove"){_r(f,d),Re().includes(f)&&se(f,{type:"directory",mode:lt,mtimeMs:Date.now(),offset:0,length:0},d);return}if(c.operation==="link"){Os(f,In(c.source),d);return}if(c.operation==="rename"){xs(f,Le(c.destination),d);return}const u=S.get(f);if(!u)throw new Error(`OPFS metadata target does not exist: ${f}`);se(f,{...u,mode:c.mode??u.mode,mtimeMs:c.mtimeMs??u.mtimeMs},d)}function se(c,d,f){const u=S.get(c);he&&!he.has(c)&&he.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&&(An(u),u.type!=="directory"&&d.type!=="directory"&&u.length>0&&!u.pack&&(We+=1,He+=u.length)),S.set(c,d),Gt(c),l||(d.pack?(y+=1,m+=d.length):C+=d.length),f.push([c,d])}function Gt(c){const d=Je(c);d!==c&&N.mutable(d).add(c.slice(d.length+1))}function En(c){const d=Je(c);N.get(d)?.has(c.slice(d.length+1))&&N.mutable(d).delete(c.slice(d.length+1)),N.delete(c)}function ot(){N=new ar;for(const c of S.keys())Gt(c)}function Pr(c){const d=[],f=u=>{const l=S.get(u);if(!l)return;d.push([u,l]);const w=N.get(u);if(w)for(const p of w)f(`${u}/${p}`)};return f(c),d}function An(c,d){if(c.pack){y-=1,m-=c.length;return}C-=c.length,Z+=Math.max(c.length,c.capacity??0)}function kn(c,d){const f=S.get(c);f&&(he&&!he.has(c)&&he.set(c,f),S.delete(c),En(c),An(f),d.push([c,null]))}function Os(c,d,f){const u=e.packages;if(!u)throw new Error("This store has no shared package store to link from.");const l=In(d),w=u.descendants(l);if(w.length===0)throw new Error(`The shared package store does not hold ${d}.`);Ge(c,f),_r(c,f),Ne(S.size+w.length);for(const[p,b]of w){const k=p===l?c:`${c}${p.slice(l.length)}`;se(k,b.type==="directory"?{type:"directory",mode:b.mode,mtimeMs:b.mtimeMs,offset:0,length:0}:{type:b.type,mode:b.mode,mtimeMs:b.mtimeMs,offset:b.offset,length:b.length,pack:Ce},f)}}function Ge(c,d){const f=Je(c);if(f!==c&&S.get(f)?.type==="directory"){Ne(S.size+(S.has(c)?0:1));return}const u=[];let l=At(c)??Re()[0];if(S.has(l)||u.push(l),c!==l)for(const p of Fr(Fn(Je(c)))){l=`${l}/${p}`;const b=S.get(l);if(b&&b.type!=="directory")throw new Error(`OPFS path parent is a file: ${l}`);b||u.push(l)}Ne(S.size+u.length+(S.has(c)?0:1));const w=Date.now();for(const p of u)se(p,{type:"directory",mode:lt,mtimeMs:w,offset:0,length:0},d)}function _r(c,d){for(const[f]of Pr(c))kn(f,d)}function xs(c,d,f){if(c===d)return;if(d.startsWith(`${c}/`))throw new Error("An OPFS rename cannot move a directory into itself.");const u=Pr(c);if(u.length===0){if(S.has(d))return;throw new Error(`OPFS rename source does not exist: ${c}`)}Ge(d,f),_r(d,f);for(const[l]of u)kn(l,f);for(const[l,w]of u)se(`${d}${l.slice(c.length)}`,w,f);Ne(S.size)}function In(c){if(typeof c!="string"||!c.startsWith(`${Cr}/`)||c.includes("\0")||c.length>4096)throw new Error("Invalid shared store path.");return Fr(c.slice(Cr.length+1)),c}function Re(){return A===Ce?[Cr]:zi}function At(c){return Re().find(d=>c===d||c.startsWith(`${d}/`))}function Kt(c,d){const f=S.get(c),u=f&&!f.pack?f.length:0,l=s?lo:t;if(C-u+d>l){const w=s?"the origin's shared packages":"the project's own files";throw new Error(`OPFS workspace exceeds its byte limit: writing ${c} (${d} bytes) would take ${w} past ${l} bytes (${C} bytes held, ${u} replaced).`)}}function Ne(c){if(c>r)throw new Error("OPFS workspace exceeds its entry limit.")}function Nn(){if(Ne(S.size),C>t)throw new Error(`OPFS workspace exceeds its byte limit: the project's own files hold ${C} bytes, past ${t}.`)}function Jt(c,d){const f=M;if(!f)throw new Error("OPFS filesystem worker is not initialized.");let u=0;for(;u<d.byteLength;){const l=f.write(d.subarray(u),{at:c+u});if(l<=0)throw new Error("An OPFS workspace file could not be written completely.");u+=l}T=Math.max(T,c+d.byteLength)}function Mn(c){const d=M;if(!d)throw new Error("OPFS filesystem worker is not initialized.");c<=T||(d.truncate(c),T=c)}function Xt(c){const d=M;if(!d)throw new Error("OPFS filesystem worker is not initialized.");const f=T;let u=0;for(;u<c.byteLength;){const l=d.write(c.subarray(u),{at:f+u});if(l<=0)throw new Error("An OPFS workspace file could not be written completely.");u+=l}return T=f+c.byteLength,f}function Ps(c){const d=M;if(d.getSize()>=T&&c.getSize()>=P)return;d.flush(),c.flush();const f=d.getSize(),u=c.getSize();if(!(f>=T&&u>=P))throw Object.assign(new Error(`This browser is keeping less than the tab wrote (the store's pack holds ${f} of ${T} bytes, its log ${u} of ${P}): its storage is full, as a private window's is well below its quota.`),{name:"QuotaExceededError",code:"ENOSPC"})}function _s(c,d={}){const f=$;if(!f||!M)throw new Error("OPFS filesystem worker is not initialized.");if(c.length===0)return;const u=qe.encode(JSON.stringify({packBytes:T,changes:c}));if(u.byteLength>qn)throw new Error("An OPFS workspace index record exceeds its size limit.");const l=new Uint8Array(sr+u.byteLength),w=new DataView(l.buffer);w.setUint32(0,u.byteLength,!0),w.setUint32(4,Bn(u),!0),l.set(u,sr);let p=0;for(;p<l.byteLength;){const b=f.write(l.subarray(p),{at:P+p});if(b<=0)throw new Error("The OPFS workspace index log could not be written completely.");p+=b}P+=l.byteLength,Ps(f),d.publish!==!1&&$t(),performance.now()-ae>=ti?ve():ne===void 0&&(ne=setTimeout(ve,ti))}function ve(){if(ne!==void 0&&(clearTimeout(ne),ne=void 0),Ee)throw Ee;const c=performance.now();M?.flush(),$?.flush(),ae=performance.now(),Ye+=1,_e+=ae-c}function qt(){const c=yn,d=zt(()=>c.catch(()=>{}).then(Ts));return yn=d,d}async function Ts(){if(Te(),!E)return;const c=E,d=$,f=await ke(c,!1);if(!d||d!==$||c!==E)throw new Error("OPFS workspace changed generations before its checkpoint could start.");ve();const u=P;if(await It(f,S,{access:d,bytes:u,packBytes:T}),c===E&&(Ie={generation:c,bytes:u}),d===$&&c===E&&u===P){St();try{d.truncate(0),d.flush(),P=0,Ie={generation:c,bytes:0}}finally{bt()}}}function Ln(c){return Yt(()=>Rs(Tr(c)))}async function Rs(c){const d=crypto.randomUUID(),f=await ke(d,!0),u=await f.getFileHandle(ht,{create:!0}),l=await ie(u,"store"),w=new Map;let p=0;try{for(const k of c.files){let I=0,_=0;if(k.type!=="directory"){const O=new Uint8Array(c.pack,k.offset??0,k.length??0);I=p,_=O.byteLength;let L=0;for(;L<_;){const W=l.write(O.subarray(L),{at:I+L});if(W<=0)throw new Error("An OPFS workspace file could not be written completely.");L+=W}p+=_}w.set(k.path,{type:k.type,mode:k.mode??(k.type==="directory"?lt:or),mtimeMs:k.mtimeMs??Date.now(),offset:I,length:_})}for(const k of Re())w.has(k)||w.set(k,{type:"directory",mode:lt,mtimeMs:Date.now(),offset:0,length:0});Ne(w.size),l.truncate(p),l.flush()}finally{l.close()}const b=await It(f,w);await Zt(d,f,w,p,b)}async function vs(){await On(()=>!0)}async function Fs(){let c=!1,d=!1,f=!1;try{await Ds(()=>{c=!0},()=>{d=!0},()=>{f=!0})}finally{c&&(d||f)?bt():c&&Ut()}}async function Ds(c,d,f){const u=crypto.randomUUID(),l=await ke(u,!0),w=await ie(await l.getFileHandle(ht,{create:!0}),"store");let p,b=!1;try{p=await ie(await l.getFileHandle($r,{create:!0}),"record of changes"),p.truncate(0);const k=new Uint8Array(ri);let I=0;const _=U=>{if(U.pack)return{...U};if(U.type==="directory"||U.length===0)return{...U,offset:0,length:0};const Q=M;if(!Q)throw new Error("OPFS filesystem worker is not initialized.");const Xe=I;let le=0;for(;le<U.length;){const Nt=Math.min(k.byteLength,U.length-le),zn=k.subarray(0,Nt);if(R?.ensure(U.offset+le,Nt),Q.read(zn,{at:U.offset+le})!==Nt)throw new Error("An OPFS workspace file could not be read completely.");let rr=0;for(;rr<Nt;){const Yn=w.write(zn.subarray(rr),{at:Xe+le+rr});if(Yn<=0)throw new Error("An OPFS workspace file could not be written completely.");rr+=Yn}le+=Nt}I+=U.length;const{capacity:Dr,...qs}=U;return{...qs,offset:Xe}},O=new Map;let L=performance.now();for(const[U,Q]of[...S]){if(K||nt)return;S.get(U)===Q&&(O.set(Q,_(Q)),performance.now()-L>8&&(await new Promise(Xe=>setTimeout(Xe,0)),L=performance.now()))}if(K||nt||!M||!$)return;St(),c();const W=new Map;for(const[U,Q]of S)W.set(U,O.get(Q)??_(Q));w.truncate(I),w.flush(),p.flush(),ve();const H={pack:M,log:$};M=w,$=p,P=0,S=W,ot(),T=I,E=u,h=l,Et(),b=!0;const de=new Map(W);try{H.pack.close()}finally{H.log.close()}try{await It(l,de);const U={storageVersion:4,generation:u,initializedAt:Date.now()};await kt(await je(),ft,U)}catch(U){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:U}),Ee}d(),await Lr(u)}finally{if(!b){f();try{w.close()}finally{p?.close()}await Tn(await(await je()).getDirectoryHandle(ir),u)}}}async function Bs(c){Te(),St();try{await Cs(c)}finally{bt()}}async function Cs(c){let d=!1;for(const[f,u]of S){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 ${f}.`);l!==u.offset&&(S.set(f,{...u,offset:l}),d=!0)}d&&await qt()}function On(c){return Yt(()=>$s(c))}async function $s(c){const d=M;if(!d)throw new Error("OPFS filesystem worker is not initialized.");const f=new Map,u=crypto.randomUUID(),l=await ke(u,!0),w=await l.getFileHandle(ht,{create:!0}),p=await ie(w,"store"),b=new Map,k=new Uint8Array(ri);let I=0;try{for(const[O,L]of S){if(!c(O,L))continue;if(L.pack){b.set(O,{...L});continue}if(L.type==="directory"||L.length===0){b.set(O,{...L,offset:0,length:0});continue}const W=I;f.set(L.offset,W);let H=0;for(;H<L.length;){const Q=Math.min(k.byteLength,L.length-H),Xe=k.subarray(0,Q);if(R?.ensure(L.offset+H,Q),d.read(Xe,{at:L.offset+H})!==Q)throw new Error("An OPFS workspace file could not be read completely.");let le=0;for(;le<Q;){const Dr=p.write(Xe.subarray(le),{at:W+H+le});if(Dr<=0)throw new Error("An OPFS workspace file could not be written completely.");le+=Dr}H+=Q}I+=L.length;const{capacity:de,...U}=L;b.set(O,{...U,offset:W,length:L.length})}p.truncate(I),p.flush()}finally{p.close()}const _=await It(l,b);return await Zt(u,l,b,I,_),f}async function Zt(c,d,f,u,l,w){St();try{await Us(c,d,f,u,l,w)}finally{bt()}}async function Us(c,d,f,u,l,w){const p=await d.getFileHandle($r,{create:!0}),b=await ie(p,"record of changes");try{b.truncate(0),b.flush()}finally{b.close()}const k={storageVersion:w?5:4,generation:c,initializedAt:Date.now(),...w?{imageRanges:w}:{}};if(await kt(await je(),ft,k),st(),E=c,re=k.initializedAt,F=w,l){const I=new Be(l.index);S=new Qe(I),N=new _t(I),ce=void 0}else S=f,ot();T=u,h=d,await it(d),l?({liveBytes:C,linked:y,linkedBytes:m}=l,Z=Math.max(0,T-C)):Et(),s||await Lr(c)}async function zs(c,d,f,u,l=!1){if(Te(),!s||A!==Ce)throw new Error("Only the shared package store can reserve immutable image extents.");if(T!==0||[...S.values()].some(O=>O.type!=="directory"))return!1;const w=Br(u);if(w.bytes!==c.packBytes||c.entries>Ur||c.liveBytes>c.packBytes||d.byteLength!==c.json.raw||f.byteLength!==c.binary.raw||!await er(d,c.json.sha256,l)||!await er(f,c.binary.sha256,l))throw new Error("The image's prepared metadata does not match its document.");const p=d.subarray(0,4096).indexOf(10);if(p<0)throw new Error("The prepared index has no bounded retained header.");const b=JSON.parse(`${dt.decode(d.subarray(0,p-1))}}`),k={packBytes:c.packBytes,liveBytes:c.liveBytes,linked:0,linkedBytes:0},I=b.retainedIndex;if(I.version!==1||I.digest!==await xn(c.binary.sha256,k)||I.packBytes!==k.packBytes||I.liveBytes!==k.liveBytes||I.linked!==0||I.linkedBytes!==0)throw new Error("The prepared index's retained measures are inconsistent.");const _=new SharedArrayBuffer(f.byteLength);if(new Uint8Array(_).set(f),new Be(_).entryCount!==c.entries)throw new Error("The prepared index has the wrong number of entries.");return Yt(async()=>{const O=crypto.randomUUID(),L=await ke(O,!0),W=await L.getFileHandle(ht,{create:!0}),H=await ie(W,"immutable image reservation");try{H.truncate(c.packBytes),H.flush()}finally{H.close()}const de=qe.encode(JSON.stringify(w));return await Fe(L,Kn,de),await Fe(L,Qt,f),await Fe(L,we,d),await Zt(O,L,new Map,c.packBytes,{index:_,...k},await Me(de)),!0})}async function Ys(c,d,f,u=!1,l){if(Te(),s||!e.packages||!l&&!e.packages.deferredImage)throw new Error("Prepared project paths require a verified shared image.");if(T!==0||[...S.values()].some(I=>I.type!=="directory"))return!1;if(d.byteLength!==c.json.raw||f.byteLength!==c.binary.raw||!await er(d,c.json.sha256,u)||!await er(f,c.binary.sha256,u))throw new Error("The image's prepared project does not match its descriptor.");const w=d.subarray(0,4096).indexOf(10);if(w<0)throw new Error("The prepared project has no bounded retained header.");const p=JSON.parse(`${dt.decode(d.subarray(0,w-1))}}`).retainedIndex,b={packBytes:0,liveBytes:0,linked:c.linked,linkedBytes:c.linkedBytes};if(p.version!==1||p.digest!==await xn(c.binary.sha256,b)||p.packBytes!==0||p.liveBytes!==0||p.linked!==c.linked||p.linkedBytes!==c.linkedBytes)throw new Error("The prepared project's retained measures are inconsistent.");const k=new SharedArrayBuffer(f.byteLength);if(new Uint8Array(k).set(f),new Be(k).entryCount!==c.entries||c.entries>r)throw new Error("The prepared project has invalid entry bounds.");return Yt(async()=>{const I=crypto.randomUUID(),_=await ke(I,!0),O=await _.getFileHandle(ht,{create:!0}),L=await ie(O,"prepared project");try{L.truncate(0),L.flush()}finally{L.close()}if(await Fe(_,Qt,f),await Fe(_,we,d),l&&!await l)return!1;if(!e.packages?.deferredImage)throw new Error("Prepared project paths require a verified shared image.");return await Zt(I,_,new Map,0,{index:k,...b}),!0})}async function Ws(){if(K)throw new Error("This OPFS workspace is closing.");if(!M)throw new Error("OPFS filesystem worker is not initialized.");const c=[],d=[...S.keys()].sort((p,b)=>Dn(p)-Dn(b)||(p<b?-1:1));let f=0;for(const p of S.values())p.type!=="directory"&&(f+=p.length);const u=new ArrayBuffer(f),l=new Uint8Array(u);let w=0;for(const p of d){const b=S.get(p);if(b.type==="directory"){c.push({path:p,type:"directory",mode:b.mode,mtimeMs:b.mtimeMs});continue}b.length>0&&l.set(Wt(b),w),c.push({path:p,type:b.type,offset:w,length:b.length,mode:b.mode,mtimeMs:b.mtimeMs}),w+=b.length}for(const p of[...Re()].reverse())S.has(p)||c.unshift({path:p,type:"directory",mode:lt,mtimeMs:Date.now()});return Tr({files:c,pack:u})}async function kt(c,d,f){await Fe(c,d,qe.encode(JSON.stringify(f)))}async function Fe(c,d,f){const u=await(await je()).getDirectoryHandle(Xn,{create:!0}),l=crypto.randomUUID(),w=await u.getFileHandle(l,{create:!0}),p=await ie(w,"index");try{let b=0;for(;b<f.byteLength;){const k=p.write(f.subarray(b),{at:b});if(k<=0)throw new Error("An OPFS workspace file could not be written completely.");b+=k}p.truncate(f.byteLength),p.flush()}finally{p.close()}try{await w.move(c,d)}finally{await _n(u,l,!1)}}const Qt="index.shared";async function Me(c){const d=await crypto.subtle.digest("SHA-256",c);return Array.from(new Uint8Array(d),f=>f.toString(16).padStart(2,"0")).join("")}async function er(c,d,f){return f||await Me(c)===d}function xn(c,d){const{packBytes:f,liveBytes:u,linked:l,linkedBytes:w,journalPrefix:p}=d;return Me(qe.encode(`${JSON.stringify({packBytes:f,liveBytes:u,linked:l,linkedBytes:w,...p?{journalPrefix:p}:{}})}:${c}`))}async function Pn(c,d){const{packBytes:f,liveBytes:u,linked:l,linkedBytes:w,journalPrefix:p}=d;return Me(qe.encode(`${JSON.stringify({packBytes:f,liveBytes:u,linked:l,linkedBytes:w,...p?{journalPrefix:p}:{}})}:${await Me(c)}`))}async function It(c,d,f){const u=Gs(d);if(typeof SharedArrayBuffer>"u"||d.size<1e4){await kt(c,we,u);return}const l=new Map(u.entries),w=new Map,p={packBytes:f?.packBytes??0,liveBytes:0,linked:0,linkedBytes:0};for(const[W,H]of l){const de=Je(W);if(de!==W){let U=w.get(de);U||(U=new Set,w.set(de,U)),U.add(W.slice(de.length+1))}H.pack?(p.linked+=1,p.linkedBytes+=H.length):(p.liveBytes+=H.length,p.packBytes=Math.max(p.packBytes,H.offset+H.length))}let b;try{b=Wn(l,w)}catch{await kt(c,we,u);return}const k=JSON.stringify(u.entries),I=f?new Uint8Array(f.bytes):void 0;if(I&&f.access.read(I,{at:0})!==I.byteLength)throw new Error("The checkpoint's journal prefix could not be read completely.");const _=I?{bytes:I.byteLength,digest:await Me(I)}:void 0,O=new Uint8Array(b).slice(),L={version:_?2:1,digest:await Pn(O,{...p,..._?{journalPrefix:_}:{}}),...p,..._?{journalPrefix:_}:{}};try{await Fe(c,Qt,O)}catch{await kt(c,we,{entries:JSON.parse(k)});return}return await Fe(c,we,qe.encode(`{"retainedIndex":${JSON.stringify(L)},
|
|
2
|
-
"entries":${k}}`)),{index:b,...p}}async function Hs(c){if(!(typeof SharedArrayBuffer>"u"))try{const d=await c.getFileHandle(we),f=await ie(d,"index");let u;try{const O=new Uint8Array(Math.min(512,f.getSize())),L=f.read(O,{at:0});u=dt.decode(O.subarray(0,L))}finally{f.close()}const l=u.split(`
|
|
3
|
-
`,1)[0];if(!l.startsWith('{"retainedIndex":')||!l.endsWith(","))return;const w=JSON.parse(l.slice(0,-1)+"}").retainedIndex;if(w.version!==1&&w.version!==2||!/^[a-f0-9]{64}$/u.test(w.digest)||![w.packBytes,w.liveBytes,w.linked,w.linkedBytes].every(O=>Number.isSafeInteger(O)&&O>=0)||w.version===1&&w.journalPrefix!==void 0||w.version===2&&(!w.journalPrefix||!Number.isSafeInteger(w.journalPrefix.bytes)||w.journalPrefix.bytes<0||!/^[a-f0-9]{64}$/u.test(w.journalPrefix.digest)))return;const p=await c.getFileHandle(Qt),b=await ie(p,"index");let k;try{const O=b.getSize();if(O>256*1024*1024||(k=new Uint8Array(O),b.read(k,{at:0})!==O))return}finally{b.close()}if(await Pn(k,w)!==w.digest)return;const I=new SharedArrayBuffer(k.byteLength);new Uint8Array(I).set(k);const _=new Be(I);return Ne(_.entryCount),{...w,index:I}}catch{return}}async function Vs(c){const d=c.journalPrefix;if(!d||!$||!M||d.bytes>$.getSize()||c.packBytes>M.getSize())return 0;const f=new Uint8Array(d.bytes);return $.read(f,{at:0})!==f.byteLength?0:await Me(f)===d.digest?d.bytes:0}async function Ke(c,d){let f;try{f=await c.getFileHandle(d)}catch(w){if(at(w))return;throw w}let u;if(o){u=await(await f.getFile()).text();try{return JSON.parse(u)}catch(w){throw new Error(`Invalid OPFS workspace metadata (${d}). Stored data was retained.`,{cause:w})}}const l=await ie(f,"index");try{const w=l.getSize(),p=new Uint8Array(w);if(w>0&&l.read(p,{at:0})!==w)throw new Error("An OPFS workspace file could not be read completely.");u=dt.decode(p)}finally{l.close()}try{return JSON.parse(u)}catch(w){throw new Error(`Invalid OPFS workspace metadata (${d}). Stored data was retained.`,{cause:w})}}async function _n(c,d,f){try{await c.removeEntry(d,{recursive:f})}catch(u){if(!at(u))throw u}}async function Tn(c,d){try{await c.removeEntry(d,{recursive:!0})}catch{}}function Rn(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 Rr(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=>Rn(d))}function Tr(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,f=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),f.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 w=l.offset??0,p=l.length??0;if(!Number.isSafeInteger(w)||!Number.isSafeInteger(p)||w<0||p<0||p>fe||w+p>c.pack.byteLength)throw new Error("Invalid OPFS workspace file.");if(u+=p,u>t)throw new Error("OPFS workspace exceeds its byte limit.")}else if((l.offset??0)!==0||(l.length??0)!==0)throw new Error("An OPFS workspace directory cannot contain file bytes.");Rr(l)}Ne(f.size);for(const l of c.files)if(!Re().includes(l.path)&&f.get(Je(l.path))!=="directory")throw new Error(`An OPFS workspace snapshot has no directory parent for ${l.path}.`);return c}function Rr(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 Gs(c){return{entries:[...c]}}function vr(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 f=c.entries;Ne(f.length);for(const u of f){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,vn(u[1]))}return d}function vn(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(Rr(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 Ks(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 f=[];for(const u of d.changes){if(!Array.isArray(u)||u.length!==2)throw new Error("Invalid OPFS workspace index record.");f.push([Le(u[0]),u[1]===null?null:vn(u[1])])}return{packBytes:d.packBytes,changes:f}}function tr(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"||At(c)===void 0||c.includes("\0")||c.length>4096)throw new Error("Invalid OPFS workspace path.");return Fn(c),c}function Fn(c){const d=At(c);if(d===void 0)throw new Error("Invalid OPFS workspace path.");const f=c===d?"":c.slice(d.length+1);return Fr(f),f}function Fr(c){const d=c===""?[]:c.split("/");if(d.some(f=>!f||f==="."||f===".."||f.includes("\0")))throw new Error("Invalid OPFS workspace path segment.");return d}function Je(c){const d=c.slice(0,c.lastIndexOf("/"));return d===""||At(d)===void 0?At(c)??c:d}function Dn(c){let d=1;for(let f=0;f<c.length;f+=1)c.charCodeAt(f)===47&&(d+=1);return d}function at(c){return c instanceof DOMException&&c.name==="NotFoundError"}function Bn(c){let d=2166136261;for(let f=0;f<c.byteLength;f+=1)d^=c[f],d=Math.imul(d,16777619);return d>>>0}typeof addEventListener=="function"&&addEventListener("close",()=>{M?.flush(),$?.flush(),st(),g?.()});function Cn(c,d={}){if(Te(),he)throw new Error("An OPFS mutation batch cannot be nested.");for(const f of c)Rn(f);return c.length?$n(f=>{for(const u of c)Ls(u,f)},d):[]}function Js(c,d,f={}){if(Te(),he)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:w}=u;if(l===void 0||w===void 0||!Number.isSafeInteger(l)||!Number.isSafeInteger(w)||l<0||w<0||l+w>c.byteLength)throw new Error(`OPFS extent ${u.path} lies outside its bytes.`);if(w>fe)throw new Error(`${u.path} is ${w} bytes; an OPFS workspace file holds at most ${fe}.`)}return d.length?$n(u=>{const l=c.byteLength>0?Xt(c):T;for(const w of d){const p=Le(w.path);Ge(p,u);const b=S.get(p);if(w.type==="directory"){if(b&&b.type!=="directory")throw new Error(`OPFS path is a file: ${p}`);se(p,{type:"directory",mode:w.mode,mtimeMs:w.mtimeMs,offset:0,length:0},u);continue}if(b?.type==="directory")throw new Error(`OPFS write target is a directory: ${p}`);Kt(p,w.length),se(p,{type:w.type,mode:w.mode,mtimeMs:w.mtimeMs,offset:l+w.offset,length:w.length},u)}},f):[]}function $n(c,d){if(!M||!$)throw new Error("OPFS filesystem worker is not initialized.");const f={packBytes:T,logBytes:P,liveBytes:C,deadBytes:Z,rewrites:We,rewrittenBytes:He,linked:y,linkedBytes:m},u=new Map;he=u;const l=[];Ct=l;const w=[];try{return c(w),Nn(),_s(w,{publish:!d.durable}),d.durable&&(ve(),$t()),bn(),w}catch(p){const b=X!==void 0&&!Ae&&Atomics.load(X,Qn)!==f.logBytes;b&&St();for(const[k,I]of u)I===void 0?S.delete(k):S.set(k,I);ot();try{for(let k=l.length-1;k>=0;k-=1)Jt(l[k][0],l[k][1])}catch(k){p=new AggregateError([p,k],"OPFS could not restore bytes a failed batch wrote over.")}({packBytes:T,logBytes:P,liveBytes:C,deadBytes:Z,rewrites:We,rewrittenBytes:He,linked:y,linkedBytes:m}=f),ne!==void 0&&(clearTimeout(ne),ne=void 0);try{$.truncate(P),$.flush(),M.truncate(T),M.flush()}catch(k){throw Ut(),Ee=new AggregateError([p,k],"OPFS could not roll back a failed batch; reopen this workspace before writing again."),Ee}throw b&&bt(),p}finally{he=void 0,Ct=void 0}}function Xs(){if(tt){gt?.abort(new DOMException("The workspace was closed while opening.","AbortError"));return}K||(K=!0,rt===0&&Un())}function Un(){Ut();try{ve()}finally{try{st()}finally{const c=g;g=void 0,n=void 0;try{c?.()}finally{e.ownsPackages&&e.packages?.close()}}}}return{initialize:Ss,opened:()=>n!==void 0&&!K,stats:()=>({entries:S.size,liveBytes:C,deadBytes:Z,packBytes:T,rewrites:We,rewrittenBytes:He,linked:y,linkedBytes:m,flushes:Ye,flushMs:_e}),applyNow:Cn,applyExtentsNow:Js,close:Xs,readExtent:Ht,descendants:Pr,retain:On,remapLinks:Bs,childrenOf:c=>[...N.get(c)??[]].sort(),refresh:bs,follow:ws,clock:mn,readerSeed:ls,imageCompletionSeed:us,imageLine:()=>R?.lineForReader()??e.packages?.imageLine(),imageStartupSet:()=>R?.readDigests()??R?.completedDigests()??[],prefetchImage:(c,d)=>R?.prefetch(c,d)??{queued:0,done:Promise.resolve()},seeded:()=>wn,get logBytes(){return P},checkpoint:qt,deferMaintenance:Ms,installPreparedImage:zs,installPreparedProject:Ys,get deferredImage(){return J},get imagePlacedAt(){return n&&F?re:void 0},get entries(){return S},get packBytes(){return T},read:ps,readRange:gs,snapshot:Ws,replace:Ln,apply:Ns,flush:()=>{if(K||!n)throw new Error("This OPFS workspace is not open.");if(nt)throw new Error("Wait for the OPFS generation replacement before flushing it.");ve()},validateSnapshot:Tr,validateMutationBatch:js}}async function mo(i,e,t,r){const n=an(i);await n.initialize(Ce,{readOnly:!0,extentsOnly:!0});const s=an(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 wo="sweep.json";async function po(i){const t=await(await i.getFileHandle(wo,{create:!0})).createWritable();await t.write(JSON.stringify({at:Date.now()})),await t.close()}class ar{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 ee(){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 mr extends Map{names=new Map;static rooted(){const e=new mr;return e.set("/",Ao()),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=mr.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=z(o.path);if(a==="/")return!1;if(o.content!==void 0)return!0;const h=e.entries.get(a);return!h||o.type==="directory"!=(h.type==="directory")?!0:o.mode!==void 0&&o.mode!==(h.mode&4095)||o.mtimeMs!==void 0&&o.mtimeMs!==h.mtimeMs});for(const s of n.sort((o,a)=>cr(o.path)-cr(a.path))){const o=s,a=z(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 h=r.node(a);h&&(o.mode!==void 0&&(h.mode=o.mode),o.mtimeMs!==void 0&&(h.atimeMs=h.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>=go&&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>bo)return s(o,a-o);const h=Math.floor(o/Mt),y=Math.floor((a-1)/Mt),m=new Uint8Array(a-o);for(let g=h;g<=y;g+=1){const A=`${g}:${e}`;let E=this.rangeBlocks.get(A);if(E)this.rangeBlocks.delete(A);else for(E=s(g*Mt,Mt),this.rangeBlockBytes+=E.byteLength;this.rangeBlockBytes>So&&this.rangeBlocks.size>0;){const[F,R]=this.rangeBlocks.entries().next().value;this.rangeBlocks.delete(F),this.rangeBlockBytes-=R.byteLength}this.rangeBlocks.set(A,E);const S=g*Mt,N=Math.max(o,S),M=Math.min(a,S+E.byteLength);M>N&&m.set(E.subarray(N-S,M-S),N-o)}return m}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(z(t))}writtenEntry(e,t=!1){const r=z(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=mr.rooted();for(const n of t.keys())this.markMutation(n);this.markMutation("/");const r=e.files.slice().sort((n,s)=>cr(n.path)-cr(s.path));for(const n of r){const s=n,o=z(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 h=this.nodes.get(o);h&&(h.dirty=!1)}else{const h=t.get(o);this.mkdirSync($e(o),{recursive:!0}),h?.type==="file"&&this.nodes.set(o,h)}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(z(e))!==void 0}statSync(e){const t=z(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=z(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:z(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(z(e));if(!n)throw new Error(`ENOENT: no such file, open '${z(e)}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${z(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=z(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=z(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,h=t+r.byteLength;let y;if(h<=a.byteLength)y=o?.dirty?a:a.slice();else if(h<=a.buffer.byteLength-a.byteOffset&&o?.dirty)y=new Uint8Array(a.buffer,a.byteOffset,h),y.fill(0,a.byteLength,t);else{const m=this.takeSpare(h);y=new Uint8Array(m??new ArrayBuffer(Math.max(h,a.byteLength*2,4096)),0,h),y.set(a),m&&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:ee(),mtimeMs:ee(),ino:o?.type==="file"?o.ino:this.nextInode++}),this.markMutation(n)})}truncateSync(e,t){this.mutate(()=>{const r=z(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<=zr||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:ee(),mtimeMs:ee(),ino:n.ino}),this.markMutation(r)})}spares=[];release(e){const t=e.buffer;if(!(t instanceof ArrayBuffer)||t.byteLength<zr||t.byteLength>ni)return;this.spares.push(t);let r=this.spares.reduce((n,s)=>n+s.byteLength,0);for(;this.spares.length>Eo||r>ni;)r-=this.spares.shift().byteLength}takeSpare(e){const t=Math.max(e*4,zr*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=z(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:ee(),mtimeMs:ee(),ino:s?.type==="file"?s.ino:this.nextInode++}),this.markMutation(r)})}mkdirSync(e,t){this.mutate(()=>{const r=z(e);if(r==="/")return;if(!this.node(r)&&this.node($e(r))?.type==="directory"){this.unhide(r);const a=ee();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 h=ee();this.nodes.set(s,{type:"directory",mode:493,atimeMs:h,mtimeMs:h,ino:this.nextInode++}),this.markMutation(s)}})}readdirSync(e){const t=z(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("/"),...zi.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=z(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=z(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=z(e),n=z(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,h]of o){if(h.type==="file"){const g=this.bytesOf(h);h.dirty||(h.content=g.slice()),h.dirty=!0}const y=`${n}${a.slice(r.length)}`,m=this.nodes.get(y);m?.type==="file"&&m.dirty&&m.content&&m!==h&&this.release(m.content),this.nodes.set(y,h),this.markMutation(a),this.markMutation(y)}})}reserveInodes(e){const t=this.nextInode;return this.nextInode+=e,t}restoreNodeSync(e,t){this.mutate(()=>{const r=z(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=z(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=z(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(z(e))}}const go=1<<20,Mt=64*1024,So=8*1024*1024,bo=1<<20,zr=64*1024,Eo=2,ni=32*1024*1024;function Ao(){const i=ee();return{type:"directory",mode:493,atimeMs:i,mtimeMs:i,ino:1}}function z(i){if(ko(i))return i;const e=[];for(const t of`/${i}`.split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return`/${e.join("/")}`}function ko(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 cr(i){let e=1;for(let t=0;t<i.length;t+=1)i.charCodeAt(t)===47&&(e+=1);return e}function Yi(i,e,t,r,n){return Atomics.wait(i,e,t,r)}function ii(i,e,t){const{appended:r,superseded:n}=t?Io(i,e,t):{appended:new Map,superseded:new Set},s=[...e.removed].sort((a,h)=>dr(h)-dr(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,h)=>dr(a.path)-dr(h.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(Ft(a)){i.existsSync(a.path)&&i.statSync(a.path).isDirectory()&&i.rmdirSync(a.path);const h=a.path.slice(0,a.path.lastIndexOf("/"))||"/";h!=="/"&&!i.existsSync(h)&&i.mkdirSync(h,{recursive:!0});const y=i.existsSync(a.path)?i.statSync(a.path).mode:void 0,m=y!==void 0&&(y&128)===0;m&&i.chmodSync?.(a.path,y&4095|128),i.writeFileSync(a.path,r.get(a.path)??Dt(a)),m&&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 Io(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])),h=new Set([...e.files.map(y=>y.path),...e.removed]);for(const y of h){const m=o.get(y),g=Wi(i,y);if(m!==void 0&&Wr(m,a.get(y))||g===void 0&&a.get(y)!==void 0)continue;const A=a.get(y);if(!(g!==void 0&&A!==void 0&&A.type===g.type&&(V(A).mtimeMs??0)>(V(g).mtimeMs??0))&&!(m!==void 0&&g!==void 0&&m.type===g.type&&(V(g).mtimeMs??0)<(V(m).mtimeMs??0))&&!Wr(m,g)&&!Wr(a.get(y),g)){if(Mo(m,g,a.get(y)))continue;const E=No(i,y,m,g,a.get(y),t.bytesOf?.bind(t));if(E){r.set(y,E);continue}const S=a.get(y);if(m!==void 0&&g!==void 0&&S!==void 0&&S.type===g.type&&(V(S).mtimeMs??0)>=(V(m).mtimeMs??0)&&(V(g).mtimeMs??0)>(V(S).mtimeMs??0)&&(V(g).mtimeMs??0)>(V(m).mtimeMs??0)){n.add(y);continue}throw new Error(`Browser filesystem write conflict at ${y}. ${JSON.stringify({base:Yr(m),current:Yr(g),proposed:Yr(a.get(y))})}`)}}return{appended:r,superseded:n}}function No(i,e,t,r,n,s){if(t?.type!=="file"||r?.type!=="file"||n?.type!=="file"||!Ft(n)||!i.readFileSync||V(r).mode!==V(n).mode)return;const o=Ft(t)?Dt(t):s?.(e);if(!o||o.length===0)return;const a=Dt(n),h=i.readFileSync(e),y=typeof h=="string"?new TextEncoder().encode(h):h,m=A=>A.length>=o.length&&Hi(A.subarray(0,o.length),o);if(a.length<=o.length||!m(a)||!m(y))return;const g=new Uint8Array(y.length+a.length-o.length);return g.set(y,0),g.set(a.subarray(o.length),y.length),g}function Yr(i){return i?{type:i.type,...V(i)}:null}function Mo(i,e,t){return e?.type!=="directory"||t?.type!=="directory"?!1:i===void 0?V(e).mode===V(t).mode:V(e).mode===V(t).mode&&i.type==="directory"&&V(i).mode===V(e).mode}function dr(i){let e=1;for(let t=0;t<i.length;t+=1)i.charCodeAt(t)===47&&(e+=1);return e}function Wi(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 Wr(i,e){return i===void 0?e===void 0:e!==void 0&&i.type===e.type&&Lo(i,e)&&V(i).mode===V(e).mode&&V(i).mtimeMs===V(e).mtimeMs}function V(i){const e=i;return{...e.mode===void 0?{}:{mode:e.mode&4095},...e.mtimeMs===void 0?{}:{mtimeMs:e.mtimeMs}}}function Lo(i,e){return i.type!=="file"||e.type!=="file"?!0:i.content!==void 0&&e.content!==void 0?i.content===e.content:Ft(i)&&Ft(e)?Hi(Dt(i),Dt(e)):si(i)===si(e)}function si(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 Ft(i){return i!==void 0&&(i.bytes!==void 0||i.content!==void 0)}function Dt(i){return i.bytes??(i.content===void 0?void 0:ze(i.content))}function Hi(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 oi=0,ai=1,Se=2,wr=3,pr=4,Vi=5,ji=6;function Oo(i){const e=Bt(i),t=i.role==="reader"?wr:pr;Atomics.sub(e,t,1)<=1&&Atomics.store(e,t,0),Atomics.add(e,i.role==="reader"?ji:Vi,1),Atomics.notify(e,Se)}function xo(i,e){const t=Bt(i),r=Atomics.load(t,Se);let n=0;return i.role==="reader"?(e&1&&(r>0||Atomics.load(t,pr)===0)&&(n|=1),Atomics.load(t,pr)===0&&(n|=16)):(e&4&&Atomics.load(t,wr)>0&&r<To(i)&&(n|=4),Atomics.load(t,wr)===0&&(n|=16)),n}function Gi(i,e){if(i.role!=="reader")return-9n;if(e===0)return new Uint8Array;const t=Bt(i),r=Ki(i),n=Atomics.load(t,Se);if(n===0)return Atomics.load(t,pr)===0?new Uint8Array:-11n;const s=Math.min(Math.max(0,e),n),o=Atomics.load(t,oi),a=Math.min(s,r.byteLength-o),h=new Uint8Array(s);return h.set(r.subarray(o,o+a)),a<s&&h.set(r.subarray(0,s-a),a),Atomics.store(t,oi,(o+s)%r.byteLength),Atomics.sub(t,Se,s),s>0&&Atomics.add(t,ji,1),Atomics.notify(t,Se),h}function Po(i,e){const t=Bt(i);for(;;){const r=Gi(i,e);if(r!==-11n)return r;Yi(t,Se,0,50)}}function _o(i,e){if(i.role!=="writer")return-9n;const t=Bt(i),r=Ki(i);let n=0;for(;n<e.byteLength;){if(Atomics.load(t,wr)===0)return n>0?BigInt(n):-32n;const s=Atomics.load(t,Se),o=r.byteLength-s;if(o===0){Yi(t,Se,s,50);continue}const a=Atomics.load(t,ai),h=Math.min(e.byteLength-n,o,r.byteLength-a);r.set(e.subarray(n,n+h),a),Atomics.store(t,ai,(a+h)%r.byteLength),Atomics.add(t,Se,h),Atomics.add(t,Vi,1),Atomics.notify(t,Se),n+=h}return BigInt(n)}const ci=new WeakMap;function Bt(i){const e=i.controlOffset??0;let t=ci.get(i.control);t||(t=new Map,ci.set(i.control,t));let r=t.get(e);return r||(r=new Int32Array(i.control,e,8),t.set(e,r)),r}function To(i){return i.payloadLength??i.payload.byteLength-(i.payloadOffset??0)}function Ki(i){const e=i.payloadOffset??0,t=i.payloadLength??i.payload.byteLength-e;return new Uint8Array(i.payload,e,t)}class Ji{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 Ar{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 Ar(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 Ro(this,e,t)}}class Ro{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 di=1e4,vo=19999,fi=64*1024,Hr=8,hi=3,li=4,Vr=2048,jr=524288,Fo=0,Do=1,Bo=2,Co=3,$o=4,ui=1030,Uo=1,zo=4096,Yo=new WeakMap,yi=new WeakMap;let mi,wi;function Wo(i,e){if(!Number.isSafeInteger(e)||e<0||e>=65536)return 0;let t=i===mi?wi:yi.get(i);t||(t={table:new Int32Array(i.table),descriptions:new Int32Array(i.descriptions)},yi.set(i,t)),mi=i,wi=t;const r=Atomics.load(t.table,e);return Atomics.load(t.descriptions,r*3)}class Ho{memory;state;remote;table;slots;constructor(e,t,r,n){this.memory=e,this.state=t,this.remote=n,this.table=r??Yo.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:xo(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,h)=>this.isPipeFd(Number(n))?-29n:e.SYS_preadv?.(n,s,o,a,h)??-38n,SYS_pwritev:(n,s,o,a,h)=>this.isPipeFd(Number(n))?-29n:e.SYS_pwritev?.(n,s,o,a,h)??-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)&~jr)!==0?-22n:this.duplicate(Number(n),Number(s),3,!!(Number(o)&jr),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,hi,1),Atomics.store(n,li,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 h of[s,o])this.table.entries[h].flags=t&jr?1:0,Atomics.store(new Int32Array(this.state.descriptions),this.table.entries[h].description*3+1,t&Vr);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)&Vr?Gi:Po)(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:_o(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,zo|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===Fo||t===ui)return this.duplicate(e,void 0,Math.max(3,r),t===ui,n);const s=this.table.entries[e];return t===Do?BigInt(s.flags):t===Bo?(s.flags=r&Uo,0n):t===Co?BigInt(this.statusFlags(e)|(this.entry(e)<0?1:0)):t===$o?(Atomics.store(new Int32Array(this.state.descriptions),s.description*3+1,r&Vr),0n):-22n}duplicate(e,t,r=di,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 h=e+a*8,y=this.view().getInt32(h,!0),m=this.pollDescriptor(y,this.view().getInt16(h+4,!0));m!==void 0&&(this.view().getInt16(h+6,!0)!==0&&(o-=1),this.view().setInt16(h+6,m,!0),m!==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<=vo;t++)if(!this.table.get(t))return t;return-1}allocateDescriptor(e,t=di){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"},()=>{Oo(this.handle(e));const o=this.control(n);Atomics.load(o,hi)===0&&Atomics.load(o,li)===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 Wo(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*Hr*Int32Array.BYTES_PER_ELEMENT,payloadOffset:t*fi,payloadLength:fi}}control(e){return new Int32Array(this.state.controls,e*Hr*Int32Array.BYTES_PER_ELEMENT,Hr)}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 Vo(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,Xi))].sort();return Object.freeze({writableRoots:Object.freeze(e.filter(t=>!e.some(r=>r!==t&&qi(t,r))))})}function jo(i,e){const t=Vo(e),r=n=>t.writableRoots.some(s=>qi(n,s));return n=>{const s=Xi(n);r(s)||Gr(s);let o="";for(const a of s.split("/").filter(Boolean)){o+=`/${a}`;try{i.lstatSync(o).isSymbolicLink()&&Gr(s)}catch(h){if(h.code!=="ENOENT")throw h;r(o)||Gr(o)}}return s}}function Xi(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 qi(i,e){return e==="/"||i===e||i.startsWith(`${e}/`)}function Gr(i){throw Object.assign(new Error(`EACCES: process filesystem policy denies mutation of '${i}'`),{code:"EACCES",path:i})}class Go{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 j=new TextEncoder().encode("\0supercode-wali-symlink-v1\0"),Zi=40,gr=4096;function Ko(i,e,t){if(i.existsSync(t))throw Sr("EEXIST");const r=new TextEncoder().encode(e);if(r.byteLength>=gr)throw Sr("ENAMETOOLONG");const n=new Uint8Array(j.byteLength+r.byteLength);n.set(j),n.set(r,j.byteLength),i.writeFileSync(t,n)}function ur(i,e){if(i.linkTargetSync)return i.linkTargetSync(e,j.byteLength,j.byteLength+gr,Qi);if(!i.existsSync(e))return;const t=i.statSync(e);if(!t.isFile()||t.size<j.byteLength||t.size>j.byteLength+gr)return;if(i.readRangeSync){const n=i.readRangeSync(e,0,j.byteLength);for(let s=0;s<j.byteLength;s+=1)if(n[s]!==j[s])return}const r=i.readFileSync(e);if(!(r.byteLength<j.byteLength)){for(let n=0;n<j.byteLength;n+=1)if(r[n]!==j[n])return;return new TextDecoder("utf-8",{fatal:!0}).decode(r.subarray(j.byteLength,es(r)))}}function Qi(i){if(!(i.byteLength<j.byteLength)){for(let e=0;e<j.byteLength;e+=1)if(i[e]!==j[e])return;return new TextDecoder("utf-8",{fatal:!0}).decode(i.slice(j.byteLength,es(i)))}}function es(i){const e=i.indexOf(0,j.byteLength);return e<0?i.byteLength:e}function Jo(i,e,t=!0){if(i.linkTargetSync&&qo(e))return Xo(i,e,t);let r=e;for(let n=0;n<Zi;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 h=`/${s.slice(0,a+1).join("/")}`,y=ur(i,h);if(y===void 0)continue;const m=`/${s.slice(0,a).join("/")}`,g=y.startsWith("/")?wt(y):wt(`${m}/${y}`);r=wt(`${g}/${s.slice(a+1).join("/")}`),o=!0;break}if(!o)return r}throw Sr("ELOOP")}function Xo(i,e,t){let r=e;for(let n=0;n<Zi;n+=1){let s=!1,o=1;for(;o<=r.length;){const a=r.indexOf("/",o),h=a===-1;if(!t&&h)break;const y=h?r:r.slice(0,a),m=y.length>1?i.linkTargetSync(y,j.byteLength,j.byteLength+gr,Qi,!0):void 0;if(m!==void 0){const g=y.slice(0,y.lastIndexOf("/"))||"/",A=m.startsWith("/")?wt(m):wt(`${g}/${m}`);r=wt(h?A:`${A}/${r.slice(a+1)}`),s=!0;break}if(h)break;o=a+1}if(!s)return r}throw Sr("ELOOP")}function qo(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 wt(i){const e=[];for(const t of i.replaceAll("\\","/").split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return`/${e.join("/")}`}function Sr(i){return Object.assign(new Error(i),{code:i})}const Zo=1463897161,Qo=1,ea=2,ta=3,ra=4,Tt=5e4,cn=4096,na=1<<24,ts=827479120;function Rt(i){return i>=Tt&&i<Tt+cn}function ia(i,e=[]){const t=new TextEncoder,r=i.map(E=>t.encode(E.path)),n=e.map(E=>t.encode(E.path));let s=12;i.forEach((E,S)=>{s+=4+r[S].byteLength+4+4+8+8+8+4+(E.directory?0:E.content.byteLength)}),e.forEach((E,S)=>{s+=16+n[S].byteLength+4+8+4});const o=new Uint8Array(s),a=new DataView(o.buffer);let h=0;const y=E=>{a.setUint32(h,E,!0),h+=4},m=E=>{a.setFloat64(h,E,!0),h+=8},g=E=>{a.setBigUint64(h,BigInt(E),!0),h+=8},A=E=>{o.set(E,h),h+=E.byteLength};return y(ts),y(i.length),y(e.length),i.forEach((E,S)=>{y(r[S].byteLength),A(r[S]),y(E.directory?1:0),y(E.mode),m(E.atimeMs),m(E.mtimeMs),g(E.ino);const N=E.directory?new Uint8Array:E.content;y(N.byteLength),A(N)}),e.forEach((E,S)=>{y(E.fd),y(E.group),y(E.closeOnExec?1:0),y(n[S].byteLength),A(n[S]),y(E.flags>>>0),m(E.position),y(E.directory?1:0)}),o}function sa(i,e){const t=new DataView(i.buffer,i.byteOffset,i.byteLength),r=new TextDecoder("utf-8",{fatal:!0});let n=0;const s=N=>{if(N<0||n+N>i.byteLength)throw Lt()},o=()=>{s(4);const N=t.getUint32(n,!0);return n+=4,N},a=()=>{s(8);const N=t.getFloat64(n,!0);return n+=8,N},h=()=>{s(8);const N=Number(t.getBigUint64(n,!0));return n+=8,N},y=N=>{s(N);const M=i.slice(n,n+N);return n+=N,M},m=()=>{const N=r.decode(y(o()));if(N!==e&&!N.startsWith(`${e}/`))throw Lt();return N};if(o()!==ts)throw Lt();const g=o(),A=o(),E=[];for(let N=0;N<g;N+=1){const M=m(),F=o()===1,R=o(),J=a(),me=a(),te=h(),re=y(o());E.push({path:M,directory:F,mode:R,atimeMs:J,mtimeMs:me,ino:te,content:re})}const S=[];for(let N=0;N<A;N+=1){const M=o(),F=o(),R=o()===1,J=m(),me=o()|0,te=a(),re=o()===1;if(!Rt(M)||!Rt(F)||F>M||!Number.isSafeInteger(te)||te<0)throw Lt();S.push({fd:M,group:F,closeOnExec:R,path:J,flags:me,position:te,directory:re})}if(n!==i.byteLength)throw Lt();return{nodes:E,descriptors:S}}function Lt(){return Object.assign(new Error("EINVAL: the private tree handed back is not one"),{errnoName:"EINVAL"})}let pi=!1;const Kr=-100,De=3,gi=1,oa=2,Jr=64,aa=128,ca=512,Ot=1024,da=2048,fa=65536,Xr=0,Si=1,bi=2,Ei=524288,qr=5,ha=6,Ai=7,fr=36,la=37,ki=38,Zr=2,Ii=0,Ni=1,ua=1,ya=2,ma=4,wa=8,ut=256,Mi=512,pa=0x3fffffffn,ga=0x3ffffffen,Sa=32768,ba=16384,Ea=40960;class br{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 Ar(new Ji),this.files=this.descriptors.view("file"),this.specialDescriptors=this.descriptors.view("special",r=>r.close?.()),this.stdioAliases=this.descriptors.view("stdio"),this.cwd=yt("/",e.cwd);const t=e.filesystem;if(this.assertWritable=e.filesystemPolicy?jo({lstatSync:r=>{if(!t)throw x("ENOSYS");const n=t.lstatSync?.(r)??t.statSync(r);return{isSymbolicLink:()=>n.isSymbolicLink?.()===!0||ur(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 Go(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),Li(n,s)),SYS_pwritev:(e,t,r,n,s)=>this.pwritev(Number(e),Number(t),Number(r),Li(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)),Kr),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),Kr),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&~Ei)!==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),Ia(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)===Zo?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&&!pi&&(pi=!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&Ei&&(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 br({...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 br({...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 x("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 La.decode(t.slice(e,r));n+=String.fromCharCode(o)}return n}resolve(e){return yt(this.cwd,e)}resolveAt(e,t){if(t.startsWith("/"))return yt("/",t);if(e===Kr)return this.resolve(t);const r=this.files.get(e);if(!r?.directory)throw x("ENOTDIR");return yt(r.path,t)}open(e,t,r){try{return BigInt(this.openResolved(this.resolveFilesystemPath(this.resolve(e)),t,r))}catch(n){return Y(n)}}openAt(e,t,r,n){try{return BigInt(this.openResolved(this.resolveFilesystemPath(this.resolveAt(e,t)),r,n))}catch(s){return Y(s)}}openResolved(e,t,r){if(e==="/dev/null")return this.markCloseOnExecNumber(this.allocateSpecial({read:()=>new Uint8Array,write:g=>BigInt(g.byteLength),poll:g=>(g&1?1:0)|(g&4?4:0),fcntl:g=>g===3?BigInt(t):[1,2,4].includes(g)?0n:-22n}),t);if(e==="/dev/urandom"||e==="/dev/random")return this.markCloseOnExecNumber(this.allocateSpecial({read:g=>{if(!Number.isSafeInteger(g)||g<0)return-22n;const A=new Uint8Array(g);for(let E=0;E<A.byteLength;E+=65536)crypto.getRandomValues(A.subarray(E,Math.min(E+65536,A.byteLength)));return A},write:g=>BigInt(g.byteLength),poll:g=>(g&1?1:0)|(g&4?4:0),fcntl:g=>g===3?BigInt(t):[1,2,4].includes(g)?0n:-22n}),t);const n=this.fs();let s=n.linkTargetSync?Na(n,e):n.existsSync(e)?n.statSync(e):void 0;const o=s!==void 0;if(((t&De)!==0||!o&&t&Jr)&&this.assertWritable(e),!o&&!(t&Jr))throw x("ENOENT");if(o&&t&Jr&&t&aa)throw x("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&fa&&!a.isDirectory())throw x("ENOTDIR");if(a.isDirectory()&&(t&De)!==0)throw x("EISDIR");const h=(t&ca)!==0&&(t&De)!==0&&a.isFile();h&&(n.truncateSync?n.truncateSync(e,0):n.writeFileSync(e,new Uint8Array));const y=this.allocateFd(),m=a.isDirectory();return this.files.set(y,{path:e,flags:t,position:t&Ot&&!h&&a.isFile()?a.size:0,directory:m,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(Rt(r)){r=Tt+cn-1;continue}if(!(this.descriptors.get(r)||this.files.has(r)||this.specialDescriptors.has(r)||this.stdioFd(r)!==void 0))return r}throw x("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 x("EINVAL");if(this.stdioFd(e)===0){if(this.statusFlags(e)&da&&!this.stdin.poll())return-11n;const h=this.stdin.read(r);return this.copyIn(t,h),BigInt(h.byteLength)}const n=this.specialDescriptors.get(e);if(n){const h=n.read?.(r);if(h===void 0)throw x("EBADF");if(typeof h=="bigint")return h;const y=h.subarray(0,r);return this.copyIn(t,y),BigInt(y.byteLength)}const s=this.files.get(e);if(!s)throw x("EBADF");if(s.directory)throw x("EISDIR");if((s.flags&De)===gi)throw x("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 Y(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 x("EBADF");if(o.directory)throw x("EISDIR");if((o.flags&De)===0)throw x("EBADF");const a=this.fs();if(a.writeRangeSync)return o.flags&Ot&&(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 h=this.copyOut(t,r),y=a.readFileSync(o.path);o.flags&Ot&&(o.position=y.byteLength);const m=Math.max(y.byteLength,o.position+h.byteLength),g=new Uint8Array(m);return g.set(y),g.set(h,o.position),a.writeFileSync(o.path,g),o.position+=h.byteLength,BigInt(h.byteLength)}catch(n){return Y(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&=~Ot;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&=~Ot;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 x("EBADF");if(!n.directory)throw x("ENOTDIR");const s=[".","..",...this.fs().readdirSync(n.path)];let o=0;for(;n.position<s.length;){const a=s[n.position],h=new TextEncoder().encode(a),y=ka(19+h.byteLength+1,8);if(y>r-o){if(o===0)throw x("EINVAL");break}const m=t+o;pe(this.options.memory(),m,y);const g=a==="."?n.path:a===".."?yt(n.path,".."):yt(n.path,a),A=this.fs().statSync(g);this.memoryView().setBigUint64(m,BigInt(n.position+1),!0),this.memoryView().setBigInt64(m+8,BigInt(n.position+1),!0),this.memoryView().setUint16(m+16,y,!0),this.memoryView().setUint8(m+18,A.isDirectory()?4:8),this.memoryBytes().fill(0,m+19,m+y),this.memoryBytes().set(h,m+19),n.position+=1,o+=y}return BigInt(o)}catch(n){return Y(n)}}lseek(e,t,r){try{const n=this.files.get(e);if(!n)throw x("EBADF");if(n.directory)throw x("EINVAL");const s=r===Xr?0:r===Si?n.position:r===bi?this.fs().statSync(n.path).size:void 0;if(s===void 0||!Number.isSafeInteger(t)||s+t<0||!Number.isSafeInteger(s+t))throw x("EINVAL");return n.position=s+t,BigInt(n.position)}catch(n){return Y(n)}}ftruncate(e,t){try{const r=this.files.get(e);if(!r)throw x("EBADF");if(r.directory)throw x("EISDIR");if((r.flags&De)===0)throw x("EBADF");if(!Number.isSafeInteger(t)||t<0)throw x("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 Y(r)}}stat(e,t,r){try{const n=this.resolveFilesystemPath(this.resolve(e),!r),s=this.fs();if(!s.linkTargetSync&&!s.existsSync(n))throw x("ENOENT");const o=r?this.readSymlink(n):void 0;return hr(this.memoryView(),t,o===void 0?r&&s.lstatSync?s.lstatSync(n):s.statSync(n):xi(o)),0n}catch(n){return Y(n)}}statAt(e,t,r,n){try{if(n&~ut)throw x("EINVAL");const s=!!(n&ut),o=this.resolveFilesystemPath(this.resolveAt(e,t),!s),a=this.fs();if(!a.linkTargetSync&&!a.existsSync(o))throw x("ENOENT");const h=s?this.readSymlink(o):void 0;return hr(this.memoryView(),r,h===void 0?a.statSync(o):xi(h)),0n}catch(s){return Y(s)}}fstat(e,t){try{if(this.stdioFd(e)!==void 0)return hr(this.memoryView(),t,Ma()),0n;const r=this.files.get(e);if(!r)throw x("EBADF");return hr(this.memoryView(),t,this.fs().statSync(r.path)),0n}catch(r){return Y(r)}}access(e){try{return this.fs().existsSync(this.resolveFilesystemPath(this.resolve(e)))?0n:-2n}catch(t){return Y(t)}}accessAt(e,t){try{return this.fs().existsSync(this.resolveFilesystemPath(this.resolveAt(e,t)))?0n:-2n}catch(r){return Y(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 Y(r)}}chmodAt(e,t,r,n){try{if(n&~ut)throw x("EINVAL");const s=this.resolveFilesystemPath(this.resolveAt(e,t),!(n&ut));return this.fs().existsSync(s)?(this.fs().chmodSync?.(s,r&4095),0n):-2n}catch(s){return Y(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 Y(n)}}chdir(e){try{const t=this.resolveFilesystemPath(this.resolve(e));if(!this.fs().statSync(t).isDirectory())throw x("ENOTDIR");return this.cwd=t,0n}catch(t){return Y(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 Y(n)}}statfs(e,t){try{if(!this.fs().existsSync(this.resolveFilesystemPath(this.resolve(e))))throw x("ENOENT");return Pi(this.memoryView(),t),0n}catch(r){return Y(r)}}fstatfs(e,t){return this.hasFd(e)?(Pi(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 Y(r)}}unlinkAt(e,t,r){try{if(r&~Mi)throw x("EINVAL");const n=this.resolveFilesystemPath(this.resolveAt(e,t),!1);return r&Mi?this.fs().rmdirSync(n):this.fs().unlinkSync(n),0n}catch(n){return Y(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&&(xt(this.privateTree.root,r)||xt(this.privateTree.root,n)))throw x("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 x("EINVAL");if(s.existsSync(n)){const a=s.statSync(n).isDirectory();if(o&&!a)throw x("ENOTDIR");if(!o&&a)throw x("EISDIR");if(o&&s.readdirSync(n).length>0)throw x("ENOTEMPTY")}}s.renameSync(r,n)})}utimensat(e,t,r,n){try{if(n&~ut)throw x("EINVAL");const s=t===0?this.files.get(e):void 0;if(t===0&&!s)throw x("EBADF");const o=s?.path??this.resolveAt(e,this.readCString(t)),a=this.resolveFilesystemPath(o,!(n&ut)),h=this.fs(),y=h.statSync(a),m=ee(),g=(S,N)=>{if(r===0)return m;const M=r+S*16;pe(this.options.memory(),M,16);const F=this.memoryView().getBigInt64(M,!0),R=this.memoryView().getBigInt64(M+8,!0);if(R===pa)return m;if(R===ga)return N;if(R<0||R>=1000000000n)throw x("EINVAL");const J=Number(F)*1e3+Number(R)/1e6;if(!Number.isFinite(J))throw x("EINVAL");return J},A=g(0,y.atimeMs??y.mtimeMs??m),E=g(1,y.mtimeMs??m);return h.utimesSync?h.utimesSync(a,new Date(A),new Date(E)):y.isFile()&&h.writeFileSync(a,h.readFileSync(a)),0n}catch(s){return Y(s)}}readlink(e,t,r,n){try{if(!Number.isSafeInteger(r)||r<0)throw x("EINVAL");const s=this.resolveAt(n,e);if(this.privateTree&&xt(s,this.privateTree.root))throw x("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 h=new TextEncoder().encode(o).subarray(0,r);return this.copyIn(t,h),BigInt(h.byteLength)}catch(s){return Y(s)}}symlink(e,t,r){try{const n=this.resolveFilesystemPath(this.resolveAt(r,t),!1);return Ko(this.fs(),e,n),0n}catch(n){return Y(n)}}resolveFilesystemPath(e,t=!0){const r=Jo(this.fs(),e,t);if(this.privateTree&&xt(r,this.privateTree.root))throw x("EREMOTE");return r}readSymlink(e){return ur(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&&!Rt(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&&!Rt(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===qr||t===fr||t===ha||t===Ai||t===la||t===ki?s?this.recordLock(s,t,r):-9n:-22n}recordLock(e,t,r){try{const n=this.readRecordLock(e,r),s=t>=fr?"ofd":"posix",o=this.lockOwner(s,e),a=this.options.fileLocks;if(!a||!o)return(t===qr||t===fr)&&this.memoryView().setInt16(r,Zr,!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===qr||t===fr){const m=a.request({operation:"query",owner:o,namespace:s,path:e.path,range:n.range,mode:n.mode,pid:this.options.pid??1});return m.result<0?BigInt(m.result):(m.conflict?this.writeRecordLock(r,m.conflict.mode,m.conflict,m.conflict.pid):this.memoryView().setInt16(r,Zr,!0),0n)}const h=t===Ai||t===ki,y=a.request({operation:"set",owner:o,namespace:s,path:e.path,range:n.range,mode:n.mode,pid:this.options.pid??1,blocking:h}).result;return y>=0&&this.heldLock(s,o,e.path),BigInt(y)}catch(n){return Y(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=Oi(r.getBigInt64(t+8,!0)),a=Oi(r.getBigInt64(t+16,!0)),h=s===Xr?0:s===Si?e.position:s===bi?this.fs().statSync(e.path).size:void 0;if(h===void 0)throw x("EINVAL");let y=h+o,m;if(a<0?(m=y,y+=a):a>0&&(m=y+a),!Number.isSafeInteger(y)||y<0||m!==void 0&&(!Number.isSafeInteger(m)||m<=y))throw x("EINVAL");const g=n===Ii?"read":n===Ni?"write":n===Zr?void 0:!1;if(g===!1)throw x("EINVAL");return{...g?{mode:g}:{},range:{start:y,...m===void 0?{}:{end:m}}}}writeRecordLock(e,t,r,n){const s=this.memoryView();s.setInt16(e,t==="read"?Ii:Ni,!0),s.setInt16(e+2,Xr,!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&wa)return BigInt(n.request({operation:"unlock",owner:s,namespace:"flock",path:r.path,range:{start:0}}).result);const o=t&ya?"write":t&ua?"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&ma)}).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 h=e+a*8;pe(this.options.memory(),h,8);const y=this.memoryView().getInt32(h,!0),m=this.memoryView().getInt16(h+4,!0),g=this.pollDescriptor(y,m);this.memoryView().setInt16(h+6,g,!0),g!==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:gi:this.files.get(e)?.flags??oa}mutate(e){try{return e(),0n}catch(t){return Y(t)}}privateTreeCall(e,t,r){try{if(e===Qo)return this.adoptPrivateTree(t,r);if(e===ea)return this.releasePrivateTree(t,r);if(e===ta)return this.confirmPrivateTree();if(e===ra){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 Y(n)}}adoptPrivateTree(e,t){const r=F=>(this.privateTreeDeclined||(this.privateTreeDeclined=!0,this.options.onDiagnostic?.(`[WALI] the private tree is not the program's (ADR-0047): ${F}; 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 F=0;F<this.descriptors.entries.length;F+=1){const R=this.files.get(F);if(R&&xt(R.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()||ur(s,n)!==void 0))return r(`${n} is not a directory`);s.existsSync(n)||s.mkdirSync(n,{recursive:!0});const o=[],a=F=>{const R=s.statSync(F),J=R.isDirectory();if(o.push({path:F,directory:J,mode:R.mode??(J?493:420),atimeMs:R.atimeMs??R.mtimeMs??0,mtimeMs:R.mtimeMs??0,ino:R.ino??1,content:J?new Uint8Array:s.readFileSync(F)}),J)for(const me of s.readdirSync(F))a(`${F==="/"?"":F}/${me}`)};a(n);const h=ia(o),y=new TextEncoder,m=y.encode(n),g=y.encode(this.cwd),A=20+m.byteLength+4+g.byteLength+h.byteLength;if(A>t)return r(`what ${n} already holds is larger than the libc's ${t}-byte reply`);const E=s.reserveInodes?.(na)??2**40,S=new Uint8Array(A),N=new DataView(S.buffer);let M=0;return N.setUint32(M,Tt,!0),M+=4,N.setUint32(M,cn,!0),M+=4,N.setBigUint64(M,BigInt(E),!0),M+=8,N.setUint32(M,m.byteLength,!0),M+=4,S.set(m,M),M+=m.byteLength,N.setUint32(M,g.byteLength,!0),M+=4,S.set(g,M),M+=g.byteLength,S.set(h,M),this.copyIn(e,S),this.privateTree={root:n,handed:o},BigInt(Tt)}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}=sa(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 h=this.descriptors.get(a.group);if(!h)throw x("EINVAL");this.descriptors.set(a.fd,h)}this.descriptors.entries[a.fd].flags=a.closeOnExec?1:0}return this.privateTree=void 0,0n}}function Li(i,e){return Number(e===void 0?i:(BigInt(e)&0xffffffffn)<<32n|BigInt(i)&0xffffffffn)}function xt(i,e){return i===e||i.startsWith(e==="/"?"/":`${e}/`)}function yt(i,e){if(!e)return i;if(Aa(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 Aa(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 ka(i,e){return Math.ceil(i/e)*e}function Ia(i){return Number(BigInt.asIntN(32,typeof i=="bigint"?i:BigInt(i)))}function Oi(i){const e=Number(i);if(!Number.isSafeInteger(e))throw x("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 Na(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 hr(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?.()?Ea:t.isDirectory()?ba:Sa;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)),Qr(i,e+72,t.atimeMs??t.mtimeMs??ee()),Qr(i,e+88,t.mtimeMs??ee()),Qr(i,e+104,t.ctimeMs??t.mtimeMs??ee());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 xi(i){return{isFile:()=>!1,isDirectory:()=>!1,isSymbolicLink:()=>!0,size:new TextEncoder().encode(i).byteLength,mode:511}}function Pi(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 Qr(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 Ma(){return{isFile:()=>!1,isDirectory:()=>!1,size:0,mode:8630,mtimeMs:ee()}}const La=new TextDecoder("utf-8",{fatal:!0}),_i=new Map;function x(i){let e=_i.get(i);return e||(e=Object.assign(new Error(i),{errnoName:i}),_i.set(i,e)),e}const Oa={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 Y(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=Oa;if(t in r)return-r[t];if(i instanceof WebAssembly.RuntimeError||i instanceof RangeError)throw i;return-5n}const Ti=-4,en=3;class pt{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{pt.waited.calls+=1,pt.waited.ms+=performance.now()-t}}requestNow(e){if(Atomics.load(this.control,en))return{result:Ti};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,en),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,en))return{result:Ti};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 lr=512*1024,Ri=256*1024*1024,vi=5,xa=new TextEncoder,Pa=new TextDecoder("utf-8",{fatal:!0});class _a{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=dn(t.length,0,Ri),n=new Uint8Array(r);for(let s=0;s<r;s+=lr){const o=Math.min(lr,r-s),a=this.call(Ue.Read,{path:e,offset:s,length:o}),h=ze(a.content);if(h.byteLength!==o)throw new Error("Invalid coherent file response.");n.set(h,s)}return{bytes:n,...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},parents:rs(e,t.parents)}}push(e,t){if(!t){this.call(Ue.Remove,{path:e});return}if(t.bytes.byteLength>Ri)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+=lr){const n=t.bytes.subarray(r,r+lr);this.call(Ue.WriteChunk,{offset:r,content:xe(n)})}this.call(Ue.WriteFinish)}call(e,t={}){const r=()=>{if(Atomics.load(this.control,vi))throw Object.assign(new Error("Browser file coherence was cancelled."),{errno:125})};r();const n=xa.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,vi),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=dn(Atomics.load(this.control,4),0,this.payload.byteLength),h=a===0?void 0:JSON.parse(Pa.decode(this.payload.slice(0,a)));if(o<0)throw Object.assign(new Error(`Browser file coherence failed with ${o}.`),{errno:-o});return h}finally{Atomics.store(this.control,0,0)}}}function Fi(i){const e=i.replace(/-(?:journal|shm|wal)$/u,"");return[e,`${e}-journal`,`${e}-wal`,`${e}-shm`]}function Ta(i,e){return ln(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,...ns({mode:r.mode,mtimeMs:r.mtimeMs})}]})}function Ra(i,e,t){const r=new Map(rs(e,t).map(n=>[n.path,n]));for(const n of ln(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 rs(i,e){if(e===void 0)return[];const t=new Set(ln(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=is(n.path);if(!t.delete(s))throw Pe("Coherent metadata must name distinct ancestors of its file.");return{path:s,...ns(n)}})}function ln(i){const e=[];for(const t of is(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 ns(i){const e=i.mode===void 0?void 0:dn(i.mode,0,65535),t=i.mtimeMs===void 0?void 0:Fa(i.mtimeMs);return{...e===void 0?{}:{mode:e},...t===void 0?{}:{mtimeMs:t}}}function is(i){const e=va(i);if(!e.startsWith("/")||e.length>4096||e.includes("\0"))throw Pe("Invalid coherent file path.");return e}function va(i){if(typeof i!="string")throw Pe("Expected a string.");return i}function dn(i,e,t){if(!Number.isSafeInteger(i)||i<e||i>t)throw Pe("Expected a bounded integer.");return i}function Fa(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 Da{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{pt.waited.ms+=performance.now()-t}}publish(e){const t=performance.now();try{this.publishNow(e)}finally{pt.waited.ms+=performance.now()-t}}refreshNow(e){for(const t of Fi(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 Fi(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:Ta(this.filesystem,e)}}writeLocal(e,t){if(!t){this.filesystem.existsSync(e)&&!this.filesystem.statSync(e).isDirectory()&&this.filesystem.unlinkSync(e);return}Ra(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&&Ba(s,n)?Ca(s,n):[s])}replaceHeld(e){this.held.splice(0,this.held.length,...e)}}function Ba(i,e){return i.start<(e.end??Number.POSITIVE_INFINITY)&&e.start<(i.end??Number.POSITIVE_INFINITY)}function Ca(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 Di=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 $a=`${to}/.volter-tree-complete`;async function Ua(i,e){const t=an(i);try{if((await t.initialize(e,{readOnly:!0})||t.opened())&&t.entries.has($a))return t}catch(r){throw t.close(),r}t.close()}const Bi=new WeakMap;async function za(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=Bi.get(r.navigator);n||Bi.set(r.navigator,n=new Map);const s=new Map;for(const o of t){let a=n.get(o);a||(a=no(o,r.navigator.locks).then(()=>Ua(r,o)),n.set(o,a));let h;try{h=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(!h)throw n.delete(o),new Error(`The installed tree ${o} is not on this origin's disk to read.`);s.set(o,h)}return s}let B=new et,tn,ss,mt,os;const ye=new Map;let Ya=1,fn,hn,vt;const as=new TextEncoder,kr=new TextDecoder,yr=[],Wa=new Set;let Ci=!1,rn=0,Pt=[];const Er=Symbol("retry");async function Ha(i){const e={data:i};yr.length=0,Wa.clear(),Ci=!1,rn=0,Pt=(i.privateRoots??[]).map(qa);{fn=void 0,hn=void 0;const t=await za(i.layers);if(i.store){if(tn=await mo({navigator:globalThis.navigator},i.store.projectId),!tn)throw new Error("The project's store is not there to read.");B=et.fromStore(jn(tn,i.layers,t),i.snapshot)}else i.layers?B=et.fromStore(jn(void 0,i.layers,t),i.snapshot):B=et.fromSnapshot(i.snapshot);vt=(n,s)=>ii(B,n,s);const r=e.data.fileLocks?new pt(e.data.fileLocks.channel):void 0;if(mt=i.sharedPipes,os=i.memory,ss=new br({...mt?{descriptors:new Ar(new Ji(mt.descriptions),mt.table)}:{},filesystem:B,...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,...Pt.length?{privateRoots:Pt,privateTreeAdoptable:()=>ye.size===0,onDiagnostic:n=>console.warn(n)}:{},...r&&e.data.fileLocks?{fileLocks:e.data.fileCoherence?new Da(r,new _a(e.data.fileCoherence),B):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 g=B.takeChangedPaths();if(Pt.length>0)for(const S of g)Pt.some(N=>Za(S,N))&&g.delete(S);if(g.size===0)return;for(const S of g)o.add(S);const A=[],E=[];for(const S of g){const N=B.writtenEntry(S,!0);N?A.push(N):E.push(S)}(A.length>0||E.length>0)&&(s.postMessage({type:"filesystem",patch:{files:A,removed:E}},A.flatMap(S=>S.bytes?[S.bytes.buffer]:[])),h=!0)};let h=!1;hn=()=>{if(a(),!h)return;const g=new Int32Array(new SharedArrayBuffer(4));if(s.postMessage({type:"checkpoint",control:g.buffer}),Atomics.wait(g,0,0,3e4),Atomics.load(g,0)!==1)throw new Error("WALI filesystem spawn checkpoint failed.");h=!1};let y=!1,m=!1;fn=()=>{m||(a(),m=!0,s.postMessage({type:"finalized"}))},vt=(g,A)=>{if(m)throw new Error("The WALI filesystem is finalized.");a(),y=!0;try{let E=A;if(A){const S=new Map(A.files.map(N=>[N.path,N]));for(const N of[...g.files.map(M=>M.path),...g.removed]){if(o.has(N))continue;const M=Wi(B,N);M?S.set(N,M):S.delete(N)}E={files:[...S.values()]}}ii(B,g,E),B.takeChangedPaths(),s.postMessage({type:"imported",patch:g})}finally{y=!1}},s.onmessage=g=>{if(!(g.data.type!=="import"||m||Ci)){rn=g.data.sequence??rn;try{vt(g.data.patch,g.data.base)}catch(A){s.postMessage({type:"import-error",message:A instanceof Error?A.message:String(A)})}}},B.setMutationHandler(()=>{y||m||(n??=setTimeout(a,0))})}}}function cs(i){const e=new Int32Array(i.control),t=new Uint8Array(i.payload),r={process:i.process??0};if(yr.push({control:e,payload:t,state:r}),i.releasePort){const n=i.releasePort;n.onmessage=()=>{ye.get(r.process)?.descriptors.descriptors.exit(),ye.delete(r.process),n.postMessage(!0),n.close()},n.start()}if(r.process!==0&&i.sharedPipes){const n=ye.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){cs({...n.data,process:n.data.process??r.process});return}if(typeof n.data!="number"){const s=ye.get(r.process);if(!s)throw new Error("Unknown inherited descriptor table");s.memory=n.data.memory;return}Va(e,t,r,n.data)},i.port.start(),yr[yr.length-1]}async function Va(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 A=Ga(e,t);if(A===Er)return;const E=BigInt(A instanceof Promise?await A:A);if(Atomics.compareExchange(i,0,r,-r)!==r)return;(t.view??=new DataView(e.buffer,e.byteOffset,e.byteLength)).setBigInt64(0,E,!0),Atomics.store(i,2,0),Atomics.store(i,4,8),Atomics.store(i,0,r+1),Atomics.notify(i,0);return}const a=Xa(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 h=Atomics.load(i,3),y=h>0?JSON.parse(kr.decode(e.slice(0,h))):{},m=ja(o,y,t);if(m===Er)return;const g=m instanceof Promise?await m:m;s=g===void 0?new Uint8Array:as.encode(JSON.stringify(g)),n=0}catch(o){n=Ja(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 un(){return ss}function ja(i,e,t){const r=t.process===0?un():ye.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(oe):void 0)},o=Ya++;return ye.set(o,s),{process:o}}if(i===v.CloseProcess){r?.descriptors.exit(),t.process!==0&&ye.delete(t.process);return}const n=()=>ge(e.path);if(i===v.PrepareSpawn){hn?.();return}if(i===v.ImportPeerPatch){vt(e.patch);return}if(i===v.Exists)return B.existsSync(n());if(i===v.Stat||i===v.Lstat){const s=i===v.Lstat?B.lstatSync(n()):B.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(B.readFileSync(n()))};if(i===v.WriteFile){B.writeFileSync(n(),ze(ge(e.content)));return}if(i===v.ReadRange){const s=oe(e.offset),o=oe(e.length),a=B.readRangeSync?B.readRangeSync(n(),s,o):B.readFileSync(n()).subarray(s,s+o);return{content:xe(a)}}if(i===v.WriteRange){const s=oe(e.offset),o=ze(ge(e.content));if(B.writeRangeSync)B.writeRangeSync(n(),s,o);else{const a=B.existsSync(n())?B.readFileSync(n()):new Uint8Array,h=new Uint8Array(Math.max(a.byteLength,s+o.byteLength));h.set(a),h.set(o,s),B.writeFileSync(n(),h)}return}if(i===v.Mkdir){B.mkdirSync(n(),{recursive:e.recursive===!0});return}if(i===v.Readdir)return B.readdirSync(n());if(i===v.Unlink){B.unlinkSync(n());return}if(i===v.Rmdir){B.rmdirSync(n());return}if(i===v.Rename){B.renameSync(ge(e.from),ge(e.to));return}if(i===v.Snapshot)return B.toSnapshot();if(i===v.SnapshotSize||i===v.FinalSnapshotSize)return i===v.FinalSnapshotSize&&fn?.(),t.snapshot=as.encode(JSON.stringify(B.toSnapshot())),{length:t.snapshot.byteLength};if(i===v.SnapshotChunk){const s=oe(e.offset),o=oe(e.length);if(!t.snapshot||s<0||o<0||o>Di||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){B.replaceSnapshot(e.snapshot);return}if(i===v.ReplaceSnapshotStart||i===v.ImportPeerPatchStart){const s=oe(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=oe(e.offset),o=ze(ge(e.content)),a=t.replacement;if(!a||a.peerPatch!==(i===v.ImportPeerPatchChunk)||s!==a.offset||o.byteLength>Di||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 h=JSON.parse(kr.decode(a.bytes));a.peerPatch?vt(h):B.replaceSnapshot(h)}return}if(i===v.Syscall){if(!r)throw Object.assign(new Error("EIO"),{code:"EIO"});const s=ge(e.name),o=ds(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))):[],h=fs(s,o,a);return h===Er?Er:h instanceof Promise?h.then(y=>({result:String(y)})):{result:String(h)}}if(i===v.ReadForMapping){if(!r)throw Object.assign(new Error("EIO"),{code:"EIO"});const s=r.readForMapping(oe(e.fd),oe(e.offset),oe(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(oe(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),oe(e.offset),ze(ge(e.content)))}}throw Object.assign(new Error("ENOSYS"),{code:"ENOSYS"})}function ds(i,e){const t=e.descriptors,r=i.handlers;if(r&&r.table===e&&r.entries===t.sharedEntries.buffer)return r.imports;const n=mt&&new Ho(()=>i.process===0?os:ye.get(i.process).memory,{...mt,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 Ga(i,e){const t=e.process===0?un():ye.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=kr.decode(i.slice(8+n*8,8+n*8+i[1])),o=[];for(let h=0;h<n;h+=1)o.push(r.getBigInt64(8+h*8,!0));const a=ds(e,t)[s];if(!a)throw Object.assign(new Error("ENOSYS"),{code:"ENOSYS"});return fs(s,a,o)}function fs(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?Ka(e,r):e(...t)??0}async function Ka(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 oe(i){if(typeof i!="number"||!Number.isSafeInteger(i))throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});return i}function Ja(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 Xa(i,e,t){if(i!==v.ReadForMappingBinary&&i!==v.WriteForMappingBinary)return;const r=t.process===0?un():ye.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),m=r.readForMapping(n.getInt32(0,!0),n.getFloat64(8,!0),y);return m?{result:0,output:m}:{result:1,output:new Uint8Array}}const s=n.getUint32(8,!0),o=n.getUint32(12,!0),a=kr.decode(e.slice(16,16+s)),h=r.writeForMapping(a,n.getFloat64(0,!0),e.slice(16+s,16+s+o));return{result:0,output:new Uint8Array([h?1:0])}}function qa(i){return`/${i.split("/").filter(Boolean).join("/")}`}function Za(i,e){return e==="/"||i===e||i.startsWith(`${e}/`)}const nn=globalThis;nn.onmessage=i=>{if(i.data.kind==="initialize"){Ha(i.data).then(()=>nn.postMessage({kind:"ready"}),e=>nn.postMessage({kind:"error",message:e instanceof Error?e.message:String(e)}));return}cs(i.data)};
|