feat: vibe-registry M1 — 万物皆注册框架骨架
- core: registerLayout/Widget/Action(泛型)/Schema + 校验闸门 - definePage: 页面只管业务,结构来自注册表 - presets: admin / app-shell 预设布局(vr add 物化) - cli: vr list/add/update 防覆盖 - examples/qa-orchestrator: 实战编排验证(workspace:* 依赖)
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* M1 验证脚本:类型 + 注册 + 校验闸门
|
||||
* 演示:注册布局/widget → definePage 声明 → 引用校验
|
||||
* 运行:node --experimental-strip-types scripts/smoke.ts
|
||||
*/
|
||||
import { createRegistry, registerLayout, registerWidget, definePage } from '../src/index.ts'
|
||||
|
||||
const reg = createRegistry()
|
||||
|
||||
// 万物皆注册:布局与组件都要先注册,才有 id 可用
|
||||
reg.registerLayout({
|
||||
kind: 'layout',
|
||||
id: 'admin',
|
||||
slots: ['header', 'content'],
|
||||
description: '后台骨架',
|
||||
preview: { title: 'Admin', demoBlocks: [] },
|
||||
})
|
||||
reg.registerWidget({
|
||||
kind: 'widget',
|
||||
id: 'data-table',
|
||||
component: 'TableMock', // M1 不接真实 UI,组件占位
|
||||
description: '数据表格',
|
||||
})
|
||||
reg.registerWidget({
|
||||
kind: 'widget',
|
||||
id: 'page-header',
|
||||
component: 'HeaderMock',
|
||||
description: '页头',
|
||||
})
|
||||
|
||||
// 合法页面:全部引用已注册 id
|
||||
const page = definePage(
|
||||
{
|
||||
layout: 'admin',
|
||||
title: '订单',
|
||||
blocks: [
|
||||
{ widget: 'page-header', props: { title: '订单管理' } },
|
||||
{ widget: 'data-table', bind: { rows: 'orders' } },
|
||||
],
|
||||
async setup() {
|
||||
return { orders: [{ id: 1, total: 9.9 }] }
|
||||
},
|
||||
},
|
||||
reg,
|
||||
)
|
||||
console.log('✓ 合法页面通过校验:', page.title, page.layout, page.blocks.length, 'blocks')
|
||||
|
||||
// 非法页面:引用了未注册 widget → 校验闸门必须抛错
|
||||
try {
|
||||
definePage(
|
||||
{
|
||||
layout: 'admin',
|
||||
blocks: [{ widget: 'magic-graph' }], // ← 未注册
|
||||
},
|
||||
reg,
|
||||
)
|
||||
console.error('✗ 应当抛错但没有(校验闸门失效!)')
|
||||
process.exit(1)
|
||||
} catch (e) {
|
||||
console.log('✓ 校验闸门拦截未注册引用:', (e as Error).message.split('\n')[0])
|
||||
}
|
||||
|
||||
// 重复注册同 id → 必须抛错
|
||||
try {
|
||||
reg.registerLayout({ kind: 'layout', id: 'admin', slots: [], description: 'dup' })
|
||||
console.error('✗ 重复注册未抛错(id 唯一性失效!)')
|
||||
process.exit(1)
|
||||
} catch (e) {
|
||||
console.log('✓ 重复注册被拒(id 唯一):', (e as Error).message.split('\n')[0])
|
||||
}
|
||||
|
||||
console.log('smoke OK')
|
||||
Reference in New Issue
Block a user