diff --git a/src/helper/factory/index.test.ts b/src/helper/factory/index.test.ts index b636c8b6..f807f7cf 100644 --- a/src/helper/factory/index.test.ts +++ b/src/helper/factory/index.test.ts @@ -37,34 +37,30 @@ describe('createMiddleware', () => { expect(url.pathname).toBe('/message') }) - describe('Relax types for Bindings and Variables', () => { - it('Should not throw a type error', () => { - type Bindings = { - MY_VAR_IN_BINDINGS: string + it('Should pass generics types to chained handlers', () => { + type Bindings = { + MY_VAR_IN_BINDINGS: string + } + + type Variables = { + MY_VAR: string + } + + const app = new Hono<{ Bindings: Bindings }>() + + app.get( + '/', + createMiddleware<{ Variables: Variables }>(async (c, next) => { + await next() + }), + createMiddleware(async (c, next) => { + await next() + }), + async (c) => { + const v = c.get('MY_VAR') + expectTypeOf(v).toEqualTypeOf() } - - const app = new Hono<{ Bindings: Bindings }>() - - type Variables = { - MY_VAR: string - } - - const middleware = (_variable: string) => - createMiddleware<{ Variables: Variables }>(async (c, next) => { - await next() - }) - - app.get( - '/', - createMiddleware<{ Bindings: Bindings }>(async (c, next) => { - const mw = middleware(c.env.MY_VAR_IN_BINDINGS) - await mw(c, next) // `c` does not throw an error - }), - (c) => { - return c.json({}) - } - ) - }) + ) }) }) diff --git a/src/helper/factory/index.ts b/src/helper/factory/index.ts index 9680c939..c5fe7a86 100644 --- a/src/helper/factory/index.ts +++ b/src/helper/factory/index.ts @@ -6,7 +6,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { Hono } from '../../hono' import type { Env, H, HandlerResponse, Input, MiddlewareHandler } from '../../types' -import type { Simplify } from '../../utils/types' type InitApp = (app: Hono) => void @@ -238,20 +237,10 @@ export const createFactory = (init? initApp?: InitApp }): Factory => new Factory(init) -// Add `any` if it's undefined to relax types -// { Variables: Variables } => { Bindings: any, Variables: any } -// { Bindings: Bindings } => { Bindings: Bindings, Variables: any } - -type AddAnyToEnv = { - Bindings: undefined extends T['Bindings'] ? any : T['Bindings'] - Variables: undefined extends T['Variables'] ? any : T['Variables'] -} - export const createMiddleware = < E extends Env = any, P extends string = string, - I extends Input = {}, - E2 extends Env = Simplify> + I extends Input = {} >( - middleware: MiddlewareHandler -): MiddlewareHandler => createFactory().createMiddleware(middleware) + middleware: MiddlewareHandler +): MiddlewareHandler => createFactory().createMiddleware(middleware)