/** * @module * This module contains some type definitions for the Hono modules. */ import type { Context } from './context'; import type { HonoBase } from './hono-base'; import type { CustomHeader, RequestHeader } from './utils/headers'; import type { StatusCode } from './utils/http-status'; import type { IfAnyThenEmptyObject, IsAny, JSONValue, RemoveBlankRecord, Simplify, UnionToIntersection } from './utils/types'; export type Bindings = object; export type Variables = object; export type BlankEnv = {}; export type Env = { Bindings?: Bindings; Variables?: Variables; }; export type Next = () => Promise; export type ExtractInput = I extends Input ? unknown extends I["in"] ? {} : I["in"] : I; export type Input = { in?: {}; out?: {}; outputFormat?: ResponseFormat; }; export type BlankSchema = {}; export type BlankInput = {}; export interface RouterRoute { basePath: string; path: string; method: string; handler: H; } export type HandlerResponse = Response | TypedResponse | Promise>; export type Handler = any> = (c: Context, next: Next) => R; export type MiddlewareHandler = Response> = (c: Context, next: Next) => Promise; export type H = any> = Handler | MiddlewareHandler; export type NotFoundHandler = (c: Context) => Response | Promise; export interface HTTPResponseError extends Error { getResponse: () => Response; } export type ErrorHandler = (err: Error | HTTPResponseError, c: Context) => Response | Promise; export interface HandlerInterface {

extends never ? BasePath : ExtractStringKey, I extends Input = BlankInput, R extends HandlerResponse = any, E2 extends Env = E>(handler: H): HonoBase, S & ToSchema>, BasePath>;

extends never ? BasePath : ExtractStringKey, I extends Input = BlankInput, I2 extends Input = I, R extends HandlerResponse = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, M1 extends H = H>(...handlers: [ H & M1, H ]): HonoBase, S & ToSchema | MergeMiddlewareResponse>, BasePath>;

, R extends HandlerResponse = any, I extends Input = BlankInput, E2 extends Env = E>(path: P, handler: H): HonoBase, I, MergeTypedResponse>, BasePath>;

extends never ? BasePath : ExtractStringKey, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, M1 extends H = H, M2 extends H = H>(...handlers: [ H & M1, H & M2, H ]): HonoBase, S & ToSchema | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, M1 extends H = H>(path: P, ...handlers: [ H & M1, H ]): HonoBase, I2, MergeTypedResponse | MergeMiddlewareResponse>, BasePath>;

extends never ? BasePath : ExtractStringKey, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H>(...handlers: [ H & M1, H & M2, H & M3, H ]): HonoBase, S & ToSchema | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, M1 extends H = H, M2 extends H = H>(path: P, ...handlers: [ H & M1, H & M2, H ]): HonoBase, I3, MergeTypedResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

extends never ? BasePath : ExtractStringKey, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H>(...handlers: [ H & M1, H & M2, H & M3, H & M4, H ]): HonoBase, S & ToSchema | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H>(path: P, ...handlers: [ H & M1, H & M2, H & M3, H ]): HonoBase, I4, MergeTypedResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

extends never ? BasePath : ExtractStringKey, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H, M5 extends H = H>(...handlers: [ H & M1, H & M2, H & M3, H & M4, H & M5, H ]): HonoBase, S & ToSchema | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H>(path: P, ...handlers: [ H & M1, H & M2, H & M3, H & M4, H ]): HonoBase, I5, MergeTypedResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

extends never ? BasePath : ExtractStringKey, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H, M5 extends H = H, M6 extends H = H>(...handlers: [ H & M1, H & M2, H & M3, H & M4, H & M5, H & M6, H ]): HonoBase, S & ToSchema | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H, M5 extends H = H>(path: P, ...handlers: [ H & M1, H & M2, H & M3, H & M4, H & M5, H ]): HonoBase, I6, MergeTypedResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

extends never ? BasePath : ExtractStringKey, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H, M5 extends H = H, M6 extends H = H, M7 extends H = H>(...handlers: [ H & M1, H & M2, H & M3, H & M4, H & M5, H & M6, H & M7, H ]): HonoBase, S & ToSchema | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H, M5 extends H = H, M6 extends H = H>(path: P, ...handlers: [ H & M1, H & M2, H & M3, H & M4, H & M5, H & M6, H ]): HonoBase, I7, MergeTypedResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

extends never ? BasePath : ExtractStringKey, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H, M5 extends H = H, M6 extends H = H, M7 extends H = H, M8 extends H = H>(...handlers: [ H & M1, H & M2, H & M3, H & M4, H & M5, H & M6, H & M7, H & M8, H ]): HonoBase, S & ToSchema | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H, M5 extends H = H, M6 extends H = H, M7 extends H = H>(path: P, ...handlers: [ H & M1, H & M2, H & M3, H & M4, H & M5, H & M6, H & M7, H ]): HonoBase, I8, MergeTypedResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

extends never ? BasePath : ExtractStringKey, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>, E11 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9, E10 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H, M5 extends H = H, M6 extends H = H, M7 extends H = H, M8 extends H = H, M9 extends H = H>(...handlers: [ H & M1, H & M2, H & M3, H & M4, H & M5, H & M6, H & M7, H & M8, H & M9, H ]): HonoBase, S & ToSchema | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H, M5 extends H = H, M6 extends H = H, M7 extends H = H, M8 extends H = H>(path: P, ...handlers: [ H & M1, H & M2, H & M3, H & M4, H & M5, H & M6, H & M7, H & M8, H ]): HonoBase, I9, MergeTypedResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>, E11 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9, E10 ]>, M1 extends H = H, M2 extends H = H, M3 extends H = H, M4 extends H = H, M5 extends H = H, M6 extends H = H, M7 extends H = H, M8 extends H = H, M9 extends H = H>(path: P, ...handlers: [ H & M1, H & M2, H & M3, H & M4, H & M5, H & M6, H & M7, H & M8, H & M9, H ]): HonoBase, I10, MergeTypedResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse | MergeMiddlewareResponse>, BasePath>;

