/** * 用 codegen 生成真实页面源码,写入 pages/,验证产物可被工程编译 * 不依赖 React/tsx 注册 —— 用轻量模拟注册表 * 运行:node --experimental-strip-types scripts/gen-and-save.ts */ import { createRegistry } from 'vibe-registry' import { generatePageSource, starterPageFrom } from 'vibe-registry/render' import { writeFileSync, mkdirSync } from 'node:fs' import { join, dirname } from 'node:path' import { fileURLToPath } from 'node:url' const reg = createRegistry() reg.registerLayout({ kind: 'layout', id: 'admin', slots: ['sidebar', 'header', 'content', 'footer'], description: 't', preview: { title: 'Admin', demoBlocks: [{ slot: 'content', widget: 'data-table', props: {} }], }, }) reg.registerWidget({ kind: 'widget', id: 'data-table', description: 't' }) const page = starterPageFrom('admin', reg, '商品管理') const src = generatePageSource(page, { products: [ { id: 'P01', name: '键盘', price: 299, stock: 42 }, { id: 'P02', name: '鼠标', price: 99, stock: 120 }, ], }) const out = join(dirname(fileURLToPath(import.meta.url)), '..', 'pages', 'page-products.tsx') mkdirSync(dirname(out), { recursive: true }) writeFileSync(out, src, 'utf8') console.log('已生成:', out) console.log('--- 代码(前 26 行)---') console.log(src.split('\n').slice(0, 26).join('\n'))