@wasm-oj/browser 0.2.5 → 0.2.6
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.
|
@@ -389,7 +389,7 @@ _entry = _sys.argv[1]
|
|
|
389
389
|
_sys.argv = [_entry, *_sys.argv[2:]]
|
|
390
390
|
_sys.path[0] = _os.path.dirname(_entry)
|
|
391
391
|
_runpy.run_path(_entry, run_name="__main__")
|
|
392
|
-
`,An=new TextDecoder;async function jn(e){let t=await V(e);if(t!==`895eee17c63b1112c84adcc4ddbcb38e0c18e53bff15f50a8689b9b82d87b1ff`)throw Error(`The pinned cc1 manifest drifted from its contract: expected ${F}, received ${t}. Regenerate it with scripts/pin-clang-cc1-argv.mjs and update CLANG_CC1_PINS_SHA256.`);let n=JSON.parse(An.decode(e));if(n.schema!==j.clangPins)throw Error(`Unsupported cc1 pin schema '${n.schema}'.`);for(let e of[`input`,`output`,`mainFileName`,`objects`])if(typeof n.placeholders?.[e]!=`string`)throw Error(`The cc1 pin manifest is missing the '${e}' placeholder.`);if(!n.command||!n.linkerCommand)throw Error(`The cc1 pin manifest is missing a compiler or linker command.`);if(!n.source||!/^[a-f0-9]{64}$/.test(n.sourceSha256))throw Error(`The cc1 pin manifest is missing its source toolchain identity.`);for(let[e,t]of Object.entries(n.configs))if(!Array.isArray(t.cc1)||!Array.isArray(t.link)||t.cc1[0]!==`-cc1`)throw Error(`The cc1 pin manifest entry '${e}' is malformed.`);return n}function Mn(e,t,n,r){let i=n.slice(n.lastIndexOf(`/`)+1),a=n.startsWith(`/`)?n:`/project/${n}`;return e.map(e=>e===t.input?a:e===t.output?r:e===t.mainFileName?i:e)}function Nn(e,t,n,r){return Mn(e.map(e=>e===`-emit-obj`?`-emit-pch`:e===`c++`?`c++-header`:e),t,n,r)}function Pn(e,t,n,r){let i=[];for(let a of e)a===t.objects?i.push(...n):a===t.output?i.push(r):i.push(a);return i}const Fn=Object.freeze([`source`,`header`,`package`,`pch`,`object`,`link-result`]);var In=class{limitBytes;logical=new Map;nodes=new Map;blobs=new Map;storedBytes=0;generation=0;constructor(e){if(!Number.isSafeInteger(e)||e<=0)throw RangeError(`Incremental build graph limit must be a positive safe integer.`);this.limitBytes=e}async lookup(e,t){let n=this.logical.get(e);if(!n)return;let r=[];for(let e of n.dependencies){let n=t.get(e.identity);if(!n||n.kind!==e.kind)return;r.push(n)}return this.lookupExact(n.kind,e,r)}async lookupExact(e,t,n){let r=await Hn(e,t,(await this.internInputs(n)).map(e=>e.key)),i=this.nodes.get(r);if(!i)return;let a=this.blobs.get(i.digest);if(a)return this.blobs.delete(i.digest),this.blobs.set(i.digest,a),a.slice()}async store(e,t,n,r){if(r.byteLength>this.limitBytes)return!1;let i=zn(n),a=await this.internInputs(i),o=await Hn(e,t,a.map(e=>e.key)),s=r.slice(),c=await V(s),l=this.logical.get(t),u=l?this.nodes.get(l.nodeKey):void 0,d=!1;if(u&&(u.key!==o||u.digest!==c)){if(this.logical.delete(t),this.nodes.delete(u.key),![...this.logical.values()].some(e=>this.nodes.get(e.nodeKey)?.digest===u.digest)){let e=this.blobs.get(u.digest);e&&(this.blobs.delete(u.digest),this.storedBytes-=e.byteLength)}d=!0}d=this.ensureCapacity(s.byteLength,c)||d,this.blobs.has(c)||(this.blobs.set(c,s),this.storedBytes+=s.byteLength,d=!0);let f={key:o,kind:e,identity:t,digest:c,dependencies:a.map(e=>e.key),byteLength:s.byteLength},p={kind:e,dependencies:i.map(({kind:e,identity:t})=>({kind:e,identity:t})),nodeKey:o},m=this.nodes.get(o),h=this.logical.get(t);return(!Ln(m,f)||!Rn(h,p))&&(d=!0),this.nodes.set(o,f),this.logical.set(t,p),d&&(this.generation+=1),!0}exportState(){let e=[],t=new Set;for(let[n,r]of this.logical){let i=this.nodes.get(r.nodeKey);if(!i)continue;let a=this.blobs.get(i.digest);if(!a)continue;let o=i.dependencies.map(e=>{let t=this.nodes.get(e);if(!t)throw Error(`Build graph dependency '${e}' is missing.`);return{kind:t.kind,identity:t.identity,digest:t.digest}});e.push({kind:r.kind,logicalKey:n,inputs:o,outputDigest:i.digest,outputByteLength:a.byteLength}),t.add(i.digest)}return{manifest:{schema:j.incrementalBuildGraph,version:2,generation:this.generation,entries:e.sort((e,t)=>Bn(e.logicalKey,t.logicalKey))},blobs:[...t].sort().map(e=>({digest:e,bytes:this.blobs.get(e)}))}}async restoreState(e){if(!e||typeof e!=`object`||Array.isArray(e)||Object.keys(e).sort().join(`,`)!==`blobs,manifest`)throw Error(`Incremental build graph state does not use the active WASM-OJ contract.`);let{manifest:t}=e;if(!t||typeof t!=`object`||Array.isArray(t)||Object.keys(t).sort().join(`,`)!==`entries,generation,schema,version`||t.schema!==j.incrementalBuildGraph||t.version!==2||!Number.isSafeInteger(t.generation)||t.generation<0||!Array.isArray(t.entries)||!Array.isArray(e.blobs))throw Error(`Incremental build graph manifest does not use the active WASM-OJ contract.`);let n=new Map,r=0,i=``;for(let t of e.blobs){if(!t||typeof t!=`object`||Array.isArray(t))throw Error(`Incremental build graph state contains a malformed blob.`);let e=t;if(Object.keys(e).sort().join(`,`)!==`bytes,digest`||typeof e.digest!=`string`||!/^[0-9a-f]{64}$/.test(e.digest)||e.digest<=i||!(e.bytes instanceof Uint8Array)||await V(e.bytes)!==e.digest)throw Error(`Incremental build graph state contains an invalid content-addressed blob.`);if(i=e.digest,r+=e.bytes.byteLength,!Number.isSafeInteger(r)||r>this.limitBytes)throw Error(`Incremental build graph state exceeds its storage limit.`);n.set(e.digest,e.bytes)}let a=new Set,o=[],s=new Set,c=``;for(let e of t.entries){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Incremental build graph manifest contains a malformed entry.`);let t=e;if(Object.keys(t).sort().join(`,`)!==`inputs,kind,logicalKey,outputByteLength,outputDigest`)throw Error(`Incremental build graph manifest entry has an invalid shape.`);if(t.kind!==`pch`&&t.kind!==`object`&&t.kind!==`link-result`)throw Error(`Incremental build graph manifest entry has an invalid node kind.`);if(typeof t.logicalKey!=`string`||!t.logicalKey||t.logicalKey!==t.logicalKey.trim()||t.logicalKey.length>16384||c!==``&&Bn(c,t.logicalKey)>=0)throw Error(`Incremental build graph manifest has an invalid or non-canonical logical key.`);if(c=t.logicalKey,a.has(t.logicalKey))throw Error(`Incremental build graph manifest repeats '${t.logicalKey}'.`);if(a.add(t.logicalKey),typeof t.outputDigest!=`string`||!/^[0-9a-f]{64}$/.test(t.outputDigest)||!Number.isSafeInteger(t.outputByteLength)||t.outputByteLength<0)throw Error(`Incremental build graph output '${t.logicalKey}' has invalid metadata.`);let r=n.get(t.outputDigest);if(!r||r.byteLength!==t.outputByteLength)throw Error(`Incremental build graph output '${t.logicalKey}' is missing or has the wrong size.`);if(s.add(t.outputDigest),!Array.isArray(t.inputs))throw Error(`Incremental build graph entry '${t.logicalKey}' inputs must be an array.`);let i=t.inputs.map(e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Incremental build graph entry '${t.logicalKey}' has a malformed input.`);let n=e;if(Object.keys(n).sort().join(`,`)!==`digest,identity,kind`||!Fn.slice(0,5).includes(n.kind)||typeof n.identity!=`string`||typeof n.digest!=`string`)throw Error(`Incremental build graph entry '${t.logicalKey}' has an invalid input.`);return{kind:n.kind,identity:n.identity,digest:n.digest}});if(zn(i).some((e,t)=>e.identity!==i[t]?.identity))throw Error(`Incremental build graph entry '${t.logicalKey}' inputs are not canonical.`);o.push({kind:t.kind,logicalKey:t.logicalKey,inputs:i,output:r})}if(s.size!==n.size)throw Error(`Incremental build graph state contains an unreferenced content-addressed blob.`);this.clear();for(let e of o)if(!await this.store(e.kind,e.logicalKey,e.inputs,e.output))throw Error(`Incremental build graph entry '${e.logicalKey}' exceeds its storage limit.`);this.generation=t.generation}snapshot(){return{schema:j.incrementalBuildGraph,nodes:[...this.nodes.values()].map(e=>({...e,dependencies:[...e.dependencies]})).sort((e,t)=>Bn(e.key,t.key)),storedBytes:this.storedBytes}}clear(){let e=this.logical.size>0||this.nodes.size>0||this.blobs.size>0;this.logical.clear(),this.nodes.clear(),this.blobs.clear(),this.storedBytes=0,e&&(this.generation+=1)}async internInputs(e){return Promise.all(zn(e).map(async e=>{let t=await Vn(e),n=await V(JSON.stringify({schema:j.incrementalBuildGraph,kind:e.kind,identity:e.identity,digest:t})),r={key:n,kind:e.kind,identity:e.identity,digest:t,dependencies:[],byteLength:e.bytes?.byteLength??0};return this.nodes.set(n,r),r}))}ensureCapacity(e,t){if(this.blobs.has(t))return!1;let n=!1;for(;this.storedBytes+e>this.limitBytes&&this.blobs.size>0;){let e=this.blobs.keys().next().value,t=this.blobs.get(e);this.blobs.delete(e),this.storedBytes-=t.byteLength,n=!0;for(let[t,n]of this.nodes)if(n.digest===e&&n.dependencies.length!==0){this.nodes.delete(t);for(let[e,n]of this.logical)n.nodeKey===t&&this.logical.delete(e)}}return n}};function Ln(e,t){return e?.key===t.key&&e.kind===t.kind&&e.identity===t.identity&&e.digest===t.digest&&e.byteLength===t.byteLength&&e.dependencies.length===t.dependencies.length&&e.dependencies.every((e,n)=>e===t.dependencies[n])}function Rn(e,t){return e?.kind===t.kind&&e.nodeKey===t.nodeKey&&e.dependencies.length===t.dependencies.length&&e.dependencies.every((e,n)=>e.kind===t.dependencies[n]?.kind&&e.identity===t.dependencies[n]?.identity)}function zn(e){let t=new Map;for(let n of e){if(!n.identity||n.identity!==n.identity.trim()||n.identity.length>16384)throw Error(`Build graph input identities must be non-empty, trimmed strings.`);if(t.has(n.identity))throw Error(`Duplicate build graph input '${n.identity}'.`);if(n.bytes===void 0==(n.digest===void 0))throw Error(`Build graph input '${n.identity}' must provide exactly one of bytes or digest.`);t.set(n.identity,n)}return[...t.values()].sort((e,t)=>Bn(e.identity,t.identity))}function Bn(e,t){return e<t?-1:+(e>t)}async function Vn(e){if(e.bytes)return V(e.bytes);if(!/^[0-9a-f]{64}$/.test(e.digest))throw Error(`Build graph input '${e.identity}' has an invalid digest.`);return e.digest}function Hn(e,t,n){return V(JSON.stringify({schema:j.incrementalBuildGraph,kind:e,logicalKey:t,dependencies:n}))}const Un=new TextDecoder;var Wn=class{graph;constructor(e){this.graph=new In(e)}async unitManifestKey(e,t,n,r){let i=e.configs[t];if(!i)throw Error(`Unknown pinned Clang configuration '${t}'.`);return V(JSON.stringify({schema:j.objectCache,pinsSha256:F,sourceToolchainSha256:e.sourceSha256,packageSha256:P,version:e.version,config:t,cc1Argv:i.cc1,unit:n,source:await V(r)}))}async lookup(e,t,n=[]){return this.graph.lookup(e,Xn(t,n))}async store(e,t,n,r,i=[]){let a=Kn(t,n);return a?this.graph.store(`object`,e,[...Jn(a,n),...i],r):!1}async lookupPch(e,t){return this.graph.lookup(e,Xn(t))}async storePch(e,t,n,r){let i=Kn(t,n);return i?this.graph.store(`pch`,e,Jn(i,n),r):!1}lookupLink(e,t){return this.graph.lookupExact(`link-result`,e,Yn(t))}storeLink(e,t,n){return this.graph.store(`link-result`,e,Yn(t),n)}snapshot(){return this.graph.snapshot()}exportState(){return this.graph.exportState()}restoreState(e){return this.graph.restoreState(e)}clear(){this.graph.clear()}};function Gn(e){let t=Un.decode(e).replace(/\\\r?\n/g,` `),n=t.indexOf(`:`);if(n<0)return[];let r=[],i=/(?:\\.|[^\s\\])+/g,a=t.slice(n+1);for(let e=i.exec(a);e;e=i.exec(a))r.push(e[0].replace(/\\(.)/g,`$1`));return r}function Kn(e,t){let n=new Set;for(let r of e){if(r.startsWith(`/usr/`)||r.startsWith(`/sysroot/`)||r.startsWith(`/lib/`))continue;let e=r.startsWith(`/project/`)?r.slice(9):r.replace(/^\.\//,``);if(!e||e.startsWith(`/`)||e.split(`/`).some(e=>e===``||e===`.`||e===`..`)||!t.has(e))return;n.add(e)}if(n.size!==0)return[...n].sort()}function qn(e){return/\.(?:c|cc|cpp|cxx)$/i.test(e)?`source`:`header`}function Jn(e,t){return Yn(e.map(e=>({kind:qn(e),identity:e,bytes:t.get(e)})))}function Yn(e){return[...e,{kind:`package`,identity:`cpp:clang@${P}`,digest:P}]}function Xn(e,t=[]){let n=new Map([...e].map(([e,t])=>[e,{kind:qn(e),identity:e,bytes:t}]));n.set(`cpp:clang@${P}`,{kind:`package`,identity:`cpp:clang@${P}`,digest:P});for(let e of t)n.set(e.identity,e);return n}const Zn=`#pragma once
|
|
392
|
+
`,An=new TextDecoder;async function jn(e){let t=await V(e);if(t!==`895eee17c63b1112c84adcc4ddbcb38e0c18e53bff15f50a8689b9b82d87b1ff`)throw Error(`The pinned cc1 manifest drifted from its contract: expected ${F}, received ${t}. Regenerate it with scripts/pin-clang-cc1-argv.mjs and update CLANG_CC1_PINS_SHA256.`);let n=JSON.parse(An.decode(e));if(n.schema!==j.clangPins)throw Error(`Unsupported cc1 pin schema '${n.schema}'.`);for(let e of[`input`,`output`,`mainFileName`,`objects`])if(typeof n.placeholders?.[e]!=`string`)throw Error(`The cc1 pin manifest is missing the '${e}' placeholder.`);if(!n.command||!n.linkerCommand)throw Error(`The cc1 pin manifest is missing a compiler or linker command.`);if(!n.source||!/^[a-f0-9]{64}$/.test(n.sourceSha256))throw Error(`The cc1 pin manifest is missing its source toolchain identity.`);for(let[e,t]of Object.entries(n.configs))if(!Array.isArray(t.cc1)||!Array.isArray(t.link)||t.cc1[0]!==`-cc1`)throw Error(`The cc1 pin manifest entry '${e}' is malformed.`);return n}function Mn(e,t,n,r){let i=n.slice(n.lastIndexOf(`/`)+1),a=n.startsWith(`/`)?n:`/project/${n}`;return e.map(e=>e===t.input?a:e===t.output?r:e===t.mainFileName?i:e)}function Nn(e,t,n,r){return Mn(e.map(e=>e===`-emit-obj`?`-emit-pch`:e===`c++`?`c++-header`:e),t,n,r)}function Pn(e,t,n,r,i){let a=[];for(let i of e)i===t.objects?a.push(...n):i===t.output?a.push(r):a.push(i);return i!==void 0&&a.push(`--stack-first`,`-z`,`stack-size=${i}`),a}const Fn=Object.freeze([`source`,`header`,`package`,`pch`,`object`,`link-result`]);var In=class{limitBytes;logical=new Map;nodes=new Map;blobs=new Map;storedBytes=0;generation=0;constructor(e){if(!Number.isSafeInteger(e)||e<=0)throw RangeError(`Incremental build graph limit must be a positive safe integer.`);this.limitBytes=e}async lookup(e,t){let n=this.logical.get(e);if(!n)return;let r=[];for(let e of n.dependencies){let n=t.get(e.identity);if(!n||n.kind!==e.kind)return;r.push(n)}return this.lookupExact(n.kind,e,r)}async lookupExact(e,t,n){let r=await Hn(e,t,(await this.internInputs(n)).map(e=>e.key)),i=this.nodes.get(r);if(!i)return;let a=this.blobs.get(i.digest);if(a)return this.blobs.delete(i.digest),this.blobs.set(i.digest,a),a.slice()}async store(e,t,n,r){if(r.byteLength>this.limitBytes)return!1;let i=zn(n),a=await this.internInputs(i),o=await Hn(e,t,a.map(e=>e.key)),s=r.slice(),c=await V(s),l=this.logical.get(t),u=l?this.nodes.get(l.nodeKey):void 0,d=!1;if(u&&(u.key!==o||u.digest!==c)){if(this.logical.delete(t),this.nodes.delete(u.key),![...this.logical.values()].some(e=>this.nodes.get(e.nodeKey)?.digest===u.digest)){let e=this.blobs.get(u.digest);e&&(this.blobs.delete(u.digest),this.storedBytes-=e.byteLength)}d=!0}d=this.ensureCapacity(s.byteLength,c)||d,this.blobs.has(c)||(this.blobs.set(c,s),this.storedBytes+=s.byteLength,d=!0);let f={key:o,kind:e,identity:t,digest:c,dependencies:a.map(e=>e.key),byteLength:s.byteLength},p={kind:e,dependencies:i.map(({kind:e,identity:t})=>({kind:e,identity:t})),nodeKey:o},m=this.nodes.get(o),h=this.logical.get(t);return(!Ln(m,f)||!Rn(h,p))&&(d=!0),this.nodes.set(o,f),this.logical.set(t,p),d&&(this.generation+=1),!0}exportState(){let e=[],t=new Set;for(let[n,r]of this.logical){let i=this.nodes.get(r.nodeKey);if(!i)continue;let a=this.blobs.get(i.digest);if(!a)continue;let o=i.dependencies.map(e=>{let t=this.nodes.get(e);if(!t)throw Error(`Build graph dependency '${e}' is missing.`);return{kind:t.kind,identity:t.identity,digest:t.digest}});e.push({kind:r.kind,logicalKey:n,inputs:o,outputDigest:i.digest,outputByteLength:a.byteLength}),t.add(i.digest)}return{manifest:{schema:j.incrementalBuildGraph,version:2,generation:this.generation,entries:e.sort((e,t)=>Bn(e.logicalKey,t.logicalKey))},blobs:[...t].sort().map(e=>({digest:e,bytes:this.blobs.get(e)}))}}async restoreState(e){if(!e||typeof e!=`object`||Array.isArray(e)||Object.keys(e).sort().join(`,`)!==`blobs,manifest`)throw Error(`Incremental build graph state does not use the active WASM-OJ contract.`);let{manifest:t}=e;if(!t||typeof t!=`object`||Array.isArray(t)||Object.keys(t).sort().join(`,`)!==`entries,generation,schema,version`||t.schema!==j.incrementalBuildGraph||t.version!==2||!Number.isSafeInteger(t.generation)||t.generation<0||!Array.isArray(t.entries)||!Array.isArray(e.blobs))throw Error(`Incremental build graph manifest does not use the active WASM-OJ contract.`);let n=new Map,r=0,i=``;for(let t of e.blobs){if(!t||typeof t!=`object`||Array.isArray(t))throw Error(`Incremental build graph state contains a malformed blob.`);let e=t;if(Object.keys(e).sort().join(`,`)!==`bytes,digest`||typeof e.digest!=`string`||!/^[0-9a-f]{64}$/.test(e.digest)||e.digest<=i||!(e.bytes instanceof Uint8Array)||await V(e.bytes)!==e.digest)throw Error(`Incremental build graph state contains an invalid content-addressed blob.`);if(i=e.digest,r+=e.bytes.byteLength,!Number.isSafeInteger(r)||r>this.limitBytes)throw Error(`Incremental build graph state exceeds its storage limit.`);n.set(e.digest,e.bytes)}let a=new Set,o=[],s=new Set,c=``;for(let e of t.entries){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Incremental build graph manifest contains a malformed entry.`);let t=e;if(Object.keys(t).sort().join(`,`)!==`inputs,kind,logicalKey,outputByteLength,outputDigest`)throw Error(`Incremental build graph manifest entry has an invalid shape.`);if(t.kind!==`pch`&&t.kind!==`object`&&t.kind!==`link-result`)throw Error(`Incremental build graph manifest entry has an invalid node kind.`);if(typeof t.logicalKey!=`string`||!t.logicalKey||t.logicalKey!==t.logicalKey.trim()||t.logicalKey.length>16384||c!==``&&Bn(c,t.logicalKey)>=0)throw Error(`Incremental build graph manifest has an invalid or non-canonical logical key.`);if(c=t.logicalKey,a.has(t.logicalKey))throw Error(`Incremental build graph manifest repeats '${t.logicalKey}'.`);if(a.add(t.logicalKey),typeof t.outputDigest!=`string`||!/^[0-9a-f]{64}$/.test(t.outputDigest)||!Number.isSafeInteger(t.outputByteLength)||t.outputByteLength<0)throw Error(`Incremental build graph output '${t.logicalKey}' has invalid metadata.`);let r=n.get(t.outputDigest);if(!r||r.byteLength!==t.outputByteLength)throw Error(`Incremental build graph output '${t.logicalKey}' is missing or has the wrong size.`);if(s.add(t.outputDigest),!Array.isArray(t.inputs))throw Error(`Incremental build graph entry '${t.logicalKey}' inputs must be an array.`);let i=t.inputs.map(e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Incremental build graph entry '${t.logicalKey}' has a malformed input.`);let n=e;if(Object.keys(n).sort().join(`,`)!==`digest,identity,kind`||!Fn.slice(0,5).includes(n.kind)||typeof n.identity!=`string`||typeof n.digest!=`string`)throw Error(`Incremental build graph entry '${t.logicalKey}' has an invalid input.`);return{kind:n.kind,identity:n.identity,digest:n.digest}});if(zn(i).some((e,t)=>e.identity!==i[t]?.identity))throw Error(`Incremental build graph entry '${t.logicalKey}' inputs are not canonical.`);o.push({kind:t.kind,logicalKey:t.logicalKey,inputs:i,output:r})}if(s.size!==n.size)throw Error(`Incremental build graph state contains an unreferenced content-addressed blob.`);this.clear();for(let e of o)if(!await this.store(e.kind,e.logicalKey,e.inputs,e.output))throw Error(`Incremental build graph entry '${e.logicalKey}' exceeds its storage limit.`);this.generation=t.generation}snapshot(){return{schema:j.incrementalBuildGraph,nodes:[...this.nodes.values()].map(e=>({...e,dependencies:[...e.dependencies]})).sort((e,t)=>Bn(e.key,t.key)),storedBytes:this.storedBytes}}clear(){let e=this.logical.size>0||this.nodes.size>0||this.blobs.size>0;this.logical.clear(),this.nodes.clear(),this.blobs.clear(),this.storedBytes=0,e&&(this.generation+=1)}async internInputs(e){return Promise.all(zn(e).map(async e=>{let t=await Vn(e),n=await V(JSON.stringify({schema:j.incrementalBuildGraph,kind:e.kind,identity:e.identity,digest:t})),r={key:n,kind:e.kind,identity:e.identity,digest:t,dependencies:[],byteLength:e.bytes?.byteLength??0};return this.nodes.set(n,r),r}))}ensureCapacity(e,t){if(this.blobs.has(t))return!1;let n=!1;for(;this.storedBytes+e>this.limitBytes&&this.blobs.size>0;){let e=this.blobs.keys().next().value,t=this.blobs.get(e);this.blobs.delete(e),this.storedBytes-=t.byteLength,n=!0;for(let[t,n]of this.nodes)if(n.digest===e&&n.dependencies.length!==0){this.nodes.delete(t);for(let[e,n]of this.logical)n.nodeKey===t&&this.logical.delete(e)}}return n}};function Ln(e,t){return e?.key===t.key&&e.kind===t.kind&&e.identity===t.identity&&e.digest===t.digest&&e.byteLength===t.byteLength&&e.dependencies.length===t.dependencies.length&&e.dependencies.every((e,n)=>e===t.dependencies[n])}function Rn(e,t){return e?.kind===t.kind&&e.nodeKey===t.nodeKey&&e.dependencies.length===t.dependencies.length&&e.dependencies.every((e,n)=>e.kind===t.dependencies[n]?.kind&&e.identity===t.dependencies[n]?.identity)}function zn(e){let t=new Map;for(let n of e){if(!n.identity||n.identity!==n.identity.trim()||n.identity.length>16384)throw Error(`Build graph input identities must be non-empty, trimmed strings.`);if(t.has(n.identity))throw Error(`Duplicate build graph input '${n.identity}'.`);if(n.bytes===void 0==(n.digest===void 0))throw Error(`Build graph input '${n.identity}' must provide exactly one of bytes or digest.`);t.set(n.identity,n)}return[...t.values()].sort((e,t)=>Bn(e.identity,t.identity))}function Bn(e,t){return e<t?-1:+(e>t)}async function Vn(e){if(e.bytes)return V(e.bytes);if(!/^[0-9a-f]{64}$/.test(e.digest))throw Error(`Build graph input '${e.identity}' has an invalid digest.`);return e.digest}function Hn(e,t,n){return V(JSON.stringify({schema:j.incrementalBuildGraph,kind:e,logicalKey:t,dependencies:n}))}const Un=new TextDecoder;var Wn=class{graph;constructor(e){this.graph=new In(e)}async unitManifestKey(e,t,n,r){let i=e.configs[t];if(!i)throw Error(`Unknown pinned Clang configuration '${t}'.`);return V(JSON.stringify({schema:j.objectCache,pinsSha256:F,sourceToolchainSha256:e.sourceSha256,packageSha256:P,version:e.version,config:t,cc1Argv:i.cc1,unit:n,source:await V(r)}))}async lookup(e,t,n=[]){return this.graph.lookup(e,Xn(t,n))}async store(e,t,n,r,i=[]){let a=Kn(t,n);return a?this.graph.store(`object`,e,[...Jn(a,n),...i],r):!1}async lookupPch(e,t){return this.graph.lookup(e,Xn(t))}async storePch(e,t,n,r){let i=Kn(t,n);return i?this.graph.store(`pch`,e,Jn(i,n),r):!1}lookupLink(e,t){return this.graph.lookupExact(`link-result`,e,Yn(t))}storeLink(e,t,n){return this.graph.store(`link-result`,e,Yn(t),n)}snapshot(){return this.graph.snapshot()}exportState(){return this.graph.exportState()}restoreState(e){return this.graph.restoreState(e)}clear(){this.graph.clear()}};function Gn(e){let t=Un.decode(e).replace(/\\\r?\n/g,` `),n=t.indexOf(`:`);if(n<0)return[];let r=[],i=/(?:\\.|[^\s\\])+/g,a=t.slice(n+1);for(let e=i.exec(a);e;e=i.exec(a))r.push(e[0].replace(/\\(.)/g,`$1`));return r}function Kn(e,t){let n=new Set;for(let r of e){if(r.startsWith(`/usr/`)||r.startsWith(`/sysroot/`)||r.startsWith(`/lib/`))continue;let e=r.startsWith(`/project/`)?r.slice(9):r.replace(/^\.\//,``);if(!e||e.startsWith(`/`)||e.split(`/`).some(e=>e===``||e===`.`||e===`..`)||!t.has(e))return;n.add(e)}if(n.size!==0)return[...n].sort()}function qn(e){return/\.(?:c|cc|cpp|cxx)$/i.test(e)?`source`:`header`}function Jn(e,t){return Yn(e.map(e=>({kind:qn(e),identity:e,bytes:t.get(e)})))}function Yn(e){return[...e,{kind:`package`,identity:`cpp:clang@${P}`,digest:P}]}function Xn(e,t=[]){let n=new Map([...e].map(([e,t])=>[e,{kind:qn(e),identity:e,bytes:t}]));n.set(`cpp:clang@${P}`,{kind:`package`,identity:`cpp:clang@${P}`,digest:P});for(let e of t)n.set(e.identity,e);return n}const Zn=`#pragma once
|
|
393
393
|
#include <algorithm>
|
|
394
394
|
#include <array>
|
|
395
395
|
#include <bitset>
|
|
@@ -439,7 +439,7 @@ _runpy.run_path(_entry, run_name="__main__")
|
|
|
439
439
|
`,Qn=new TextDecoder;async function $n(e){let t=await V(e);if(t!==`9bbe41d77c786f1c36169369c909268530b05726e1581683f6edd9a2983eebd0`)throw Error(`Pinned libc++ PCH manifest digest mismatch: expected ${qe}, received ${t}.`);let n;try{n=JSON.parse(Qn.decode(e))}catch(e){throw Error(`Pinned libc++ PCH manifest is not valid JSON.`,{cause:e})}if(!tr(n)||n.schema!==j.clangLibcxxPch||n.version!==`22.0.0-git20542-10`||n.clangPackageSha256!==`21ded33b9c6d4e1aaad5528c940bdaf6c3e84be77ea8f522f018ca7289a2a224`||n.clangPinsSha256!==`895eee17c63b1112c84adcc4ddbcb38e0c18e53bff15f50a8689b9b82d87b1ff`||n.header!==Zn||!tr(n.profiles))throw Error(`Pinned libc++ PCH manifest is not admitted by the active Clang toolchain contract.`);if(n.headerSha256!==await V(Zn))throw Error(`Pinned libc++ PCH header digest does not match its canonical source.`);let r=n.profiles,i=Object.fromEntries(await Promise.all([`cpp-debug`,`cpp-release`].map(async e=>{let t=r[e];if(!tr(t)||typeof t.path!=`string`||!t.path.endsWith(`.${e}.pch.gz.bin`)||!rr(t.byteLength)||!rr(t.compressedByteLength)||!nr(t.sha256)||!nr(t.compressedSha256))throw Error(`Pinned libc++ PCH profile '${e}' is malformed.`);return[e,{path:t.path,byteLength:t.byteLength,sha256:t.sha256,compressedByteLength:t.compressedByteLength,compressedSha256:t.compressedSha256}]})));if(Object.keys(r).sort().join(`,`)!==`cpp-debug,cpp-release`)throw Error(`Pinned libc++ PCH manifest has an unexpected profile set.`);return{schema:j.clangLibcxxPch,version:N,clangPackageSha256:P,clangPinsSha256:F,header:Zn,headerSha256:n.headerSha256,profiles:i}}function er(e){return e===Zn}function tr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function nr(e){return typeof e==`string`&&/^[0-9a-f]{64}$/.test(e)}function rr(e){return Number.isSafeInteger(e)&&e>0}var ir=class{#e;#t;#n=0;constructor(e=75){if(!Number.isFinite(e)||e<=0)throw RangeError(`Mounted-output stability interval must be positive and finite.`);this.#e=e}observe(e,t){if(!Number.isFinite(t))throw RangeError(`Mounted-output observation time must be finite.`);if(!e){this.#t=void 0,this.#n=0;return}if(!this.#t||!ar(this.#t,e)){this.#t=e.slice(),this.#n=t;return}if(!(t-this.#n<this.#e))return e.slice()}};function ar(e,t){if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n+=1)if(e[n]!==t[n])return!1;return!0}const or=Object.freeze({c:`cpp`,cpp:`cpp`,rust:`cargo`,python:`pypi`,javascript:`npm`,typescript:`npm`,go:`go`});function sr(e){if(!e.dependencies)return;let t=or[e.config.language];if(!t)throw Error(`Compiler '${e.config.language}' does not declare a dependency ecosystem.`);let n=e.dependencies.packages.find(e=>e.package.ecosystem!==t);if(n)throw Error(`${e.config.language} projects accept only '${t}' dependencies; '${n.package.id}' is '${n.package.ecosystem}'.`)}function cr(e,t){return sr(e),e.dependencies?.packages.filter(e=>e.package.ecosystem===t)??[]}function lr(e){let t={};for(let n of cr(e,`pypi`))for(let[e,r]of Object.entries(n.files))t[`site-packages/${e}`]=r.slice();return t}function ur(e){let t={},n=new Set,r=[];for(let i of cr(e,`npm`)){if(n.has(i.package.name))throw Error(`npm dependency '${i.package.name}' resolves to multiple versions in a flat runtime graph.`);n.add(i.package.name);let e=i.files[`package.json`];if(!e)throw Error(`npm dependency '${i.package.id}' omits package.json.`);let a=U(e,i.package.id,`package.json`);if(JSON.parse(a).type===`module`)throw Error(`npm dependency '${i.package.id}' uses unsupported ESM package semantics.`);Object.keys(i.files).some(e=>e.endsWith(`.d.ts`))||r.push(i.package.name);for(let[e,n]of Object.entries(i.files)){let r=`node_modules/${i.package.name}/${e}`;t[r]=mr(e)?U(n,i.package.id,e):n.slice()}}return r.length>0&&(t[`.wasm-oj/npm-untyped-modules.d.ts`]=r.sort().flatMap(e=>[`declare module ${JSON.stringify(e)} { const value: any; export = value; }`,`declare module ${JSON.stringify(`${e}/*`)} { const value: any; export = value; }`]).join(`
|
|
440
440
|
`)),t}function dr(e){let t=new Map,n=[],r=[];for(let[i,a]of cr(e,`cpp`).entries()){let o=`.wasm-oj/dependencies/cpp/${String(i).padStart(4,`0`)}`;n.push(`/project/${o}`),Object.keys(a.files).some(e=>e.startsWith(`include/`))&&n.push(`/project/${o}/include`);for(let[n,i]of Object.entries(a.files)){if(!hr(n))continue;U(i,a.package.id,n);let s=`${o}/${n}`;if(t.set(s,i.slice()),gr(n)){if(e.config.language===`c`&&!n.endsWith(`.c`))throw Error(`C dependency '${a.package.id}' contains C++ source '${n}'.`);r.push(s)}}}return{files:t,includeDirectories:Object.freeze(n),sources:Object.freeze(r)}}function fr(e){let t=cr(e,`cargo`),n=new Map(t.map(e=>[e.package.id,e])),r=_r(t),i=new Map,a=[];for(let[e,t]of r.entries()){let n=`.wasm-oj/dependencies/cargo/${String(e).padStart(4,`0`)}`,r=t.files[`Cargo.toml`],o=U(r,t.package.id,`Cargo.toml`);if(/\bpackage\s*=\s*"/m.test(br(o)))throw Error(`Cargo dependency '${t.package.id}' uses unsupported renamed dependencies.`);let s=vr(o,`lib`),c=xr(yr(s,`name`)??t.package.name,t.package.id),l=yr(s,`path`)??`src/lib.rs`;if(!t.files[l])throw Error(`Cargo dependency '${t.package.id}' omits '${l}'.`);let u=yr(vr(o,`package`),`edition`)??`2015`;if(!/^(?:2015|2018|2021|2024)$/.test(u))throw Error(`Cargo dependency '${t.package.id}' has unsupported Rust edition '${u}'.`);let d=`/work/build/deps/lib${String(e).padStart(4,`0`)}_${c}.rlib`;i.set(t.package.id,{id:t.package.id,crateName:c,root:`${n}/${l}`,edition:u,outputPath:d,features:Object.freeze([...t.package.features??[]])});for(let[e,r]of Object.entries(t.files))Sr(e)&&a.push({path:`${n}/${e}`,language:`rust`,content:U(r,t.package.id,e)})}let o=r.map(e=>{let t=i.get(e.package.id);return Object.freeze({...t,externs:Object.freeze(e.package.dependencies.map(t=>{let n=i.get(t);if(!n)throw Error(`Cargo dependency '${e.package.id}' refers to unavailable '${t}'.`);return Object.freeze({crateName:n.crateName,path:n.outputPath})}))})}),s=e.dependencies?.lock.roots.map(e=>{if(!n.has(e))throw Error(`Cargo root '${e}' is unavailable.`);let t=i.get(e);return Object.freeze({crateName:t.crateName,path:t.outputPath})})??[];return{files:a,crates:Object.freeze(o),roots:Object.freeze(s)}}function pr(e){let t=[],n=[];for(let[r,i]of cr(e,`go`).entries()){let e=`.wasm-oj/dependencies/go/${String(r).padStart(4,`0`)}`,a=new Map;for(let[n,r]of Object.entries(i.files)){if(!n.endsWith(`.go`)||n.endsWith(`_test.go`)||n.split(`/`).includes(`vendor`))continue;let o=U(r,i.package.id,n);if(/^\s*\/\/(?:go:build|\s*\+build)\b/m.test(o))throw Error(`Go dependency '${i.package.id}' uses unsupported build constraints in '${n}'.`);if(/import\s+(?:[._A-Za-z][A-Za-z0-9_]*\s+)?["`]C["`]/.test(o))throw Error(`Go dependency '${i.package.id}' uses unsupported cgo in '${n}'.`);let s=n.includes(`/`)?n.slice(0,n.lastIndexOf(`/`)):``,c=a.get(s)??[];c.push({path:n,content:o}),a.set(s,c),t.push({path:`${e}/${n}`,language:`go`,content:o})}for(let[t,r]of[...a].sort(([e],[t])=>e.localeCompare(t))){let a=new Set(r.map(e=>Cr(e.content,i.package.id,e.path)));if(a.size!==1)throw Error(`Go dependency '${i.package.id}' directory '${t||`.`}' contains multiple packages.`);if([...a][0]===`main`)continue;let o=t?`${i.package.name}/${t}`:i.package.name,s=n.length;n.push(Object.freeze({id:`${i.package.id}:${t||`.`}`,importPath:o,sourcePaths:Object.freeze(r.map(t=>`${e}/${t.path}`).sort()),imports:Object.freeze([...new Set(r.flatMap(e=>wr(e.content)))].sort()),archivePath:`/work/build/deps/${String(s).padStart(4,`0`)}.a`}))}}return{files:t,packages:Object.freeze(n)}}function U(e,t,n){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch(e){throw Error(`Dependency '${t}' compiler file '${n}' is not valid UTF-8.`,{cause:e})}}function mr(e){return/(?:^|\/)(?:package\.json)$/.test(e)||/\.(?:js|cjs|d\.ts|json)$/i.test(e)}function hr(e){return/\.(?:h|hh|hpp|hxx|inc|c|cc|cpp|cxx)$/i.test(e)}function gr(e){return/\.(?:c|cc|cpp|cxx)$/i.test(e)}function _r(e){let t=new Map(e.map(e=>[e.package.id,e])),n=new Map,r=[],i=e=>{let a=n.get(e);if(a===`visited`)return;if(a===`visiting`)throw Error(`Dependency graph contains a cycle at '${e}'.`);let o=t.get(e);if(!o)throw Error(`Dependency graph refers to unavailable package '${e}'.`);n.set(e,`visiting`);for(let e of o.package.dependencies)i(e);n.set(e,`visited`),r.push(o)};for(let t of e)i(t.package.id);return r}function vr(e,t){return e.match(RegExp(`(?:^|\\n)\\[${t.replace(/[.*+?^${}()|[\\]\\]/g,`\\$&`)}\\]\\s*\\n([\\s\\S]*?)(?=\\n\\[|$)`))?.[1]??``}function yr(e,t){return e.match(RegExp(`^\\s*${t}\\s*=\\s*"([^"]+)"\\s*(?:#.*)?$`,`m`))?.[1]}function br(e){return e.split(/\n(?=\[)/).filter(e=>/\bdependencies\]/.test(e.split(`
|
|
441
441
|
`,1)[0])).join(`
|
|
442
|
-
`)}function xr(e,t){let n=e.replaceAll(`-`,`_`);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(n))throw Error(`Cargo dependency '${t}' has unsupported crate name '${e}'.`);return n}function Sr(e){return e.endsWith(`.rs`)||e.endsWith(`.md`)||e.endsWith(`.txt`)||e===`Cargo.toml`}function Cr(e,t,n){let r=e.match(/^\s*package\s+([A-Za-z_][A-Za-z0-9_]*)\b/m);if(!r)throw Error(`Go dependency '${t}' source '${n}' has no package declaration.`);return r[1]}function wr(e){let t=[],n=/\bimport\s*\(([\s\S]*?)\)/g;for(let r of e.matchAll(n))for(let e of r[1].matchAll(/(?:^|\n)\s*(?:[._A-Za-z][A-Za-z0-9_]*\s+)?["`]([^"`]+)["`]/g))t.push(e[1]);let r=e.replace(n,``);for(let e of r.matchAll(/\bimport\s+(?:[._A-Za-z][A-Za-z0-9_]*\s+)?["`]([^"`]+)["`]/g))t.push(e[1]);return t}let W,Tr;const Er=new Map,G=new Wn(67108864),Dr=new TextEncoder,Or=new TextDecoder,kr=55e3;async function Ar(e,t,n,r){if(e.config.target!==`wasip1`&&e.config.target!==`wasix`)throw Error(`The output-ready Clang compiler accepts only wasip1 or wasix targets.`);if(e.config.language!==`c`&&e.config.language!==`cpp`)throw Error(`The output-ready Clang compiler accepts only C and C++ projects.`);let i=performance.now();r.progress(n,`loading-toolchain`,`Loading pinned Clang 22 toolchain`,.15);let{pins:a,compiler:o,linker:s}=await Pr(n,r),c=`${e.config.language}-${e.config.optimization}`,l=a.configs[c];if(!l)throw Error(`The pinned Clang manifest has no '${c}' configuration.`);r.trace(n,`filesystemPrepare`,`start`);let u=new Map(e.files.map(e=>[e.path,Dr.encode(e.content)])),d=dr(e);for(let[e,t]of d.files)u.set(e,t);u.set(Dn,Dr.encode(On));let f=new ce(Object.fromEntries([...u].map(([e,t])=>[`/${e}`,t])));try{await Gr(f,`/build`),await Gr(f,`/.wasm-oj`),r.trace(n,`filesystemPrepare`,`end`);let p=e.config.language===`cpp`,m=p?/\.(?:cc|cpp|cxx)$/:/\.c$/,h=e.files.filter(e=>m.test(e.path)).map(e=>e.path);h.includes(e.config.entry)||h.unshift(e.config.entry);let g=[...h,...d.sources,Dn],_=``,v=``,y=[],b=[],ee=0,te=0,x=0,S=0,C=0,w=0,T=0,ne=0,E=[],D=p?Lr(e):void 0,O=`/project/build/wasm-oj.pch`,re,ie=!1;if(D){let t=u.get(D),i;if(er(Or.decode(t))){ie=!0;let e=`wasm-oj.libcxx.hpp`;if(u.has(e))throw Error(`C++ projects using WASM-OJ's admitted libc++ PCH may not define reserved path '${e}'.`);u.set(e,t),await f.writeFile(`/${e}`,t),i=await Ir(c,n,r),x+=1,await f.writeFile(O.slice(8),i)}else{let s=await G.unitManifestKey(a,c,D,t),p=await V(JSON.stringify({baseKey:s,mode:`c++-header`})),m=await G.lookupPch(p,u);if(m)i=m,x+=1,await f.writeFile(O.slice(8),i);else{S+=1;let t=`/project/build/wasm-oj.pch.d`,s=Nn(l.cc1,a.placeholders,D,O);s.splice(s.length-1,0,...d.includeDirectories.flatMap(e=>[`-I`,e])),s.push(`-dependency-file`,t,`-MT`,O);let c=await Rr(o,s,f,r,n,O,t);if(E.push(...c.diagnostics),_+=c.stdout,v+=c.stderr,!c.pch||!c.dependency)return qr(e,_,v,1,`clang`,E);i=c.pch,await G.storePch(p,Gn(c.dependency),u,i)&&(C+=1)}}re={kind:`pch`,identity:`pch:${D}`,digest:await V(i)}}r.progress(n,`compiling`,`Compiling ${g.length} translation units with SDK-direct cc1`,.35),r.trace(n,`commandStart`,`start`),r.trace(n,`commandStart`,`end`),r.trace(n,`commandWait`,`start`),r.trace(n,`projectCompile`,`start`);for(let[t,i]of g.entries()){i===`.wasm-oj/determinism.c`&&(r.trace(n,`projectCompile`,`end`),r.trace(n,`runtimeShimCompile`,`start`));let s=`/project/build/${String(t).padStart(4,`0`)}.o`,p=`/project/build/${String(t).padStart(4,`0`)}.d`,m=u.get(i);if(!m)throw Error(`SDK-direct Clang is missing source bytes for '${i}'.`);let h=await G.unitManifestKey(a,c,i,m),g=i===`.wasm-oj/determinism.c`?void 0:re,x=g?await V(JSON.stringify({baseManifestKey:h,pch:g.digest})):h,S=g?[g]:[],C=await G.lookup(x,u,S);if(C){await f.writeFile(s.slice(8),C),ee+=1,y.push(s),b.push({kind:`object`,identity:i,bytes:C});continue}let w=Mn(l.cc1,a.placeholders,i,s);w.splice(w.length-1,0,...d.includeDirectories.flatMap(e=>[`-I`,e])),g&&w.splice(w.length-1,0,`-include-pch`,O,...ie?[`-fno-validate-pch`]:[]),w.push(`-dependency-file`,p,`-MT`,s);let T=await zr(o,w,f,r,n,i===`.wasm-oj/determinism.c`?`runtimeShimSpawn`:`projectSpawn`,i===`.wasm-oj/determinism.c`?`runtimeShimWait`:`projectWait`,i===`.wasm-oj/determinism.c`?`runtimeShimOutputReady`:`projectOutputReady`,s,p);if(E.push(...T.diagnostics),_+=T.stdout,v+=T.stderr,!T.object||!T.dependency)return r.trace(n,i===`.wasm-oj/determinism.c`?`runtimeShimCompile`:`projectCompile`,`end`),r.trace(n,`commandWait`,`end`),qr(e,_,v,1,`clang`,E);T.diagnostics.length===0&&await G.store(x,Gn(T.dependency),u,T.object,S)&&(te+=1),y.push(s),b.push({kind:`object`,identity:i,bytes:T.object})}r.trace(n,`runtimeShimCompile`,`end`),r.progress(n,`linking`,`Linking SDK-direct Clang objects`,.8),r.trace(n,`link`,`start`);let ae=`/project/build/app.wasm`,oe=Pn(l.link,a.placeholders,y,ae),se=await V(JSON.stringify({pins:a.sourceSha256,package:P,target:e.config.target,arguments:
|
|
442
|
+
`)}function xr(e,t){let n=e.replaceAll(`-`,`_`);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(n))throw Error(`Cargo dependency '${t}' has unsupported crate name '${e}'.`);return n}function Sr(e){return e.endsWith(`.rs`)||e.endsWith(`.md`)||e.endsWith(`.txt`)||e===`Cargo.toml`}function Cr(e,t,n){let r=e.match(/^\s*package\s+([A-Za-z_][A-Za-z0-9_]*)\b/m);if(!r)throw Error(`Go dependency '${t}' source '${n}' has no package declaration.`);return r[1]}function wr(e){let t=[],n=/\bimport\s*\(([\s\S]*?)\)/g;for(let r of e.matchAll(n))for(let e of r[1].matchAll(/(?:^|\n)\s*(?:[._A-Za-z][A-Za-z0-9_]*\s+)?["`]([^"`]+)["`]/g))t.push(e[1]);let r=e.replace(n,``);for(let e of r.matchAll(/\bimport\s+(?:[._A-Za-z][A-Za-z0-9_]*\s+)?["`]([^"`]+)["`]/g))t.push(e[1]);return t}let W,Tr;const Er=new Map,G=new Wn(67108864),Dr=new TextEncoder,Or=new TextDecoder,kr=55e3;async function Ar(e,t,n,r){if(e.config.target!==`wasip1`&&e.config.target!==`wasix`)throw Error(`The output-ready Clang compiler accepts only wasip1 or wasix targets.`);if(e.config.language!==`c`&&e.config.language!==`cpp`)throw Error(`The output-ready Clang compiler accepts only C and C++ projects.`);let i=performance.now();r.progress(n,`loading-toolchain`,`Loading pinned Clang 22 toolchain`,.15);let{pins:a,compiler:o,linker:s}=await Pr(n,r),c=`${e.config.language}-${e.config.optimization}`,l=a.configs[c];if(!l)throw Error(`The pinned Clang manifest has no '${c}' configuration.`);r.trace(n,`filesystemPrepare`,`start`);let u=new Map(e.files.map(e=>[e.path,Dr.encode(e.content)])),d=dr(e);for(let[e,t]of d.files)u.set(e,t);u.set(Dn,Dr.encode(On));let f=new ce(Object.fromEntries([...u].map(([e,t])=>[`/${e}`,t])));try{await Gr(f,`/build`),await Gr(f,`/.wasm-oj`),r.trace(n,`filesystemPrepare`,`end`);let p=e.config.language===`cpp`,m=p?/\.(?:cc|cpp|cxx)$/:/\.c$/,h=e.files.filter(e=>m.test(e.path)).map(e=>e.path);h.includes(e.config.entry)||h.unshift(e.config.entry);let g=[...h,...d.sources,Dn],_=``,v=``,y=[],b=[],ee=0,te=0,x=0,S=0,C=0,w=0,T=0,ne=0,E=[],D=p?Lr(e):void 0,O=`/project/build/wasm-oj.pch`,re,ie=!1;if(D){let t=u.get(D),i;if(er(Or.decode(t))){ie=!0;let e=`wasm-oj.libcxx.hpp`;if(u.has(e))throw Error(`C++ projects using WASM-OJ's admitted libc++ PCH may not define reserved path '${e}'.`);u.set(e,t),await f.writeFile(`/${e}`,t),i=await Ir(c,n,r),x+=1,await f.writeFile(O.slice(8),i)}else{let s=await G.unitManifestKey(a,c,D,t),p=await V(JSON.stringify({baseKey:s,mode:`c++-header`})),m=await G.lookupPch(p,u);if(m)i=m,x+=1,await f.writeFile(O.slice(8),i);else{S+=1;let t=`/project/build/wasm-oj.pch.d`,s=Nn(l.cc1,a.placeholders,D,O);s.splice(s.length-1,0,...d.includeDirectories.flatMap(e=>[`-I`,e])),s.push(`-dependency-file`,t,`-MT`,O);let c=await Rr(o,s,f,r,n,O,t);if(E.push(...c.diagnostics),_+=c.stdout,v+=c.stderr,!c.pch||!c.dependency)return qr(e,_,v,1,`clang`,E);i=c.pch,await G.storePch(p,Gn(c.dependency),u,i)&&(C+=1)}}re={kind:`pch`,identity:`pch:${D}`,digest:await V(i)}}r.progress(n,`compiling`,`Compiling ${g.length} translation units with SDK-direct cc1`,.35),r.trace(n,`commandStart`,`start`),r.trace(n,`commandStart`,`end`),r.trace(n,`commandWait`,`start`),r.trace(n,`projectCompile`,`start`);for(let[t,i]of g.entries()){i===`.wasm-oj/determinism.c`&&(r.trace(n,`projectCompile`,`end`),r.trace(n,`runtimeShimCompile`,`start`));let s=`/project/build/${String(t).padStart(4,`0`)}.o`,p=`/project/build/${String(t).padStart(4,`0`)}.d`,m=u.get(i);if(!m)throw Error(`SDK-direct Clang is missing source bytes for '${i}'.`);let h=await G.unitManifestKey(a,c,i,m),g=i===`.wasm-oj/determinism.c`?void 0:re,x=g?await V(JSON.stringify({baseManifestKey:h,pch:g.digest})):h,S=g?[g]:[],C=await G.lookup(x,u,S);if(C){await f.writeFile(s.slice(8),C),ee+=1,y.push(s),b.push({kind:`object`,identity:i,bytes:C});continue}let w=Mn(l.cc1,a.placeholders,i,s);w.splice(w.length-1,0,...d.includeDirectories.flatMap(e=>[`-I`,e])),g&&w.splice(w.length-1,0,`-include-pch`,O,...ie?[`-fno-validate-pch`]:[]),w.push(`-dependency-file`,p,`-MT`,s);let T=await zr(o,w,f,r,n,i===`.wasm-oj/determinism.c`?`runtimeShimSpawn`:`projectSpawn`,i===`.wasm-oj/determinism.c`?`runtimeShimWait`:`projectWait`,i===`.wasm-oj/determinism.c`?`runtimeShimOutputReady`:`projectOutputReady`,s,p);if(E.push(...T.diagnostics),_+=T.stdout,v+=T.stderr,!T.object||!T.dependency)return r.trace(n,i===`.wasm-oj/determinism.c`?`runtimeShimCompile`:`projectCompile`,`end`),r.trace(n,`commandWait`,`end`),qr(e,_,v,1,`clang`,E);T.diagnostics.length===0&&await G.store(x,Gn(T.dependency),u,T.object,S)&&(te+=1),y.push(s),b.push({kind:`object`,identity:i,bytes:T.object})}r.trace(n,`runtimeShimCompile`,`end`),r.progress(n,`linking`,`Linking SDK-direct Clang objects`,.8),r.trace(n,`link`,`start`);let ae=`/project/build/app.wasm`,oe=Pn(l.link,a.placeholders,y,ae,e.config.stackSizeBytes),se=await V(JSON.stringify({pins:a.sourceSha256,package:P,target:e.config.target,arguments:oe})),k=await G.lookupLink(se,b),ce=``,le=``;if(k)w+=1;else{T+=1;let e=await Br(s,oe,f,r,n,`linkSpawn`,`linkWait`,`linkOutputReady`,ae);ce=e.stdout,le=e.stderr,k=e.value,k&&await G.storeLink(se,b,k)&&(ne+=1)}return r.trace(n,`link`,`end`),r.trace(n,`commandWait`,`end`),_+=ce,v+=le,k?(r.progress(n,`linking`,`Reading linked WebAssembly module`,.95),r.trace(n,`artifactReadback`,`start`),r.trace(n,`artifactReadback`,`end`),{success:!0,diagnostics:E,artifact:{kind:`wasm`,wasmOjContract:2,id:crypto.randomUUID(),projectId:e.id,cacheKey:t,name:`${e.name}.wasm`,language:e.config.language,target:e.config.target,optimization:e.config.optimization,createdAt:Date.now(),durationMs:performance.now()-i,size:k.byteLength,toolchains:z(e.config.language),costProfile:pn(e.config.language,e.config.target,e.config.optimization),...e.dependencies===void 0?{}:{dependencyLockSha256:e.dependencies.lockSha256},bytes:k},stdout:_,stderr:v,cacheHit:!1,buildGraph:{hits:{pch:x,object:ee,"link-result":w},misses:{pch:S,object:g.length-ee,"link-result":T},stores:{pch:C,object:te,"link-result":ne}}}):qr(e,_,v,1,`wasm-ld`,E)}finally{f.free()}}function jr(){return G.exportState()}function Mr(e){return G.restoreState(e)}async function Nr(){let e=W;if(W=void 0,!e)return;let{pkg:t,compiler:n,linker:r}=await e;n.free(),r.free(),t.free()}async function Pr(e,t){if(W){for(let n of[`toolchainFetch`,`toolchainDecode`,`toolchainLoad`])t.trace(e,n,`start`),t.trace(e,n,`end`);return W}W=(async()=>{t.trace(e,`toolchainFetch`,`start`);let[n,r]=await Promise.all([t.loadToolchainAsset(ze),t.loadToolchainFile(Be)]);t.trace(e,`toolchainFetch`,`end`),t.trace(e,`toolchainDecode`,`start`);let i=await jn(r),a=await V(n);if(a!==`21ded33b9c6d4e1aaad5528c940bdaf6c3e84be77ea8f522f018ca7289a2a224`)throw Error(`Pinned Clang package digest mismatch: received ${a}.`);t.trace(e,`toolchainDecode`,`end`),t.trace(e,`toolchainLoad`,`start`);let o=await we.fromFile(n,t.runtime),s=Fr(o,i.command),c=Fr(o,i.linkerCommand);return t.trace(e,`toolchainLoad`,`end`),{pkg:o,pins:i,compiler:s,linker:c}})();try{return await W}catch(e){throw W=void 0,e}}function Fr(e,t){let n=e.commands[t];if(!n)throw Error(`The SDK-direct Clang package does not expose '${t}'.`);return n}async function Ir(e,t,n){Tr??=n.loadToolchainFile(He).then($n);let r=Er.get(e);r||(r=Tr.then(async r=>{let i=r.profiles[e];n.progress(t,`loading-toolchain`,`Loading admitted libc++ PCH (${e})`,.25);let a=await n.loadToolchainAsset(`/toolchains/${i.path}`);if(a.byteLength!==i.byteLength||await V(a)!==i.sha256)throw Error(`Pinned libc++ PCH '${e}' failed decompressed integrity verification.`);return a}),Er.set(e,r));try{return await r}catch(t){throw Er.delete(e),t}}function Lr(e){let t=e.files.map(e=>e.path).filter(e=>e.split(`/`).at(-1)===`wasm-oj.pch.hpp`);if(t.length>1)throw Error(`C++ projects may contain at most one wasm-oj.pch.hpp; received ${t.join(`, `)}.`);return t[0]}function Rr(e,t,n,r,i,a,o){let s=new ir;return Vr(e,t,n,r,i,`projectSpawn`,`projectWait`,`projectOutputReady`,async e=>{let[t,r]=await Promise.all([Kr(n,a),Kr(n,o)]),i=s.observe(t?.byteLength?t:void 0,performance.now());return i&&r?.byteLength&&Or.decode(r).endsWith(`
|
|
443
443
|
`)?{pch:i,dependency:r}:/\d+ errors? generated\.\s*$/.test(e)?{}:void 0}).then(e=>({...e.value,diagnostics:bn(`${e.stderr}\n${e.stdout}`),stdout:e.stdout,stderr:e.stderr}))}function zr(e,t,n,r,i,a,o,s,c,l){return Vr(e,t,n,r,i,a,o,s,async e=>{let[t,r]=await Promise.all([Wr(n,c),Kr(n,l)]);return t&&r?.byteLength&&Or.decode(r).endsWith(`
|
|
444
444
|
`)?{object:t,dependency:r}:/\d+ errors? generated\.\s*$/.test(e)?{}:void 0}).then(e=>({...e.value,diagnostics:bn(`${e.stderr}\n${e.stdout}`),stdout:e.stdout,stderr:e.stderr}))}function Br(e,t,n,r,i,a,o,s,c){return Vr(e,t,n,r,i,a,o,s,async e=>await Wr(n,c)||(/(?:wasm-ld|lld): error:/i.test(e)?null:void 0)).then(e=>({...e,value:e.value??void 0}))}async function Vr(e,t,n,r,i,a,o,s,c){r.trace(i,a,`start`);let l=await e.run({args:t,cwd:`/project`,env:{PATH:`/bin`,SOURCE_DATE_EPOCH:`946684800`,TZ:`UTC`,LC_ALL:`C`},mount:{"/project":n}});r.trace(i,a,`end`),r.trace(i,o,`start`),r.trace(i,s,`start`);let u=Hr(l.stdout),d=Hr(l.stderr),f=performance.now()+kr;try{for(;performance.now()<f;){let e=await c(d.text());if(e!==void 0)return await new Promise(e=>setTimeout(e,0)),{value:e,stdout:u.text(),stderr:d.text()};await new Promise(e=>setTimeout(e,5))}throw Error(`Compiler stage did not produce a complete output within ${kr} ms.`)}finally{r.trace(i,s,`end`),r.trace(i,o,`end`),await Promise.all([u.cancel(),d.cancel()]),l.free()}}function Hr(e){let t=e.getReader(),n=[];return(async()=>{try{for(;;){let e=await t.read();if(e.done)return;let r=e.value instanceof Uint8Array?e.value:new Uint8Array(e.value);n.push(r.slice())}}catch{}})(),{text:()=>Or.decode(Ur(n)),cancel:async()=>{try{await t.cancel()}catch{}}}}function Ur(e){let t=new Uint8Array(e.reduce((e,t)=>e+t.byteLength,0)),n=0;for(let r of e)t.set(r,n),n+=r.byteLength;return t}async function Wr(e,t){let n=await Kr(e,t);if(!n||n.byteLength<=8)return;let r=new Uint8Array(n.byteLength);return r.set(n),WebAssembly.validate(r.buffer)?r:void 0}async function Gr(e,t){try{await e.createDir(t)}catch(e){if(!String(e).toLowerCase().includes(`exist`))throw e}}async function Kr(e,t){let n=t.startsWith(`/project/`)?t.slice(8):t;try{return await e.readFile(n)}catch{return}}function qr(e,t,n,r,i,a){return{success:!1,diagnostics:Sn(a??bn(`${n}\n${t}`),{file:e.config.entry,source:i,message:n.trim()||`${i} exited with code ${r}.`}),stdout:t,stderr:n,cacheHit:!1}}const Jr=new TextEncoder;let Yr,Xr;function Zr(e){Xr=e}function K(e,t,n,r){q().progress(e,t,n,r)}function q(){if(!Xr)throw Error(`Wasmer compiler host is not configured.`);return Xr}function Qr(){return q().getRuntime()}async function $r(){Yr??=q().loadToolchainAsset(st);try{return we.fromWasm(await Yr,Qr())}catch(e){throw Yr=void 0,e}}function ei(e,t,n,r,i,a){return{wasmOjContract:2,id:crypto.randomUUID(),projectId:e.id,cacheKey:t,name:`${e.name}.${e.config.target===`wasip1`?`wasm`:`wasix.wasm`}`,language:e.config.language,target:e.config.target,optimization:e.config.optimization,createdAt:Date.now(),durationMs:performance.now()-n,size:r,toolchains:i,costProfile:pn(e.config.language,e.config.target,e.config.optimization,a),...e.dependencies===void 0?{}:{dependencyLockSha256:e.dependencies.lockSha256}}}async function ti(e,t,n){let r=performance.now();K(n,`compiling`,`Compiling with rustc ${I}`,.2);let i=fr(e),a=await q().compileRust({entry:e.config.entry,files:[...e.files,...i.files],optimization:e.config.optimization,dependencies:i.crates,rootExterns:i.roots});if(!a.success||!a.wasm)return{success:!1,diagnostics:Sn(a.diagnostics,{file:e.config.entry,source:`rustc`,message:a.stderr.trim()||`rustc failed without a diagnostic.`}),stdout:a.stdout,stderr:a.stderr,cacheHit:!1};let o=a.wasm,s={kind:`wasm`,...ei(e,t,r,o.byteLength,z(`rust`)),bytes:o};return{success:!0,diagnostics:a.diagnostics,artifact:s,stdout:a.stdout,stderr:a.stderr,cacheHit:!1}}function ni(e){return Object.values(e).reduce((e,t)=>e+(typeof t==`string`?Jr.encode(t).byteLength:t.byteLength),0)}async function ri(e,t,n){let r=performance.now(),i=lr(e);K(n,`compiling`,`Packaging Python sources`,.55);let a=Object.fromEntries(e.files.map(e=>[e.path,e.content]));Object.assign(a,i),a[`.wasm-oj/deterministic_runner.py`]=kn;let o=e.config.entry,s=gn(e,Ze,`python`,o);a[`wasm-oj.manifest.json`]=s;let c=_n(a);return{success:!0,diagnostics:[],artifact:{kind:`runtime-bundle`,...ei(e,t,r,ni(c),z(`python`)),name:`${e.name}.python-${e.config.target}.json`,runtimePackage:Ze,command:`python`,entry:o,files:c,manifest:s},stdout:``,stderr:``,cacheHit:!1}}async function ii(e,t,n){let r=performance.now();K(n,`compiling`,`Compiling with Go ${L}`,.3);let i=pr(e),a=await q().compileGo({entry:e.config.entry,files:e.files,dependencyFiles:i.files,optimization:e.config.optimization,dependencies:i.packages});if(!a.success||!a.wasm)return{success:!1,diagnostics:Sn(a.diagnostics,{file:e.config.entry,source:`go`,message:a.stderr.trim()||`Go compilation failed without a diagnostic.`}),stdout:a.stdout,stderr:a.stderr,cacheHit:!1};let o={kind:`wasm`,...ei(e,t,r,a.wasm.byteLength,z(`go`)),bytes:a.wasm};return{success:!0,diagnostics:a.diagnostics,artifact:o,stdout:a.stdout,stderr:a.stderr,cacheHit:!1}}async function ai(e,t,n){let r=performance.now(),i=e.files.find(t=>t.path===e.config.entry);if(!i||!i.path.endsWith(`.java`))return{success:!1,diagnostics:[{severity:`error`,message:`The Java entry must be a .java source file.`,file:e.config.entry,line:1,column:1,source:`project`}],stdout:``,stderr:``,cacheHit:!1};K(n,`compiling`,`Compiling Java ${i.path}`,.3);let a=await q().compileJava({entry:e.config.entry,files:e.files,optimization:e.config.optimization});if(!a.success||!a.wasm)return{success:!1,diagnostics:Sn(a.diagnostics,{file:e.config.entry,source:`java`,message:a.stderr.trim()||`Java compilation failed without a diagnostic.`}),stdout:a.stdout,stderr:a.stderr,cacheHit:!1};let o={kind:`wasm`,...ei(e,t,r,a.wasm.byteLength,z(`java`),Pt(`java`)),bytes:a.wasm};return{success:!0,diagnostics:a.diagnostics,artifact:o,stdout:a.stdout,stderr:a.stderr,cacheHit:!1}}function oi(e){return e.endsWith(`.ts`)?e.slice(0,-3)+`.js`:e}function si(e){let t=e.config.language===`typescript`?`.ts`:`.js`;return e.files.filter(e=>e.path.endsWith(t))}function ci(e){return si(e).filter(e=>!e.path.endsWith(`.d.ts`))}async function li(e,t){let n=si(e),r=ci(e),i=ur(e);K(t,`loading-toolchain`,`Loading TypeScript ${ot}/WASI`);let a=(await $r()).entrypoint;if(!a)throw Error(`The TypeScript/WASI compiler has no executable entrypoint.`);let o=r.map(e=>oi(e.path)),s=`/project/.wasm-oj/quickjs.d.ts`,c=await a.run({stdin:JSON.stringify({files:{...Object.fromEntries(e.files.map(e=>[`/project/${e.path}`,e.content])),...Object.fromEntries(Object.entries(i).filter(([,e])=>typeof e==`string`).map(([e,t])=>[`/project/${e}`,t])),[s]:Cn+wn+Tn},sources:[s,...n.map(e=>`/project/${e.path}`),...Object.entries(i).filter(([e,t])=>e.endsWith(`.d.ts`)&&typeof t==`string`).map(([e])=>`/project/${e}`)],outputs:o.map(e=>`/project/build/${e}`)})}),l=await cn(c,un,{collectStderr:!0}).finally(()=>c.free()),u=l.message,d={};if(u)for(let e of o){let t=u.files[`/project/build/${e}`];t!==void 0&&(d[e]=t)}return Object.assign(d,i),{files:d,stderr:l.stderr,response:u}}async function ui(e,t,n){let r=performance.now();if(!ci(e).some(t=>t.path===e.config.entry))return{success:!1,diagnostics:[{severity:`error`,message:`The ${e.config.language===`typescript`?`.ts`:`.js`} entry file is not a supported executable source.`,file:e.config.entry,line:1,column:1,source:`project`}],stdout:``,stderr:``,cacheHit:!1};let i,a=[],o=``;if(e.config.language===`javascript`)K(n,`compiling`,`Preparing JavaScript modules`,.5),i={...Object.fromEntries(ci(e).map(e=>[e.path,e.content])),...ur(e)};else{K(n,`compiling`,`Compiling TypeScript with TypeScript/WASI`,.5);let t=await li(e,n);i=t.files,o=t.stderr,a=xn(t.response?.diagnostics??``);let r=ci(e).every(e=>Object.hasOwn(i,oi(e.path)));if(!t.response||t.response.status!==0||!r||a.some(e=>e.severity===`error`))return{success:!1,diagnostics:Sn(a,{file:e.config.entry,source:`typescript`,message:o.trim()||t.response?.diagnostics.trim()||`TypeScript 7.0.2 did not return every compiled output.`}),stdout:``,stderr:o,cacheHit:!1}}let s=oi(e.config.entry),c=gn(e,rt,`qjs`,s);i[`wasm-oj.manifest.json`]=c;let l=_n(i),u={kind:`runtime-bundle`,...ei(e,t,r,ni(l),z(e.config.language)),name:`${e.name}.${e.config.language===`typescript`?`typescript`:`javascript`}-${e.config.target}.json`,runtimePackage:rt,command:`qjs`,entry:s,files:l,manifest:c};return{success:!0,diagnostics:a,artifact:u,stdout:``,stderr:o,cacheHit:!1}}async function di(e,t,n){let r={...e,files:zt(e.files)};if(sr(r),K(n,`checking`,`Validating project configuration`,.05),!r.files.some(e=>e.path===r.config.entry))return{success:!1,diagnostics:[{severity:`error`,message:`Configured entry file does not exist.`,file:r.config.entry,line:1,column:1,source:`project`}],stdout:``,stderr:``,cacheHit:!1};if(r.config.language===`c`||r.config.language===`cpp`){let e=q();return Ar(r,t,n,{runtime:e.getRuntime(),loadToolchainAsset:e.loadToolchainAsset,loadToolchainFile:e.loadToolchainFile,progress:e.progress,trace:e.trace})}return J.driver(r.config.language).build({project:r,cacheKey:t,requestId:n})}const J=new En;J.register({id:`rustc`,languages:[`rust`],build:({project:e,cacheKey:t,requestId:n})=>ti(e,t,n)}),J.register({id:`cpython`,languages:[`python`],build:({project:e,cacheKey:t,requestId:n})=>ri(e,t,n)}),J.register({id:`typescript`,languages:[`javascript`,`typescript`],build:({project:e,cacheKey:t,requestId:n})=>ui(e,t,n)}),J.register({id:`go`,languages:[`go`],build:({project:e,cacheKey:t,requestId:n})=>ii(e,t,n)}),J.register({id:`teavm-java`,languages:[`java`],build:({project:e,cacheKey:t,requestId:n})=>ai(e,t,n)});function fi(){Yr=void 0}function pi(e){return(e.config.target===`wasip1`||e.config.target===`wasix`)&&(e.config.language===`c`||e.config.language===`cpp`)}function mi(e){if(!pi(e))return 0;let t=e.config.language===`cpp`?/\.(?:cc|cpp|cxx)$/:/\.c$/,n=new Set(e.files.filter(e=>t.test(e.path)).map(e=>e.path));n.add(e.config.entry);let r=e.config.language===`cpp`?e.files.find(e=>e.path.split(`/`).at(-1)===`wasm-oj.pch.hpp`):void 0,i=r&&!er(r.content)?1:0;return n.size+i+2}function hi(e){let t=mi(e);if(t>8)throw Error(`The browser Clang project requires ${t} compiler stages; the verified per-Worker limit is 8.`);return t}const gi=`manifests`,Y=`metadata`,_i=`blobs`,X=`clang`,vi=new TextEncoder;var yi=class{adapter;restoration;ready=!1;persistedGeneration=0;constructor(e){this.adapter=e}async ensureLoaded(){if(!this.ready){this.restoration??=this.loadOnce();try{await this.restoration}catch(e){throw this.restoration=void 0,e}}}async persistIfDirty(){if(!this.ready)return!1;let e=this.adapter.capture(),t=e.manifest.generation;if(t===this.persistedGeneration)return!1;if(t<this.persistedGeneration)throw Error(`Clang build graph generation moved backwards within one compiler Worker.`);let n=await this.adapter.save(e);return this.persistedGeneration=t,n}async loadOnce(){let e=await this.adapter.load();e&&await this.adapter.restore(e);let t=this.adapter.capture().manifest.generation;if(e&&t!==e.manifest.generation)throw Error(`Restored Clang build graph generation does not match persisted state.`);this.persistedGeneration=t,this.ready=!0}};async function bi(){let e=await Si();try{let t=e.transaction([gi,Y,_i],`readonly`),n=t.objectStore(gi).get(X),r=t.objectStore(Y).get(X),[i,a]=await Promise.all([Ci(n),Ci(r)]);if(i===void 0&&a===void 0){await wi(t);return}let o=Oi(i),s=ki(a);if(s.generation!==o.generation)throw Error(`Persisted Clang build graph generation metadata does not match its manifest.`);let c=[...new Set(o.entries.map(e=>e.outputDigest))].sort(),l=t.objectStore(_i),u=await Promise.all(c.map(e=>Ci(l.get(e))));await wi(t);let d=u.map((e,t)=>Ai(e,c[t]));return Mi(ji(o),d,s),await Ti(e,s),{manifest:ji(o),blobs:d.map(({digest:e,bytes:t})=>({digest:e,bytes:t}))}}finally{e.close()}}async function xi(e){let t=Ei(e),n=Di(e),r=await Si();try{let e=r.transaction([gi,Y,_i],`readwrite`),i=e.objectStore(Y),a=await Ci(i.get(X));if(a!==void 0&&ki(a).generation===t.generation)return await wi(e),!1;let o=e.objectStore(_i),s=new Set((await Ci(o.getAllKeys())).map(String)),c=new Set(n.map(e=>e.digest));for(let e of n)s.has(e.digest)||o.add({digest:e.digest,byteLength:e.bytes.byteLength,bytes:e.bytes});for(let e of s)c.has(e)||o.delete(e);let l={id:X,...t},u=Ni(n),d=Pi(t),f=Fi(u,d);return e.objectStore(gi).put(l),i.put({id:X,generation:t.generation,blobBytes:u,manifestBytes:d,byteLength:f,lastAccessedAt:Date.now()}),await wi(e),!0}finally{r.close()}}function Si(){return new Promise((e,t)=>{let n=indexedDB.open(Fe.incrementalBuildCache,2);n.addEventListener(`upgradeneeded`,()=>{let e=n.result;for(let t of[...e.objectStoreNames])e.deleteObjectStore(t);e.createObjectStore(gi,{keyPath:`id`}),e.createObjectStore(Y,{keyPath:`id`}),e.createObjectStore(_i,{keyPath:`digest`})}),n.addEventListener(`success`,()=>e(n.result),{once:!0}),n.addEventListener(`error`,()=>{t(n.error??Error(`Unable to open the incremental build cache.`))},{once:!0}),n.addEventListener(`blocked`,()=>{t(Error(`Incremental build cache open is blocked by another tab.`))},{once:!0})})}function Ci(e){return new Promise((t,n)=>{e.addEventListener(`success`,()=>t(e.result),{once:!0}),e.addEventListener(`error`,()=>n(e.error??Error(`IndexedDB request failed.`)),{once:!0})})}function wi(e){return new Promise((t,n)=>{e.addEventListener(`complete`,()=>t(),{once:!0}),e.addEventListener(`abort`,()=>n(e.error??Error(`IndexedDB transaction aborted.`)),{once:!0}),e.addEventListener(`error`,()=>n(e.error??Error(`IndexedDB transaction failed.`)),{once:!0})})}async function Ti(e,t){let n=e.transaction(Y,`readwrite`);n.objectStore(Y).put({...t,lastAccessedAt:Date.now()}),await wi(n)}function Ei(e){if(!e||typeof e!=`object`||Array.isArray(e)||Object.keys(e).sort().join(`,`)!==`blobs,manifest`)throw Error(`Clang build graph state has an invalid shape.`);return ji(Oi({id:X,...e.manifest}))}function Di(e){if(!Array.isArray(e.blobs))throw Error(`Clang build graph state blobs must be an array.`);let t=e.blobs.map(e=>{if(!e||typeof e!=`object`||Array.isArray(e)||Object.keys(e).sort().join(`,`)!==`bytes,digest`)throw Error(`Clang build graph state contains a malformed blob.`);if(typeof e.digest!=`string`||!/^[0-9a-f]{64}$/.test(e.digest)||!(e.bytes instanceof Uint8Array))throw Error(`Clang build graph state contains invalid blob metadata.`);return e});for(let e=0;e<t.length;e+=1)if(e>0&&t[e-1].digest>=t[e].digest)throw Error(`Clang build graph state blobs are not canonical or contain duplicates.`);let n=new Set(e.manifest.entries.map(e=>e.outputDigest));if(n.size!==t.length||t.some(e=>!n.has(e.digest)))throw Error(`Clang build graph state blobs do not exactly match its manifest references.`);return t}function Oi(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Persisted Clang build graph manifest has an invalid shape.`);let t=e;if(Object.keys(t).sort().join(`,`)!==`entries,generation,id,schema,version`||t.id!==X||t.schema!==j.incrementalBuildGraph||t.version!==2||!Number.isSafeInteger(t.generation)||t.generation<0||!Array.isArray(t.entries))throw Error(`Persisted Clang build graph manifest does not use the active storage contract.`);return t}function ki(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Persisted Clang build graph metadata has an invalid shape.`);let t=e;if(Object.keys(t).sort().join(`,`)!==`blobBytes,byteLength,generation,id,lastAccessedAt,manifestBytes`||t.id!==X||!Z(t.generation)||!Z(t.blobBytes)||!Z(t.manifestBytes)||!Z(t.byteLength)||!Z(t.lastAccessedAt)||Fi(t.blobBytes,t.manifestBytes)!==t.byteLength)throw Error(`Persisted Clang build graph metadata has invalid storage accounting.`);return t}function Ai(e,t){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Persisted Clang build graph blob '${t}' is missing.`);let n=e;if(Object.keys(n).sort().join(`,`)!==`byteLength,bytes,digest`||n.digest!==t||!Z(n.byteLength)||!(n.bytes instanceof Uint8Array)||n.bytes.byteLength!==n.byteLength)throw Error(`Persisted Clang build graph blob '${t}' has invalid metadata.`);return n}function ji(e){return{schema:e.schema,version:e.version,generation:e.generation,entries:e.entries}}function Mi(e,t,n){if(Ni(t)!==n.blobBytes||Pi(e)!==n.manifestBytes)throw Error(`Persisted Clang build graph storage accounting does not match its records.`)}function Ni(e){let t=0,n=new Set;for(let r of e){if(n.has(r.digest))throw Error(`Clang build graph repeats blob '${r.digest}'.`);n.add(r.digest),t=Fi(t,r.bytes.byteLength)}return t}function Pi(e){return vi.encode(JSON.stringify(e)).byteLength}function Fi(e,t){let n=e+t;if(!Number.isSafeInteger(n)||n<0)throw Error(`Incremental build graph byte length exceeds the safe integer range.`);return n}function Z(e){return Number.isSafeInteger(e)&&e>=0}Object.freeze([`wasi_snapshot_preview1.random_get`,`wasi_snapshot_preview1.clock_time_get`]),Object.freeze({version:I,packageAsset:lt,packageCompressedSha256:dt,packageSha256:ft,manifestAsset:ut,manifestSha256:pt,target:`wasm32-wasip1-threads`,edition:`2024`});var Ii=``+new URL(`rustc-stage.worker-CXdxGODv.js`,import.meta.url).href,Li=``+new URL(`go-stage.worker-BIUc7Tsv.js`,import.meta.url).href;`${L.split(`.`).slice(0,2).join(`.`)}`,Object.freeze({version:L,target:`wasip1/wasm`,packageAsset:mt,packageCompressedSha256:_t,packageSha256:vt,manifestAsset:ht,manifestSha256:yt,standardLibraryAsset:gt,standardLibraryCompressedSha256:bt,standardLibrarySha256:xt,compilerSha256:St,linkerSha256:Ct});var Ri=``+new URL(`java-stage.worker-COWR2SIP.js`,import.meta.url).href;Object.freeze({version:wt,package:Tt,compilerAsset:Et,compilerSha256:kt,compileClasslibAsset:Dt,compileClasslibSha256:At,runtimeClasslibAsset:Ot,runtimeClasslibSha256:jt});function zi(e,t={}){let n=Bi(e,{liveness:!0}),r;try{r=new Worker(n.url,{...t,type:`module`})}finally{n.revoke()}return Gi(r,t.name),r}function Bi(e,{liveness:t=!1}={}){let n=qi(),r=Ji(e),i=new Blob([`const pendingMessages = [];
|
|
445
445
|
`,`const queueMessage = (event) => { event.stopImmediatePropagation(); pendingMessages.push(event.data); };
|
package/dist/index.js
CHANGED
|
@@ -45,7 +45,7 @@ import{Engine as e,WASM_OJ_STORAGE as t,WEIGHTED_METER_MODEL as n,assertCompiler
|
|
|
45
45
|
#include <utility>
|
|
46
46
|
#include <variant>
|
|
47
47
|
#include <vector>
|
|
48
|
-
`;new TextDecoder;function $e(e){return e===Qe}function et(e){return(e.config.target===`wasip1`||e.config.target===`wasix`)&&(e.config.language===`c`||e.config.language===`cpp`)}function tt(e){if(!et(e))return 0;let t=e.config.language===`cpp`?/\.(?:cc|cpp|cxx)$/:/\.c$/,n=new Set(e.files.filter(e=>t.test(e.path)).map(e=>e.path));n.add(e.config.entry);let r=e.config.language===`cpp`?e.files.find(e=>e.path.split(`/`).at(-1)===`wasm-oj.pch.hpp`):void 0,i=r&&!$e(r.content)?1:0;return n.size+i+2}function nt(e){let t=tt(e);if(t>8)throw Error(`The browser Clang project requires ${t} compiler stages; the verified per-Worker limit is 8.`);return t}function rt(e,t){return!e.success||!e.artifact||!e.buildGraph?t:(e.buildGraph.misses.pch??0)+(e.buildGraph.misses.object??0)+(e.buildGraph.misses[`link-result`]??0)}Object.freeze({c:`cpp`,cpp:`cpp`,rust:`cargo`,python:`pypi`,javascript:`npm`,typescript:`npm`,go:`go`}),`${O.split(`.`).slice(0,2).join(`.`)}`;var it=18e4;Object.freeze({version:O,target:`wasip1/wasm`,packageAsset:Oe,packageCompressedSha256:k,packageSha256:A,manifestAsset:ke,manifestSha256:j,standardLibraryAsset:Ae,standardLibraryCompressedSha256:M,standardLibrarySha256:je,compilerSha256:Me,linkerSha256:Ne});var at=`wasm32-wasip1-threads`,ot=`2024`,st=18e4;Object.freeze([`wasi_snapshot_preview1.random_get`,`wasi_snapshot_preview1.clock_time_get`]),Object.freeze({version:T,packageAsset:Te,packageCompressedSha256:De,packageSha256:E,manifestAsset:Ee,manifestSha256:D,target:at,edition:ot});var ct=6e4,lt=12e4,ut=it+1e4,dt=st+1e4;function ft(e){if(e===`java`)return 19e4;if(!v(e))throw Error(`The built-in WASM-OJ compiler does not support language '${e}'.`);return e===`c`||e===`cpp`?ct:e===`rust`?dt:e===`go`?ut:lt}function pt(e){return e.config.language===`rust`}function mt(e){return pt(e)?2:0}var ht=``+new URL(`assets/compiler.worker-
|
|
48
|
+
`;new TextDecoder;function $e(e){return e===Qe}function et(e){return(e.config.target===`wasip1`||e.config.target===`wasix`)&&(e.config.language===`c`||e.config.language===`cpp`)}function tt(e){if(!et(e))return 0;let t=e.config.language===`cpp`?/\.(?:cc|cpp|cxx)$/:/\.c$/,n=new Set(e.files.filter(e=>t.test(e.path)).map(e=>e.path));n.add(e.config.entry);let r=e.config.language===`cpp`?e.files.find(e=>e.path.split(`/`).at(-1)===`wasm-oj.pch.hpp`):void 0,i=r&&!$e(r.content)?1:0;return n.size+i+2}function nt(e){let t=tt(e);if(t>8)throw Error(`The browser Clang project requires ${t} compiler stages; the verified per-Worker limit is 8.`);return t}function rt(e,t){return!e.success||!e.artifact||!e.buildGraph?t:(e.buildGraph.misses.pch??0)+(e.buildGraph.misses.object??0)+(e.buildGraph.misses[`link-result`]??0)}Object.freeze({c:`cpp`,cpp:`cpp`,rust:`cargo`,python:`pypi`,javascript:`npm`,typescript:`npm`,go:`go`}),`${O.split(`.`).slice(0,2).join(`.`)}`;var it=18e4;Object.freeze({version:O,target:`wasip1/wasm`,packageAsset:Oe,packageCompressedSha256:k,packageSha256:A,manifestAsset:ke,manifestSha256:j,standardLibraryAsset:Ae,standardLibraryCompressedSha256:M,standardLibrarySha256:je,compilerSha256:Me,linkerSha256:Ne});var at=`wasm32-wasip1-threads`,ot=`2024`,st=18e4;Object.freeze([`wasi_snapshot_preview1.random_get`,`wasi_snapshot_preview1.clock_time_get`]),Object.freeze({version:T,packageAsset:Te,packageCompressedSha256:De,packageSha256:E,manifestAsset:Ee,manifestSha256:D,target:at,edition:ot});var ct=6e4,lt=12e4,ut=it+1e4,dt=st+1e4;function ft(e){if(e===`java`)return 19e4;if(!v(e))throw Error(`The built-in WASM-OJ compiler does not support language '${e}'.`);return e===`c`||e===`cpp`?ct:e===`rust`?dt:e===`go`?ut:lt}function pt(e){return e.config.language===`rust`}function mt(e){return pt(e)?2:0}var ht=``+new URL(`assets/compiler.worker-CD4QCBe0.js`,import.meta.url).href;function gt(e,t={}){let n=_t(e,{liveness:!0}),r;try{r=new Worker(n.url,{...t,type:`module`})}finally{n.revoke()}return St(r,t.name),r}function _t(e,{liveness:t=!1}={}){let n=wt(),r=Tt(e),i=new Blob([`const pendingMessages = [];
|
|
49
49
|
`,`const queueMessage = (event) => { event.stopImmediatePropagation(); pendingMessages.push(event.data); };
|
|
50
50
|
`,`globalThis.addEventListener("message", queueMessage);
|
|
51
51
|
`,`Object.defineProperty(globalThis, "__wasmOjModuleWorkerBaseUrl", { value: ${JSON.stringify(n.href)} });\n`,...t?[yt]:[],`try { await import(${JSON.stringify(r)}); } finally { globalThis.removeEventListener("message", queueMessage); }\n`,`for (const data of pendingMessages) globalThis.dispatchEvent(new MessageEvent("message", { data }));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wasm-oj/browser",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "Browser compiler and runner host for the WASM-OJ SDK.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "JacobLinCool",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"node": ">=24.18.0 <25"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@wasm-oj/contracts": "0.2.
|
|
48
|
-
"@wasm-oj/core": "0.2.
|
|
47
|
+
"@wasm-oj/contracts": "0.2.6",
|
|
48
|
+
"@wasm-oj/core": "0.2.6",
|
|
49
49
|
"@wasmer/sdk": "0.10.0",
|
|
50
50
|
"es-module-lexer": "2.3.1",
|
|
51
51
|
"fflate": "0.8.3"
|