Files
hellow-da-sb 8fe594ff6c feat(codegen): P 层闭环 —— 模板生成页面 + 画廊生成面板
- src/codegen.ts:PageDeclaration → definePage 源码(漂亮缩进,语法合法)
- src/render.ts:导出 generatePageSource/starterPageFrom;画廊受控 selected/onSelect
- playground generator.tsx:选布局→填标题→生成→复制/保存到 pages/
- vite 中间件 /__vr-save:浏览器 POST 落盘 pages/(HMR 生效)
- 验证:codegen 产物通过工程 tsc;保存中间件落盘成功;画廊 UI headless 通过
2026-09-03 01:27:11 +08:00

39 lines
1.3 KiB
TypeScript

/**
* 用 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'))