/** Offline B04 lifecycle regression. --build-only emits a standalone own-component fixture. */ import fs from 'node:fs' import path from 'node:path' import { createRequire } from 'node:module' const require = createRequire(import.meta.url) fs.mkdirSync('.tmp',{recursive:true}) const output=fs.mkdtempSync(path.resolve('.tmp/b04-image-')) await require('esbuild').build({entryPoints:['scripts/b04-image-lifecycle-fixture.tsx'],outfile:path.join(output,'fixture.js'),bundle:true,platform:'browser',format:'iife',jsx:'automatic',loader:{'.woff2':'dataurl','.woff':'dataurl','.ttf':'dataurl','.svg':'dataurl','.png':'dataurl'},logLevel:'error'}) fs.writeFileSync(path.join(output,'index.html'),`
Running synthetic own-component frame probeā¦`) if(process.argv.includes('--build-only')){console.log(JSON.stringify({result:'BUILD_ONLY',output,limits:'Not executed in a native browser; open index.html in a permitted browser for synthetic consecutive-frame probe.'}));process.exit(0)} const {JSDOM}=require(process.env.YCODE_TEST_DOM_MODULE||process.env.YCODE_JSDOM_MODULE||'jsdom') const dom=new JSDOM('',{url:'https://fixture.invalid',runScripts:'outside-only',pretendToBeVisual:true}) const w=dom.window w.fetch=()=>{throw Error('Fixture forbids network')} w.ResizeObserver=class {observe(){}unobserve(){}disconnect(){}} w.matchMedia=()=>({matches:false,addEventListener(){},removeEventListener(){}}) let timer try { w.eval(fs.readFileSync(path.join(output,'fixture.js'),'utf8')) const report=await Promise.race([w.__b04.run(),new Promise((_,reject)=>{timer=setTimeout(()=>reject(Error('B04 fixture timed out after 20s')),20000)})]) fs.writeFileSync(path.join(output,'report.json'),JSON.stringify(report,null,2)) console.log(JSON.stringify({result:'PASS',checks:report.checks.length,samples:report.samples.length,output,limits:report.limits})) }finally{clearTimeout(timer);dom.window.close()}