extends never ? BasePath : ExtractStringKey, I extends Input = BlankInput, R extends HandlerResponse = any>(...handlers: H[]): HonoBase>, BasePath>;

= any>(path: P, ...handlers: H, I, R>[]): HonoBase, I, MergeTypedResponse>, BasePath>;

= any, I extends Input = BlankInput>(path: P): HonoBase, I, MergeTypedResponse>, BasePath>; } export interface MiddlewareHandlerInterface { (...handlers: MiddlewareHandler>>[]): HonoBase, S, BasePath>; (handler: MiddlewareHandler>>): HonoBase, S, BasePath>; , P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler ]): HonoBase, S, BasePath>;

, E2 extends Env = E>(path: P, handler: MiddlewareHandler): HonoBase, ChangePathOfSchema, BasePath>; , E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, S, BasePath>;

, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>>(path: P, ...handlers: [ MiddlewareHandler, MiddlewareHandler ]): HonoBase, ChangePathOfSchema, BasePath>; , E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, S, BasePath>;

, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>>(path: P, ...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, ChangePathOfSchema, BasePath>; , E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, S, BasePath>;

, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>>(path: P, ...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, ChangePathOfSchema, BasePath>; , E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, S, BasePath>;

, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>>(path: P, ...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, ChangePathOfSchema, BasePath>; , E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, S, BasePath>;

, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>>(path: P, ...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, ChangePathOfSchema, BasePath>; , E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, S, BasePath>;

, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>>(path: P, ...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, ChangePathOfSchema, BasePath>; , E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>, P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, S, BasePath>;

, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>>(path: P, ...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, ChangePathOfSchema, BasePath>; , E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>, E11 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9, E10 ]>, P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, S, BasePath>;

, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>>(path: P, ...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): HonoBase, ChangePathOfSchema, BasePath>;

(path: P, ...handlers: MiddlewareHandler>[]): HonoBase; } export interface OnHandlerInterface { , R extends HandlerResponse = any, I extends Input = BlankInput, E2 extends Env = E>(method: M, path: P, handler: H): HonoBase, S & ToSchema, I, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>>(method: M, path: P, ...handlers: [ H, H ]): HonoBase, S & ToSchema, I2, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>>(method: M, path: P, ...handlers: [ H, H, H ]): HonoBase, S & ToSchema, I3, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>>(method: M, path: P, ...handlers: [ H, H, H, H ]): HonoBase, S & ToSchema, I4, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>>(method: M, path: P, ...handlers: [ H, H, H, H, H ]): HonoBase, S & ToSchema, I5, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>>(method: M, path: P, ...handlers: [ H, H, H, H, H, H ]): HonoBase, S & ToSchema, I6, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>>(method: M, path: P, ...handlers: [ H, H, H, H, H, H, H ]): HonoBase, S & ToSchema, I7, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>>(method: M, path: P, ...handlers: [ H, H, H, H, H, H, H, H ]): HonoBase, S & ToSchema, I8, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>>(method: M, path: P, ...handlers: [ H, H, H, H, H, H, H, H, H ]): HonoBase, S & ToSchema, I9, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>, E11 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9, E10 ]>>(method: M, path: P, ...handlers: [ H, H, H, H, H, H, H, H, H, H ]): HonoBase, S & ToSchema, I10, MergeTypedResponse>>, BasePath>; = any, I extends Input = BlankInput>(method: M, path: P, ...handlers: H, I, R>[]): HonoBase, I, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, E2 extends Env = E>(methods: Ms, path: P, handler: H): HonoBase, S & ToSchema, I, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>>(methods: Ms, path: P, ...handlers: [ H, H ]): HonoBase, S & ToSchema, I2, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>>(methods: Ms, path: P, ...handlers: [ H, H, H ]): HonoBase, S & ToSchema, I3, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>>(methods: Ms, path: P, ...handlers: [ H, H, H, H ]): HonoBase, S & ToSchema, I4, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>>(methods: Ms, path: P, ...handlers: [ H, H, H, H, H ]): HonoBase, S & ToSchema, I5, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>>(methods: Ms, path: P, ...handlers: [ H, H, H, H, H, H ]): HonoBase, S & ToSchema, I6, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>>(methods: Ms, path: P, ...handlers: [ H, H, H, H, H, H, H ]): HonoBase, S & ToSchema, I7, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>>(methods: Ms, path: P, ...handlers: [ H, H, H, H, H, H, H, H ]): HonoBase, S & ToSchema, I8, MergeTypedResponse>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>>(methods: Ms, path: P, ...handlers: [ H, H, H, H, H, H, H, H, H ]): HonoBase, S & ToSchema, I9, MergeTypedResponse>>, BasePath>; , R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[ E, E2 ]>, E4 extends Env = IntersectNonAnyTypes<[ E, E2, E3 ]>, E5 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4 ]>, E6 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5 ]>, E7 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6 ]>, E8 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7 ]>, E9 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8 ]>, E10 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9 ]>, E11 extends Env = IntersectNonAnyTypes<[ E, E2, E3, E4, E5, E6, E7, E8, E9, E10 ]>>(methods: Ms, path: P, ...handlers: [ H, H, H, H, H, H, H, H, H, H ]): HonoBase, S & ToSchema, I10, MergeTypedResponse>>, BasePath>;

