/** content/ → src/generated/ (route manifest + one JSON per page + an index module). Never hand-edit src/generated. */ import { mkdirSync, readdirSync, rmSync, writeFileSync } from 'node:fs'; import { resolve } from 'node:path'; import { compilePages, CONTENT_DIR, type PublicationLevel } from '../src/publication/compile-pages.server.ts'; const level = (process.env.TDG_PUBLICATION_LEVEL ?? 'published') as PublicationLevel; if (!['published', 'demo'].includes(level)) throw new Error(`TDG_PUBLICATION_LEVEL must be published or demo, got ${level}`); const out = resolve(import.meta.dirname, '../src/generated'); const { pages, manifest, drafts } = compilePages(CONTENT_DIR, level); rmSync(resolve(out, 'pages'), { recursive: true, force: true }); mkdirSync(resolve(out, 'pages'), { recursive: true }); for (const page of pages) writeFileSync(resolve(out, 'pages', `${page.id}.json`), JSON.stringify(page, null, 2) + '\n'); writeFileSync(resolve(out, 'route-manifest.json'), JSON.stringify({ level, routes: manifest, drafts }, null, 2) + '\n'); const imports = pages.map((p, i) => `import p${i} from './pages/${p.id}.json';`).join('\n'); writeFileSync(resolve(out, 'index.ts'), `// GENERATED by scripts/compile-content.ts — do not edit.\nimport type { CompiledPage } from '../contracts/page.ts';\n${imports}\nexport const pages: CompiledPage[] = [${pages.map((_, i) => `p${i} as unknown as CompiledPage`).join(', ')}];\nexport const pagesById: Record = Object.fromEntries(pages.map(p => [p.id, p]));\nexport const pagesByPath: Record = Object.fromEntries(pages.map(p => [p.path, p]));\n`); console.log(`${level}: ${pages.length} pages compiled (${readdirSync(resolve(out, 'pages')).length} files), ${drafts.length} drafts held back: ${drafts.join(', ') || 'none'}`);