@@ -167,6 +167,61 @@ npx erest-gen handler --from ./schemas/user.ts --group user --out ./handlers/use
167167
168168---
169169
170+ ## 3.1.0 — reply.raw 逃生舱 + 框架能力对齐
171+
172+ 3.1.0 是 ** 3.0 的 minor 版本** ,引入框架原生能力逃生舱与统一错误格式器,** 非破坏性变更**
173+ (现有 ` new ERest() ` 代码零改动,examples 测试全绿)。
174+
175+ ### 1. ` reply.raw ` 逃生舱
176+
177+ ` Reply ` 接口新增 ` readonly raw: Raw ` 字段(` status() ` 返回类型从 ` Reply ` 收紧为 ` this ` )。
178+ registerTyped 的 handler 通过 ` reply.raw ` 访问框架原生对象,解决 setCookie / redirect /
179+ stream / 文件下载等底层能力此前完全无法访问的问题。
180+
181+ ` Context.reply ` 仍保持 ` Reply<unknown> ` ——before/middleware/hook 不暴露 raw,仅 handler 拿到
182+ (避免 onError hook 与 re-throw 语义冲突的双重写入)。
183+
184+ ### 2. 全自动 Raw 泛型 + ` createERest() ` 工厂
185+
186+ ` ERest<T, Raw> ` / ` API<T, Raw> ` / ` IGroup<T, Raw> ` / ` genSchema<T, Raw> ` 全链路透传 Raw,
187+ registerTyped handler 的 reply 类型随之用 ` Reply<Raw> ` 。子包工厂在** 构造时** 锁定 Raw:
188+
189+ ``` diff
190+ - const api = new ERest({ info, groups, forceGroup: true });
191+ + import { createERest } from "@erest/express"; // 或 @erest/koa / @erest/leizmweb
192+ + const api = createERest({ info, groups, forceGroup: true }); // reply.raw 零标注强类型
193+ ```
194+
195+ - ` createERest() ` 由三子包分别导出(` @erest/express|koa|leizmweb ` ),各自返回
196+ ` ERest<Middleware, ExpressRaw|KoaRaw|LeizmWebRaw> ` ,handler 内 ` reply.raw ` 自动推导。
197+ - 裸 ` new ERest() ` 已标记 ` @deprecated ` (过渡期保留,Raw 默认 ` unknown ` ,` reply.raw ` 需断言)。
198+ - 三框架 adapter 在 ` createXxxReply ` 时把闭包已有的原生对象挂到 ` raw ` (热路径零额外分配,
199+ Koa/leizmweb 仅多挂引用,Express 多一个 ` {req,res} ` 字面量)。
200+
201+ ### 3. 可选统一错误格式器 ` defaultErrorFormatter `
202+
203+ 新增工具函数(不改 adapter、不破坏 commit 727b2c0 的 re-throw 对齐),用户在 app 级错误中间件
204+ 调用以统一三框架错误响应体:
205+
206+ ``` typescript
207+ import { defaultErrorFormatter } from " erest" ;
208+ // Express
209+ app .use ((err , _req , res , _next ) => {
210+ const { status, body } = defaultErrorFormatter (err ); // { status, body: { error, code } }
211+ res .status (status ).json (body );
212+ });
213+ ```
214+
215+ ### 4. 能力对齐:仅 ` raw ` + 文档速查表
216+
217+ cookie/stream/redirect/headersSent 等原生能力差异不再逐个补 Reply 方法,统一通过 ` reply.raw `
218+ 暴露,并在 README 提供「三框架原生能力速查表」标注各框架语义差异。错误处理(re-throw 语义)
219+ 已在 3.0.x 对齐,本次不动。
220+
221+ > raw 的头部/cookie 操作应在 ` reply.json() ` /` reply.send() ` 之前调用(HTTP 头先于体发送)。
222+
223+ ---
224+
170225## 3.0.1 — 文档与发布修复
171226
1722273.0.1 是 ** 3.0 的补丁版本** ,无运行时 breaking change,修复发布缺陷与文档错误:
0 commit comments