= any, I extends Input = BlankInput>(methods: string[], path: P, ...handlers: H, I, R>[]): HonoBase, I, MergeTypedResponse>, BasePath>; = any, E2 extends Env = E>(methods: string | string[], paths: string[], ...handlers: H[]): HonoBase>, BasePath>; } type ExtractStringKey = keyof S & string; export type ToSchema = Simplify<{ [K in P]: { [K2 in M as AddDollar]: Simplify<{ input: AddParam, P>; } & (IsAny extends true ? { output: {}; outputFormat: ResponseFormat; status: StatusCode; } : RorO extends TypedResponse ? { output: unknown extends T ? {} : T; outputFormat: I extends { outputFormat: string; } ? I["outputFormat"] : F; status: U; } : { output: unknown extends RorO ? {} : RorO; outputFormat: unknown extends RorO ? "json" : I extends { outputFormat: string; } ? I["outputFormat"] : "json"; status: StatusCode; })>; }; }>; export type Schema = { [Path: string]: { [Method: `$${Lowercase}`]: Endpoint; }; }; type ChangePathOfSchema = keyof S extends never ? { [K in Path]: {}; } : { [K in keyof S as Path]: S[K]; }; export type Endpoint = { input: any; output: any; outputFormat: ResponseFormat; status: StatusCode; }; type ExtractParams = string extends Path ? Record : Path extends `${infer _Start}:${infer Param}/${infer Rest}` ? { [K in Param | keyof ExtractParams<`/${Rest}`>]: string; } : Path extends `${infer _Start}:${infer Param}` ? { [K in Param]: string; } : never; type FlattenIfIntersect = T extends infer O ? { [K in keyof O]: O[K]; } : never; export type MergeSchemaPath = { [P in keyof OrigSchema as MergePath]: [ OrigSchema[P] ] extends [ Record ] ? { [M in keyof OrigSchema[P]]: MergeEndpointParamsWithPath; } : never; }; type MergeEndpointParamsWithPath = T extends unknown ? { input: T["input"] extends { param: infer _; } ? ExtractParams extends never ? T["input"] : FlattenIfIntersect as K extends `${infer Prefix}{${infer _}}` ? Prefix : K]: string; }; }> : RemoveBlankRecord> extends never ? T["input"] : T["input"] & { param: { [K in keyof ExtractParams as K extends `${infer Prefix}{${infer _}}` ? Prefix : K]: string; }; }; output: T["output"]; outputFormat: T["outputFormat"]; status: T["status"]; } : never; export type AddParam = ParamKeys

