资讯详情

资讯详情

t3code 依赖的 @effect/openapi-generator:format 输出格式统一与 httpapi 生成能力解析

t3code 依赖的 effect/openapi-generatorformat 输出格式统一与 httpapi 生成能力解析【免费下载链接】t3code项目地址: https://gitcode.com/GitHub_Trending/t3/t3code本文基于 Effect 仓库中的 changeset 变更记录 green-chips-wash.md解读effect/openapi-generator在 v4 公开迁移public migration中完成的一项关键接口变更用统一的format选项与--formatCLI 参数取代旧的typeOnly布尔开关和--type-only标志并新增httpapi输出格式。读完后你将掌握三种输出格式httpclient/httpclient-type-only/httpapi的选型差异、完整 CLI 参数表、新旧参数的迁移方式以及生成器内部的层Layer路由机制与警告输出约定。一、变更背景一个 changeset 说明了什么在 Effect 生态的 pnpm workspace 中.repos/effect-smol/.changeset/pre/green-chips-wash.md是一条标准的 Changesets 预发布变更说明其内容为Finalize the OpenAPI generator public migration by replacing thetypeOnlyoption and--type-onlyCLI flag with theformatoption and--formatflag, and by addinghttpapias a supported output alongsidehttpclientandhttpclient-type-only.拆解出三个要点旧 API 移除typeOnly生成选项与--type-only命令行标志被删除且没有兼容别名——CLI 会直接拒绝该标志后文有测试佐证新 API 统一所有输出形态收敛到一个format选项 /--format标志取值为枚举而非布尔组合能力扩展在原有的httpclient与httpclient-type-only之外新增httpapi输出可以直接从 OpenAPI 规范生成 Effect 的HttpApi模块定义。该包在仓库中的位置是.repos/effect-smol/packages/tools/openapi-generator其 README 一句话概括了它的职责Generates EffectSchematypes, HTTP clients, andHttpApimodules from OpenAPI specifications——即从 OpenAPI 规范生成 Effect 的 Schema 类型、HTTP 客户端和HttpApi模块。安装方式为README 给出的官方命令npm install effectrc effect/openapi-generatorrc注意适用前提当前仓库中该包处于 v4 预发布线其 CHANGELOG 最新条目为4.0.0-rc.112--format语义以当前仓库源码为准。二、三种format输出格式及其路由机制2.1OpenApiGenerateOptionsformat 成为核心选项生成器入口选项定义在 src/OpenApiGenerator.ts 中标注since 4.0.0export interface OpenApiGenerateOptions { /** The name to give to the generated output. */ readonly name: string /** The output format to generate. */ readonly format: OpenApiGeneratorFormat /** Hook to transform each JSON Schema node before processing. */ readonly onEnter?: ((js: JsonSchema.JsonSchema) JsonSchema.JsonSchema) | undefined /** Callback to receive non-fatal generation warnings. */ readonly onWarning?: ((warning: OpenApiGeneratorWarning) void) | undefined }从源码结构看format与name是两个必填项onEnter允许在 JSON Schema 节点被处理前做整体变换例如批量改写字段类型onWarning接收非致命告警。告警类型OpenApiGeneratorWarning包含code如naming-collision、security-and-downgraded、default-response-remapped等枚举码、message以及可选的path/method/operationId用于定位到具体操作。2.2 CLI 侧的层路由为什么 type-only 走不同 LayerCLI 入口 src/main.ts 中的关键片段const format Flag.choice(format, [httpclient, httpclient-type-only, httpapi] as const).pipe( Flag.withAlias(f), Flag.withDescription( Output format to generate: httpclient | httpclient-type-only | httpapi (default: httpclient) ), Flag.withDefault(httpclient) )并在命令装配时按format值选择不同的转换层Command.provide(({ format }) format httpclient-type-only ? OpenApiGenerator.layerTransformerTs : OpenApiGenerator.layerTransformerSchema )也就是说httpclient-type-only使用纯 TypeScript 变换器layerTransformerTs而httpclient与httpapi都走 Schema 变换器layerTransformerSchema。这与输出产物一致type-only 模式生成的代码只含类型导入不导入运行时Schema。三、完整 CLI 参数参考结合 src/main.ts 中的 Flag 定义当前openapigen命令的完整参数如下参数别名取值 / 默认值说明--spec-s文件路径必填用于生成输出的 OpenAPI 规范文件--name-n字符串默认Client生成产物的命名如客户端类名 / HttpApi 名称--format-fhttpclient|httpclient-type-only|httpapi默认httpclient输出格式--patch-p0 次到任意次文件路径.json/.yaml/.yml或内联 JSON 数组生成前按顺序对 OpenAPI 规范应用的 JSON Patch使用示例# 默认格式httpclient生成名为 ApiClient 的完整客户端 npx openapigen --spec openapi.json --name ApiClient # 仅类型输出供纯类型消费的场景 npx openapigen -s openapi.json -n ApiClient -f httpclient-type-only # 生成 HttpApi 模块定义 npx openapigen -s openapi.json -n ApiClient -f httpapi # 先打补丁再生成多个 patch 按顺序应用 npx openapigen -s openapi.json -p ./fix-security.json -p [{op:replace,path:/info/version,value:2.0.0}]行为约定由 CLI 实现与测试共同确认生成结果写入stdout所有告警通过onWarning回调收集后写入stderr格式为WARNING [code] METHOD path (operationId): message见 src/main.ts 中的formatWarning函数因此 stdout 可安全重定向为源文件而不被日志污染Patch 解析或应用失败会转成CliError.UserError以非零退出码结束。四、行为验证CLI 测试用例逐条印证测试文件 test/OpenApiGeneratorCli.test.ts 以子进程方式实际运行 CLI恰好完整覆盖本条 changeset 宣称的三项变更--help文档化新参数断言--help输出包含--format、三个取值httpclient/httpclient-type-only/httpapi以及default: httpclient字样三种格式的路由与产物特征不传--format时输出与显式--format httpclient完全一致且包含import * as Schema from effect/Schema运行时 Schema 导入httpclient-type-only产物不包含上述运行时导入而是import type * as HttpClient from effect/unstable/http/HttpClient纯类型导入httpapi产物包含export class CliClient extends HttpApi.make(CliClient)即生成一个继承自HttpApi.make的 HttpApi 模块类旧标志被硬性拒绝传入--type-only时进程以失败退出stdout 打印USAGEstderr 输出Unrecognized flag: --type-only——确认这是无兼容期的直接移除而非 deprecated 别名stdout/stderr 分流告警只进 stderr保证 stdout 恒为可重定向的生成源码。五、迁移指引typeOnly 到 format 的对照对于从 v4 迁移过程中仍在使用旧接口的代码对照关系如下旧 API已移除新 API说明typeOnly: false或不传format: httpclient完整客户端含运行时 SchematypeOnly: trueformat: httpclient-type-only仅类型输出—format: httpapi新增生成HttpApi模块定义--type-only标志--format httpclient-type-only或-fCLI 传入旧标志将直接报错需要说明的是httpapi与httpclient虽共用同一个 Schema 变换层但产物形态不同前者生成HttpApi模块API 定义侧用于服务端或共享契约后者生成HttpClient包装调用侧。选型上若目标是产出可复用的 API 契约模块应选httpapi若是生成调用远端服务的客户端封装选httpclient若消费端只需要类型而不想引入运行时依赖选httpclient-type-only。六、延伸阅读包入口与 CLI 实现src/main.ts、src/bin.tsNode 运行时入口通过NodeServices.layer提供平台服务核心生成逻辑与选项定义src/OpenApiGenerator.tsPatch 机制--patch的解析与应用src/OpenApiPatch.ts 及测试 test/OpenApiPatch.test.ts生成产物断言含 JSON Schema 生成细节test/OpenApiGenerator.test.ts、test/JsonSchemaGenerator.test.ts包版本与依赖锁定信息CHANGELOG.md该包在 workspace 的 changeset 配置 中被列入fixed固定版本组与effect主包等同步发版。综合来看这条 changeset 所代表的变更是effect/openapi-generatorv4 公开 API 收尾的一步以枚举化的format取代布尔开关让生成什么形态成为单一显式决策点同时把HttpApi模块生成纳入同一入口使客户端生成、类型生成与服务端 API 定义生成共享同一套规范解析与 Patch 管线。【免费下载链接】t3code项目地址: https://gitcode.com/GitHub_Trending/t3/t3code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →