fix(B04): prevent image URI flash across initial render and detail remounts
This commit is contained in:
1 parent
0b613e522d
commit
342820690f
7 files changed
+217
-24
No files matched your search
@@ -0,0 +1,23 @@
|
||||
/** 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'),`<!doctype html><meta charset="utf-8"><meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src data: blob:; font-src data:; connect-src 'none'"><link rel="stylesheet" href="fixture.css"><style>body{margin:20px;width:800px}.markdown-content__image{max-height:400px;max-width:100%}</style><div id="root"></div><pre id="report">Running synthetic own-component frame probe…</pre><script src="fixture.js"></script><script>window.__b04.probe().then(r=>{window.__b04Report=r;document.getElementById('report').textContent=JSON.stringify(r,null,2)}).catch(e=>{window.__b04Error=String(e);document.getElementById('report').textContent=String(e)})</script>`)
|
||||
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('<!doctype html><div id="root"></div>',{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()}
|
||||
Reference in new issue
Block a user