extends never ? I : I extends { param: infer _; } ? I : I & { param: UnionToIntersection>>; }; type AddDollar = `$${Lowercase}`; export type MergePath = B extends "" ? MergePath : A extends "" ? B : A extends "/" ? B : A extends `${infer P}/` ? B extends `/${infer Q}` ? `${P}/${Q}` : `${P}/${B}` : B extends `/${infer Q}` ? Q extends "" ? A : `${A}/${Q}` : `${A}/${B}`; export type KnownResponseFormat = "json" | "text" | "redirect"; export type ResponseFormat = KnownResponseFormat | string; export type TypedResponse = { _data: T; _status: U; _format: F; }; type MergeTypedResponse = T extends Promise ? T2 extends TypedResponse ? T2 : TypedResponse : T extends TypedResponse ? T : TypedResponse; type MergeTypedResponseStrict = T extends Promise ? T2 extends TypedResponse ? T2 : never : T extends TypedResponse ? T : never; type MergeMiddlewareResponse = MergeTypedResponseStrict>; export type FormValue = string | Blob; export type ParsedFormValue = string | File; export type ValidationTargets = { json: any; form: Record; query: Record; param: Record; header: Record; cookie: Record; }; type ParamKey = Component extends `:${infer NameWithPattern}` ? NameWithPattern extends `${infer Name}{${infer Rest}` ? Rest extends `${infer _Pattern}?` ? `${Name}?` : Name : NameWithPattern : never; export type ParamKeys = Path extends `${infer Component}/${infer Rest}` ? ParamKey | ParamKeys : ParamKey; export type ParamKeyToRecord = T extends `${infer R}?` ? Record : { [K in T]: string; }; export type InputToDataByTarget = T extends { [K in Target]: infer R; } ? R : never; export type RemoveQuestion = T extends `${infer R}?` ? R : T; export type ExtractSchema = UnionToIntersection ? S : never>; export type ExtractSchemaForStatusCode = { [Path in keyof ExtractSchema]: { [Method in keyof ExtractSchema[Path]]: Extract[Path][Method], { status: Status; }>; }; }; export type ExtractHandlerResponse = T extends (c: any, next: any) => Promise ? Exclude extends never ? never : Exclude extends Response | TypedResponse ? Exclude : never : T extends (c: any, next: any) => infer R ? R extends Response | TypedResponse ? R : never : never; type ProcessHead = IfAnyThenEmptyObject; export type IntersectNonAnyTypes = T extends [ infer Head, ...infer Rest ] ? ProcessHead & IntersectNonAnyTypes : {}; export declare abstract class FetchEventLike { abstract readonly request: Request; abstract respondWith(promise: Response | Promise): void; abstract passThroughOnException(): void; abstract waitUntil(promise: Promise): void; } export {};