// scripts/ci/verify-desktop-renderer-bundles.mjs
//
// Fails packaging when a renderer page ships without the assets it references.
//
// Why this exists: Vite only bundles ')
const goodProblems = collectProblems(goodRoot, pages)
if (goodProblems.length !== 0) {
failures.push(`complete build reported problems: ${goodProblems.join('; ')}`)
}
const brokenRoot = path.join(tmpRoot, 'broken')
bundlePage(brokenRoot, '')
const brokenProblems = collectProblems(brokenRoot, pages)
if (!brokenProblems.some((problem) => problem.includes('missing asset'))) {
failures.push('missing asset was not detected')
}
if (!brokenProblems.some((problem) => problem.includes('classic script'))) {
failures.push('classic script tag was not detected')
}
const missingPageProblems = collectProblems(goodRoot, ['popups/absent/index.html'])
if (!missingPageProblems.some((problem) => problem.startsWith('missing built page'))) {
failures.push('missing page was not detected')
}
} finally {
rmSync(tmpRoot, { recursive: true, force: true })
}
if (failures.length > 0) {
console.error('verify-desktop-renderer-bundles self-test failed:')
for (const failure of failures) console.error(`- ${failure}`)
process.exit(1)
}
console.log('verify-desktop-renderer-bundles self-test: OK')
}
if (process.argv.slice(2).includes('--self-test')) {
selfTest()
} else if (!existsSync(builtRendererDir)) {
console.error(`Renderer build not found: ${builtRendererDir}`)
console.error(' build: npm run build --workspace=@d3ro/desktop')
process.exit(1)
} else {
const pages = expectedPages()
const problems = collectProblems(builtRendererDir, pages)
if (problems.length > 0) {
console.error('Desktop renderer bundle verification failed:')
for (const problem of problems) console.error(`- ${problem}`)
console.error(' rebuild: npm run build --workspace=@d3ro/desktop')
process.exit(1)
}
console.log(`Desktop renderer bundle verification passed: ${pages.length} page(s) with all assets on disk`)
}