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

发布时间:2026/11/7 17:16:00

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),仅供参考
延伸阅读

更多相关文章

2026/11/7 17:14:57

50岁电工证怎么考通过率揭秘:实操考试心里没底怕挂科?别慌!

50岁电工证怎么考通过率揭秘:实操考试心里没底怕挂科?别慌! 实操考试心里没底怕挂科?50岁还想着考电工证,担心年龄大了学不会、考不过?别慌,这事儿真没你想得那么难。特别是像你这种已经在行业内摸爬滚打了几十年的老电工,只要方法对,50岁考电…

2026/11/7 17:14:57

低压电工证快速通过的通过率揭秘,转岗电工必看

低压电工证快速通过的通过率揭秘,转岗电工必看 你是不是正在为找不到工作发愁?手里没有低压电工证,连面试机会都没有。这种时候, 低压电工证快速通过 就成了你最急迫的需求,但你又担心 通过率揭秘…

2026/11/7 17:14:57

武汉电工证年审多少钱值不值得考

武汉电工证年审多少钱值不值得考 工地太忙根本没时间复习考试,特别是像你这样在郑州金水区转岗的电工,手里活儿干不完,还得抽空准备年审,真的让人头疼。不过,很多人心里还是在琢磨: 武汉电工证年审多少钱…

2026/11/7 17:09:56

白沟电工证考点合格标准与通过率,含金量高不高你得知道

白沟电工证考点合格标准与通过率,含金量高不高你得知道 不知道去哪报名怕被中介坑?白沟电工证考点信息你得搞清楚,含金量到底高不高,直接影响你今后的就业和职业发展。很多工人在报考电工证时,最担心的就是被中间人骗钱、走弯路,或者拿到的证没用、不被…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 0:03:08

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。特别是在郑州这样的城市,很多施工企业负责人和一线作业人员在报考电工证和钳工证时都面临着同样的困惑。到底该考哪个证?哪个更适合自己?哪个证书…

2026/11/7 0:03:08

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱?

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱? 之前考的证在外省能不能转过来?这个问题我遇到太多了,今天就拿广西电工证办理流程来具体说说,别再走弯路了。广西电工证的报考、复审、继续教育这些环节,如果你不了解,真的会吃大亏,尤其对于从…

2026/11/7 0:03:08

电气电工证都有哪些保姆级教程

电气电工证都有哪些保姆级教程 你是不是正愁不知道去哪报名,怕被中介坑?别急,这篇保姆级教程专为河南初次报考人员准备,帮你搞清楚 电气电工证都有哪些 ,以及如何避开那些坑。 电气电工证都有哪些?别被五花八门的证书搞懵了…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