@volter/browser-substrate 0.1.103 → 0.1.105
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/catalog/demand-input.json +133 -0
- package/dist/boot-screen.d.ts +2 -0
- package/dist/boot-screen.d.ts.map +1 -1
- package/dist/boot-screen.js +1 -1
- package/dist/boot-screen.js.map +1 -1
- package/dist/cli/archive.d.ts +1 -0
- package/dist/cli/archive.d.ts.map +1 -1
- package/dist/cli/archive.js +4 -4
- package/dist/cli/archive.js.map +1 -1
- package/dist/cli/build.d.ts +5 -1
- package/dist/cli/build.d.ts.map +1 -1
- package/dist/cli/build.js +21 -2
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/cache-root.d.ts +7 -0
- package/dist/cli/cache-root.d.ts.map +1 -0
- package/dist/cli/cache-root.js +24 -0
- package/dist/cli/cache-root.js.map +1 -0
- package/dist/cli/companions.d.ts +1 -1
- package/dist/cli/companions.d.ts.map +1 -1
- package/dist/cli/companions.js +30 -16
- package/dist/cli/companions.js.map +1 -1
- package/dist/cli/dependency-plan-build.d.ts +4 -0
- package/dist/cli/dependency-plan-build.d.ts.map +1 -1
- package/dist/cli/dependency-plan-build.js +111 -30
- package/dist/cli/dependency-plan-build.js.map +1 -1
- package/dist/cli/docker-build.d.ts +1 -0
- package/dist/cli/docker-build.d.ts.map +1 -1
- package/dist/cli/docker-build.js +4 -4
- package/dist/cli/docker-build.js.map +1 -1
- package/dist/cli/dry-run.d.ts +4 -4
- package/dist/cli/dry-run.d.ts.map +1 -1
- package/dist/cli/dry-run.js +10 -9
- package/dist/cli/dry-run.js.map +1 -1
- package/dist/cli/generated-code.d.ts +2 -1
- package/dist/cli/generated-code.d.ts.map +1 -1
- package/dist/cli/generated-code.js +46 -16
- package/dist/cli/generated-code.js.map +1 -1
- package/dist/cli/host-build.d.ts +1 -0
- package/dist/cli/host-build.d.ts.map +1 -1
- package/dist/cli/host-build.js +10 -9
- package/dist/cli/host-build.js.map +1 -1
- package/dist/cli/host-managers.d.ts +3 -1
- package/dist/cli/host-managers.d.ts.map +1 -1
- package/dist/cli/host-managers.js +7 -3
- package/dist/cli/host-managers.js.map +1 -1
- package/dist/cli/image-layers.d.ts.map +1 -1
- package/dist/cli/image-layers.js +5 -2
- package/dist/cli/image-layers.js.map +1 -1
- package/dist/cli/main.d.ts +5 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +97 -34
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/pack-publication.d.ts +2 -2
- package/dist/cli/pack-publication.d.ts.map +1 -1
- package/dist/cli/pack-publication.js +3 -3
- package/dist/cli/pack-publication.js.map +1 -1
- package/dist/cli/package-pack.d.ts +1 -1
- package/dist/cli/package-pack.d.ts.map +1 -1
- package/dist/cli/package-pack.js +7 -4
- package/dist/cli/package-pack.js.map +1 -1
- package/dist/cli/package-packs.d.ts +1 -0
- package/dist/cli/package-packs.d.ts.map +1 -1
- package/dist/cli/package-packs.js +84 -14
- package/dist/cli/package-packs.js.map +1 -1
- package/dist/cli/plan-tarballs.d.ts +1 -0
- package/dist/cli/plan-tarballs.d.ts.map +1 -1
- package/dist/cli/plan-tarballs.js +6 -3
- package/dist/cli/plan-tarballs.js.map +1 -1
- package/dist/cli/preparation-memory.d.ts +17 -0
- package/dist/cli/preparation-memory.d.ts.map +1 -0
- package/dist/cli/preparation-memory.js +367 -0
- package/dist/cli/preparation-memory.js.map +1 -0
- package/dist/cli/project-build.d.ts +1 -0
- package/dist/cli/project-build.d.ts.map +1 -1
- package/dist/cli/project-build.js +100 -71
- package/dist/cli/project-build.js.map +1 -1
- package/dist/cli/provision-catalog.d.ts +49 -0
- package/dist/cli/provision-catalog.d.ts.map +1 -0
- package/dist/cli/provision-catalog.js +72 -0
- package/dist/cli/provision-catalog.js.map +1 -0
- package/dist/cli/provision-demand.d.ts +45 -0
- package/dist/cli/provision-demand.d.ts.map +1 -0
- package/dist/cli/provision-demand.js +208 -0
- package/dist/cli/provision-demand.js.map +1 -0
- package/dist/cli/rolldown-binding.d.ts +1 -1
- package/dist/cli/rolldown-binding.d.ts.map +1 -1
- package/dist/cli/rolldown-binding.js +8 -4
- package/dist/cli/rolldown-binding.js.map +1 -1
- package/dist/cli/serve.d.ts +3 -0
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +9 -2
- package/dist/cli/serve.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +75 -31
- package/dist/index.js.map +1 -1
- package/dist/origin-reset.d.ts +4 -0
- package/dist/origin-reset.d.ts.map +1 -0
- package/dist/origin-reset.js +76 -0
- package/dist/origin-reset.js.map +1 -0
- package/dist/program-dom.d.ts +2 -0
- package/dist/program-dom.d.ts.map +1 -1
- package/dist/program-dom.js +11 -1
- package/dist/program-dom.js.map +1 -1
- package/dist/program-types.d.ts +2 -0
- package/dist/program-types.d.ts.map +1 -1
- package/dist/shell/assets/browser-opfs-filesystem-worker-CmF6UKMW.js +3 -0
- package/dist/shell/assets/browser-sandbox-bridge-C8nlSsT2.js +237 -0
- package/dist/shell/assets/{filesystem-host-DJbFuokb.js → filesystem-host-BzPlXSri.js} +1 -1
- package/dist/shell/assets/filesystem-host-Pq9IHKRx.js +3 -0
- package/dist/shell/assets/filesystem-worker-CC3pSXUP.js +5 -0
- package/dist/shell/assets/{fork-worker-BXY2kfdX.js → fork-worker-4YKQ4KTo.js} +1 -1
- package/dist/shell/assets/{node-execution-worker-7e8e0c5321ca0d10.js → node-execution-worker-3ddf5efbaa427e9d.js} +8 -8
- package/dist/shell/assets/{sandbox-bMeKqKBn.js → sandbox-mhFzIWaQ.js} +1 -1
- package/dist/shell/assets/{shell-DLIQ6jHu.js → shell-BZbhxnju.js} +763 -757
- package/dist/shell/assets/worker-BmHEnCyv.js +816 -0
- package/dist/shell/assets/{worker-program-worker-B4OcKVtV.js → worker-program-worker-DueMwljE.js} +10 -10
- package/dist/shell/brand/fonts/Geist-Variable.woff2 +0 -0
- package/dist/shell/brand/fonts/GeistMono-Variable.woff2 +0 -0
- package/dist/shell/brand/fonts/InstrumentSerif-Italic.woff2 +0 -0
- package/dist/shell/brand/fonts/InstrumentSerif-Regular.woff2 +0 -0
- package/dist/shell/brand/icons/app-window.svg +1 -0
- package/dist/shell/brand/icons/at-sign.svg +1 -0
- package/dist/shell/brand/icons/box.svg +1 -0
- package/dist/shell/brand/icons/chevron-right.svg +1 -0
- package/dist/shell/brand/icons/folder.svg +1 -0
- package/dist/shell/brand/icons/info.svg +1 -0
- package/dist/shell/brand/icons/key-round.svg +1 -0
- package/dist/shell/brand/icons/link.svg +1 -0
- package/dist/shell/brand/icons/monitor.svg +1 -0
- package/dist/shell/brand/icons/plus.svg +1 -0
- package/dist/shell/brand/icons/rotate-ccw.svg +1 -0
- package/dist/shell/brand/icons/share-2.svg +1 -0
- package/dist/shell/brand/icons/square-arrow-out-up-right.svg +1 -0
- package/dist/shell/brand/icons/terminal.svg +1 -0
- package/dist/shell/brand/icons/x.svg +1 -0
- package/dist/shell/brand/substrate.svg +1 -0
- package/dist/shell/brand/tokens.css +211 -0
- package/dist/shell/brand/wordmark.svg +1 -0
- package/dist/shell/index.html +5 -3
- package/dist/shell/node-execution-worker.js +16 -13
- package/dist/shell/node-host.html +2 -0
- package/dist/shell/python-execution-worker.js +15 -12
- package/dist/shell/python-host.html +2 -0
- package/dist/shell/python-runtime-snapshot.bin +0 -0
- package/dist/shell/python-runtime-snapshot.json +1 -1
- package/dist/shell/sandbox.html +4 -2
- package/dist/toolbar-styles.generated.d.ts +1 -1
- package/dist/toolbar-styles.generated.d.ts.map +1 -1
- package/dist/toolbar-styles.generated.js +1 -1
- package/dist/toolbar-styles.generated.js.map +1 -1
- package/dist/toolbar.d.ts.map +1 -1
- package/dist/toolbar.js +3 -1
- package/dist/toolbar.js.map +1 -1
- package/package.json +1 -1
- package/dist/shell/assets/browser-opfs-filesystem-worker-k2CPzPBU.js +0 -3
- package/dist/shell/assets/browser-sandbox-bridge-BJbQoc4f.js +0 -237
- package/dist/shell/assets/filesystem-host-yMcJuvmT.js +0 -3
- package/dist/shell/assets/filesystem-worker-BbsBhZ9p.js +0 -5
- package/dist/shell/assets/worker-Ce8bBwSJ.js +0 -816
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
const sn=["file","directory","symlink"],qi=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u,Zi=new TextEncoder,Qi=new TextDecoder;function Cs(s){let e=2166136261;for(let t=0;t<s.length;t+=1)e^=s.charCodeAt(t),e=Math.imul(e,16777619);return e>>>0}function Wn(s,e){const t=[...s.keys()];for(const D of t)if(qi.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,i=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||i.set(D,Zi.encode(G)),o[D]=q?G.length:i.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,s.size]);const F=new Uint32Array(N,m,n*6),T=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=i.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 R=o[D];F[q+0]=re,F[q+1]=R,re+=R;let ne=be?0:32;const ae=s.get(G);if(ae){ne|=1|sn.indexOf(ae.type)<<3,ae.pack&&(ne|=4),F[q+3]=ae.mode;const P=D*3;T[P+0]=ae.mtimeMs,T[P+1]=ae.offset,T[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=Cs(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(s,e){return Math.ceil(s/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,i,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+i*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,i),this.strings=new Uint8Array(e,A,o),this.mask=n-1}find(e){let t=Cs(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,i={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&&(i.pack="packages"),i}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,i=[];for(let o=0;o<this.records[t+5];o+=1){const a=this.childList[r+o]*6;i.push(this.decode(this.records[a+0]+n,this.records[a+1]-n,(this.records[a+2]&32)!==0))}return i}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 Qi.decode(this.strings.slice(e,e+t));let n="";for(let i=e,o=e+t;i<o;i+=4096)n+=String.fromCharCode.apply(null,this.strings.subarray(i,Math.min(o,i+4096)));return n}pathIs(e,t){const r=e*6,n=this.records[r+0],i=this.records[r+1];if(!(this.records[r+2]&32))return this.path(e)===t;if(i!==t.length)return!1;for(let o=0;o<i;o+=1)if(this.strings[n+o]!==t.charCodeAt(o))return!1;return!0}}const ue=Symbol("deleted");function $s(s,e){return s===e||!!s&&!!e&&s.type===e.type&&s.offset===e.offset&&s.length===e.length&&s.pack===e.pack&&s.mode===e.mode&&s.mtimeMs===e.mtimeMs&&s.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&&$s(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(s){const e=s.lastIndexOf("/");return e<=0?"/":s.slice(0,e)}function ct(s){return s==="/"?"":s}const eo="/opt/tree";function to(s){return`volter-tree-store-use:${s}`}function ro(s,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(s);if(!r){r=new Promise((i,o)=>{e.request(to(s),{mode:"shared"},()=>(i(),new Promise(()=>{}))).catch(o)});const n=t;r.catch(()=>n.delete(s)),t.set(s,r)}return r}const Vn=new WeakMap;function no(s,e){const t=new Be(s.index),r=new Qe(t),n=new _t(t),i={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(s.store!==void 0){const a=e?.get(s.store),h=s.roots?.[0]??"/",y=s.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 ${s.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,...i}}if(!s.bytes)throw new Error("A shared layer holds neither its bytes nor a store of them.");const o=new Uint8Array(s.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(s){if(s.length===1)return s[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=s[y].entries.get(h);if(m&&m.type!=="directory")return!0}if(h==="/")return!1}},t=o=>{for(let a=0;a<s.length;a+=1)if(s[a].entries.has(o)&&!e(a,o))return a;return-1},r=o=>s[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<s.length;a+=1)for(const[h,y]of s[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)}},i=o=>{const a=r(o)?.entries.get(o);return a&&a.type!=="directory"?[]:s.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(i(o).flatMap(a=>a.childrenOf(o)))].sort(),descendants:o=>{const a=[],h=new Set;for(const m of s)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(s,e,t){const r=[...s?[s]:[],...(e??[]).map(n=>no(n,t))];return r.length===0?void 0:so(r)}const io="supercode-browser-filesystems",Ce="packages",oo="state.json",Gn="/image-range-worker.js",Kn="image-ranges.json",ao=2;function Br(s){const e=s;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}class co{ranges;directory;identity;receiptKey;client;worker;port;prefetchers=[];state;completed;firstRead;closed=!1;ready=!1;startup;cancelStartup;sharedCompletion;blocked={ranges:0,ms:0};constructor(e,t,r,n,i,o){if(this.ranges=e,this.directory=t,this.identity=r,this.receiptKey=i,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,i)=>{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()),i(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 i=Atomics.load(e,n),o=this.ranges.parts[n];i>0&&o.raw>0&&r.push([i,o.sha256])}return r.sort((n,i)=>n[0]-i[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 i=t.length>0&&n.length>0?Math.min(t.length,8):Math.min(ao,Math.ceil(n.length/32)),o=[];for(let a=0;a<i;a+=1){const h=n.filter((A,E)=>E%i===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(()=>{})}}get blockedReads(){return{...this.blocked}}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,i=this.ranges.parts.length;for(;n<i;){const o=n+i>>>1,a=this.ranges.parts[o];a.offset+a.raw<=e?n=o+1:i=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 A=g-performance.now();if(A<=0||Atomics.wait(this.state,o,0,A)==="timed-out")throw this.close(),new Error(`The image's immutable part ${a.url} did not arrive within 30 seconds; reload to retry.`)}if(this.blocked.ranges+=1,this.blocked.ms+=performance.now()-m,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}),fo=io,sr="generations",Jn="atomic-staging",ft=oo,we="index.json",$r="index-log.bin",ht="pack.bin",ir=8,Xn=64*1024*1024,fe=1024*1024*1024,qn=4*1024*1024*1024,Us=["/workspace","/home","/opt"],Ze=0,Zn=1,Ur=1e6,Qn=8*1024*1024,es=250,ho=64*1024*1024,lo=256*1024*1024,ts=4*1024*1024,lt=493,or=420;function an(s,e={}){const t=e.limits?.maxBytes??qn,r=e.limits?.maxEntries??Ur;if(!Number.isSafeInteger(t)||t<1||t>qn||!Number.isSafeInteger(r)||r<1||r>Ur)throw new Error("Invalid OPFS workspace limits.");let n,i=!1,o=!1,a=!1,h,y=0,m=0,g,A,E,S=new Map,N=new ar,M,F,T,J,me,te,re=0,$,D=0;const G=new Map,q=256*1024,be=32;let R=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,Zn,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 fi=8*1024*1024;let wn=!1;function hi(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:R,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:fi))return Ir(ce);let f;try{f=Wn(S,yi())}catch(u){console.warn(`[pack-store] no reader seed: ${u instanceof Error?u.message:String(u)}`);return}return ce={generation:E,index:f,packBytes:R,logBytes:P,epoch:d,liveBytes:C,linked:y,linkedBytes:m},ui(f),Ir(ce)}function Ir(c){const d=e.packages?.imageCompletionSeed();return d?{...c,packagesImage:d}:c}function li(){if(!(!T||!F||!E||tt||Ve>0||K))return{generation:E,rangesDigest:F,completed:T.completionBuffer,...T.receiptKey?{metadata:{ranges:T.verifiedRanges,receiptKey:T.receiptKey}}:{}}}function ui(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 yi(){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 mi(){!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 wi(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 pi(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)),T?.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(T?.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 gi(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,R=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,i=d.shared===!0||o,i||await ki(f.signal),f.signal.throwIfAborted();const u=await bi();f.signal.throwIfAborted();try{const p=await u.getDirectoryHandle(fo,{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&&i&&(await s.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 mo(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&&s.navigator.locks?await s.navigator.locks.request(nr,{mode:"shared",signal:f.signal},async()=>{await st(b),D=M.getSize()}):await st(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),R=k.packBytes,k.changes&&gn({packBytes:k.packBytes,changes:k.changes}),await st(b),f.signal.throwIfAborted(),P=k.logBytes,{liveBytes:C,linked:y,linkedBytes:m}=k,Z=Math.max(0,R-C),wn=!0,S.size>0}const I=o?void 0:await Wi(b);if(f.signal.throwIfAborted(),I){const O=new Be(I.index);S=new Qe(O),N=new _t(O),{packBytes:R,liveBytes:C,linked:y,linkedBytes:m}=I;const L=Atomics.load(new Int32Array(mn()),Ze);ce={generation:E,index:I.index,packBytes:R,liveBytes:C,linked:y,linkedBytes:m,logBytes:0,epoch:L}}else S=vr(await Ke(b,we)),f.signal.throwIfAborted(),ot(),R=Nr(S);await st(b),f.signal.throwIfAborted();const _=I?await Hi(I):0;return f.signal.throwIfAborted(),_&&(Ie={generation:E,bytes:_},ce&&(ce.logBytes=_)),Vt(_,!!I),I?Z=Math.max(0,R-C):Et(),Nn(),i&&!o&&!I&&S.size>=1e4&&(ve(),await It(b,S,{access:$,bytes:P,packBytes:R})),i||(M.truncate(R),await _n(n,Jn,!0),await Lr(E),f.signal.throwIfAborted(),Z>ho&&Z>C&&await Ri()),f.signal.throwIfAborted(),S.size>0};return i&&!o?await s.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{it()}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 Si(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));R=Nr(b),w.generation!==E&&(E=w.generation,re=w.initializedAt,F=w.imageRanges,await st(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(),R=Nr(S),P=0,u=!0);const l=P;Vt(P),(u||P!==l)&&Et()}async function bi(){let c;for(let d=0;d<10;d+=1){gt?.signal.throwIfAborted();try{return await s.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 Ei=1e4;async function se(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),Ei)}),_]);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 st(c){it();const d=await c.getFileHandle(ht);M=await se(d,"store");try{if(M.getSize()<R)throw new Error("The committed OPFS workspace pack is incomplete. Stored data was retained.");const f=await c.getFileHandle($r);if($=await se(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,T=new co(w,c,`${A}.${E}`,l?.completed,p,b),await T.initialize(),J=w.image}}catch(f){throw it(),f}}function it(){T?.close(),T=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+ir<=k;){const I=p.getUint32(b,!0),_=p.getUint32(b+4,!0),O=b+ir;if(I===0||I>Xn||O+I>k)break;const L=l.subarray(O,O+I);if(Bn(L)!==_)break;let W;try{W=Gi(JSON.parse(dt.decode(L)))}catch{break}if(W.packBytes>w)break;gn(W,d),b=O+I}b!==k&&!i&&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&&$s(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))}R=Math.max(R,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,R-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 Ai=5e3;async function ki(c){if(!s.navigator.locks)return;if(!A)throw new Error("OPFS filesystem project is not initialized.");const d=new AbortController,f=setTimeout(()=>d.abort(),Ai);try{await new Promise((u,l)=>{s.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(sr,{create:d})).getDirectoryHandle(c,{create:d})}async function Mr(){let c;try{c=await(await je()).getDirectoryHandle(sr)}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(sr)}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 Ii(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>Qn&&!Or&&(Or=!0,(i?s.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>Qn&&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})),!i&&!xr&&Z>lo&&Z>C&&(xr=!0,zt(vi).catch(d=>console.error("The workspace could not be compacted; it keeps its generation.",d)).finally(()=>{xr=!1}))}async function Ni(c){Te(),jt+=1;try{return await c()}finally{jt-=1,jt===0&&!K&&n&&bn()}}function Mi(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);ie(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===R)){Jt(l.offset+l.length,w),ie(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),ie(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===R)){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),ie(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),ie(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}`);ie(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)&&ie(f,{type:"directory",mode:lt,mtimeMs:Date.now(),offset:0,length:0},d);return}if(c.operation==="link"){Li(f,In(c.source),d);return}if(c.operation==="rename"){Oi(f,Le(c.destination),d);return}const u=S.get(f);if(!u)throw new Error(`OPFS metadata target does not exist: ${f}`);ie(f,{...u,mode:c.mode??u.mode,mtimeMs:c.mtimeMs??u.mtimeMs},d)}function ie(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 Li(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)}`;ie(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)ie(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 Oi(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)ie(`${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]:Us}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;if(C-u+d>t)throw new Error(`OPFS workspace exceeds its byte limit: writing ${c} (${d} bytes) would take the project's own files past ${t} bytes.`)}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}R=Math.max(R,c+d.byteLength)}function Mn(c){const d=M;if(!d)throw new Error("OPFS filesystem worker is not initialized.");c<=R||(d.truncate(c),R=c)}function Xt(c){const d=M;if(!d)throw new Error("OPFS filesystem worker is not initialized.");const f=R;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 R=f+c.byteLength,f}function xi(c){const d=M;if(d.getSize()>=R&&c.getSize()>=P)return;d.flush(),c.flush();const f=d.getSize(),u=c.getSize();if(!(f>=R&&u>=P))throw Object.assign(new Error(`This browser is keeping less than the tab wrote (the store's pack holds ${f} of ${R} 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 Pi(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:R,changes:c}));if(u.byteLength>Xn)throw new Error("An OPFS workspace index record exceeds its size limit.");const l=new Uint8Array(ir+u.byteLength),w=new DataView(l.buffer);w.setUint32(0,u.byteLength,!0),w.setUint32(4,Bn(u),!0),l.set(u,ir);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,xi(f),d.publish!==!1&&$t(),performance.now()-ae>=es?ve():ne===void 0&&(ne=setTimeout(ve,es))}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(_i));return yn=d,d}async function _i(){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:R}),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(()=>Ti(Tr(c)))}async function Ti(c){const d=crypto.randomUUID(),f=await ke(d,!0),u=await f.getFileHandle(ht,{create:!0}),l=await se(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 Ri(){await On(()=>!0)}async function vi(){let c=!1,d=!1,f=!1;try{await Fi(()=>{c=!0},()=>{d=!0},()=>{f=!0})}finally{c&&(d||f)?bt():c&&Ut()}}async function Fi(c,d,f){const u=crypto.randomUUID(),l=await ke(u,!0),w=await se(await l.getFileHandle(ht,{create:!0}),"store");let p,b=!1;try{p=await se(await l.getFileHandle($r,{create:!0}),"record of changes"),p.truncate(0);const k=new Uint8Array(ts);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(T?.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,...Xi}=U;return{...Xi,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(),R=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(sr),u)}}}async function Di(c){Te(),St();try{await Bi(c)}finally{bt()}}async function Bi(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(()=>Ci(c))}async function Ci(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 se(w,"store"),b=new Map,k=new Uint8Array(ts);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(T?.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 $i(c,d,f,u,l,w)}finally{bt()}}async function $i(c,d,f,u,l,w){const p=await d.getFileHandle($r,{create:!0}),b=await se(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),it(),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();R=u,h=d,await st(d),l?({liveBytes:C,linked:y,linkedBytes:m}=l,Z=Math.max(0,R-C)):Et(),i||await Lr(c)}async function Ui(c,d,f,u,l=!1){if(Te(),!i||A!==Ce)throw new Error("Only the shared package store can reserve immutable image extents.");if(R!==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 se(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 zi(c,d,f,u=!1,l){if(Te(),i||!e.packages||!l&&!e.packages.deferredImage)throw new Error("Prepared project paths require a verified shared image.");if(R!==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 se(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 Yi(){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(Jn,{create:!0}),l=crypto.randomUUID(),w=await u.getFileHandle(l,{create:!0}),p=await se(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=ji(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 Wi(c){if(!(typeof SharedArrayBuffer>"u"))try{const d=await c.getFileHandle(we),f=await se(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 se(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 Hi(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 se(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 Vi(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 ji(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 Gi(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(),it(),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)Mi(u,f)},d):[]}function Ki(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):R;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}`);ie(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),ie(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:R,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(),Pi(w,{publish:!d.durable}),d.durable&&(ve(),$t()),bn(),w}catch(p){const b=X!==void 0&&!Ae&&Atomics.load(X,Zn)!==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:R,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(R),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 Ji(){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{it()}finally{const c=g;g=void 0,n=void 0;try{c?.()}finally{e.ownsPackages&&e.packages?.close()}}}}return{initialize:gi,opened:()=>n!==void 0&&!K,stats:()=>({entries:S.size,liveBytes:C,deadBytes:Z,packBytes:R,rewrites:We,rewrittenBytes:He,linked:y,linkedBytes:m,flushes:Ye,flushMs:_e}),applyNow:Cn,applyExtentsNow:Ki,close:Ji,readExtent:Ht,descendants:Pr,retain:On,remapLinks:Di,childrenOf:c=>[...N.get(c)??[]].sort(),refresh:Si,follow:mi,clock:mn,readerSeed:hi,imageCompletionSeed:li,imageLine:()=>T?.lineForReader()??e.packages?.imageLine(),imageStartupSet:()=>T?.readDigests()??T?.completedDigests()??[],prefetchImage:(c,d)=>T?.prefetch(c,d)??{queued:0,done:Promise.resolve()},imageBlockedReads:()=>{const c=T?.blockedReads??{ranges:0,ms:0},d=e.packages?.imageBlockedReads()??{ranges:0,ms:0};return{ranges:c.ranges+d.ranges,ms:c.ms+d.ms}},seeded:()=>wn,get logBytes(){return P},checkpoint:qt,deferMaintenance:Ni,installPreparedImage:Ui,installPreparedProject:zi,get deferredImage(){return J},get imagePlacedAt(){return n&&F?re:void 0},get entries(){return S},get packBytes(){return R},read:wi,readRange:pi,snapshot:Yi,replace:Ln,apply:Ii,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:Vi}}async function uo(s,e,t,r){const n=an(s);await n.initialize(Ce,{readOnly:!0,extentsOnly:!0});const i=an(s,{packages:n,ownsPackages:!0});let o;try{o=await i.initialize(e,{readOnly:!0,...t?{seed:t}:{}})}catch(a){throw i.close(),n.close(),a}if(!o&&!i.opened()){n.close();return}return i}const yo="sweep.json";async function mo(s){const t=await(await s.getFileHandle(yo,{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(s){const e=s.toBase64;if(typeof e=="function")return e.call(s);let t="";for(let r=0;r<s.byteLength;r+=32768)t+=String.fromCharCode(...s.subarray(r,r+32768));return btoa(t)}function ze(s){const e=Uint8Array.fromBase64;if(typeof e=="function")return e(s);const t=atob(s),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("/",bo()),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(),i=this.get(n);if(i){t.push([n,i]);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(i=>{const o=i,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 i of n.sort((o,a)=>cr(o.path)-cr(a.path))){const o=i,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>=wo&&r.readsByRange?.(e)?{range:(n,i)=>this.readBlocks(e,t.length,n,i,(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,i){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>go)return i(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=i(g*Mt,Mt),this.rangeBlockBytes+=E.byteLength;this.rangeBlockBytes>po&&this.rangeBlocks.size>0;){const[F,T]=this.rangeBlocks.entries().next().value;this.rangeBlocks.delete(F),this.rangeBlockBytes-=T.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 i=e.entries.get(r);return!(n.fromStore&&!n.dirty&&i&&n.mode===(i.mode&4095)&&n.mtimeMs===i.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 i={mode:n.mode,mtimeMs:n.mtimeMs};return n.type==="directory"?{path:r,type:"directory",...i}:t?{path:r,type:"file",bytes:this.bytesOf(n).slice(),...i}:{path:r,type:"file",content:xe(this.bytesOf(n)),...i}}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,i)=>cr(n.path)-cr(i.path));for(const n of r){const i=n,o=z(i.path);if(o!=="/")if(i.type==="directory")this.mkdirSync(o,{recursive:!0});else if(i.content!==void 0){this.writeFileSync(o,ze(i.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&&(i.mode!==void 0&&(a.mode=i.mode),i.mtimeMs!==void 0&&(a.atimeMs=a.mtimeMs=i.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,i=!1){const o=this.node(i?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),i=this.node(n);if(!i)throw new Error(`ENOENT: no such file, open '${n}'`);if(i.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${n}'`);return i.range&&i.content===void 0?i.range(t,r):this.bytesOf(i).slice(t,t+r)}writeRangeSync(e,t,r){this.mutate(()=>{const n=z(e);this.mkdirSync($e(n),{recursive:!0});const i=this.isHidden(n);this.unhide(n);const o=i?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 i;if(t===0&&n.content===void 0)i=new Uint8Array;else{const o=this.bytesOf(n),a=o.buffer.byteLength-o.byteOffset;n.dirty&&t<=a&&(a<=zr||t*4>=a)?(i=new Uint8Array(o.buffer,o.byteOffset,t),i.fill(0,o.byteLength)):(i=new Uint8Array(t),i.set(o.subarray(0,t)),n.dirty&&this.release(o))}this.nodes.set(r,{type:"file",content:i,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>rs)return;this.spares.push(t);let r=this.spares.reduce((n,i)=>n+i.byteLength,0);for(;this.spares.length>So||r>rs;)r-=this.spares.shift().byteLength}takeSpare(e){const t=Math.max(e*4,zr*4);let r=-1;return this.spares.forEach((n,i)=>{n.byteLength>=e&&n.byteLength<=t&&(r<0||n.byteLength<this.spares[r].byteLength)&&(r=i)}),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 i=n?this.nodes.get(r):this.node(r);i?.type==="file"&&i.dirty&&i.content&&this.release(i.content),this.nodes.set(r,{type:"file",content:typeof t=="string"?new TextEncoder().encode(t):t.slice(),dirty:!0,mode:i?.type==="file"?i.mode:420,atimeMs:ee(),mtimeMs:ee(),ino:i?.type==="file"?i.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 i="";for(let o=0;o<n.length;o+=1){i+=`/${n[o]}`;const a=this.node(i);if(a?.type==="file")throw new Error(`ENOTDIR: not a directory, mkdir '${i}'`);if(a)continue;if(!t?.recursive&&o!==n.length-1)throw new Error(`ENOENT: no such directory, mkdir '${i}'`);this.unhide(i);const h=ee();this.nodes.set(i,{type:"directory",mode:493,atimeMs:h,mtimeMs:h,ino:this.nextInode++}),this.markMutation(i)}})}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 i=t==="/"?[...new Set([...this.lower.childrenOf("/"),...Us.filter(o=>this.lower.entries.has(o)).map(o=>o.slice(1))])]:this.lower.childrenOf(t);for(const o of i)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),i=this.node(n);if(!i)throw new Error(`ENOENT: no such file or directory, utimes '${n}'`);i.atimeMs=typeof t=="number"?t:Number(t),i.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 wo=1<<20,Mt=64*1024,po=8*1024*1024,go=1<<20,zr=64*1024,So=2,rs=32*1024*1024;function bo(){const s=ee();return{type:"directory",mode:493,atimeMs:s,mtimeMs:s,ino:1}}function z(s){if(Eo(s))return s;const e=[];for(const t of`/${s}`.split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return`/${e.join("/")}`}function Eo(s){if(s.charCodeAt(0)!==47)return!1;if(s.length===1)return!0;let e=1;for(let t=1;t<=s.length;t+=1){if(t<s.length&&s.charCodeAt(t)!==47)continue;const r=t-e;if(r===0||s.charCodeAt(e)===46&&(r===1||r===2&&s.charCodeAt(e+1)===46))return!1;e=t+1}return!0}function $e(s){return s.slice(0,s.lastIndexOf("/"))||"/"}function cr(s){let e=1;for(let t=0;t<s.length;t+=1)s.charCodeAt(t)===47&&(e+=1);return e}function zs(s,e,t,r,n){return Atomics.wait(s,e,t,r)}function ns(s,e,t){const{appended:r,superseded:n}=t?Ao(s,e,t):{appended:new Map,superseded:new Set},i=[...e.removed].sort((a,h)=>dr(h)-dr(a));for(const a of i)s.existsSync(a)&&(s.statSync(a).isDirectory()?s.rmdirSync(a):s.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")s.existsSync(a.path)&&!s.statSync(a.path).isDirectory()&&s.unlinkSync(a.path),s.mkdirSync(a.path,{recursive:!0});else if(Ft(a)){s.existsSync(a.path)&&s.statSync(a.path).isDirectory()&&s.rmdirSync(a.path);const h=a.path.slice(0,a.path.lastIndexOf("/"))||"/";h!=="/"&&!s.existsSync(h)&&s.mkdirSync(h,{recursive:!0});const y=s.existsSync(a.path)?s.statSync(a.path).mode:void 0,m=y!==void 0&&(y&128)===0;m&&s.chmodSync?.(a.path,y&4095|128),s.writeFileSync(a.path,r.get(a.path)??Dt(a)),m&&a.mode===void 0&&s.chmodSync?.(a.path,y&4095)}else if(!s.existsSync(a.path)||s.statSync(a.path).isDirectory())continue;a.mode!==void 0&&s.chmodSync?.(a.path,a.mode),a.mtimeMs!==void 0&&s.utimesSync?.(a.path,new Date(a.mtimeMs),new Date(a.mtimeMs))}}function Ao(s,e,t){const r=new Map,n=new Set,i=t.byPath,o=i instanceof Map?i: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=Ys(s,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(Io(m,g,a.get(y)))continue;const E=ko(s,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 ko(s,e,t,r,n,i){if(t?.type!=="file"||r?.type!=="file"||n?.type!=="file"||!Ft(n)||!s.readFileSync||V(r).mode!==V(n).mode)return;const o=Ft(t)?Dt(t):i?.(e);if(!o||o.length===0)return;const a=Dt(n),h=s.readFileSync(e),y=typeof h=="string"?new TextEncoder().encode(h):h,m=A=>A.length>=o.length&&Ws(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(s){return s?{type:s.type,...V(s)}:null}function Io(s,e,t){return e?.type!=="directory"||t?.type!=="directory"?!1:s===void 0?V(e).mode===V(t).mode:V(e).mode===V(t).mode&&s.type==="directory"&&V(s).mode===V(e).mode}function dr(s){let e=1;for(let t=0;t<s.length;t+=1)s.charCodeAt(t)===47&&(e+=1);return e}function Ys(s,e){if(!s.existsSync(e))return;const t=s.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(s,e){return s===void 0?e===void 0:e!==void 0&&s.type===e.type&&No(s,e)&&V(s).mode===V(e).mode&&V(s).mtimeMs===V(e).mtimeMs}function V(s){const e=s;return{...e.mode===void 0?{}:{mode:e.mode&4095},...e.mtimeMs===void 0?{}:{mtimeMs:e.mtimeMs}}}function No(s,e){return s.type!=="file"||e.type!=="file"?!0:s.content!==void 0&&e.content!==void 0?s.content===e.content:Ft(s)&&Ft(e)?Ws(Dt(s),Dt(e)):ss(s)===ss(e)}function ss(s){if(s.size!==void 0)return s.size;if(s.bytes!==void 0)return s.bytes.byteLength;if(s.content===void 0)return;const e=s.content.endsWith("==")?2:s.content.endsWith("=")?1:0;return Math.floor(s.content.length*3/4)-e}function Ft(s){return s!==void 0&&(s.bytes!==void 0||s.content!==void 0)}function Dt(s){return s.bytes??(s.content===void 0?void 0:ze(s.content))}function Ws(s,e){if(s===e)return!0;if(s.byteLength!==e.byteLength)return!1;let t=0;if(s.byteOffset%4===0&&e.byteOffset%4===0){const r=s.byteLength>>>2,n=new Uint32Array(s.buffer,s.byteOffset,r),i=new Uint32Array(e.buffer,e.byteOffset,r);for(let o=0;o<r;o+=1)if(n[o]!==i[o])return!1;t=r<<2}for(;t<s.byteLength;t+=1)if(s[t]!==e[t])return!1;return!0}const is=0,os=1,Se=2,wr=3,pr=4,Hs=5,Vs=6;function Mo(s){const e=Bt(s),t=s.role==="reader"?wr:pr;Atomics.sub(e,t,1)<=1&&Atomics.store(e,t,0),Atomics.add(e,s.role==="reader"?Vs:Hs,1),Atomics.notify(e,Se)}function Lo(s,e){const t=Bt(s),r=Atomics.load(t,Se);let n=0;return s.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<Po(s)&&(n|=4),Atomics.load(t,wr)===0&&(n|=16)),n}function js(s,e){if(s.role!=="reader")return-9n;if(e===0)return new Uint8Array;const t=Bt(s),r=Gs(s),n=Atomics.load(t,Se);if(n===0)return Atomics.load(t,pr)===0?new Uint8Array:-11n;const i=Math.min(Math.max(0,e),n),o=Atomics.load(t,is),a=Math.min(i,r.byteLength-o),h=new Uint8Array(i);return h.set(r.subarray(o,o+a)),a<i&&h.set(r.subarray(0,i-a),a),Atomics.store(t,is,(o+i)%r.byteLength),Atomics.sub(t,Se,i),i>0&&Atomics.add(t,Vs,1),Atomics.notify(t,Se),h}function Oo(s,e){const t=Bt(s);for(;;){const r=js(s,e);if(r!==-11n)return r;zs(t,Se,0,50)}}function xo(s,e){if(s.role!=="writer")return-9n;const t=Bt(s),r=Gs(s);let n=0;for(;n<e.byteLength;){if(Atomics.load(t,wr)===0)return n>0?BigInt(n):-32n;const i=Atomics.load(t,Se),o=r.byteLength-i;if(o===0){zs(t,Se,i,50);continue}const a=Atomics.load(t,os),h=Math.min(e.byteLength-n,o,r.byteLength-a);r.set(e.subarray(n,n+h),a),Atomics.store(t,os,(a+h)%r.byteLength),Atomics.add(t,Se,h),Atomics.add(t,Hs,1),Atomics.notify(t,Se),n+=h}return BigInt(n)}const as=new WeakMap;function Bt(s){const e=s.controlOffset??0;let t=as.get(s.control);t||(t=new Map,as.set(s.control,t));let r=t.get(e);return r||(r=new Int32Array(s.control,e,8),t.set(e,r)),r}function Po(s){return s.payloadLength??s.payload.byteLength-(s.payloadOffset??0)}function Gs(s){const e=s.payloadOffset??0,t=s.payloadLength??s.payload.byteLength-e;return new Uint8Array(s.payload,e,t)}class Ks{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 _o(this,e,t)}}class _o{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 cs=1e4,To=19999,ds=64*1024,Hr=8,fs=3,hs=4,Vr=2048,jr=524288,Ro=0,vo=1,Fo=2,Do=3,Bo=4,ls=1030,Co=1,$o=4096,Uo=new WeakMap,us=new WeakMap;let ys,ms;function zo(s,e){if(!Number.isSafeInteger(e)||e<0||e>=65536)return 0;let t=s===ys?ms:us.get(s);t||(t={table:new Int32Array(s.table),descriptions:new Int32Array(s.descriptions)},us.set(s,t)),ys=s,ms=t;const r=Atomics.load(t.table,e);return Atomics.load(t.descriptions,r*3)}class Yo{memory;state;remote;table;slots;constructor(e,t,r,n){this.memory=e,this.state=t,this.remote=n,this.table=r??Uo.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:Lo(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,i)=>e[n]?.(...i)??-38n,r={...e,SYS_pipe:n=>this.pipe(Number(n),0),SYS_pipe2:(n,i)=>this.pipe(Number(n),Number(i)),SYS_close:n=>this.isPipeFd(Number(n))?this.close(Number(n)):e.SYS_close?.(n)??-38n,SYS_read:(n,i,o)=>this.isPipeFd(Number(n))?this.read(Number(n),Number(i),Number(o)):e.SYS_read?.(n,i,o)??-38n,SYS_pread64:(n,i,o,a)=>this.isPipeFd(Number(n))?-29n:e.SYS_pread64?.(n,i,o,a)??-38n,SYS_write:(n,i,o)=>this.isPipeFd(Number(n))?this.write(Number(n),Number(i),Number(o)):e.SYS_write?.(n,i,o)??-38n,SYS_pwrite64:(n,i,o,a)=>this.isPipeFd(Number(n))?-29n:e.SYS_pwrite64?.(n,i,o,a)??-38n,SYS_preadv:(n,i,o,a,h)=>this.isPipeFd(Number(n))?-29n:e.SYS_preadv?.(n,i,o,a,h)??-38n,SYS_pwritev:(n,i,o,a,h)=>this.isPipeFd(Number(n))?-29n:e.SYS_pwritev?.(n,i,o,a,h)??-38n,SYS_readv:(n,i,o)=>this.isPipeFd(Number(n))?this.readv(Number(n),Number(i),Number(o)):e.SYS_readv?.(n,i,o)??-38n,SYS_writev:(n,i,o)=>this.isPipeFd(Number(n))?this.writev(Number(n),Number(i),Number(o)):e.SYS_writev?.(n,i,o)??-38n,SYS_lseek:(n,i,o)=>this.isPipeFd(Number(n))?-29n:e.SYS_lseek?.(n,i,o)??-38n,SYS_fstat:(n,i)=>this.isPipeFd(Number(n))?this.fstat(Number(i)):e.SYS_fstat?.(n,i)??-38n,SYS_dup:n=>this.isPipeFd(Number(n))?this.duplicate(Number(n)):e.SYS_dup?.(n)??-38n,SYS_dup2:(n,i)=>this.isPipeFd(Number(n))?this.duplicate(Number(n),Number(i),3,!1,e):e.SYS_dup2?.(n,i)??-38n,SYS_dup3:(n,i,o)=>this.isPipeFd(Number(n))?Number(n)===Number(i)||(Number(o)&~jr)!==0?-22n:this.duplicate(Number(n),Number(i),3,!!(Number(o)&jr),e):e.SYS_dup3?.(n,i,o)??-38n,SYS_fcntl:(n,i,o)=>this.isPipeFd(Number(n))?this.fcntl(Number(n),Number(i),Number(BigInt.asIntN(32,BigInt(o))),e):e.SYS_fcntl?.(n,i,o)??-38n,SYS_poll:(n,i,o)=>this.poll(Number(n),Number(i),Number(o),()=>t("SYS_poll",[n,i,o]))};if(this.remote)for(const n of["SYS_pipe","SYS_pipe2","SYS_close","SYS_dup","SYS_dup2","SYS_dup3","SYS_fcntl"]){const i=r[n];r[n]=(...o)=>n==="SYS_pipe"||n==="SYS_pipe2"||this.isPipeFd(Number(o[0]))?this.remote.syscall(n,o):i(...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,fs,1),Atomics.store(n,hs,1);const i=this.allocateDescriptor(r+1),o=i>=0?this.allocateDescriptor(-(r+1)):-1;if(i<0||o<0)return i>=0&&this.table.close(i),Atomics.store(this.slots,r,0),-24n;for(const h of[i,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,i,!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 i=(this.statusFlags(e)&Vr?js:Oo)(this.handle(this.entry(e)),r);return typeof i=="bigint"?i:(this.bytes().set(i,t),BigInt(i.byteLength))}write(e,t,r){return!Number.isSafeInteger(r)||r<0||!this.validRange(t,r)?-22n:xo(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 i=0;i<r;i+=1){const o=t+i*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 i=0;i<r;i+=1){const o=t+i*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,$o|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===Ro||t===ls)return this.duplicate(e,void 0,Math.max(3,r),t===ls,n);const i=this.table.entries[e];return t===vo?BigInt(i.flags):t===Fo?(i.flags=r&Co,0n):t===Do?BigInt(this.statusFlags(e)|(this.entry(e)<0?1:0)):t===Bo?(Atomics.store(new Int32Array(this.state.descriptions),i.description*3+1,r&Vr),0n):-22n}duplicate(e,t,r=cs,n=!1,i={}){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 i=n();let o=typeof i=="bigint"?Number(i):typeof i=="number"?i: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<=To;t++)if(!this.table.get(t))return t;return-1}allocateDescriptor(e,t=cs){const r=this.freeDescriptor(t);if(r<0)return r;const n=Math.abs(e)-1,i=this.table.registry.create("pipe",{pipe:n,side:e>0?"reader":"writer"},()=>{Mo(this.handle(e));const o=this.control(n);Atomics.load(o,fs)===0&&Atomics.load(o,hs)===0&&Atomics.store(this.slots,n,0)});return Atomics.store(this.table.registry.pipeMetadata,i.id*3,e),this.table.set(r,i),r}entry(e){return zo(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*ds,payloadLength:ds}}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 Wo(s){if(!s||typeof s!="object"||Object.keys(s).some(t=>t!=="writableRoots")||!Array.isArray(s.writableRoots)||s.writableRoots.length>128)throw new TypeError("Invalid process filesystem policy: expected up to 128 writableRoots.");const e=[...new Set(Array.from(s.writableRoots,Js))].sort();return Object.freeze({writableRoots:Object.freeze(e.filter(t=>!e.some(r=>r!==t&&Xs(t,r))))})}function Ho(s,e){const t=Wo(e),r=n=>t.writableRoots.some(i=>Xs(n,i));return n=>{const i=Js(n);r(i)||Gr(i);let o="";for(const a of i.split("/").filter(Boolean)){o+=`/${a}`;try{s.lstatSync(o).isSymbolicLink()&&Gr(i)}catch(h){if(h.code!=="ENOENT")throw h;r(o)||Gr(o)}}return i}}function Js(s){if(typeof s!="string"||!s.startsWith("/")||s.includes("\0")||s.length>8192)throw new TypeError("Filesystem policy paths must be absolute paths without NUL bytes.");const e=[];for(const t of s.split("/"))t===".."?e.pop():t&&t!=="."&&e.push(t);return`/${e.join("/")}`}function Xs(s,e){return e==="/"||s===e||s.startsWith(`${e}/`)}function Gr(s){throw Object.assign(new Error(`EACCES: process filesystem policy denies mutation of '${s}'`),{code:"EACCES",path:s})}class Vo{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"),qs=40,gr=4096;function jo(s,e,t){if(s.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),s.writeFileSync(t,n)}function ur(s,e){if(s.linkTargetSync)return s.linkTargetSync(e,j.byteLength,j.byteLength+gr,Zs);if(!s.existsSync(e))return;const t=s.statSync(e);if(!t.isFile()||t.size<j.byteLength||t.size>j.byteLength+gr)return;if(s.readRangeSync){const n=s.readRangeSync(e,0,j.byteLength);for(let i=0;i<j.byteLength;i+=1)if(n[i]!==j[i])return}const r=s.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,Qs(r)))}}function Zs(s){if(!(s.byteLength<j.byteLength)){for(let e=0;e<j.byteLength;e+=1)if(s[e]!==j[e])return;return new TextDecoder("utf-8",{fatal:!0}).decode(s.slice(j.byteLength,Qs(s)))}}function Qs(s){const e=s.indexOf(0,j.byteLength);return e<0?s.byteLength:e}function Go(s,e,t=!0){if(s.linkTargetSync&&Jo(e))return Ko(s,e,t);let r=e;for(let n=0;n<qs;n+=1){const i=r.split("/").filter(Boolean);let o=!1;for(let a=0;a<i.length&&!(!t&&a===i.length-1);a+=1){const h=`/${i.slice(0,a+1).join("/")}`,y=ur(s,h);if(y===void 0)continue;const m=`/${i.slice(0,a).join("/")}`,g=y.startsWith("/")?wt(y):wt(`${m}/${y}`);r=wt(`${g}/${i.slice(a+1).join("/")}`),o=!0;break}if(!o)return r}throw Sr("ELOOP")}function Ko(s,e,t){let r=e;for(let n=0;n<qs;n+=1){let i=!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?s.linkTargetSync(y,j.byteLength,j.byteLength+gr,Zs,!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)}`),i=!0;break}if(h)break;o=a+1}if(!i)return r}throw Sr("ELOOP")}function Jo(s){if(s.charCodeAt(0)!==47)return!1;if(s.length===1)return!0;let e=1;for(let t=1;t<=s.length;t+=1){const r=t<s.length?s.charCodeAt(t):47;if(r===92)return!1;if(r!==47)continue;const n=t-e;if(n===0||s.charCodeAt(e)===46&&(n===1||n===2&&s.charCodeAt(e+1)===46))return!1;e=t+1}return!0}function wt(s){const e=[];for(const t of s.replaceAll("\\","/").split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return`/${e.join("/")}`}function Sr(s){return Object.assign(new Error(s),{code:s})}const Xo=1463897161,qo=1,Zo=2,Qo=3,ea=4,Tt=5e4,cn=4096,ta=1<<24,ei=827479120;function Rt(s){return s>=Tt&&s<Tt+cn}function ra(s,e=[]){const t=new TextEncoder,r=s.map(E=>t.encode(E.path)),n=e.map(E=>t.encode(E.path));let i=12;s.forEach((E,S)=>{i+=4+r[S].byteLength+4+4+8+8+8+4+(E.directory?0:E.content.byteLength)}),e.forEach((E,S)=>{i+=16+n[S].byteLength+4+8+4});const o=new Uint8Array(i),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(ei),y(s.length),y(e.length),s.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 na(s,e){const t=new DataView(s.buffer,s.byteOffset,s.byteLength),r=new TextDecoder("utf-8",{fatal:!0});let n=0;const i=N=>{if(N<0||n+N>s.byteLength)throw Lt()},o=()=>{i(4);const N=t.getUint32(n,!0);return n+=4,N},a=()=>{i(8);const N=t.getFloat64(n,!0);return n+=8,N},h=()=>{i(8);const N=Number(t.getBigUint64(n,!0));return n+=8,N},y=N=>{i(N);const M=s.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()!==ei)throw Lt();const g=o(),A=o(),E=[];for(let N=0;N<g;N+=1){const M=m(),F=o()===1,T=o(),J=a(),me=a(),te=h(),re=y(o());E.push({path:M,directory:F,mode:T,atimeMs:J,mtimeMs:me,ino:te,content:re})}const S=[];for(let N=0;N<A;N+=1){const M=o(),F=o(),T=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:T,path:J,flags:me,position:te,directory:re})}if(n!==s.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 ws=!1;const Kr=-100,De=3,ps=1,sa=2,Jr=64,ia=128,oa=512,Ot=1024,aa=2048,ca=65536,Xr=0,gs=1,Ss=2,bs=524288,qr=5,da=6,Es=7,fr=36,fa=37,As=38,Zr=2,ks=0,Is=1,ha=1,la=2,ua=4,ya=8,ut=256,Ns=512,ma=0x3fffffffn,wa=0x3ffffffen,pa=32768,ga=16384,Sa=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 Ks),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?Ho({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,i)=>t.writeRangeSync(this.assertWritable(r),n,i)}:{},...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,i)=>t.utimesSync(this.assertWritable(r),n,i)}:{},...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 Vo(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,i)=>this.preadv(Number(e),Number(t),Number(r),Ms(n,i)),SYS_pwritev:(e,t,r,n,i)=>this.pwritev(Number(e),Number(t),Number(r),Ms(n,i)),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&~bs)!==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),Aa(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)===Xo?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=[],i=[];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}i.push(`${o}=${a}`)}return n.length>0&&!ws&&(ws=!0,console.warn(`[WALI] environment entries a process cannot receive were dropped: ${n.join(", ")}`)),this.options.filesystem.writeFileSync(r,`${i.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 i=this.fs();return i.readRangeSync?i.readRangeSync(n.path,t,r):i.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 i=this.fs().readFileSync(e),o=new Uint8Array(Math.max(i.byteLength,t+r.byteLength));return o.set(i),o.set(r,t),this.fs().writeFileSync(e,o),!0}catch{return!1}}markCloseOnExecNumber(e,t){return t&bs&&(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(i=>this.descriptors.get(i)).forEach((i,o)=>{i&&t[o]!==o&&r.set(o,i)}),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 i=0;return t&1&&n===0&&this.stdin.poll()&&(i|=1),t&4&&n!==0&&(i|=4),i}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 i=e;i<r;i+=1){const o=t[i];if(o>=128)return Na.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(i){return Y(i)}}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 i=n.linkTargetSync?ka(n,e):n.existsSync(e)?n.statSync(e):void 0;const o=i!==void 0;if(((t&De)!==0||!o&&t&Jr)&&this.assertWritable(e),!o&&!(t&Jr))throw x("ENOENT");if(o&&t&Jr&&t&ia)throw x("EEXIST");o||(n.writeFileSync(e,new Uint8Array),n.chmodSync?.(e,r&4095),this.options.fileLocks?.created?.(e),i=n.statSync(e));const a=i;if(t&ca&&!a.isDirectory())throw x("ENOTDIR");if(a.isDirectory()&&(t&De)!==0)throw x("EISDIR");const h=(t&oa)!==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)&aa&&!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 i=this.files.get(e);if(!i)throw x("EBADF");if(i.directory)throw x("EISDIR");if((i.flags&De)===ps)throw x("EBADF");const o=this.fs(),a=o.viewRangeSync?o.viewRangeSync(i.path,i.position,r):o.readRangeSync?o.readRangeSync(i.path,i.position,r):o.readFileSync(i.path).subarray(i.position,i.position+r);return this.copyIn(t,a),i.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 i=this.specialDescriptors.get(e);if(i)return i.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 i=this.files.get(e);if(!i)return-9n;if(i.directory||!Number.isSafeInteger(n)||n<0)return-22n;const o=i.position;i.position=n;try{return this.read(e,t,r)}finally{i.position=o}}pwrite(e,t,r,n){const i=this.files.get(e);if(!i)return-9n;if(i.directory||!Number.isSafeInteger(n)||n<0)return-22n;const o=i.position,a=i.flags;i.position=n,i.flags&=~Ot;try{return this.write(e,t,r)}finally{i.position=o,i.flags=a}}preadv(e,t,r,n){const i=this.files.get(e);if(!i)return-9n;if(i.directory||!Number.isSafeInteger(n)||n<0)return-22n;const o=i.position;i.position=n;try{return this.readv(e,t,r)}finally{i.position=o}}pwritev(e,t,r,n){const i=this.files.get(e);if(!i)return-9n;if(i.directory||!Number.isSafeInteger(n)||n<0)return-22n;const o=i.position,a=i.flags;i.position=n,i.flags&=~Ot;try{return this.writev(e,t,r)}finally{i.position=o,i.flags=a}}readv(e,t,r){let n=0n;for(let i=0;i<r;i+=1){const o=t+i*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 i=0;i<r;i+=1){const o=t+i*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 i=[".","..",...this.fs().readdirSync(n.path)];let o=0;for(;n.position<i.length;){const a=i[n.position],h=new TextEncoder().encode(a),y=Ea(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 i=r===Xr?0:r===gs?n.position:r===Ss?this.fs().statSync(n.path).size:void 0;if(i===void 0||!Number.isSafeInteger(t)||i+t<0||!Number.isSafeInteger(i+t))throw x("EINVAL");return n.position=i+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 i=n.readFileSync(r.path);if(i.byteLength===t)return 0n;const o=new Uint8Array(t);return o.set(i.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),i=this.fs();if(!i.linkTargetSync&&!i.existsSync(n))throw x("ENOENT");const o=r?this.readSymlink(n):void 0;return hr(this.memoryView(),t,o===void 0?r&&i.lstatSync?i.lstatSync(n):i.statSync(n):Os(o)),0n}catch(n){return Y(n)}}statAt(e,t,r,n){try{if(n&~ut)throw x("EINVAL");const i=!!(n&ut),o=this.resolveFilesystemPath(this.resolveAt(e,t),!i),a=this.fs();if(!a.linkTargetSync&&!a.existsSync(o))throw x("ENOENT");const h=i?this.readSymlink(o):void 0;return hr(this.memoryView(),r,h===void 0?a.statSync(o):Os(h)),0n}catch(i){return Y(i)}}fstat(e,t){try{if(this.stdioFd(e)!==void 0)return hr(this.memoryView(),t,Ia()),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 i=this.resolveFilesystemPath(this.resolveAt(e,t),!(n&ut));return this.fs().existsSync(i)?(this.fs().chmodSync?.(i,r&4095),0n):-2n}catch(i){return Y(i)}}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 xs(this.memoryView(),t),0n}catch(r){return Y(r)}}fstatfs(e,t){return this.hasFd(e)?(xs(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&~Ns)throw x("EINVAL");const n=this.resolveFilesystemPath(this.resolveAt(e,t),!1);return r&Ns?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 i=this.fs();if(i.existsSync(r)){if(r===n)return;const o=i.statSync(r).isDirectory();if(o&&n.startsWith(`${r}/`))throw x("EINVAL");if(i.existsSync(n)){const a=i.statSync(n).isDirectory();if(o&&!a)throw x("ENOTDIR");if(!o&&a)throw x("EISDIR");if(o&&i.readdirSync(n).length>0)throw x("ENOTEMPTY")}}i.renameSync(r,n)})}utimensat(e,t,r,n){try{if(n&~ut)throw x("EINVAL");const i=t===0?this.files.get(e):void 0;if(t===0&&!i)throw x("EBADF");const o=i?.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),T=this.memoryView().getBigInt64(M+8,!0);if(T===ma)return m;if(T===wa)return N;if(T<0||T>=1000000000n)throw x("EINVAL");const J=Number(F)*1e3+Number(T)/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(i){return Y(i)}}readlink(e,t,r,n){try{if(!Number.isSafeInteger(r)||r<0)throw x("EINVAL");const i=this.resolveAt(n,e);if(this.privateTree&&xt(i,this.privateTree.root))throw x("EREMOTE");let o;i==="/proc/self/exe"&&(o=this.options.executablePath??"/usr/bin/wali-program");const a=/^\/proc\/self\/fd\/(\d+)$/u.exec(i);if(!o&&a){const y=this.files.get(Number(a[1]));y&&(o=y.path)}if(o??=this.readSymlink(i),!o)return this.fs().existsSync(i)?-22n:-2n;const h=new TextEncoder().encode(o).subarray(0,r);return this.copyIn(t,h),BigInt(h.byteLength)}catch(i){return Y(i)}}symlink(e,t,r){try{const n=this.resolveFilesystemPath(this.resolveAt(r,t),!1);return jo(this.fs(),e,n),0n}catch(n){return Y(n)}}resolveFilesystemPath(e,t=!0){const r=Go(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,i=this.stdioFd(e);if(i!==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,i)),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 i=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===da||t===Es||t===fa||t===As?i?this.recordLock(i,t,r):-9n:-22n}recordLock(e,t,r){try{const n=this.readRecordLock(e,r),i=t>=fr?"ofd":"posix",o=this.lockOwner(i,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:i,path:e.path,range:n.range}).result);if(t===qr||t===fr){const m=a.request({operation:"query",owner:o,namespace:i,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===Es||t===As,y=a.request({operation:"set",owner:o,namespace:i,path:e.path,range:n.range,mode:n.mode,pid:this.options.pid??1,blocking:h}).result;return y>=0&&this.heldLock(i,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),i=r.getInt16(t+2,!0),o=Ls(r.getBigInt64(t+8,!0)),a=Ls(r.getBigInt64(t+16,!0)),h=i===Xr?0:i===gs?e.position:i===Ss?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===ks?"read":n===Is?"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 i=this.memoryView();i.setInt16(e,t==="read"?ks:Is,!0),i.setInt16(e+2,Xr,!0),i.setBigInt64(e+8,BigInt(r.start),!0),i.setBigInt64(e+16,BigInt(r.end===void 0?0:r.end-r.start),!0),i.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,i=this.lockOwner("flock",r);if(!n||!i)return 0n;if(t&ya)return BigInt(n.request({operation:"unlock",owner:i,namespace:"flock",path:r.path,range:{start:0}}).result);const o=t&la?"write":t&ha?"read":void 0;if(!o||t&-16)return-22n;const a=n.request({operation:"set",owner:i,namespace:"flock",path:r.path,range:{start:0},mode:o,pid:this.options.pid??1,blocking:!(t&ua)}).result;return a>=0&&this.heldLock("flock",i,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},i=n();return i!==0||r===0?BigInt(i):(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:ps:this.files.get(e)?.flags??sa}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===Zo)return this.releasePrivateTree(t,r);if(e===Qo)return this.confirmPrivateTree();if(e===ea){const n=this.privateTree?.handed;if(!n)return-22n;const i=this.fs();for(const o of n)i.existsSync(o.path)||(i.restoreNodeSync?i.restoreNodeSync(o.path,o):(o.directory?i.mkdirSync(o.path,{recursive:!0}):i.writeFileSync(o.path,o.content),i.chmodSync?.(o.path,o.mode&4095),i.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 i=this.fs();for(let F=0;F<this.descriptors.entries.length;F+=1){const T=this.files.get(F);if(T&&xt(T.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(i.existsSync(n)&&(!i.statSync(n).isDirectory()||ur(i,n)!==void 0))return r(`${n} is not a directory`);i.existsSync(n)||i.mkdirSync(n,{recursive:!0});const o=[],a=F=>{const T=i.statSync(F),J=T.isDirectory();if(o.push({path:F,directory:J,mode:T.mode??(J?493:420),atimeMs:T.atimeMs??T.mtimeMs??0,mtimeMs:T.mtimeMs??0,ino:T.ino??1,content:J?new Uint8Array:i.readFileSync(F)}),J)for(const me of i.readdirSync(F))a(`${F==="/"?"":F}/${me}`)};a(n);const h=ra(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=i.reserveInodes?.(ta)??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:i}=na(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 i){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 Ms(s,e){return Number(e===void 0?s:(BigInt(e)&0xffffffffn)<<32n|BigInt(s)&0xffffffffn)}function xt(s,e){return s===e||s.startsWith(e==="/"?"/":`${e}/`)}function yt(s,e){if(!e)return s;if(ba(e))return e;const t=[],r=e.startsWith("/")?e:`${s}/${e}`;for(const n of r.replaceAll("\\","/").split("/"))!n||n==="."||(n===".."?t.pop():t.push(n));return`/${t.join("/")}`}function ba(s){if(s.charCodeAt(0)!==47)return!1;if(s.length===1)return!0;let e=1;for(let t=1;t<=s.length;t+=1){const r=t<s.length?s.charCodeAt(t):47;if(r===92)return!1;if(r!==47)continue;const n=t-e;if(n===0||s.charCodeAt(e)===46&&(n===1||n===2&&s.charCodeAt(e+1)===46))return!1;e=t+1}return!0}function Ea(s,e){return Math.ceil(s/e)*e}function Aa(s){return Number(BigInt.asIntN(32,typeof s=="bigint"?s:BigInt(s)))}function Ls(s){const e=Number(s);if(!Number.isSafeInteger(e))throw x("EINVAL");return e}function pe(s,e,t){if(!Number.isSafeInteger(e)||!Number.isSafeInteger(t)||e<0||t<0||e+t>s.buffer.byteLength)throw new WebAssembly.RuntimeError("WALI filesystem memory access is out of bounds.")}function ka(s,e){try{return s.statSync(e)}catch(t){if(/\bENOENT\b/u.test(t instanceof Error?t.message:String(t)))return;throw t}}function hr(s,e,t){if(e<0||e+144>s.byteLength)throw new WebAssembly.RuntimeError("WALI stat pointer is out of bounds.");Oe(s,e,t.dev??1),Oe(s,e+8,t.ino??1),Oe(s,e+16,t.nlink??1);const r=t.isSymbolicLink?.()?Sa:t.isDirectory()?ga:pa;s.setUint32(e+24,r|(t.mode??(t.isDirectory()?493:420)),!0),s.setUint32(e+28,t.uid??1e3,!0),s.setUint32(e+32,t.gid??1e3,!0),s.setUint32(e+36,0,!0),Oe(s,e+40,t.rdev??0),Oe(s,e+48,t.size),Oe(s,e+56,t.blksize??4096),Oe(s,e+64,t.blocks??Math.ceil(t.size/512)),Qr(s,e+72,t.atimeMs??t.mtimeMs??ee()),Qr(s,e+88,t.mtimeMs??ee()),Qr(s,e+104,t.ctimeMs??t.mtimeMs??ee());for(let n=120;n<144;n+=4)s.setUint32(e+n,0,!0)}function Oe(s,e,t){s.setUint32(e,t>>>0,!0),s.setUint32(e+4,Math.floor(t/4294967296)>>>0,!0)}function Os(s){return{isFile:()=>!1,isDirectory:()=>!1,isSymbolicLink:()=>!0,size:new TextEncoder().encode(s).byteLength,mode:511}}function xs(s,e){if(e<0||e+120>s.byteLength)throw new WebAssembly.RuntimeError("WALI statfs pointer is out of bounds.");for(let t=0;t<120;t+=4)s.setUint32(e+t,0,!0);s.setBigInt64(e,0x01021994n,!0),s.setBigInt64(e+8,4096n,!0),s.setBigUint64(e+16,262144n,!0),s.setBigUint64(e+24,196608n,!0),s.setBigUint64(e+32,196608n,!0),s.setBigUint64(e+40,1048576n,!0),s.setBigUint64(e+48,1048000n,!0),s.setBigUint64(e+64,255n,!0),s.setBigUint64(e+72,4096n,!0)}function Qr(s,e,t){const r=Math.floor(t/1e3);Oe(s,e,r),Oe(s,e+8,Math.min(999999999,Math.floor((t-r*1e3)*1e6)))}function Ia(){return{isFile:()=>!1,isDirectory:()=>!1,size:0,mode:8630,mtimeMs:ee()}}const Na=new TextDecoder("utf-8",{fatal:!0}),Ps=new Map;function x(s){let e=Ps.get(s);return e||(e=Object.assign(new Error(s),{errnoName:s}),Ps.set(s,e)),e}const Ma={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(s){const t=(typeof s=="object"&&s!==null?"errnoName"in s?String(s.errnoName):"code"in s?String(s.code):void 0:void 0)??/\b(E[A-Z]+)\b/u.exec(s instanceof Error?s.message:String(s))?.[1]??"",r=Ma;if(t in r)return-r[t];if(s instanceof WebAssembly.RuntimeError||s instanceof RangeError)throw s;return-5n}const _s=-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:_s};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:_s};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 i=JSON.parse(this.decoder.decode(this.payload.slice(0,n)));return!i||!Number.isSafeInteger(i.result)?{result:-5}:i}finally{Atomics.store(this.control,0,0)}}}var Ue;(function(s){s[s.Inspect=1]="Inspect",s[s.Read=2]="Read",s[s.WriteStart=3]="WriteStart",s[s.WriteChunk=4]="WriteChunk",s[s.WriteFinish=5]="WriteFinish",s[s.Remove=6]="Remove"})(Ue||(Ue={}));const lr=512*1024,Ts=256*1024*1024,Rs=5,La=new TextEncoder,Oa=new TextDecoder("utf-8",{fatal:!0});class xa{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,Ts),n=new Uint8Array(r);for(let i=0;i<r;i+=lr){const o=Math.min(lr,r-i),a=this.call(Ue.Read,{path:e,offset:i,length:o}),h=ze(a.content);if(h.byteLength!==o)throw new Error("Invalid coherent file response.");n.set(h,i)}return{bytes:n,...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},parents:ti(e,t.parents)}}push(e,t){if(!t){this.call(Ue.Remove,{path:e});return}if(t.bytes.byteLength>Ts)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,Rs))throw Object.assign(new Error("Browser file coherence was cancelled."),{errno:125})};r();const n=La.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 i=this.nextRequestId;this.nextRequestId=i>=1073741821?1:i+2,this.control.fill(0,0,Rs),this.payload.set(n),Atomics.store(this.control,1,e),Atomics.store(this.control,3,n.byteLength),Atomics.store(this.control,0,i);try{for(this.channel.port.postMessage(i);Atomics.load(this.control,0)!==i+1;){r();const y=Atomics.load(this.control,0);y!==i+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(Oa.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 vs(s){const e=s.replace(/-(?:journal|shm|wal)$/u,"");return[e,`${e}-journal`,`${e}-wal`,`${e}-shm`]}function Pa(s,e){return ln(e).flatMap(t=>{if(!s.existsSync(t))return[];const r=s.statSync(t);if(!r.isDirectory())throw Pe("A coherent file parent must be a directory.");return[{path:t,...ri({mode:r.mode,mtimeMs:r.mtimeMs})}]})}function _a(s,e,t){const r=new Map(ti(e,t).map(n=>[n.path,n]));for(const n of ln(e)){if(s.existsSync(n)){if(!s.statSync(n).isDirectory())throw Pe("A coherent file parent must be a directory.");continue}s.mkdirSync(n);const i=r.get(n);i?.mode!==void 0&&s.chmodSync?.(n,i.mode),i?.mtimeMs!==void 0&&s.utimesSync?.(n,new Date(i.mtimeMs),new Date(i.mtimeMs))}}function ti(s,e){if(e===void 0)return[];const t=new Set(ln(s));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,i=ni(n.path);if(!t.delete(i))throw Pe("Coherent metadata must name distinct ancestors of its file.");return{path:i,...ri(n)}})}function ln(s){const e=[];for(const t of ni(s).split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return e.slice(0,-1).map((t,r)=>`/${e.slice(0,r+1).join("/")}`)}function ri(s){const e=s.mode===void 0?void 0:dn(s.mode,0,65535),t=s.mtimeMs===void 0?void 0:Ra(s.mtimeMs);return{...e===void 0?{}:{mode:e},...t===void 0?{}:{mtimeMs:t}}}function ni(s){const e=Ta(s);if(!e.startsWith("/")||e.length>4096||e.includes("\0"))throw Pe("Invalid coherent file path.");return e}function Ta(s){if(typeof s!="string")throw Pe("Expected a string.");return s}function dn(s,e,t){if(!Number.isSafeInteger(s)||s<e||s>t)throw Pe("Expected a bounded integer.");return s}function Ra(s){if(typeof s!="number"||!Number.isFinite(s))throw Pe("Expected a finite number.");return s}function Pe(s){return Object.assign(new Error(s),{errno:22})}class va{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 i=!this.held.some(a=>a.path===e.path),o=this.locks.request(e);if(o.result<0)return o;if(i)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 i=this.without(e.owner,e.namespace,e.path,e.range);this.held.some(a=>a.path===e.path)&&!i.some(a=>a.path===e.path)&&this.publish(e.path);const o=this.locks.request(e);return o.result>=0&&this.replaceHeld(i),o}const t=this.held.filter(i=>i.owner!==e.owner),r=new Set(this.held.filter(i=>i.owner===e.owner).map(i=>i.path));for(const i of r)t.some(o=>o.path===i)||this.publish(i);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 vs(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 vs(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:Pa(this.filesystem,e)}}writeLocal(e,t){if(!t){this.filesystem.existsSync(e)&&!this.filesystem.statSync(e).isDirectory()&&this.filesystem.unlinkSync(e);return}_a(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 i=this.without(e,t,r,n);i.push({owner:e,namespace:t,path:r,...n}),this.replaceHeld(i)}without(e,t,r,n){return this.held.flatMap(i=>i.owner===e&&i.namespace===t&&i.path===r&&Fa(i,n)?Da(i,n):[i])}replaceHeld(e){this.held.splice(0,this.held.length,...e)}}function Fa(s,e){return s.start<(e.end??Number.POSITIVE_INFINITY)&&e.start<(s.end??Number.POSITIVE_INFINITY)}function Da(s,e){const t=[];s.start<e.start&&t.push({...s,end:e.start});const r=s.end??Number.POSITIVE_INFINITY,n=e.end??Number.POSITIVE_INFINITY;return n<r&&t.push({...s,start:n,...s.end===void 0?{}:{end:s.end}}),t}const Fs=1024*1024;var v;(function(s){s[s.Exists=1]="Exists",s[s.Stat=2]="Stat",s[s.Lstat=3]="Lstat",s[s.ReadFile=4]="ReadFile",s[s.WriteFile=5]="WriteFile",s[s.Mkdir=6]="Mkdir",s[s.Readdir=7]="Readdir",s[s.Unlink=8]="Unlink",s[s.Rmdir=9]="Rmdir",s[s.Rename=10]="Rename",s[s.Snapshot=11]="Snapshot",s[s.ReplaceSnapshot=12]="ReplaceSnapshot",s[s.Syscall=13]="Syscall",s[s.ReadForMapping=14]="ReadForMapping",s[s.SnapshotSize=15]="SnapshotSize",s[s.SnapshotChunk=16]="SnapshotChunk",s[s.ReplaceSnapshotStart=17]="ReplaceSnapshotStart",s[s.ReplaceSnapshotChunk=18]="ReplaceSnapshotChunk",s[s.MappingPath=19]="MappingPath",s[s.WriteForMapping=20]="WriteForMapping",s[s.FinalSnapshotSize=21]="FinalSnapshotSize",s[s.ImportPeerPatch=22]="ImportPeerPatch",s[s.ImportPeerPatchStart=23]="ImportPeerPatchStart",s[s.ImportPeerPatchChunk=24]="ImportPeerPatchChunk",s[s.PrepareSpawn=25]="PrepareSpawn",s[s.ReadRange=26]="ReadRange",s[s.WriteRange=27]="WriteRange",s[s.CopyForExec=28]="CopyForExec",s[s.CloseProcess=29]="CloseProcess",s[s.CopyForFork=30]="CopyForFork",s[s.GetCwd=31]="GetCwd",s[s.SyscallBinary=32]="SyscallBinary",s[s.ReadForMappingBinary=33]="ReadForMappingBinary",s[s.WriteForMappingBinary=34]="WriteForMappingBinary"})(v||(v={}));const Ba=`${eo}/.volter-tree-complete`;async function Ca(s,e){const t=an(s);try{if((await t.initialize(e,{readOnly:!0})||t.opened())&&t.entries.has(Ba))return t}catch(r){throw t.close(),r}t.close()}const Ds=new WeakMap;async function $a(s,e){const t=[...new Set((s??[]).flatMap(o=>o.store===void 0?[]:[o.store]))];if(t.length===0)return;e??={navigator:globalThis.navigator};const r=e;let n=Ds.get(r.navigator);n||Ds.set(r.navigator,n=new Map);const i=new Map;for(const o of t){let a=n.get(o);a||(a=ro(o,r.navigator.locks).then(()=>Ca(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.`);i.set(o,h)}return i}let B=new et,tn,si,mt,ii;const ye=new Map;let Ua=1,fn,hn,vt;const oi=new TextEncoder,kr=new TextDecoder,yr=[],za=new Set;let Bs=!1,rn=0,Pt=[];const Er=Symbol("retry");async function Ya(s){const e={data:s};yr.length=0,za.clear(),Bs=!1,rn=0,Pt=(s.privateRoots??[]).map(Ja);{fn=void 0,hn=void 0;const t=await $a(s.layers);if(s.store){if(tn=await uo({navigator:globalThis.navigator},s.store.projectId),!tn)throw new Error("The project's store is not there to read.");B=et.fromStore(jn(tn,s.layers,t),s.snapshot)}else s.layers?B=et.fromStore(jn(void 0,s.layers,t),s.snapshot):B=et.fromSnapshot(s.snapshot);vt=(n,i)=>ns(B,n,i);const r=e.data.fileLocks?new pt(e.data.fileLocks.channel):void 0;if(mt=s.sharedPipes,ii=s.memory,si=new br({...mt?{descriptors:new Ar(new Ks(mt.descriptions),mt.table)}:{},filesystem:B,...s.filesystemPolicy?{filesystemPolicy:s.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 va(r,new xa(e.data.fileCoherence),B):r,lockOwner:e.data.fileLocks.owner}:{}}),e.data.updatePort){let n;const i=e.data.updatePort;i.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=>Xa(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)&&(i.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(i.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,i.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=Ys(B,N);M?S.set(N,M):S.delete(N)}E={files:[...S.values()]}}ns(B,g,E),B.takeChangedPaths(),i.postMessage({type:"imported",patch:g})}finally{y=!1}},i.onmessage=g=>{if(!(g.data.type!=="import"||m||Bs)){rn=g.data.sequence??rn;try{vt(g.data.patch,g.data.base)}catch(A){i.postMessage({type:"import-error",message:A instanceof Error?A.message:String(A)})}}},B.setMutationHandler(()=>{y||m||(n??=setTimeout(a,0))})}}}function ai(s){const e=new Int32Array(s.control),t=new Uint8Array(s.payload),r={process:s.process??0};if(yr.push({control:e,payload:t,state:r}),s.releasePort){const n=s.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&&s.sharedPipes){const n=ye.get(r.process).descriptors.descriptors;n.sharedEntries=new Int32Array(s.sharedPipes.table),n.entries.forEach((i,o)=>{i&&Atomics.store(n.sharedEntries,o,i.description)})}return s.port.onmessage=n=>{if(typeof n.data!="number"&&"kind"in n.data){ai({...n.data,process:n.data.process??r.process});return}if(typeof n.data!="number"){const i=ye.get(r.process);if(!i)throw new Error("Unknown inherited descriptor table");i.memory=n.data.memory;return}Wa(e,t,r,n.data)},s.port.start(),yr[yr.length-1]}async function Wa(s,e,t,r){if(Atomics.load(s,0)!==r)return;let n=-38,i=new Uint8Array;try{const o=Atomics.load(s,1);if(o===v.SyscallBinary){const A=Va(e,t);if(A===Er)return;const E=BigInt(A instanceof Promise?await A:A);if(Atomics.compareExchange(s,0,r,-r)!==r)return;(t.view??=new DataView(e.buffer,e.byteOffset,e.byteLength)).setBigInt64(0,E,!0),Atomics.store(s,2,0),Atomics.store(s,4,8),Atomics.store(s,0,r+1),Atomics.notify(s,0);return}const a=Ka(o,e,t);if(a){if(a.output.byteLength>e.byteLength)throw Object.assign(new Error("EMSGSIZE"),{code:"EMSGSIZE"});if(Atomics.compareExchange(s,0,r,-r)!==r)return;e.set(a.output),Atomics.store(s,2,a.result),Atomics.store(s,4,a.output.byteLength),Atomics.store(s,0,r+1),Atomics.notify(s,0);return}const h=Atomics.load(s,3),y=h>0?JSON.parse(kr.decode(e.slice(0,h))):{},m=Ha(o,y,t);if(m===Er)return;const g=m instanceof Promise?await m:m;i=g===void 0?new Uint8Array:oi.encode(JSON.stringify(g)),n=0}catch(o){n=Ga(o)}i.byteLength>e.byteLength&&(n=-90,i=new Uint8Array),Atomics.compareExchange(s,0,r,-r)===r&&(i.byteLength>0&&e.set(i),Atomics.store(s,2,n),Atomics.store(s,4,i.byteLength),Atomics.store(s,0,r+1),Atomics.notify(s,0))}function un(){return si}function Ha(s,e,t){const r=t.process===0?un():ye.get(t.process)?.descriptors;if(s===v.GetCwd)return r?.currentWorkingDirectory();if(s===v.CopyForExec||s===v.CopyForFork){if(!r)throw new Error("Missing parent descriptor table");const i={descriptors:r[s===v.CopyForFork?"copyForFork":"copyForExec"](()=>{if(!i.memory)throw new Error("Child memory is not attached");return i.memory},Array.isArray(e.stdio)?e.stdio.map(oe):void 0)},o=Ua++;return ye.set(o,i),{process:o}}if(s===v.CloseProcess){r?.descriptors.exit(),t.process!==0&&ye.delete(t.process);return}const n=()=>ge(e.path);if(s===v.PrepareSpawn){hn?.();return}if(s===v.ImportPeerPatch){vt(e.patch);return}if(s===v.Exists)return B.existsSync(n());if(s===v.Stat||s===v.Lstat){const i=s===v.Lstat?B.lstatSync(n()):B.statSync(n());return{file:i.isFile(),directory:i.isDirectory(),symbolicLink:i.isSymbolicLink?.(),size:i.size,mode:i.mode,mtimeMs:i.mtimeMs,atimeMs:i.atimeMs,ctimeMs:i.ctimeMs,nlink:i.nlink,uid:i.uid,gid:i.gid,dev:i.dev,ino:i.ino,rdev:i.rdev,blksize:i.blksize,blocks:i.blocks}}if(s===v.ReadFile)return{content:xe(B.readFileSync(n()))};if(s===v.WriteFile){B.writeFileSync(n(),ze(ge(e.content)));return}if(s===v.ReadRange){const i=oe(e.offset),o=oe(e.length),a=B.readRangeSync?B.readRangeSync(n(),i,o):B.readFileSync(n()).subarray(i,i+o);return{content:xe(a)}}if(s===v.WriteRange){const i=oe(e.offset),o=ze(ge(e.content));if(B.writeRangeSync)B.writeRangeSync(n(),i,o);else{const a=B.existsSync(n())?B.readFileSync(n()):new Uint8Array,h=new Uint8Array(Math.max(a.byteLength,i+o.byteLength));h.set(a),h.set(o,i),B.writeFileSync(n(),h)}return}if(s===v.Mkdir){B.mkdirSync(n(),{recursive:e.recursive===!0});return}if(s===v.Readdir)return B.readdirSync(n());if(s===v.Unlink){B.unlinkSync(n());return}if(s===v.Rmdir){B.rmdirSync(n());return}if(s===v.Rename){B.renameSync(ge(e.from),ge(e.to));return}if(s===v.Snapshot)return B.toSnapshot();if(s===v.SnapshotSize||s===v.FinalSnapshotSize)return s===v.FinalSnapshotSize&&fn?.(),t.snapshot=oi.encode(JSON.stringify(B.toSnapshot())),{length:t.snapshot.byteLength};if(s===v.SnapshotChunk){const i=oe(e.offset),o=oe(e.length);if(!t.snapshot||i<0||o<0||o>Fs||i+o>t.snapshot.byteLength)throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});const a=xe(t.snapshot.subarray(i,i+o));return i+o===t.snapshot.byteLength&&delete t.snapshot,{content:a}}if(s===v.ReplaceSnapshot){B.replaceSnapshot(e.snapshot);return}if(s===v.ReplaceSnapshotStart||s===v.ImportPeerPatchStart){const i=oe(e.length);if(i<=0||i>256*1024*1024)throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});t.replacement={bytes:new Uint8Array(i),offset:0,peerPatch:s===v.ImportPeerPatchStart};return}if(s===v.ReplaceSnapshotChunk||s===v.ImportPeerPatchChunk){const i=oe(e.offset),o=ze(ge(e.content)),a=t.replacement;if(!a||a.peerPatch!==(s===v.ImportPeerPatchChunk)||i!==a.offset||o.byteLength>Fs||i+o.byteLength>a.bytes.byteLength)throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});if(a.bytes.set(o,i),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(s===v.Syscall){if(!r)throw Object.assign(new Error("EIO"),{code:"EIO"});const i=ge(e.name),o=ci(t,r)[i];if(!o)throw Object.assign(new Error("ENOSYS"),{code:"ENOSYS"});const a=Array.isArray(e.args)?e.args.map(y=>BigInt(ge(y))):[],h=di(i,o,a);return h===Er?Er:h instanceof Promise?h.then(y=>({result:String(y)})):{result:String(h)}}if(s===v.ReadForMapping){if(!r)throw Object.assign(new Error("EIO"),{code:"EIO"});const i=r.readForMapping(oe(e.fd),oe(e.offset),oe(e.length));return i?{content:xe(i)}:{}}if(s===v.MappingPath){if(!r)throw Object.assign(new Error("EIO"),{code:"EIO"});const i=r.mappingPath(oe(e.fd));return i?{path:i}:{}}if(s===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 ci(s,e){const t=e.descriptors,r=s.handlers;if(r&&r.table===e&&r.entries===t.sharedEntries.buffer)return r.imports;const n=mt&&new Yo(()=>s.process===0?ii:ye.get(s.process).memory,{...mt,table:t.sharedEntries.buffer},t),i=n?n.imports(e.imports()):e.imports();return s.handlers={table:e,entries:t.sharedEntries.buffer,imports:i},i}function Va(s,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(s.buffer,s.byteOffset,s.byteLength),n=s[0],i=kr.decode(s.slice(8+n*8,8+n*8+s[1])),o=[];for(let h=0;h<n;h+=1)o.push(r.getBigInt64(8+h*8,!0));const a=ci(e,t)[i];if(!a)throw Object.assign(new Error("ENOSYS"),{code:"ENOSYS"});return di(i,a,o)}function di(s,e,t){let r;if(s==="SYS_flock"){const n=Number(t[1]??0);(n&4)===0&&(n&8)===0&&(r=[...t],r[1]=BigInt(n|4))}else if(s==="SYS_fcntl"){const n=Number(t[1]??0);(n===7||n===38)&&(r=[...t],r[1]=BigInt(n===7?6:37))}return r?ja(e,r):e(...t)??0}async function ja(s,e){for(;;){const t=s(...e)??0;if(BigInt(t)!==-11n)return t;await new Promise(r=>setTimeout(r,5))}}function ge(s){if(typeof s!="string")throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});return s}function oe(s){if(typeof s!="number"||!Number.isSafeInteger(s))throw Object.assign(new Error("EINVAL"),{code:"EINVAL"});return s}function Ga(s){const e=s instanceof Error?s.message:String(s),t=typeof s=="object"&&s!==null&&"code"in s?String(s.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 Ka(s,e,t){if(s!==v.ReadForMappingBinary&&s!==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(s===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 i=n.getUint32(8,!0),o=n.getUint32(12,!0),a=kr.decode(e.slice(16,16+i)),h=r.writeForMapping(a,n.getFloat64(0,!0),e.slice(16+i,16+i+o));return{result:0,output:new Uint8Array([h?1:0])}}function Ja(s){return`/${s.split("/").filter(Boolean).join("/")}`}function Xa(s,e){return e==="/"||s===e||s.startsWith(`${e}/`)}const nn=globalThis;nn.onmessage=s=>{if(s.data.kind==="initialize"){Ya(s.data).then(()=>nn.postMessage({kind:"ready"}),e=>nn.postMessage({kind:"error",message:e instanceof Error?e.message:String(e)}));return}ai(s.data)};
|