Files
metabuilder/tools/validate-codegen-export.ts

50 lines
1.3 KiB
TypeScript

#!/usr/bin/env tsx
import { mkdir, writeFile } from 'node:fs/promises'
import { fileURLToPath } from 'node:url'
import JSZip from 'jszip'
import { generateCodegenZip } from '../frontends/nextjs/src/lib/codegen/generate-codegen-zip'
const spec = {
projectName: 'neon-arcade-export',
packageId: 'arcade_lobby',
runtime: 'desktop',
tone: 'neon',
brief: 'Validates the Codegen Studio bundle outputs.',
}
const rootDir = spec.projectName.replace(/[^a-z0-9-]/gi, '-').toLowerCase()
const outputDir = fileURLToPath(new URL('../.tmp', import.meta.url))
const outputFile = `${outputDir}/${spec.projectName}.zip`
const assertZipContains = async (zipBuffer: Buffer) => {
const zip = await JSZip.loadAsync(zipBuffer)
const paths = [
`${rootDir}/README.md`,
`${rootDir}/src/app/page.tsx`,
`${rootDir}/cli/main.cpp`,
`${rootDir}/spec.json`,
]
for (const entry of paths) {
if (!zip.file(entry)) {
throw new Error(`Missing expected entry ${entry}`)
}
}
}
const run = async () => {
await mkdir(outputDir, { recursive: true })
const { zipBuffer } = await generateCodegenZip(spec)
await assertZipContains(zipBuffer)
await writeFile(outputFile, zipBuffer)
console.log('Codegen export validated at', outputFile)
}
run().catch((error) => {
console.error('Codegen export validation failed:', error)
process.exit(1)
})