Skip to content

Commit b1ec516

Browse files
committed
feat: improve escape hatches
1 parent 11097d2 commit b1ec516

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

packages/openapi-code-generator/src/typescript/server/typescript-express/typescript-express-router-builder.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,16 @@ export class ExpressRouterBuilder extends AbstractRouterBuilder {
4545
this.imports
4646
.from("@nahkies/typescript-express-runtime/server")
4747
.add(
48+
"ExpressRuntimeResponder",
49+
"ExpressRuntimeResponse",
50+
"Params",
51+
"SkipResponse",
4852
"StatusCode",
4953
"StatusCode1xx",
5054
"StatusCode2xx",
5155
"StatusCode3xx",
5256
"StatusCode4xx",
5357
"StatusCode5xx",
54-
"Params",
55-
"ExpressRuntimeResponse",
56-
"ExpressRuntimeResponder",
5758
)
5859

5960
this.imports
@@ -114,7 +115,8 @@ export class ExpressRouterBuilder extends AbstractRouterBuilder {
114115
respond: ${symbols.responderName},
115116
req: Request,
116117
res: Response,
117-
) => Promise<ExpressRuntimeResponse<unknown>>`,
118+
next: NextFunction
119+
) => Promise<ExpressRuntimeResponse<unknown> | typeof SkipResponse>`,
118120
kind: "type",
119121
}),
120122
],
@@ -135,9 +137,14 @@ router.${builder.method.toLowerCase()}(\`${route(builder.route)}\`, async (req:
135137
136138
const responder = ${responder.implementation}
137139
138-
const response = await implementation.${symbols.implPropName}(input, responder, req, res)
140+
const response = await implementation.${symbols.implPropName}(input, responder, req, res, next)
139141
.catch(err => { throw ExpressRuntimeError.HandlerError(err) })
140142
143+
// escape hatch to allow responses to be sent by the implementation handler
144+
if(response === SkipResponse) {
145+
return
146+
}
147+
141148
const { status, body } = response instanceof ExpressRuntimeResponse ? response.unpack() : response
142149
143150
res.status(status)

packages/typescript-express-runtime/src/server.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ export type Response<Status extends StatusCode, Type> = {
4242
body: Type
4343
}
4444

45+
export const SkipResponse = Symbol("skip response processing")
46+
4547
export class ExpressRuntimeResponse<Type> {
4648
private _body?: Type
4749

0 commit comments

Comments
 (0)