io-version-probe.mjs (2775B)
1 // Actual selected production adapter, independent constructor-only bundles. 2 export async function run(_control,backend){ 3 const assert=(value,message)=>{if(!value)throw Error(message);}; 4 const base=new URL('../',document.querySelector('script[type=module][src]').src); 5 const {createRuntimeSession}=(await import(new URL('dist/probe-api.js',base))).runtimeSession; 6 const fixtures=await(await fetch('/runtime-fixtures.json')).json(); 7 const checks=[];const s=await createRuntimeSession(backend,false); 8 const host={before:async()=>{},after:()=>{},read:async()=>'',write:()=>{},running:()=>{}}; 9 const load=async name=>{const f=fixtures[name];await s.load(new Uint8Array(f.bytes),f.hash);}; 10 try{ 11 await load('pure-number'); 12 assert((await s.run('root',[],'number','pure',host)).value==='42','pure evaluation'); 13 checks.push(backend+' pure evaluation'); 14 for(const name of ['version','version-effect']){ 15 await load(name);assert(await s.probeIO('root')===true,'inert probe recognizes supported v2 framing'); 16 let callbacks=0;const forbidden=()=>{callbacks++;throw Error('unexpected host callback');};let rejected=false; 17 try{await s.run('root',[],'tree','io',{before:forbidden,after:forbidden,read:forbidden,write:forbidden,running:forbidden});} 18 catch(error){assert(/IO version 2 requires a structured terminal host/.test(error.message),'wrong rejection: '+error.message);rejected=true;} 19 assert(rejected&&callbacks===0,'legacy host accepted v2 or was invoked'); 20 } 21 for(const name of ['unknown-version','padded-v1','v1-output']){ 22 await load(name);assert(!await s.probeIO('root'),'unknown/noncanonical version inert rejection'); 23 let unknownCallbacks=0;const never=()=>{unknownCallbacks++;throw Error('unknown version invoked host');}; 24 try{await s.run('root',[],'tree','io',{...host,selected:never,structured:{open:never,event:never,close:never}});throw Error('unknown version accepted');} 25 catch(error){assert(/Unsupported tricuIO version/.test(error.message),'unknown version error');} 26 assert(unknownCallbacks===0,'unknown framing reached callbacks'); 27 } 28 checks.push(backend+' rejects v2 on legacy hosts before callbacks, including overlapping v1 output; no retry'); 29 await load('pure-number'); 30 assert((await s.run('root',[],'number','pure',host)).value==='42','reuse after rejection'); 31 checks.push(backend+' rejects historical v1 without callbacks; pure runtime remains reusable'); 32 }finally{s.dispose();} 33 const compiler=await createRuntimeSession(backend,true); 34 try{ 35 await compiler.compile('answer = 42'); 36 assert((await compiler.inspectDefinition('answer','number')).value==='42','pure compiler'); 37 checks.push(backend+' separately pinned pure compiler remains usable'); 38 }finally{compiler.dispose();} 39 return {backend,checks}; 40 }