Skip to content

生成产物与重新生成

生成的是 TypeScript 源码,不是独立 HTTP 实现。装饰器类需启用 experimentalDecorators: true 编译;安装实际输出 import 的包。

产物类型

产物生成规则
types.ts按 schema 名称空间分组的组件模型类型/枚举及导入的 Wow 类型
*ApiClient.ts带 operationId 的普通 tagged 操作;操作全部 tag 都必须是可用 API tag;排除 wow/Actuator/已解析聚合 tag
commandClient.ts已解析聚合的命令路径、请求体别名、普通及流式命令客户端
queryClient.ts聚合 QueryClientFactory、状态/字段类型、领域事件联合(空集为 never)及事件标题枚举
boundedContext.ts已解析上下文的别名常量
index.ts.ts 文件及非空子目录的递归导出
.fetcher-generator.json版本 1 所有权清单,记录生成 .ts 文件的 SHA-256

普通方法暴露位置路径参数、ParameterRequest(multipart 为 FormData;JSON 引用可用时使用对应模型)及可选 attributes。query/header/cookie 数据放在 request 中,不会逐项展开为位置参数。路径级参数会继承,操作级参数按 in/name 覆盖。缺少 operationId 或没有可用 tag 的操作不生成。

返回推导只读取 200。优先 JSON schema,然后 wildcard schema,再 SSE。wildcard 字符串响应使用文本提取;识别 SSE 后返回 JsonServerSentEventStream,无法推导事件模型时回退到 any。无法推导正文时回退为 Promise<Response>,提取原生 Response。其他 2xx 状态不会自动等价。生成方法依赖装饰器在运行时替换 throw autoGeneratedError(...) 占位实现。

运行时配置

bash
pnpm add @ahoo-wang/fetcher @ahoo-wang/fetcher-decorator @ahoo-wang/fetcher-eventstream @ahoo-wang/fetcher-wow
pnpm exec fetcher-generator generate -i ./openapi.json -o ./src/generated -t ./tsconfig.json
pnpm exec tsc --noEmit -p ./tsconfig.json

通过 ApiMetadata 构造器创建生成的客户端,通常传 { fetcher }。应检查实际生成的方法名和签名,不要猜测 tag 或 operationId 的转换结果。为目标服务配置 Fetcher.baseURL;生成过程不调用生成 API。参见声明式端点

所有权与失败

再次生成到相同路径的文件会被替换:手写定制应放在生成文件之外。陈旧文件仅在旧清单记录且内容 hash 未改变时删除。已修改的陈旧文件及无关文件会保留;保留不代表它属于当前生成 API。重建 index 仍可能包含项目中已有的源文件。

清单无效或生成路径逃出输出根目录会抛错。保存完成后才删除陈旧文件并写新清单,但整个目录不是原子事务:失败可能留下部分写入。不要通过删清单强制清理;使用专用输出目录并审查再生成差异。格式化/fixMissingImports 不代表输出类型检查通过,必须执行消费者编译器。

实现源码

packages/generator/src/utils/sourceFiles.ts:33

packages/generator/src/client/apiClientGenerator.ts:73

packages/generator/src/client/queryClientGenerator.ts:35

packages/generator/src/model/modelGenerator.ts:33

基于 Apache License 2.0 发布。