返回首页

未命名 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,避免误删。


🚀 开发路线图(优先级排序)

阶段模块关键任务为什么优先
1ast-utils.ts- Elysia 链式调用节点寻址 <br>- // @generated 注释绑定 <br>- Service 方法 /** @generated */ 识别最难、最核心,决定能否安全更新
2scanner.ts- 扫描 Table → 提取 columns <br>- 扫描 Service → 提取方法+类型 <br>- 扫描 Controller → 提取路由驱动瀑布流的数据源
3template-engine.ts + templates/- Handlebars 渲染 <br>- 上下文注入(columns, pk 等) <br>- 支持 @custom:xxx 模板生成质量的关键
4tasks/- ServiceTask <br>- ControllerTask(含 Type Tunneling) <br>- HookTask分层实现感应逻辑
5CLI (citty)- init / scan / sync / clean <br>- 多后端循环 <br>- 自动注册用户入口
6配置系统 (c12)- 支持 aliasautoRegistermanifest工程灵活性保障

✅ 最终交付物特征

  • 安全:手写代码永不被覆盖
  • 智能:路由/参数/中间件自动推导
  • 灵活:模板可定制、多后端支持
  • 干净:孤儿代码可检测、可清理
  • 可靠:类型从 Contract → Service → Controller 全链路对齐