未命名 2
分类:shop项目
发布于:
阅读时间:16 分钟
✅ Autogen CLI —— 完整功能需求(含死角防御)
🔑 核心原则不变
- 瀑布流感应:S → A → H
- 哨兵模式:只动
@generated标记代码 - 契约优先 + 类型安全
🧩 四大关键增强点(工程化补全)
1. 类型穿透(Type Tunneling)
目标:Controller 的 Elysia 校验类型 = Service 参数类型
-
实现方式:
ControllerTask使用ts-morph解析 Service 方法签名- 若参数类型为
UserContract["Create"],则:-
提取
UserContract -
提取
"Create"成员名 -
在生成的路由中注入:
{ body: UserContract.Create // ← 运行时校验对象 }
-
-
效果:编译期类型与运行时校验完全对齐,零偏差。
2. 上下文感知模板(Context-Aware Templates)
目标:模板能根据表结构动态生成逻辑
-
元数据收集(在
scan table.schema.ts时):columns: ['id', 'name', 'tenantId', 'createdAt'], primaryKey: 'id', hasTenantId: true, isSoftDelete: true -
模板示例(
templates/service/list.hbs):async list(ctx) { return db.{{table}}.findMany({ {{#if hasTenantId}} where: { tenantId: ctx.user.tenantId }, {{/if}} ... }); } -
引擎:使用
handlebars+ 自定义 helper,支持条件/循环。
3. 命名空间冲突防御(Import Alias Config)
目标:避免多后端项目中路径冲突或重复导入
-
配置扩展:
outputs: { service: [ { path: "./api-main/services", alias: { contract: "@/contract" } }, { path: "./api-internal/services", alias: { contract: "~/shared/contract" } } ] } -
生成时:
-
根据
alias动态生成 import 语句:import { UserContract } from "@/contract"; // api-main import { UserContract } from "~/shared/contract"; // api-internal
-
✅ 解决 monorepo / 多工程下的模块引用混乱问题。
4. 孤儿代码清理(Orphan Clean-up)
目标:防止废弃的
@generated代码堆积
-
新增命令:
$ autogen check # 检查孤儿代码(只读) $ autogen clean # 交互式删除孤儿代码 -
检查逻辑:
- 扫描所有文件中的
@generated块 - 对比当前
manifest中的实体+方法清单 - 若存在“标记存在但 manifest 已移除” → 标记为孤儿
- 扫描所有文件中的
-
交互示例:
? Found orphaned generated code: - UserService.export (not in manifest) - userController.post("/export") Delete these? (Y/n)
💡 重要:默认
sync不删除,需显式clean,避免误删。
🚀 开发路线图(优先级排序)
| 阶段 | 模块 | 关键任务 | 为什么优先 |
|---|---|---|---|
| 1 | ast-utils.ts | - Elysia 链式调用节点寻址 <br>- // @generated 注释绑定 <br>- Service 方法 /** @generated */ 识别 | 最难、最核心,决定能否安全更新 |
| 2 | scanner.ts | - 扫描 Table → 提取 columns <br>- 扫描 Service → 提取方法+类型 <br>- 扫描 Controller → 提取路由 | 驱动瀑布流的数据源 |
| 3 | template-engine.ts + templates/ | - Handlebars 渲染 <br>- 上下文注入(columns, pk 等) <br>- 支持 @custom:xxx 模板 | 生成质量的关键 |
| 4 | tasks/ | - ServiceTask <br>- ControllerTask(含 Type Tunneling) <br>- HookTask | 分层实现感应逻辑 |
| 5 | CLI (citty) | - init / scan / sync / clean <br>- 多后端循环 <br>- 自动注册 | 用户入口 |
| 6 | 配置系统 (c12) | - 支持 alias、autoRegister、manifest | 工程灵活性保障 |
✅ 最终交付物特征
- 安全:手写代码永不被覆盖
- 智能:路由/参数/中间件自动推导
- 灵活:模板可定制、多后端支持
- 干净:孤儿代码可检测、可清理
- 可靠:类型从 Contract → Service → Controller 全链路对齐