Skip to content

Commit 8774bf9

Browse files
authored
fix(types): cannot .use non-return mw from createMiddleware (#4465)
* fix(types): cannot `.use` non-return mw from `createMiddleware` * chore: add tests
1 parent 5eb7c15 commit 8774bf9

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

src/helper/factory/index.test.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { expectTypeOf } from 'vitest'
33
import { hc } from '../../client'
44
import type { ClientRequest } from '../../client/types'
55
import { Hono } from '../../index'
6-
import type { ExtractSchema, ToSchema, TypedResponse } from '../../types'
6+
import type { Env, ExtractSchema, MiddlewareHandler, ToSchema, TypedResponse } from '../../types'
77
import type { ContentfulStatusCode } from '../../utils/http-status'
88
import type { Equal, Expect } from '../../utils/types'
99
import { validator } from '../../validator'
@@ -63,6 +63,14 @@ describe('createMiddleware', () => {
6363
}
6464
)
6565
})
66+
67+
it('Should default to MiddlewareHandler<E, P, I, Response>', async () => {
68+
const middleware = createMiddleware(async (c, next) => {
69+
await next()
70+
})
71+
type Expected = MiddlewareHandler<any, string, {}, Response>
72+
type _verify = Expect<Equal<Expected, typeof middleware>>
73+
})
6674
})
6775

6876
describe('createHandler', () => {
@@ -366,6 +374,16 @@ describe('createFactory', () => {
366374
}
367375
type verify = Expect<Equal<Expected, Actual>>
368376
})
377+
378+
it('Should default to MiddlewareHandler<E, P, I, Response>', async () => {
379+
const factory = createFactory()
380+
381+
const middleware = factory.createMiddleware(async (c, next) => {
382+
await next()
383+
})
384+
type Expected = MiddlewareHandler<Env, string, {}, Response>
385+
type _verify = Expect<Equal<Expected, typeof middleware>>
386+
})
369387
})
370388

371389
it('Should use the default app options', async () => {

src/helper/factory/index.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,9 @@ export class Factory<E extends Env = Env, P extends string = string> {
305305
return app
306306
}
307307

308-
createMiddleware = <I extends Input = {}, R extends HandlerResponse<any> = Response>(
309-
middleware: MiddlewareHandler<E, P, I, R>
310-
): MiddlewareHandler<E, P, I, R> => middleware
308+
createMiddleware = <I extends Input = {}, R extends HandlerResponse<any> | void = void>(
309+
middleware: MiddlewareHandler<E, P, I, R extends void ? Response : R>
310+
): MiddlewareHandler<E, P, I, R extends void ? Response : R> => middleware
311311

312312
createHandlers: CreateHandlersInterface<E, P> = (...handlers: any) => {
313313
// @ts-expect-error this should not be typed
@@ -324,7 +324,7 @@ export const createMiddleware = <
324324
E extends Env = any,
325325
P extends string = string,
326326
I extends Input = {},
327-
R extends HandlerResponse<any> = Response
327+
R extends HandlerResponse<any> | void = void
328328
>(
329-
middleware: MiddlewareHandler<E, P, I, R>
330-
): MiddlewareHandler<E, P, I, R> => middleware
329+
middleware: MiddlewareHandler<E, P, I, R extends void ? Response : R>
330+
): MiddlewareHandler<E, P, I, R extends void ? Response : R> => middleware

0 commit comments

Comments
 (0)