UNPKG

blade

Version:
428 lines (427 loc) • 100 kB
//#region ../../node_modules/hono/dist/types/router.d.ts /** * Interface representing a router. * * @template T - The type of the handler. */ interface Router<T$1> { /** * The name of the router. */ name: string; /** * Adds a route to the router. * * @param method - The HTTP method (e.g., 'get', 'post'). * @param path - The path for the route. * @param handler - The handler for the route. */ add(method: string, path: string, handler: T$1): void; /** * Matches a route based on the given method and path. * * @param method - The HTTP method (e.g., 'get', 'post'). * @param path - The path to match. * @returns The result of the match. */ match(method: string, path: string): Result<T$1>; } /** * Type representing a map of parameter indices. */ type ParamIndexMap = Record<string, number>; /** * Type representing a stash of parameters. */ type ParamStash = string[]; /** * Type representing a map of parameters. */ type Params = Record<string, string>; /** * Type representing the result of a route match. * * The result can be in one of two formats: * 1. An array of handlers with their corresponding parameter index maps, followed by a parameter stash. * 2. An array of handlers with their corresponding parameter maps. * * Example: * * [[handler, paramIndexMap][], paramArray] * ```typescript * [ * [ * [middlewareA, {}], // '*' * [funcA, {'id': 0}], // '/user/:id/*' * [funcB, {'id': 0, 'action': 1}], // '/user/:id/:action' * ], * ['123', 'abc'] * ] * ``` * * [[handler, params][]] * ```typescript * [ * [ * [middlewareA, {}], // '*' * [funcA, {'id': '123'}], // '/user/:id/*' * [funcB, {'id': '123', 'action': 'abc'}], // '/user/:id/:action' * ] * ] * ``` */ type Result<T$1> = [[T$1, ParamIndexMap][], ParamStash] | [[T$1, Params][]]; //#endregion //#region ../../node_modules/hono/dist/types/hono-base.d.ts type GetPath<E$1 extends Env> = (request: Request, options?: { env?: E$1["Bindings"]; }) => string; type HonoOptions<E$1 extends Env> = { /** * `strict` option specifies whether to distinguish whether the last path is a directory or not. * * @see {@link https://hono.dev/docs/api/hono#strict-mode} * * @default true */ strict?: boolean; /** * `router` option specifies which router to use. * * @see {@link https://hono.dev/docs/api/hono#router-option} * * @example * ```ts * const app = new Hono({ router: new RegExpRouter() }) * ``` */ router?: Router<[H, RouterRoute]>; /** * `getPath` can handle the host header value. * * @see {@link https://hono.dev/docs/api/routing#routing-with-host-header-value} * * @example * ```ts * const app = new Hono({ * getPath: (req) => * '/' + req.headers.get('host') + req.url.replace(/^https?:\/\/[^/]+(\/[^?]*)/, '$1'), * }) * * app.get('/www1.example.com/hello', () => c.text('hello www1')) * * // A following request will match the route: * // new Request('http://www1.example.com/hello', { * // headers: { host: 'www1.example.com' }, * // }) * ``` */ getPath?: GetPath<E$1>; }; type MountOptionHandler = (c: Context) => unknown; type MountReplaceRequest = (originalRequest: Request) => Request; type MountOptions = MountOptionHandler | { optionHandler?: MountOptionHandler; replaceRequest?: MountReplaceRequest | false; }; declare class Hono<E$1 extends Env = Env, S$1 extends Schema = {}, BasePath extends string = "/"> { get: HandlerInterface<E$1, "get", S$1, BasePath>; post: HandlerInterface<E$1, "post", S$1, BasePath>; put: HandlerInterface<E$1, "put", S$1, BasePath>; delete: HandlerInterface<E$1, "delete", S$1, BasePath>; options: HandlerInterface<E$1, "options", S$1, BasePath>; patch: HandlerInterface<E$1, "patch", S$1, BasePath>; all: HandlerInterface<E$1, "all", S$1, BasePath>; on: OnHandlerInterface<E$1, S$1, BasePath>; use: MiddlewareHandlerInterface<E$1, S$1, BasePath>; router: Router<[H, RouterRoute]>; readonly getPath: GetPath<E$1>; routes: RouterRoute[]; constructor(options?: HonoOptions<E$1>); /** * `.route()` allows grouping other Hono instance in routes. * * @see {@link https://hono.dev/docs/api/routing#grouping} * * @param {string} path - base Path * @param {Hono} app - other Hono instance * @returns {Hono} routed Hono instance * * @example * ```ts * const app = new Hono() * const app2 = new Hono() * * app2.get("/user", (c) => c.text("user")) * app.route("/api", app2) // GET /api/user * ``` */ route<SubPath extends string, SubEnv extends Env, SubSchema extends Schema, SubBasePath extends string>(path: SubPath, app: Hono<SubEnv, SubSchema, SubBasePath>): Hono<E$1, MergeSchemaPath<SubSchema, MergePath<BasePath, SubPath>> | S$1, BasePath>; /** * `.basePath()` allows base paths to be specified. * * @see {@link https://hono.dev/docs/api/routing#base-path} * * @param {string} path - base Path * @returns {Hono} changed Hono instance * * @example * ```ts * const api = new Hono().basePath('/api') * ``` */ basePath<SubPath extends string>(path: SubPath): Hono<E$1, S$1, MergePath<BasePath, SubPath>>; /** * `.onError()` handles an error and returns a customized Response. * * @see {@link https://hono.dev/docs/api/hono#error-handling} * * @param {ErrorHandler} handler - request Handler for error * @returns {Hono} changed Hono instance * * @example * ```ts * app.onError((err, c) => { * console.error(`${err}`) * return c.text('Custom Error Message', 500) * }) * ``` */ onError: (handler: ErrorHandler<E$1>) => Hono<E$1, S$1, BasePath>; /** * `.notFound()` allows you to customize a Not Found Response. * * @see {@link https://hono.dev/docs/api/hono#not-found} * * @param {NotFoundHandler} handler - request handler for not-found * @returns {Hono} changed Hono instance * * @example * ```ts * app.notFound((c) => { * return c.text('Custom 404 Message', 404) * }) * ``` */ notFound: (handler: NotFoundHandler<E$1>) => Hono<E$1, S$1, BasePath>; /** * `.mount()` allows you to mount applications built with other frameworks into your Hono application. * * @see {@link https://hono.dev/docs/api/hono#mount} * * @param {string} path - base Path * @param {Function} applicationHandler - other Request Handler * @param {MountOptions} [options] - options of `.mount()` * @returns {Hono} mounted Hono instance * * @example * ```ts * import { Router as IttyRouter } from 'itty-router' * import { Hono } from 'hono' * // Create itty-router application * const ittyRouter = IttyRouter() * // GET /itty-router/hello * ittyRouter.get('/hello', () => new Response('Hello from itty-router')) * * const app = new Hono() * app.mount('/itty-router', ittyRouter.handle) * ``` * * @example * ```ts * const app = new Hono() * // Send the request to another application without modification. * app.mount('/app', anotherApp, { * replaceRequest: (req) => req, * }) * ``` */ mount(path: string, applicationHandler: (request: Request, ...args: any) => Response | Promise<Response>, options?: MountOptions): Hono<E$1, S$1, BasePath>; /** * `.fetch()` will be entry point of your app. * * @see {@link https://hono.dev/docs/api/hono#fetch} * * @param {Request} request - request Object of request * @param {Env} Env - env Object * @param {ExecutionContext} - context of execution * @returns {Response | Promise<Response>} response of request * */ fetch: (request: Request, Env?: E$1["Bindings"] | {}, executionCtx?: ExecutionContext) => Response | Promise<Response>; /** * `.request()` is a useful method for testing. * You can pass a URL or pathname to send a GET request. * app will return a Response object. * ```ts * test('GET /hello is ok', async () => { * const res = await app.request('/hello') * expect(res.status).toBe(200) * }) * ``` * @see https://hono.dev/docs/api/hono#request */ request: (input: RequestInfo | URL, requestInit?: RequestInit, Env?: E$1["Bindings"] | {}, executionCtx?: ExecutionContext) => Response | Promise<Response>; /** * `.fire()` automatically adds a global fetch event listener. * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers. * @see https://hono.dev/docs/api/hono#fire * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/ */ fire: () => void; } //#endregion //#region ../../node_modules/hono/dist/types/utils/headers.d.ts /** * @module * HTTP Headers utility. */ type RequestHeader = "A-IM" | "Accept" | "Accept-Additions" | "Accept-CH" | "Accept-Charset" | "Accept-Datetime" | "Accept-Encoding" | "Accept-Features" | "Accept-Language" | "Accept-Patch" | "Accept-Post" | "Accept-Ranges" | "Accept-Signature" | "Access-Control" | "Access-Control-Allow-Credentials" | "Access-Control-Allow-Headers" | "Access-Control-Allow-Methods" | "Access-Control-Allow-Origin" | "Access-Control-Expose-Headers" | "Access-Control-Max-Age" | "Access-Control-Request-Headers" | "Access-Control-Request-Method" | "Age" | "Allow" | "ALPN" | "Alt-Svc" | "Alt-Used" | "Alternates" | "AMP-Cache-Transform" | "Apply-To-Redirect-Ref" | "Authentication-Control" | "Authentication-Info" | "Authorization" | "Available-Dictionary" | "C-Ext" | "C-Man" | "C-Opt" | "C-PEP" | "C-PEP-Info" | "Cache-Control" | "Cache-Status" | "Cal-Managed-ID" | "CalDAV-Timezones" | "Capsule-Protocol" | "CDN-Cache-Control" | "CDN-Loop" | "Cert-Not-After" | "Cert-Not-Before" | "Clear-Site-Data" | "Client-Cert" | "Client-Cert-Chain" | "Close" | "CMCD-Object" | "CMCD-Request" | "CMCD-Session" | "CMCD-Status" | "CMSD-Dynamic" | "CMSD-Static" | "Concealed-Auth-Export" | "Configuration-Context" | "Connection" | "Content-Base" | "Content-Digest" | "Content-Disposition" | "Content-Encoding" | "Content-ID" | "Content-Language" | "Content-Length" | "Content-Location" | "Content-MD5" | "Content-Range" | "Content-Script-Type" | "Content-Security-Policy" | "Content-Security-Policy-Report-Only" | "Content-Style-Type" | "Content-Type" | "Content-Version" | "Cookie" | "Cookie2" | "Cross-Origin-Embedder-Policy" | "Cross-Origin-Embedder-Policy-Report-Only" | "Cross-Origin-Opener-Policy" | "Cross-Origin-Opener-Policy-Report-Only" | "Cross-Origin-Resource-Policy" | "CTA-Common-Access-Token" | "DASL" | "Date" | "DAV" | "Default-Style" | "Delta-Base" | "Deprecation" | "Depth" | "Derived-From" | "Destination" | "Differential-ID" | "Dictionary-ID" | "Digest" | "DPoP" | "DPoP-Nonce" | "Early-Data" | "EDIINT-Features" | "ETag" | "Expect" | "Expect-CT" | "Expires" | "Ext" | "Forwarded" | "From" | "GetProfile" | "Hobareg" | "Host" | "HTTP2-Settings" | "If" | "If-Match" | "If-Modified-Since" | "If-None-Match" | "If-Range" | "If-Schedule-Tag-Match" | "If-Unmodified-Since" | "IM" | "Include-Referred-Token-Binding-ID" | "Isolation" | "Keep-Alive" | "Label" | "Last-Event-ID" | "Last-Modified" | "Link" | "Link-Template" | "Location" | "Lock-Token" | "Man" | "Max-Forwards" | "Memento-Datetime" | "Meter" | "Method-Check" | "Method-Check-Expires" | "MIME-Version" | "Negotiate" | "NEL" | "OData-EntityId" | "OData-Isolation" | "OData-MaxVersion" | "OData-Version" | "Opt" | "Optional-WWW-Authenticate" | "Ordering-Type" | "Origin" | "Origin-Agent-Cluster" | "OSCORE" | "OSLC-Core-Version" | "Overwrite" | "P3P" | "PEP" | "PEP-Info" | "Permissions-Policy" | "PICS-Label" | "Ping-From" | "Ping-To" | "Position" | "Pragma" | "Prefer" | "Preference-Applied" | "Priority" | "ProfileObject" | "Protocol" | "Protocol-Info" | "Protocol-Query" | "Protocol-Request" | "Proxy-Authenticate" | "Proxy-Authentication-Info" | "Proxy-Authorization" | "Proxy-Features" | "Proxy-Instruction" | "Proxy-Status" | "Public" | "Public-Key-Pins" | "Public-Key-Pins-Report-Only" | "Range" | "Redirect-Ref" | "Referer" | "Referer-Root" | "Referrer-Policy" | "Refresh" | "Repeatability-Client-ID" | "Repeatability-First-Sent" | "Repeatability-Request-ID" | "Repeatability-Result" | "Replay-Nonce" | "Reporting-Endpoints" | "Repr-Digest" | "Retry-After" | "Safe" | "Schedule-Reply" | "Schedule-Tag" | "Sec-GPC" | "Sec-Purpose" | "Sec-Token-Binding" | "Sec-WebSocket-Accept" | "Sec-WebSocket-Extensions" | "Sec-WebSocket-Key" | "Sec-WebSocket-Protocol" | "Sec-WebSocket-Version" | "Security-Scheme" | "Server" | "Server-Timing" | "Set-Cookie" | "Set-Cookie2" | "SetProfile" | "Signature" | "Signature-Input" | "SLUG" | "SoapAction" | "Status-URI" | "Strict-Transport-Security" | "Sunset" | "Surrogate-Capability" | "Surrogate-Control" | "TCN" | "TE" | "Timeout" | "Timing-Allow-Origin" | "Topic" | "Traceparent" | "Tracestate" | "Trailer" | "Transfer-Encoding" | "TTL" | "Upgrade" | "Urgency" | "URI" | "Use-As-Dictionary" | "User-Agent" | "Variant-Vary" | "Vary" | "Via" | "Want-Content-Digest" | "Want-Digest" | "Want-Repr-Digest" | "Warning" | "WWW-Authenticate" | "X-Content-Type-Options" | "X-Frame-Options"; type ResponseHeader = "Access-Control-Allow-Credentials" | "Access-Control-Allow-Headers" | "Access-Control-Allow-Methods" | "Access-Control-Allow-Origin" | "Access-Control-Expose-Headers" | "Access-Control-Max-Age" | "Age" | "Allow" | "Cache-Control" | "Clear-Site-Data" | "Content-Disposition" | "Content-Encoding" | "Content-Language" | "Content-Length" | "Content-Location" | "Content-Range" | "Content-Security-Policy" | "Content-Security-Policy-Report-Only" | "Content-Type" | "Cookie" | "Cross-Origin-Embedder-Policy" | "Cross-Origin-Opener-Policy" | "Cross-Origin-Resource-Policy" | "Date" | "ETag" | "Expires" | "Last-Modified" | "Location" | "Permissions-Policy" | "Pragma" | "Retry-After" | "Save-Data" | "Sec-CH-Prefers-Color-Scheme" | "Sec-CH-Prefers-Reduced-Motion" | "Sec-CH-UA" | "Sec-CH-UA-Arch" | "Sec-CH-UA-Bitness" | "Sec-CH-UA-Form-Factor" | "Sec-CH-UA-Full-Version" | "Sec-CH-UA-Full-Version-List" | "Sec-CH-UA-Mobile" | "Sec-CH-UA-Model" | "Sec-CH-UA-Platform" | "Sec-CH-UA-Platform-Version" | "Sec-CH-UA-WoW64" | "Sec-Fetch-Dest" | "Sec-Fetch-Mode" | "Sec-Fetch-Site" | "Sec-Fetch-User" | "Sec-GPC" | "Server" | "Server-Timing" | "Service-Worker-Navigation-Preload" | "Set-Cookie" | "Strict-Transport-Security" | "Timing-Allow-Origin" | "Trailer" | "Transfer-Encoding" | "Upgrade" | "Vary" | "WWW-Authenticate" | "Warning" | "X-Content-Type-Options" | "X-DNS-Prefetch-Control" | "X-Frame-Options" | "X-Permitted-Cross-Domain-Policies" | "X-Powered-By" | "X-Robots-Tag" | "X-XSS-Protection"; type CustomHeader = string & {}; //#endregion //#region ../../node_modules/hono/dist/types/utils/http-status.d.ts /** * @module * HTTP Status utility. */ type InfoStatusCode = 100 | 101 | 102 | 103; type SuccessStatusCode = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226; type DeprecatedStatusCode = 305 | 306; type RedirectStatusCode = 300 | 301 | 302 | 303 | 304 | DeprecatedStatusCode | 307 | 308; type ClientErrorStatusCode = 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 421 | 422 | 423 | 424 | 425 | 426 | 428 | 429 | 431 | 451; type ServerErrorStatusCode = 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511; /** * `UnofficialStatusCode` can be used to specify an unofficial status code. * @example * * ```ts * app.get('/unknown', (c) => { * return c.text("Unknown Error", 520 as UnofficialStatusCode) * }) * ``` */ type UnofficialStatusCode = -1; /** * If you want to use an unofficial status, use `UnofficialStatusCode`. */ type StatusCode = InfoStatusCode | SuccessStatusCode | RedirectStatusCode | ClientErrorStatusCode | ServerErrorStatusCode | UnofficialStatusCode; type ContentlessStatusCode = 101 | 204 | 205 | 304; type ContentfulStatusCode = Exclude<StatusCode, ContentlessStatusCode>; //#endregion //#region ../../node_modules/hono/dist/types/utils/types.d.ts type UnionToIntersection<U$1> = (U$1 extends any ? (k: U$1) => void : never) extends ((k: infer I) => void) ? I : never; type RemoveBlankRecord<T$1> = T$1 extends Record<infer K, unknown> ? K extends string ? T$1 : never : never; type IfAnyThenEmptyObject<T$1> = 0 extends 1 & T$1 ? {} : T$1; type JSONPrimitive = string | boolean | number | null; type JSONArray = (JSONPrimitive | JSONObject | JSONArray)[]; type JSONObject = { [key: string]: JSONPrimitive | JSONArray | JSONObject | object | InvalidJSONValue; }; type InvalidJSONValue = undefined | symbol | ((...args: unknown[]) => unknown); type InvalidToNull<T$1> = T$1 extends InvalidJSONValue ? null : T$1; type IsInvalid<T$1> = T$1 extends InvalidJSONValue ? true : false; /** * symbol keys are omitted through `JSON.stringify` */ type OmitSymbolKeys<T$1> = { [K in keyof T$1 as K extends symbol ? never : K]: T$1[K] }; type JSONValue = JSONObject | JSONArray | JSONPrimitive; type JSONParsed<T$1> = T$1 extends { toJSON(): infer J; } ? (() => J) extends (() => JSONPrimitive) ? J : (() => J) extends (() => { toJSON(): unknown; }) ? {} : JSONParsed<J> : T$1 extends JSONPrimitive ? T$1 : T$1 extends InvalidJSONValue ? never : T$1 extends ReadonlyArray<unknown> ? { [K in keyof T$1]: JSONParsed<InvalidToNull<T$1[K]>> } : T$1 extends Set<unknown> | Map<unknown, unknown> ? {} : T$1 extends object ? { [K in keyof OmitSymbolKeys<T$1> as IsInvalid<T$1[K]> extends true ? never : K]: boolean extends IsInvalid<T$1[K]> ? JSONParsed<T$1[K]> | undefined : JSONParsed<T$1[K]> } : never; /** * Useful to flatten the type output to improve type hints shown in editors. And also to transform an interface into a type to aide with assignability. * @copyright from sindresorhus/type-fest */ type Simplify<T$1> = { [KeyType in keyof T$1]: T$1[KeyType] } & {}; /** * A simple extension of Simplify that will deeply traverse array elements. */ type SimplifyDeepArray<T$1> = T$1 extends any[] ? { [E in keyof T$1]: SimplifyDeepArray<T$1[E]> } : Simplify<T$1>; type IsAny<T$1> = boolean extends (T$1 extends never ? true : false) ? true : false; //#endregion //#region ../../node_modules/hono/dist/types/types.d.ts type Bindings = object; type Variables = object; type BlankEnv = {}; type Env = { Bindings?: Bindings; Variables?: Variables; }; type Next = () => Promise<void>; type ExtractInput<I$1 extends Input | Input["in"]> = I$1 extends Input ? unknown extends I$1["in"] ? {} : I$1["in"] : I$1; type Input = { in?: {}; out?: {}; outputFormat?: ResponseFormat; }; type BlankSchema = {}; type BlankInput = {}; interface RouterRoute { path: string; method: string; handler: H; } type HandlerResponse<O$1> = Response | TypedResponse<O$1> | Promise<Response | TypedResponse<O$1>>; type Handler<E$1 extends Env = any, P$1 extends string = any, I$1 extends Input = BlankInput, R$1 extends HandlerResponse<any> = any> = (c: Context<E$1, P$1, I$1>, next: Next) => R$1; type MiddlewareHandler<E$1 extends Env = any, P$1 extends string = string, I$1 extends Input = {}> = (c: Context<E$1, P$1, I$1>, next: Next) => Promise<Response | void>; type H<E$1 extends Env = any, P$1 extends string = any, I$1 extends Input = BlankInput, R$1 extends HandlerResponse<any> = any> = Handler<E$1, P$1, I$1, R$1> | MiddlewareHandler<E$1, P$1, I$1>; type NotFoundHandler<E$1 extends Env = any> = (c: Context<E$1>) => Response | Promise<Response>; interface HTTPResponseError extends Error { getResponse: () => Response; } type ErrorHandler<E$1 extends Env = any> = (err: Error | HTTPResponseError, c: Context<E$1>) => Response | Promise<Response>; interface HandlerInterface<E$1 extends Env = Env, M$1 extends string = string, S$1 extends Schema = BlankSchema, BasePath extends string = "/"> { <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), I extends Input = BlankInput, R extends HandlerResponse<any> = any, E2 extends Env = E$1>(handler: H<E2, P, I, R>): Hono<IntersectNonAnyTypes<[E$1, E2]>, S$1 & ToSchema<M$1, P, I, MergeTypedResponse<R>>, BasePath>; <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), I extends Input = BlankInput, I2 extends Input = I, R extends HandlerResponse<any> = any, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>>(...handlers: [H<E2, P, I>, H<E3, P, I2, R>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3]>, S$1 & ToSchema<M$1, P, I2, MergeTypedResponse<R>>, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, E2 extends Env = E$1>(path: P, handler: H<E2, MergedPath, I, R>): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>; <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3, R>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4]>, S$1 & ToSchema<M$1, P, I3, MergeTypedResponse<R>>, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2, R>]): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I2, MergeTypedResponse<R>>, BasePath>; <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4, R>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, S$1 & ToSchema<M$1, P, I4, MergeTypedResponse<R>>, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3, R>]): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I3, MergeTypedResponse<R>>, BasePath>; <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4>, H<E6, P, I5, R>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, S$1 & ToSchema<M$1, P, I5, MergeTypedResponse<R>>, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3>, H<E5, MergedPath, I4, R>]): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I4, MergeTypedResponse<R>>, BasePath>; <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4>, H<E6, P, I5>, H<E7, P, I6, R>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, S$1 & ToSchema<M$1, P, I6, MergeTypedResponse<R>>, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3>, H<E5, MergedPath, I4>, H<E6, MergedPath, I5, R>]): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I5, MergeTypedResponse<R>>, BasePath>; <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4>, H<E6, P, I5>, H<E7, P, I6>, H<E8, P, I7, R>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, S$1 & ToSchema<M$1, P, I7, MergeTypedResponse<R>>, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3>, H<E5, MergedPath, I4>, H<E6, MergedPath, I5>, H<E7, MergedPath, I6, R>]): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I6, MergeTypedResponse<R>>, BasePath>; <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4>, H<E6, P, I5>, H<E7, P, I6>, H<E8, P, I7>, H<E9, P, I8, R>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9]>, S$1 & ToSchema<M$1, P, I8, MergeTypedResponse<R>>, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3>, H<E5, MergedPath, I4>, H<E6, MergedPath, I5>, H<E7, MergedPath, I6>, H<E8, MergedPath, I7, R>]): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I7, MergeTypedResponse<R>>, BasePath>; <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4>, H<E6, P, I5>, H<E7, P, I6>, H<E8, P, I7>, H<E9, P, I8>, H<E10, P, I9, R>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, S$1 & ToSchema<M$1, P, I9, MergeTypedResponse<R>>, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3>, H<E5, MergedPath, I4>, H<E6, MergedPath, I5>, H<E7, MergedPath, I6>, H<E8, MergedPath, I7>, H<E9, MergedPath, I8, R>]): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I8, MergeTypedResponse<R>>, BasePath>; <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9]>, E11 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9, E10]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4>, H<E6, P, I5>, H<E7, P, I6>, H<E8, P, I7>, H<E9, P, I8>, H<E10, P, I9>, H<E11, P, I10, R>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>, S$1 & ToSchema<M$1, P, I10, MergeTypedResponse<R>>, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3>, H<E5, MergedPath, I4>, H<E6, MergedPath, I5>, H<E7, MergedPath, I6>, H<E8, MergedPath, I7>, H<E9, MergedPath, I8>, H<E10, MergedPath, I9, R>]): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I9, MergeTypedResponse<R>>, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = 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$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9]>, E11 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9, E10]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3>, H<E5, MergedPath, I4>, H<E6, MergedPath, I5>, H<E7, MergedPath, I6>, H<E8, MergedPath, I7>, H<E9, MergedPath, I8>, H<E10, MergedPath, I9>, H<E11, MergedPath, I10, R>]): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I10, MergeTypedResponse<R>>, BasePath>; <P extends string = (ExtractStringKey<S$1> extends never ? BasePath : ExtractStringKey<S$1>), I extends Input = BlankInput, R extends HandlerResponse<any> = any>(...handlers: H<E$1, P, I, R>[]): Hono<E$1, S$1 & ToSchema<M$1, P, I, MergeTypedResponse<R>>, BasePath>; <P extends string, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(path: P, ...handlers: H<E$1, MergePath<BasePath, P>, I, R>[]): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>; <P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(path: P): Hono<E$1, S$1 & ToSchema<M$1, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>; } interface MiddlewareHandlerInterface<E$1 extends Env = Env, S$1 extends Schema = BlankSchema, BasePath extends string = "/"> { <E2 extends Env = E$1>(...handlers: MiddlewareHandler<E2, MergePath<BasePath, ExtractStringKey<S$1>>>[]): Hono<IntersectNonAnyTypes<[E$1, E2]>, S$1, BasePath>; <E2 extends Env = E$1>(handler: MiddlewareHandler<E2, MergePath<BasePath, ExtractStringKey<S$1>>>): Hono<IntersectNonAnyTypes<[E$1, E2]>, S$1, BasePath>; <E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, P extends string = MergePath<BasePath, ExtractStringKey<S$1>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3]>, S$1, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E$1>(path: P, handler: MiddlewareHandler<E2, MergedPath>): Hono<IntersectNonAnyTypes<[E$1, E2]>, ChangePathOfSchema<S$1, MergedPath>, BasePath>; <E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, P extends string = MergePath<BasePath, ExtractStringKey<S$1>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4]>, S$1, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3]>, ChangePathOfSchema<S$1, MergedPath>, BasePath>; <E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, P extends string = MergePath<BasePath, ExtractStringKey<S$1>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, S$1, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4]>, ChangePathOfSchema<S$1, MergedPath>, BasePath>; <E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, P extends string = MergePath<BasePath, ExtractStringKey<S$1>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, S$1, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, ChangePathOfSchema<S$1, MergedPath>, BasePath>; <E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, P extends string = MergePath<BasePath, ExtractStringKey<S$1>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>, MiddlewareHandler<E7, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, S$1, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, ChangePathOfSchema<S$1, MergedPath>, BasePath>; <E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, P extends string = MergePath<BasePath, ExtractStringKey<S$1>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>, MiddlewareHandler<E7, P>, MiddlewareHandler<E8, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, S$1, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>, MiddlewareHandler<E7, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, ChangePathOfSchema<S$1, MergedPath>, BasePath>; <E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, P extends string = MergePath<BasePath, ExtractStringKey<S$1>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>, MiddlewareHandler<E7, P>, MiddlewareHandler<E8, P>, MiddlewareHandler<E9, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9]>, S$1, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>, MiddlewareHandler<E7, P>, MiddlewareHandler<E8, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, ChangePathOfSchema<S$1, MergedPath>, BasePath>; <E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9]>, P extends string = MergePath<BasePath, ExtractStringKey<S$1>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>, MiddlewareHandler<E7, P>, MiddlewareHandler<E8, P>, MiddlewareHandler<E9, P>, MiddlewareHandler<E10, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, S$1, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>, MiddlewareHandler<E7, P>, MiddlewareHandler<E8, P>, MiddlewareHandler<E9, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9]>, ChangePathOfSchema<S$1, MergedPath>, BasePath>; <E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9]>, E11 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, P extends string = MergePath<BasePath, ExtractStringKey<S$1>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>, MiddlewareHandler<E7, P>, MiddlewareHandler<E8, P>, MiddlewareHandler<E9, P>, MiddlewareHandler<E10, P>, MiddlewareHandler<E11, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>, S$1, BasePath>; <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E$1, E3 extends Env = IntersectNonAnyTypes<[E$1, E2]>, E4 extends Env = IntersectNonAnyTypes<[E$1, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>, MiddlewareHandler<E5, P>, MiddlewareHandler<E6, P>, MiddlewareHandler<E7, P>, MiddlewareHandler<E8, P>, MiddlewareHandler<E9, P>, MiddlewareHandler<E10, P>]): Hono<IntersectNonAnyTypes<[E$1, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, ChangePathOfSchema<S$1, MergedPath>, BasePath>; <P extends string, E2 extends Env = E$1>(path: P, ...handlers: MiddlewareHandler<E2, MergePath<BasePath, P>>[]): Hono<E$1, S$1, BasePath>; } interface OnHandlerInterface<E$1 extends Env = Env, S$1 extends Schema = BlankSchema, BasePath extends string = "/"> { <M extends string, P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, E2 extends Env = E$1>(method: M, path: P, handler: H<E2, MergedPath, I, R>): Hono<IntersectNonAnyTypes<[E$1, E2]>, S$1 & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>; <M extends string, P extends string, MergedPath extends MergePath<BasePath, P> =