blade
Version:
React at the edge.
428 lines (427 loc) • 100 kB
TypeScript
//#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> =