<type>api
/

dist/types/middleware/context-storage/index.d.ts

Functions
  • contextStorage

    /**
     * Context Storage Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/context-storage}
     *
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * type Env = {
     *   Variables: {
     *     message: string
     *   }
     * }
     *
     * const app = new Hono<Env>()
     *
     * app.use(contextStorage())
     *
     * app.use(async (c, next) => {
     *   c.set('message', 'Hono is cool!!)
     *   await next()
     * })
     *
     * app.get('/', async (c) => { c.text(getMessage()) })
     *
     * const getMessage = () => {
     *   return getContext<Env>().var.message
     * }
     * ```
     */
    export declare const contextStorage: () => MiddlewareHandler;
  • getContext

    export declare const getContext: <E extends Env = Env>() => Context<E, any, {}>;
All
/**
 * @module
 * Context Storage Middleware for Hono.
 */
import type { Context } from '../../context';
import type { Env, MiddlewareHandler } from '../../types';
/**
 * Context Storage Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/context-storage}
 *
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * type Env = {
 *   Variables: {
 *     message: string
 *   }
 * }
 *
 * const app = new Hono<Env>()
 *
 * app.use(contextStorage())
 *
 * app.use(async (c, next) => {
 *   c.set('message', 'Hono is cool!!)
 *   await next()
 * })
 *
 * app.get('/', async (c) => { c.text(getMessage()) })
 *
 * const getMessage = () => {
 *   return getContext<Env>().var.message
 * }
 * ```
 */
export declare const contextStorage: () => MiddlewareHandler;
export declare const getContext: <E extends Env = Env>() => Context<E, any, {}>;

dist/types/jsx/dom/client.d.ts

Interfaces
  • Root

    export interface Root {
        render(children: Child): void;
        unmount(): void;
    }
Types
  • RootOptions

    export type RootOptions = Record<string, unknown>;
Functions
  • createRoot

    /**
     * Create a root object for rendering
     * @param element Render target
     * @param options Options for createRoot (not supported yet)
     * @returns Root object has `render` and `unmount` methods
     */
    export declare const createRoot: (element: HTMLElement | DocumentFragment, options?: RootOptions) => Root;
  • hydrateRoot

    /**
     * Create a root object and hydrate app to the target element.
     * In hono/jsx/dom, hydrate is equivalent to render.
     * @param element Render target
     * @param reactNode A JSXNode to render
     * @param options Options for createRoot (not supported yet)
     * @returns Root object has `render` and `unmount` methods
     */
    export declare const hydrateRoot: (element: HTMLElement | DocumentFragment, reactNode: Child, options?: RootOptions) => Root;
All
/**
 * @module
 * This module provides APIs for `hono/jsx/dom/client`, which is compatible with `react-dom/client`.
 */
import type { Child } from '../base';
export interface Root {
    render(children: Child): void;
    unmount(): void;
}
export type RootOptions = Record<string, unknown>;
/**
 * Create a root object for rendering
 * @param element Render target
 * @param options Options for createRoot (not supported yet)
 * @returns Root object has `render` and `unmount` methods
 */
export declare const createRoot: (element: HTMLElement | DocumentFragment, options?: RootOptions) => Root;
/**
 * Create a root object and hydrate app to the target element.
 * In hono/jsx/dom, hydrate is equivalent to render.
 * @param element Render target
 * @param reactNode A JSXNode to render
 * @param options Options for createRoot (not supported yet)
 * @returns Root object has `render` and `unmount` methods
 */
export declare const hydrateRoot: (element: HTMLElement | DocumentFragment, reactNode: Child, options?: RootOptions) => Root;
declare const _default: {
    createRoot: (element: HTMLElement | DocumentFragment, options?: RootOptions) => Root;
    hydrateRoot: (element: HTMLElement | DocumentFragment, reactNode: Child, options?: RootOptions) => Root;
};
export default _default;

dist/types/middleware/bearer-auth/index.d.ts

Types
  • MessageFunction

    type MessageFunction = (c: Context) => string | object | Promise<string | object>;
  • BearerAuthOptions

    type BearerAuthOptions = {
        token: string | string[];
        realm?: string;
        prefix?: string;
        headerName?: string;
        hashFunction?: Function;
        noAuthenticationHeaderMessage?: string | object | MessageFunction;
        invalidAuthenticationHeaderMessage?: string | object | MessageFunction;
        invalidTokenMessage?: string | object | MessageFunction;
    } | {
        realm?: string;
        prefix?: string;
        headerName?: string;
        verifyToken: (token: string, c: Context) => boolean | Promise<boolean>;
        hashFunction?: Function;
        noAuthenticationHeaderMessage?: string | object | MessageFunction;
        invalidAuthenticationHeaderMessage?: string | object | MessageFunction;
        invalidTokenMessage?: string | object | MessageFunction;
    };
Functions
  • bearerAuth

    /**
     * Bearer Auth Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/bearer-auth}
     *
     * @param {BearerAuthOptions} options - The options for the bearer authentication middleware.
     * @param {string | string[]} [options.token] - The string or array of strings to validate the incoming bearer token against.
     * @param {Function} [options.verifyToken] - The function to verify the token.
     * @param {string} [options.realm=""] - The domain name of the realm, as part of the returned WWW-Authenticate challenge header.
     * @param {string} [options.prefix="Bearer"] - The prefix (or known as `schema`) for the Authorization header value. If set to the empty string, no prefix is expected.
     * @param {string} [options.headerName=Authorization] - The header name.
     * @param {Function} [options.hashFunction] - A function to handle hashing for safe comparison of authentication tokens.
     * @param {string | object | MessageFunction} [options.noAuthenticationHeaderMessage="Unauthorized"] - The no authentication header message.
     * @param {string | object | MessageFunction} [options.invalidAuthenticationHeaderMeasage="Bad Request"] - The invalid authentication header message.
     * @param {string | object | MessageFunction} [options.invalidTokenMessage="Unauthorized"] - The invalid token message.
     * @returns {MiddlewareHandler} The middleware handler function.
     * @throws {Error} If neither "token" nor "verifyToken" options are provided.
     * @throws {HTTPException} If authentication fails, with 401 status code for missing or invalid token, or 400 status code for invalid request.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * const token = 'honoiscool'
     *
     * app.use('/api/*', bearerAuth({ token }))
     *
     * app.get('/api/page', (c) => {
     *   return c.json({ message: 'You are authorized' })
     * })
     * ```
     */
    export declare const bearerAuth: (options: BearerAuthOptions) => MiddlewareHandler;
All
/**
 * @module
 * Bearer Auth Middleware for Hono.
 */
import type { Context } from '../../context';
import type { MiddlewareHandler } from '../../types';
type MessageFunction = (c: Context) => string | object | Promise<string | object>;
type BearerAuthOptions = {
    token: string | string[];
    realm?: string;
    prefix?: string;
    headerName?: string;
    hashFunction?: Function;
    noAuthenticationHeaderMessage?: string | object | MessageFunction;
    invalidAuthenticationHeaderMessage?: string | object | MessageFunction;
    invalidTokenMessage?: string | object | MessageFunction;
} | {
    realm?: string;
    prefix?: string;
    headerName?: string;
    verifyToken: (token: string, c: Context) => boolean | Promise<boolean>;
    hashFunction?: Function;
    noAuthenticationHeaderMessage?: string | object | MessageFunction;
    invalidAuthenticationHeaderMessage?: string | object | MessageFunction;
    invalidTokenMessage?: string | object | MessageFunction;
};
/**
 * Bearer Auth Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/bearer-auth}
 *
 * @param {BearerAuthOptions} options - The options for the bearer authentication middleware.
 * @param {string | string[]} [options.token] - The string or array of strings to validate the incoming bearer token against.
 * @param {Function} [options.verifyToken] - The function to verify the token.
 * @param {string} [options.realm=""] - The domain name of the realm, as part of the returned WWW-Authenticate challenge header.
 * @param {string} [options.prefix="Bearer"] - The prefix (or known as `schema`) for the Authorization header value. If set to the empty string, no prefix is expected.
 * @param {string} [options.headerName=Authorization] - The header name.
 * @param {Function} [options.hashFunction] - A function to handle hashing for safe comparison of authentication tokens.
 * @param {string | object | MessageFunction} [options.noAuthenticationHeaderMessage="Unauthorized"] - The no authentication header message.
 * @param {string | object | MessageFunction} [options.invalidAuthenticationHeaderMeasage="Bad Request"] - The invalid authentication header message.
 * @param {string | object | MessageFunction} [options.invalidTokenMessage="Unauthorized"] - The invalid token message.
 * @returns {MiddlewareHandler} The middleware handler function.
 * @throws {Error} If neither "token" nor "verifyToken" options are provided.
 * @throws {HTTPException} If authentication fails, with 401 status code for missing or invalid token, or 400 status code for invalid request.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * const token = 'honoiscool'
 *
 * app.use('/api/*', bearerAuth({ token }))
 *
 * app.get('/api/page', (c) => {
 *   return c.json({ message: 'You are authorized' })
 * })
 * ```
 */
export declare const bearerAuth: (options: BearerAuthOptions) => MiddlewareHandler;
export {};

dist/types/middleware/ip-restriction/index.d.ts

Types
  • GetIPAddr

    /**
     * Function to get IP Address
     */
    type GetIPAddr = GetConnInfo | ((c: Context) => string);
  • IPRestrictionRule

    export type IPRestrictionRule = string | ((addr: {
        addr: string;
        type: AddressType;
    }) => boolean);
Interfaces
  • IPRestrictionRules

    /**
     * Rules for IP Restriction Middleware
     */
    export interface IPRestrictionRules {
        denyList?: IPRestrictionRule[];
        allowList?: IPRestrictionRule[];
    }
Functions
  • ipRestriction

    /**
     * IP Restriction Middleware
     *
     * @param getIP function to get IP Address
     */
    export declare const ipRestriction: (getIP: GetIPAddr, { denyList, allowList }: IPRestrictionRules, onError?: ((remote: {
        addr: string;
        type: AddressType;
    }, c: Context) => Response | Promise<Response>) | undefined) => MiddlewareHandler;
All
/**
 * IP Restriction Middleware for Hono
 * @module
 */
import type { Context, MiddlewareHandler } from '../..';
import type { AddressType, GetConnInfo } from '../../helper/conninfo';
/**
 * Function to get IP Address
 */
type GetIPAddr = GetConnInfo | ((c: Context) => string);
export type IPRestrictionRule = string | ((addr: {
    addr: string;
    type: AddressType;
}) => boolean);
/**
 * Rules for IP Restriction Middleware
 */
export interface IPRestrictionRules {
    denyList?: IPRestrictionRule[];
    allowList?: IPRestrictionRule[];
}
/**
 * IP Restriction Middleware
 *
 * @param getIP function to get IP Address
 */
export declare const ipRestriction: (getIP: GetIPAddr, { denyList, allowList }: IPRestrictionRules, onError?: ((remote: {
    addr: string;
    type: AddressType;
}, c: Context) => Response | Promise<Response>) | undefined) => MiddlewareHandler;
export {};

dist/types/preset/tiny.d.ts

All
/**
 * @module
 * The preset that uses `PatternRouter`.
 */
import { HonoBase } from '../hono-base';
import type { HonoOptions } from '../hono-base';
import type { BlankEnv, BlankSchema, Env, Schema } from '../types';
export declare class Hono<E extends Env = BlankEnv, S extends Schema = BlankSchema, BasePath extends string = '/'> extends HonoBase<E, S, BasePath> {
    constructor(options?: HonoOptions<E>);
}

dist/types/middleware/timeout/index.d.ts

Types
  • HTTPExceptionFunction

    export type HTTPExceptionFunction = (context: Context) => HTTPException;
Functions
  • timeout

    /**
     * Timeout Middleware for Hono.
     *
     * @param {number} duration - The timeout duration in milliseconds.
     * @param {HTTPExceptionFunction | HTTPException} [exception=defaultTimeoutException] - The exception to throw when the timeout occurs. Can be a function that returns an HTTPException or an HTTPException object.
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.use(
     *   '/long-request',
     *   timeout(5000) // Set timeout to 5 seconds
     * )
     *
     * app.get('/long-request', async (c) => {
     *   await someLongRunningFunction()
     *   return c.text('Completed within time limit')
     * })
     * ```
     */
    export declare const timeout: (duration: number, exception?: HTTPExceptionFunction | HTTPException) => MiddlewareHandler;
All
/**
 * @module
 * Timeout Middleware for Hono.
 */
import type { Context } from '../../context';
import { HTTPException } from '../../http-exception';
import type { MiddlewareHandler } from '../../types';
export type HTTPExceptionFunction = (context: Context) => HTTPException;
/**
 * Timeout Middleware for Hono.
 *
 * @param {number} duration - The timeout duration in milliseconds.
 * @param {HTTPExceptionFunction | HTTPException} [exception=defaultTimeoutException] - The exception to throw when the timeout occurs. Can be a function that returns an HTTPException or an HTTPException object.
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.use(
 *   '/long-request',
 *   timeout(5000) // Set timeout to 5 seconds
 * )
 *
 * app.get('/long-request', async (c) => {
 *   await someLongRunningFunction()
 *   return c.text('Completed within time limit')
 * })
 * ```
 */
export declare const timeout: (duration: number, exception?: HTTPExceptionFunction | HTTPException) => MiddlewareHandler;

dist/types/middleware/cors/index.d.ts

Types
  • CORSOptions

    type CORSOptions = {
        origin: string | string[] | ((origin: string, c: Context) => string | undefined | null);
        allowMethods?: string[];
        allowHeaders?: string[];
        maxAge?: number;
        credentials?: boolean;
        exposeHeaders?: string[];
    };
Functions
  • cors

    /**
     * CORS Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/cors}
     *
     * @param {CORSOptions} [options] - The options for the CORS middleware.
     * @param {string | string[] | ((origin: string, c: Context) => string | undefined | null)} [options.origin='*'] - The value of "Access-Control-Allow-Origin" CORS header.
     * @param {string[]} [options.allowMethods=['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH']] - The value of "Access-Control-Allow-Methods" CORS header.
     * @param {string[]} [options.allowHeaders=[]] - The value of "Access-Control-Allow-Headers" CORS header.
     * @param {number} [options.maxAge] - The value of "Access-Control-Max-Age" CORS header.
     * @param {boolean} [options.credentials] - The value of "Access-Control-Allow-Credentials" CORS header.
     * @param {string[]} [options.exposeHeaders=[]] - The value of "Access-Control-Expose-Headers" CORS header.
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.use('/api/*', cors())
     * app.use(
     *   '/api2/*',
     *   cors({
     *     origin: 'http://example.com',
     *     allowHeaders: ['X-Custom-Header', 'Upgrade-Insecure-Requests'],
     *     allowMethods: ['POST', 'GET', 'OPTIONS'],
     *     exposeHeaders: ['Content-Length', 'X-Kuma-Revision'],
     *     maxAge: 600,
     *     credentials: true,
     *   })
     * )
     *
     * app.all('/api/abc', (c) => {
     *   return c.json({ success: true })
     * })
     * app.all('/api2/abc', (c) => {
     *   return c.json({ success: true })
     * })
     * ```
     */
    export declare const cors: (options?: CORSOptions) => MiddlewareHandler;
All
/**
 * @module
 * CORS Middleware for Hono.
 */
import type { Context } from '../../context';
import type { MiddlewareHandler } from '../../types';
type CORSOptions = {
    origin: string | string[] | ((origin: string, c: Context) => string | undefined | null);
    allowMethods?: string[];
    allowHeaders?: string[];
    maxAge?: number;
    credentials?: boolean;
    exposeHeaders?: string[];
};
/**
 * CORS Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/cors}
 *
 * @param {CORSOptions} [options] - The options for the CORS middleware.
 * @param {string | string[] | ((origin: string, c: Context) => string | undefined | null)} [options.origin='*'] - The value of "Access-Control-Allow-Origin" CORS header.
 * @param {string[]} [options.allowMethods=['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH']] - The value of "Access-Control-Allow-Methods" CORS header.
 * @param {string[]} [options.allowHeaders=[]] - The value of "Access-Control-Allow-Headers" CORS header.
 * @param {number} [options.maxAge] - The value of "Access-Control-Max-Age" CORS header.
 * @param {boolean} [options.credentials] - The value of "Access-Control-Allow-Credentials" CORS header.
 * @param {string[]} [options.exposeHeaders=[]] - The value of "Access-Control-Expose-Headers" CORS header.
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.use('/api/*', cors())
 * app.use(
 *   '/api2/*',
 *   cors({
 *     origin: 'http://example.com',
 *     allowHeaders: ['X-Custom-Header', 'Upgrade-Insecure-Requests'],
 *     allowMethods: ['POST', 'GET', 'OPTIONS'],
 *     exposeHeaders: ['Content-Length', 'X-Kuma-Revision'],
 *     maxAge: 600,
 *     credentials: true,
 *   })
 * )
 *
 * app.all('/api/abc', (c) => {
 *   return c.json({ success: true })
 * })
 * app.all('/api2/abc', (c) => {
 *   return c.json({ success: true })
 * })
 * ```
 */
export declare const cors: (options?: CORSOptions) => MiddlewareHandler;
export {};

dist/types/middleware/cache/index.d.ts

Functions
  • cache

    /**
     * Cache Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/cache}
     *
     * @param {Object} options - The options for the cache middleware.
     * @param {string | Function} options.cacheName - The name of the cache. Can be used to store multiple caches with different identifiers.
     * @param {boolean} [options.wait=false] - A boolean indicating if Hono should wait for the Promise of the `cache.put` function to resolve before continuing with the request. Required to be true for the Deno environment.
     * @param {string} [options.cacheControl] - A string of directives for the `Cache-Control` header.
     * @param {string | string[]} [options.vary] - Sets the `Vary` header in the response. If the original response header already contains a `Vary` header, the values are merged, removing any duplicates.
     * @param {Function} [options.keyGenerator] - Generates keys for every request in the `cacheName` store. This can be used to cache data based on request parameters or context parameters.
     * @returns {MiddlewareHandler} The middleware handler function.
     * @throws {Error} If the `vary` option includes "*".
     *
     * @example
     * ```ts
     * app.get(
     *   '*',
     *   cache({
     *     cacheName: 'my-app',
     *     cacheControl: 'max-age=3600',
     *   })
     * )
     * ```
     */
    export declare const cache: (options: {
        cacheName: string | ((c: Context) => Promise<string> | string);
        wait?: boolean | undefined;
        cacheControl?: string | undefined;
        vary?: string | string[] | undefined;
        keyGenerator?: ((c: Context) => Promise<string> | string) | undefined;
    }) => MiddlewareHandler;
All
/**
 * @module
 * Cache Middleware for Hono.
 */
import type { Context } from '../../context';
import type { MiddlewareHandler } from '../../types';
/**
 * Cache Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/cache}
 *
 * @param {Object} options - The options for the cache middleware.
 * @param {string | Function} options.cacheName - The name of the cache. Can be used to store multiple caches with different identifiers.
 * @param {boolean} [options.wait=false] - A boolean indicating if Hono should wait for the Promise of the `cache.put` function to resolve before continuing with the request. Required to be true for the Deno environment.
 * @param {string} [options.cacheControl] - A string of directives for the `Cache-Control` header.
 * @param {string | string[]} [options.vary] - Sets the `Vary` header in the response. If the original response header already contains a `Vary` header, the values are merged, removing any duplicates.
 * @param {Function} [options.keyGenerator] - Generates keys for every request in the `cacheName` store. This can be used to cache data based on request parameters or context parameters.
 * @returns {MiddlewareHandler} The middleware handler function.
 * @throws {Error} If the `vary` option includes "*".
 *
 * @example
 * ```ts
 * app.get(
 *   '*',
 *   cache({
 *     cacheName: 'my-app',
 *     cacheControl: 'max-age=3600',
 *   })
 * )
 * ```
 */
export declare const cache: (options: {
    cacheName: string | ((c: Context) => Promise<string> | string);
    wait?: boolean | undefined;
    cacheControl?: string | undefined;
    vary?: string | string[] | undefined;
    keyGenerator?: ((c: Context) => Promise<string> | string) | undefined;
}) => MiddlewareHandler;

dist/types/adapter/lambda-edge/index.d.ts

All
/**
 * @module
 * Lambda@Edge Adapter for Hono.
 */
export { handle } from './handler';
export { getConnInfo } from './conninfo';
export type { Callback, CloudFrontConfig, CloudFrontRequest, CloudFrontResponse, CloudFrontEdgeEvent, } from './handler';

dist/types/hono-base.d.ts

Types
  • GetPath

    type GetPath<E extends Env> = (request: Request, options?: {
        env?: E["Bindings"];
    }) => string;
  • HonoOptions

    export type HonoOptions<E 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 specifices 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>;
    };
  • MountOptionHandler

    type MountOptionHandler = (c: Context) => unknown;
  • MountReplaceRequest

    type MountReplaceRequest = (originalRequest: Request) => Request;
  • MountOptions

    type MountOptions = MountOptionHandler | {
        optionHandler?: MountOptionHandler;
        replaceRequest?: MountReplaceRequest;
    };
All
/**
 * @module
 * This module is the base module for the Hono object.
 */
import { Context } from './context';
import type { ExecutionContext } from './context';
import type { Router } from './router';
import type { Env, ErrorHandler, H, HandlerInterface, MergePath, MergeSchemaPath, MiddlewareHandlerInterface, NotFoundHandler, OnHandlerInterface, RouterRoute, Schema } from './types';
/**
 * Symbol used to mark a composed handler.
 */
export declare const COMPOSED_HANDLER: unique symbol;
type GetPath<E extends Env> = (request: Request, options?: {
    env?: E['Bindings'];
}) => string;
export type HonoOptions<E 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 specifices 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>;
};
type MountOptionHandler = (c: Context) => unknown;
type MountReplaceRequest = (originalRequest: Request) => Request;
type MountOptions = MountOptionHandler | {
    optionHandler?: MountOptionHandler;
    replaceRequest?: MountReplaceRequest;
};
declare class Hono<E extends Env = Env, S extends Schema = {}, BasePath extends string = '/'> {
    #private;
    get: HandlerInterface<E, 'get', S, BasePath>;
    post: HandlerInterface<E, 'post', S, BasePath>;
    put: HandlerInterface<E, 'put', S, BasePath>;
    delete: HandlerInterface<E, 'delete', S, BasePath>;
    options: HandlerInterface<E, 'options', S, BasePath>;
    patch: HandlerInterface<E, 'patch', S, BasePath>;
    all: HandlerInterface<E, 'all', S, BasePath>;
    on: OnHandlerInterface<E, S, BasePath>;
    use: MiddlewareHandlerInterface<E, S, BasePath>;
    router: Router<[H, RouterRoute]>;
    readonly getPath: GetPath<E>;
    private _basePath;
    routes: RouterRoute[];
    constructor(options?: HonoOptions<E>);
    private clone;
    private notFoundHandler;
    private errorHandler;
    /**
     * `.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, MergeSchemaPath<SubSchema, MergePath<BasePath, SubPath>> & S, 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, S, 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>) => Hono<E, S, 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>) => Hono<E, S, 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, S, BasePath>;
    private addRoute;
    private matchRoute;
    private handleError;
    private dispatch;
    /**
     * `.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['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['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;
}
export { Hono as HonoBase };

dist/types/types.d.ts

Types
  • Bindings

    export type Bindings = object;
  • Variables

    export type Variables = object;
  • BlankEnv

    export type BlankEnv = {};
  • Env

    export type Env = {
        Bindings?: Bindings;
        Variables?: Variables;
    };
  • Next

    export type Next = () => Promise<void>;
  • ExtractInput

    export type ExtractInput<I extends Input | Input["in"]> = I extends Input ? unknown extends I["in"] ? {} : I["in"] : I;
  • Input

    export type Input = {
        in?: {};
        out?: {};
        outputFormat?: ResponseFormat;
    };
  • BlankSchema

    export type BlankSchema = {};
  • BlankInput

    export type BlankInput = {};
  • HandlerResponse

    export type HandlerResponse<O> = Response | TypedResponse<O> | Promise<Response | TypedResponse<O>>;
  • Handler

    export type Handler<E extends Env = any, P extends string = any, I extends Input = BlankInput, R extends HandlerResponse<any> = any> = (c: Context<E, P, I>, next: Next) => R;
  • MiddlewareHandler

    export type MiddlewareHandler<E extends Env = any, P extends string = string, I extends Input = {}> = (c: Context<E, P, I>, next: Next) => Promise<Response | void>;
  • H

    export type H<E extends Env = any, P extends string = any, I extends Input = BlankInput, R extends HandlerResponse<any> = any> = Handler<E, P, I, R> | MiddlewareHandler<E, P, I>;
  • NotFoundHandler

    export type NotFoundHandler<E extends Env = any> = (c: Context<E>) => Response | Promise<Response>;
  • ErrorHandler

    export type ErrorHandler<E extends Env = any> = (err: Error | HTTPResponseError, c: Context<E>) => Response | Promise<Response>;
  • ExtractKey

    type ExtractKey<S> = S extends Record<infer Key, unknown> ? Key extends string ? Key : never : string;
  • ToSchema

    export type ToSchema<M extends string, P extends string, I extends Input | Input["in"], RorO> = Simplify<{
        [K in P]: {
            [K2 in M as AddDollar<K2>]: Simplify<{
                input: AddParam<ExtractInput<I>, P>;
            } & (IsAny<RorO> extends true ? {
                output: {};
                outputFormat: ResponseFormat;
                status: StatusCode;
            } : RorO extends TypedResponse<infer T, infer U, infer F> ? {
                output: unknown extends T ? {} : T;
                outputFormat: I extends {
                    outputFormat: string;
                } ? I["outputFormat"] : F;
                status: U;
            } : {
                output: unknown extends RorO ? {} : RorO;
                outputFormat: unknown extends RorO ? "json" : I extends {
                    outputFormat: string;
                } ? I["outputFormat"] : "json";
                status: StatusCode;
            })>;
        };
    }>;
  • Schema

    export type Schema = {
        [Path: string]: {
            [Method: `$${Lowercase<string>}`]: Endpoint;
        };
    };
  • ChangePathOfSchema

    type ChangePathOfSchema<S extends Schema, Path extends string> = keyof S extends never ? {
        [K in Path]: {};
    } : {
        [K in keyof S as Path]: S[K];
    };
  • Endpoint

    export type Endpoint = {
        input: any;
        output: any;
        outputFormat: ResponseFormat;
        status: StatusCode;
    };
  • ExtractParams

    type ExtractParams<Path extends string> = string extends Path ? Record<string, string> : Path extends `${infer _Start}:${infer Param}/${infer Rest}` ? {
        [K in Param | keyof ExtractParams<`/${Rest}`>]: string;
    } : Path extends `${infer _Start}:${infer Param}` ? {
        [K in Param]: string;
    } : never;
  • FlattenIfIntersect

    type FlattenIfIntersect<T> = T extends infer O ? {
        [K in keyof O]: O[K];
    } : never;
  • MergeSchemaPath

    export type MergeSchemaPath<OrigSchema extends Schema, SubPath extends string> = Simplify<{
        [P in keyof OrigSchema as MergePath<SubPath, P & string>]: {
            [M in keyof OrigSchema[P]]: MergeEndpointParamsWithPath<OrigSchema[P][M], SubPath>;
        };
    }>;
  • MergeEndpointParamsWithPath

    type MergeEndpointParamsWithPath<T, SubPath extends string> = T extends {
        input: infer Input;
        output: infer Output;
        outputFormat: infer OutputFormat;
        status: infer Status;
    } ? {
        input: Input extends {
            param: infer _;
        } ? ExtractParams<SubPath> extends never ? Input : FlattenIfIntersect<Input & {
            param: {
                [K in keyof ExtractParams<SubPath> as K extends `${infer Prefix}{${infer _}}` ? Prefix : K]: string;
            };
        }> : RemoveBlankRecord<ExtractParams<SubPath>> extends never ? Input : Input & {
            param: {
                [K in keyof ExtractParams<SubPath> as K extends `${infer Prefix}{${infer _}}` ? Prefix : K]: string;
            };
        };
        output: Output;
        outputFormat: OutputFormat;
        status: Status;
    } : never;
  • AddParam

    export type AddParam<I, P extends string> = ParamKeys<P> extends never ? I : I extends {
        param: infer _;
    } ? I : I & {
        param: UnionToIntersection<ParamKeyToRecord<ParamKeys<P>>>;
    };
  • AddDollar

    type AddDollar<T extends string> = `$${Lowercase<T>}`;
  • MergePath

    export type MergePath<A extends string, B extends string> = B extends "" ? MergePath<A, "/"> : A extends "" ? B : A extends "/" ? B : A extends `${infer P}/` ? B extends `/${infer Q}` ? `${P}/${Q}` : `${P}/${B}` : B extends `/${infer Q}` ? Q extends "" ? A : `${A}/${Q}` : `${A}/${B}`;
  • KnownResponseFormat

    export type KnownResponseFormat = "json" | "text" | "redirect";
  • ResponseFormat

    export type ResponseFormat = KnownResponseFormat | string;
  • TypedResponse

    export type TypedResponse<T = unknown, U extends StatusCode = StatusCode, F extends ResponseFormat = T extends string ? "text" : T extends JSONValue ? "json" : ResponseFormat> = {
        _data: T;
        _status: U;
        _format: F;
    };
  • MergeTypedResponse

    type MergeTypedResponse<T> = T extends Promise<infer T2> ? T2 extends TypedResponse ? T2 : TypedResponse : T extends TypedResponse ? T : TypedResponse;
  • FormValue

    export type FormValue = string | Blob;
  • ParsedFormValue

    export type ParsedFormValue = string | File;
  • ValidationTargets

    export type ValidationTargets<T extends FormValue = ParsedFormValue, P extends string = string> = {
        json: any;
        form: Record<string, T | T[]>;
        query: Record<string, string | string[]>;
        param: Record<P, P extends `${infer _}?` ? string | undefined : string>;
        header: Record<string, string>;
        cookie: Record<string, string>;
    };
  • ParamKeyName

    type ParamKeyName<NameWithPattern> = NameWithPattern extends `${infer Name}{${infer Rest}` ? Rest extends `${infer _Pattern}?` ? `${Name}?` : Name : NameWithPattern;
  • ParamKey

    type ParamKey<Component> = Component extends `:${infer NameWithPattern}` ? ParamKeyName<NameWithPattern> : never;
  • ParamKeys

    export type ParamKeys<Path> = Path extends `${infer Component}/${infer Rest}` ? ParamKey<Component> | ParamKeys<Rest> : ParamKey<Path>;
  • ParamKeyToRecord

    export type ParamKeyToRecord<T extends string> = T extends `${infer R}?` ? Record<R, string | undefined> : {
        [K in T]: string;
    };
  • InputToDataByTarget

    export type InputToDataByTarget<T extends Input["out"], Target extends keyof ValidationTargets> = T extends {
        [K in Target]: infer R;
    } ? R : never;
  • RemoveQuestion

    export type RemoveQuestion<T> = T extends `${infer R}?` ? R : T;
  • ExtractSchema

    export type ExtractSchema<T> = UnionToIntersection<T extends Hono<infer _, infer S, any> ? S : never>;
  • EnvOrEmpty

    type EnvOrEmpty<T> = T extends Env ? (Env extends T ? {} : T) : T;
  • IntersectNonAnyTypes

    type IntersectNonAnyTypes<T extends any[]> = T extends [
        infer Head,
        ...infer Rest
    ] ? IfAnyThenEmptyObject<EnvOrEmpty<Head>> & IntersectNonAnyTypes<Rest> : {};
Interfaces
  • RouterRoute

    export interface RouterRoute {
        path: string;
        method: string;
        handler: H;
    }
  • HTTPResponseError

    export interface HTTPResponseError extends Error {
        getResponse: () => Response;
    }
  • HandlerInterface

    export interface HandlerInterface<E extends Env = Env, M extends string = string, S extends Schema = BlankSchema, BasePath extends string = "/"> {
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, I extends Input = BlankInput, R extends HandlerResponse<any> = any, E2 extends Env = E>(handler: H<E2, P, I, R>): Hono<IntersectNonAnyTypes<[
            E,
            E2
        ]>, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath>;
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, I extends Input = BlankInput, I2 extends Input = I, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
            E,
            E2
        ]>>(...handlers: [
            H<E2, P, I>,
            H<E3, P, I2, R>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>, S & ToSchema<M, 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>(path: P, handler: H<E2, MergedPath, I, R>): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>>(...handlers: [
            H<E2, P, I>,
            H<E3, P, I2>,
            H<E4, P, I3, R>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4
        ]>, S & ToSchema<M, 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, E3 extends Env = IntersectNonAnyTypes<[
            E,
            E2
        ]>>(path: P, ...handlers: [
            H<E2, MergedPath, I>,
            H<E3, MergedPath, I2, R>
        ]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I2, MergeTypedResponse<R>>, BasePath>;
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4
        ]>>(...handlers: [
            H<E2, P, I>,
            H<E3, P, I2>,
            H<E4, P, I3>,
            H<E5, P, I4, R>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5
        ]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>>(path: P, ...handlers: [
            H<E2, MergedPath, I>,
            H<E3, MergedPath, I2>,
            H<E4, MergedPath, I3, R>
        ]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I3, MergeTypedResponse<R>>, BasePath>;
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6
        ]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[
            E,
            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, S & ToSchema<M, MergePath<BasePath, P>, I4, MergeTypedResponse<R>>, BasePath>;
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7
        ]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[
            E,
            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, S & ToSchema<M, MergePath<BasePath, P>, I5, MergeTypedResponse<R>>, BasePath>;
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8
        ]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[
            E,
            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, S & ToSchema<M, MergePath<BasePath, P>, I6, MergeTypedResponse<R>>, BasePath>;
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9
        ]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[
            E,
            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, S & ToSchema<M, MergePath<BasePath, P>, I7, MergeTypedResponse<R>>, BasePath>;
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10
        ]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[
            E,
            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, S & ToSchema<M, MergePath<BasePath, P>, I8, MergeTypedResponse<R>>, BasePath>;
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10,
            E11
        ]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[
            E,
            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, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[
            E,
            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, S & ToSchema<M, MergePath<BasePath, P>, I10, MergeTypedResponse<R>>, BasePath>;
        <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(...handlers: H<E, P, I, R>[]): Hono<E, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath>;
        <P extends string, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(path: P, ...handlers: H<E, MergePath<BasePath, P>, I, R>[]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
        <P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(path: P): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
    }
  • MiddlewareHandlerInterface

    export interface MiddlewareHandlerInterface<E extends Env = Env, S extends Schema = BlankSchema, BasePath extends string = "/"> {
        <E2 extends Env = E>(...handlers: MiddlewareHandler<E2, MergePath<BasePath, ExtractKey<S>>>[]): Hono<IntersectNonAnyTypes<[
            E,
            E2
        ]>, S, BasePath>;
        <E2 extends Env = E>(handler: MiddlewareHandler<E2, MergePath<BasePath, ExtractKey<S>>>): Hono<IntersectNonAnyTypes<[
            E,
            E2
        ]>, S, BasePath>;
        <E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
            E,
            E2
        ]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...handlers: [
            MiddlewareHandler<E2, P>,
            MiddlewareHandler<E3, P>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>, S, BasePath>;
        <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E>(path: P, handler: MiddlewareHandler<E2, MergedPath>): Hono<IntersectNonAnyTypes<[
            E,
            E2
        ]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
        <E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...handlers: [
            MiddlewareHandler<E2, P>,
            MiddlewareHandler<E3, P>,
            MiddlewareHandler<E4, P>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4
        ]>, S, BasePath>;
        <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
            E,
            E2
        ]>>(path: P, ...handlers: [
            MiddlewareHandler<E2, P>,
            MiddlewareHandler<E3, P>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
        <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4
        ]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...handlers: [
            MiddlewareHandler<E2, P>,
            MiddlewareHandler<E3, P>,
            MiddlewareHandler<E4, P>,
            MiddlewareHandler<E5, P>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5
        ]>, S, BasePath>;
        <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>>(path: P, ...handlers: [
            MiddlewareHandler<E2, P>,
            MiddlewareHandler<E3, P>,
            MiddlewareHandler<E4, P>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4
        ]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
        <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5
        ]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...handlers: [
            MiddlewareHandler<E2, P>,
            MiddlewareHandler<E3, P>,
            MiddlewareHandler<E4, P>,
            MiddlewareHandler<E5, P>,
            MiddlewareHandler<E6, P>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6
        ]>, S, BasePath>;
        <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4
        ]>>(path: P, ...handlers: [
            MiddlewareHandler<E2, P>,
            MiddlewareHandler<E3, P>,
            MiddlewareHandler<E4, P>,
            MiddlewareHandler<E5, P>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5
        ]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
        <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6
        ]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...handlers: [
            MiddlewareHandler<E2, P>,
            MiddlewareHandler<E3, P>,
            MiddlewareHandler<E4, P>,
            MiddlewareHandler<E5, P>,
            MiddlewareHandler<E6, P>,
            MiddlewareHandler<E7, P>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7
        ]>, S, BasePath>;
        <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6
        ]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
        <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7
        ]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8
        ]>, S, BasePath>;
        <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7
        ]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
        <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8
        ]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9
        ]>, S, BasePath>;
        <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8
        ]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
        <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9
        ]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10
        ]>, S, BasePath>;
        <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9
        ]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
        <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10
        ]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10,
            E11
        ]>, S, BasePath>;
        <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[
            E,
            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,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10
        ]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
        <P extends string, E2 extends Env = E>(path: P, ...handlers: MiddlewareHandler<E2, MergePath<BasePath, P>>[]): Hono<E, S, BasePath>;
    }
  • OnHandlerInterface

    export interface OnHandlerInterface<E extends Env = Env, S 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>(method: M, path: P, handler: H<E2, MergedPath, I, R>): Hono<IntersectNonAnyTypes<[
            E,
            E2
        ]>, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
        <M extends string, 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, E3 extends Env = IntersectNonAnyTypes<[
            E,
            E2
        ]>>(method: M, path: P, ...handlers: [
            H<E2, MergedPath, I>,
            H<E3, MergedPath, I2, R>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>, S & ToSchema<M, MergePath<BasePath, P>, I2, MergeTypedResponse<R>>, BasePath>;
        <M extends string, 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, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>>(method: M, path: P, ...handlers: [
            H<E2, MergedPath, I>,
            H<E3, MergedPath, I2>,
            H<E4, MergedPath, I3, R>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4
        ]>, S & ToSchema<M, MergePath<BasePath, P>, I3, MergeTypedResponse<R>>, BasePath>;
        <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4
        ]>>(method: M, path: P, ...handlers: [
            H<E2, MergedPath, I>,
            H<E3, MergedPath, I2>,
            H<E4, MergedPath, I3>,
            H<E5, MergedPath, I4, R>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5
        ]>, S & ToSchema<M, MergePath<BasePath, P>, I4, MergeTypedResponse<R>>, BasePath>;
        <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5
        ]>>(method: M, 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<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6
        ]>, S & ToSchema<M, MergePath<BasePath, P>, I5, MergeTypedResponse<R>>, BasePath>;
        <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6
        ]>>(method: M, 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<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7
        ]>, S & ToSchema<M, MergePath<BasePath, P>, I6, MergeTypedResponse<R>>, BasePath>;
        <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7
        ]>>(method: M, 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<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8
        ]>, S & ToSchema<M, MergePath<BasePath, P>, I7, MergeTypedResponse<R>>, BasePath>;
        <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8
        ]>>(method: M, 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<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9
        ]>, S & ToSchema<M, MergePath<BasePath, P>, I8, MergeTypedResponse<R>>, BasePath>;
        <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9
        ]>>(method: M, 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<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10
        ]>, S & ToSchema<M, MergePath<BasePath, P>, I9, MergeTypedResponse<R>>, BasePath>;
        <M extends string, P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10
        ]>>(method: M, 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>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10,
            E11
        ]>, S & ToSchema<M, MergePath<BasePath, P>, I10, MergeTypedResponse<HandlerResponse<any>>>, BasePath>;
        <M extends string, P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(method: M, path: P, ...handlers: H<E, MergePath<BasePath, P>, I, R>[]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
        <Ms 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>(methods: Ms, path: P, handler: H<E2, MergedPath, I, R>): Hono<IntersectNonAnyTypes<[
            E,
            E2
        ]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
        <Ms extends string[], 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, E3 extends Env = IntersectNonAnyTypes<[
            E,
            E2
        ]>>(methods: Ms, path: P, ...handlers: [
            H<E2, MergedPath, I>,
            H<E3, MergedPath, I2, R>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I2, MergeTypedResponse<R>>, BasePath>;
        <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3
        ]>>(methods: Ms, path: P, ...handlers: [
            H<E2, MergedPath, I>,
            H<E3, MergedPath, I2>,
            H<E4, MergedPath, I3, R>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4
        ]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I3, MergeTypedResponse<R>>, BasePath>;
        <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4
        ]>>(methods: Ms, path: P, ...handlers: [
            H<E2, MergedPath, I>,
            H<E3, MergedPath, I2>,
            H<E4, MergedPath, I3>,
            H<E5, MergedPath, I4, R>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5
        ]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I4, MergeTypedResponse<R>>, BasePath>;
        <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5
        ]>>(methods: Ms, 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<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6
        ]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I5, MergeTypedResponse<R>>, BasePath>;
        <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6
        ]>>(methods: Ms, 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<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7
        ]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I6, MergeTypedResponse<R>>, BasePath>;
        <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7
        ]>>(methods: Ms, 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<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8
        ]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I7, MergeTypedResponse<R>>, BasePath>;
        <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8
        ]>>(methods: Ms, 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<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9
        ]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I8, MergeTypedResponse<R>>, BasePath>;
        <Ms extends string[], P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9
        ]>>(methods: Ms, 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>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10
        ]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I9, MergeTypedResponse<HandlerResponse<any>>>, BasePath>;
        <Ms extends string[], P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10
        ]>>(methods: Ms, 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>
        ]): Hono<IntersectNonAnyTypes<[
            E,
            E2,
            E3,
            E4,
            E5,
            E6,
            E7,
            E8,
            E9,
            E10,
            E11
        ]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I10, MergeTypedResponse<HandlerResponse<any>>>, BasePath>;
        <P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(methods: string[], path: P, ...handlers: H<E, MergePath<BasePath, P>, I, R>[]): Hono<E, S & ToSchema<string, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
        <I extends Input = BlankInput, R extends HandlerResponse<any> = any>(methods: string | string[], paths: string[], ...handlers: H<E, any, I, R>[]): Hono<E, S & ToSchema<string, string, I, MergeTypedResponse<R>>, BasePath>;
    }
All
/**
 * @module
 * This module contains some type definitions for the Hono modules.
 */
import type { Context } from './context';
import type { Hono } from './hono';
import type { StatusCode } from './utils/http-status';
import type { IfAnyThenEmptyObject, IsAny, JSONValue, RemoveBlankRecord, Simplify, UnionToIntersection } from './utils/types';
export type Bindings = object;
export type Variables = object;
export type BlankEnv = {};
export type Env = {
    Bindings?: Bindings;
    Variables?: Variables;
};
export type Next = () => Promise<void>;
export type ExtractInput<I extends Input | Input['in']> = I extends Input ? unknown extends I['in'] ? {} : I['in'] : I;
export type Input = {
    in?: {};
    out?: {};
    outputFormat?: ResponseFormat;
};
export type BlankSchema = {};
export type BlankInput = {};
export interface RouterRoute {
    path: string;
    method: string;
    handler: H;
}
export type HandlerResponse<O> = Response | TypedResponse<O> | Promise<Response | TypedResponse<O>>;
export type Handler<E extends Env = any, P extends string = any, I extends Input = BlankInput, R extends HandlerResponse<any> = any> = (c: Context<E, P, I>, next: Next) => R;
export type MiddlewareHandler<E extends Env = any, P extends string = string, I extends Input = {}> = (c: Context<E, P, I>, next: Next) => Promise<Response | void>;
export type H<E extends Env = any, P extends string = any, I extends Input = BlankInput, R extends HandlerResponse<any> = any> = Handler<E, P, I, R> | MiddlewareHandler<E, P, I>;
export type NotFoundHandler<E extends Env = any> = (c: Context<E>) => Response | Promise<Response>;
export interface HTTPResponseError extends Error {
    getResponse: () => Response;
}
export type ErrorHandler<E extends Env = any> = (err: Error | HTTPResponseError, c: Context<E>) => Response | Promise<Response>;
export interface HandlerInterface<E extends Env = Env, M extends string = string, S extends Schema = BlankSchema, BasePath extends string = '/'> {
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, I extends Input = BlankInput, R extends HandlerResponse<any> = any, E2 extends Env = E>(handler: H<E2, P, I, R>): Hono<IntersectNonAnyTypes<[E, E2]>, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath>;
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, I extends Input = BlankInput, I2 extends Input = I, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(...handlers: [H<E2, P, I>, H<E3, P, I2, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3]>, S & ToSchema<M, 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>(path: P, handler: H<E2, MergedPath, I, R>): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4]>, S & ToSchema<M, 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, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2, R>]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I2, MergeTypedResponse<R>>, BasePath>;
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3, R>]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I3, MergeTypedResponse<R>>, BasePath>;
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, 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, S & ToSchema<M, MergePath<BasePath, P>, I4, MergeTypedResponse<R>>, BasePath>;
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6, E7]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, 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, S & ToSchema<M, MergePath<BasePath, P>, I5, MergeTypedResponse<R>>, BasePath>;
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6, E7, E8]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[E, 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, S & ToSchema<M, MergePath<BasePath, P>, I6, MergeTypedResponse<R>>, BasePath>;
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6, E7, E8, E9]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[E, 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, S & ToSchema<M, MergePath<BasePath, P>, I7, MergeTypedResponse<R>>, BasePath>;
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[E, 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, S & ToSchema<M, MergePath<BasePath, P>, I8, MergeTypedResponse<R>>, BasePath>;
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[E, 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, S & ToSchema<M, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[E, 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, S & ToSchema<M, MergePath<BasePath, P>, I10, MergeTypedResponse<R>>, BasePath>;
    <P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(...handlers: H<E, P, I, R>[]): Hono<E, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath>;
    <P extends string, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(path: P, ...handlers: H<E, MergePath<BasePath, P>, I, R>[]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
    <P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(path: P): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
}
export interface MiddlewareHandlerInterface<E extends Env = Env, S extends Schema = BlankSchema, BasePath extends string = '/'> {
    <E2 extends Env = E>(...handlers: MiddlewareHandler<E2, MergePath<BasePath, ExtractKey<S>>>[]): Hono<IntersectNonAnyTypes<[E, E2]>, S, BasePath>;
    <E2 extends Env = E>(handler: MiddlewareHandler<E2, MergePath<BasePath, ExtractKey<S>>>): Hono<IntersectNonAnyTypes<[E, E2]>, S, BasePath>;
    <E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>]): Hono<IntersectNonAnyTypes<[E, E2, E3]>, S, BasePath>;
    <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E>(path: P, handler: MiddlewareHandler<E2, MergedPath>): Hono<IntersectNonAnyTypes<[E, E2]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
    <E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4]>, S, BasePath>;
    <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>]): Hono<IntersectNonAnyTypes<[E, E2, E3]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
    <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...handlers: [
        MiddlewareHandler<E2, P>,
        MiddlewareHandler<E3, P>,
        MiddlewareHandler<E4, P>,
        MiddlewareHandler<E5, P>
    ]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S, BasePath>;
    <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
    <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...handlers: [
        MiddlewareHandler<E2, P>,
        MiddlewareHandler<E3, P>,
        MiddlewareHandler<E4, P>,
        MiddlewareHandler<E5, P>,
        MiddlewareHandler<E6, P>
    ]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, S, BasePath>;
    <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(path: P, ...handlers: [
        MiddlewareHandler<E2, P>,
        MiddlewareHandler<E3, P>,
        MiddlewareHandler<E4, P>,
        MiddlewareHandler<E5, P>
    ]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
    <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...handlers: [
        MiddlewareHandler<E2, P>,
        MiddlewareHandler<E3, P>,
        MiddlewareHandler<E4, P>,
        MiddlewareHandler<E5, P>,
        MiddlewareHandler<E6, P>,
        MiddlewareHandler<E7, P>
    ]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, S, BasePath>;
    <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
    <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...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, E2, E3, E4, E5, E6, E7, E8]>, S, BasePath>;
    <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6, E7]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
    <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...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, E2, E3, E4, E5, E6, E7, E8, E9]>, S, BasePath>;
    <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6, E7, E8]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
    <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...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, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, S, BasePath>;
    <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6, E7, E8, E9]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
    <E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, P extends string = MergePath<BasePath, ExtractKey<S>>>(...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, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>, S, BasePath>;
    <P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[E, 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, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
    <P extends string, E2 extends Env = E>(path: P, ...handlers: MiddlewareHandler<E2, MergePath<BasePath, P>>[]): Hono<E, S, BasePath>;
}
export interface OnHandlerInterface<E extends Env = Env, S 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>(method: M, path: P, handler: H<E2, MergedPath, I, R>): Hono<IntersectNonAnyTypes<[E, E2]>, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
    <M extends string, 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, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(method: M, path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3]>, S & ToSchema<M, MergePath<BasePath, P>, I2, MergeTypedResponse<R>>, BasePath>;
    <M extends string, 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, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(method: M, path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4]>, S & ToSchema<M, MergePath<BasePath, P>, I3, MergeTypedResponse<R>>, BasePath>;
    <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(method: M, path: P, ...handlers: [
        H<E2, MergedPath, I>,
        H<E3, MergedPath, I2>,
        H<E4, MergedPath, I3>,
        H<E5, MergedPath, I4, R>
    ]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S & ToSchema<M, MergePath<BasePath, P>, I4, MergeTypedResponse<R>>, BasePath>;
    <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>>(method: M, 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<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, S & ToSchema<M, MergePath<BasePath, P>, I5, MergeTypedResponse<R>>, BasePath>;
    <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>>(method: M, 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<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, S & ToSchema<M, MergePath<BasePath, P>, I6, MergeTypedResponse<R>>, BasePath>;
    <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>>(method: M, 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<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, S & ToSchema<M, MergePath<BasePath, P>, I7, MergeTypedResponse<R>>, BasePath>;
    <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>>(method: M, 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<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, S & ToSchema<M, MergePath<BasePath, P>, I8, MergeTypedResponse<R>>, BasePath>;
    <M extends string, 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>>(method: M, 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<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, S & ToSchema<M, MergePath<BasePath, P>, I9, MergeTypedResponse<R>>, BasePath>;
    <M extends string, P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>>(method: M, 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>
    ]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>, S & ToSchema<M, MergePath<BasePath, P>, I10, MergeTypedResponse<HandlerResponse<any>>>, BasePath>;
    <M extends string, P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(method: M, path: P, ...handlers: H<E, MergePath<BasePath, P>, I, R>[]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
    <Ms 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>(methods: Ms, path: P, handler: H<E2, MergedPath, I, R>): Hono<IntersectNonAnyTypes<[E, E2]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
    <Ms extends string[], 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, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(methods: Ms, path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I2, MergeTypedResponse<R>>, BasePath>;
    <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(methods: Ms, path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I3, MergeTypedResponse<R>>, BasePath>;
    <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(methods: Ms, path: P, ...handlers: [
        H<E2, MergedPath, I>,
        H<E3, MergedPath, I2>,
        H<E4, MergedPath, I3>,
        H<E5, MergedPath, I4, R>
    ]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I4, MergeTypedResponse<R>>, BasePath>;
    <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>>(methods: Ms, 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<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I5, MergeTypedResponse<R>>, BasePath>;
    <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>>(methods: Ms, 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<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I6, MergeTypedResponse<R>>, BasePath>;
    <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>>(methods: Ms, 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<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I7, MergeTypedResponse<R>>, BasePath>;
    <Ms extends string[], 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, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>>(methods: Ms, 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<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I8, MergeTypedResponse<R>>, BasePath>;
    <Ms extends string[], P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>>(methods: Ms, 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>
    ]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I9, MergeTypedResponse<HandlerResponse<any>>>, BasePath>;
    <Ms extends string[], P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>>(methods: Ms, 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>
    ]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>, S & ToSchema<Ms[number], MergePath<BasePath, P>, I10, MergeTypedResponse<HandlerResponse<any>>>, BasePath>;
    <P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(methods: string[], path: P, ...handlers: H<E, MergePath<BasePath, P>, I, R>[]): Hono<E, S & ToSchema<string, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
    <I extends Input = BlankInput, R extends HandlerResponse<any> = any>(methods: string | string[], paths: string[], ...handlers: H<E, any, I, R>[]): Hono<E, S & ToSchema<string, string, I, MergeTypedResponse<R>>, BasePath>;
}
type ExtractKey<S> = S extends Record<infer Key, unknown> ? Key extends string ? Key : never : string;
export type ToSchema<M extends string, P extends string, I extends Input | Input['in'], RorO> = Simplify<{
    [K in P]: {
        [K2 in M as AddDollar<K2>]: Simplify<{
            input: AddParam<ExtractInput<I>, P>;
        } & (IsAny<RorO> extends true ? {
            output: {};
            outputFormat: ResponseFormat;
            status: StatusCode;
        } : RorO extends TypedResponse<infer T, infer U, infer F> ? {
            output: unknown extends T ? {} : T;
            outputFormat: I extends {
                outputFormat: string;
            } ? I['outputFormat'] : F;
            status: U;
        } : {
            output: unknown extends RorO ? {} : RorO;
            outputFormat: unknown extends RorO ? 'json' : I extends {
                outputFormat: string;
            } ? I['outputFormat'] : 'json';
            status: StatusCode;
        })>;
    };
}>;
export type Schema = {
    [Path: string]: {
        [Method: `$${Lowercase<string>}`]: Endpoint;
    };
};
type ChangePathOfSchema<S extends Schema, Path extends string> = keyof S extends never ? {
    [K in Path]: {};
} : {
    [K in keyof S as Path]: S[K];
};
export type Endpoint = {
    input: any;
    output: any;
    outputFormat: ResponseFormat;
    status: StatusCode;
};
type ExtractParams<Path extends string> = string extends Path ? Record<string, string> : Path extends `${infer _Start}:${infer Param}/${infer Rest}` ? {
    [K in Param | keyof ExtractParams<`/${Rest}`>]: string;
} : Path extends `${infer _Start}:${infer Param}` ? {
    [K in Param]: string;
} : never;
type FlattenIfIntersect<T> = T extends infer O ? {
    [K in keyof O]: O[K];
} : never;
export type MergeSchemaPath<OrigSchema extends Schema, SubPath extends string> = Simplify<{
    [P in keyof OrigSchema as MergePath<SubPath, P & string>]: {
        [M in keyof OrigSchema[P]]: MergeEndpointParamsWithPath<OrigSchema[P][M], SubPath>;
    };
}>;
type MergeEndpointParamsWithPath<T, SubPath extends string> = T extends {
    input: infer Input;
    output: infer Output;
    outputFormat: infer OutputFormat;
    status: infer Status;
} ? {
    input: Input extends {
        param: infer _;
    } ? ExtractParams<SubPath> extends never ? Input : FlattenIfIntersect<Input & {
        param: {
            [K in keyof ExtractParams<SubPath> as K extends `${infer Prefix}{${infer _}}` ? Prefix : K]: string;
        };
    }> : RemoveBlankRecord<ExtractParams<SubPath>> extends never ? Input : Input & {
        param: {
            [K in keyof ExtractParams<SubPath> as K extends `${infer Prefix}{${infer _}}` ? Prefix : K]: string;
        };
    };
    output: Output;
    outputFormat: OutputFormat;
    status: Status;
} : never;
export type AddParam<I, P extends string> = ParamKeys<P> extends never ? I : I extends {
    param: infer _;
} ? I : I & {
    param: UnionToIntersection<ParamKeyToRecord<ParamKeys<P>>>;
};
type AddDollar<T extends string> = `$${Lowercase<T>}`;
export type MergePath<A extends string, B extends string> = B extends '' ? MergePath<A, '/'> : A extends '' ? B : A extends '/' ? B : A extends `${infer P}/` ? B extends `/${infer Q}` ? `${P}/${Q}` : `${P}/${B}` : B extends `/${infer Q}` ? Q extends '' ? A : `${A}/${Q}` : `${A}/${B}`;
export type KnownResponseFormat = 'json' | 'text' | 'redirect';
export type ResponseFormat = KnownResponseFormat | string;
export type TypedResponse<T = unknown, U extends StatusCode = StatusCode, F extends ResponseFormat = T extends string ? 'text' : T extends JSONValue ? 'json' : ResponseFormat> = {
    _data: T;
    _status: U;
    _format: F;
};
type MergeTypedResponse<T> = T extends Promise<infer T2> ? T2 extends TypedResponse ? T2 : TypedResponse : T extends TypedResponse ? T : TypedResponse;
export type FormValue = string | Blob;
export type ParsedFormValue = string | File;
export type ValidationTargets<T extends FormValue = ParsedFormValue, P extends string = string> = {
    json: any;
    form: Record<string, T | T[]>;
    query: Record<string, string | string[]>;
    param: Record<P, P extends `${infer _}?` ? string | undefined : string>;
    header: Record<string, string>;
    cookie: Record<string, string>;
};
type ParamKeyName<NameWithPattern> = NameWithPattern extends `${infer Name}{${infer Rest}` ? Rest extends `${infer _Pattern}?` ? `${Name}?` : Name : NameWithPattern;
type ParamKey<Component> = Component extends `:${infer NameWithPattern}` ? ParamKeyName<NameWithPattern> : never;
export type ParamKeys<Path> = Path extends `${infer Component}/${infer Rest}` ? ParamKey<Component> | ParamKeys<Rest> : ParamKey<Path>;
export type ParamKeyToRecord<T extends string> = T extends `${infer R}?` ? Record<R, string | undefined> : {
    [K in T]: string;
};
export type InputToDataByTarget<T extends Input['out'], Target extends keyof ValidationTargets> = T extends {
    [K in Target]: infer R;
} ? R : never;
export type RemoveQuestion<T> = T extends `${infer R}?` ? R : T;
export type ExtractSchema<T> = UnionToIntersection<T extends Hono<infer _, infer S, any> ? S : never>;
type EnvOrEmpty<T> = T extends Env ? (Env extends T ? {} : T) : T;
type IntersectNonAnyTypes<T extends any[]> = T extends [infer Head, ...infer Rest] ? IfAnyThenEmptyObject<EnvOrEmpty<Head>> & IntersectNonAnyTypes<Rest> : {};
export declare abstract class FetchEventLike {
    abstract readonly request: Request;
    abstract respondWith(promise: Response | Promise<Response>): void;
    abstract passThroughOnException(): void;
    abstract waitUntil(promise: Promise<void>): void;
}
export {};

dist/types/helper/cookie/index.d.ts

Interfaces
  • GetCookie

    interface GetCookie {
        (c: Context, key: string): string | undefined;
        (c: Context): Cookie;
        (c: Context, key: string, prefixOptions: CookiePrefixOptions): string | undefined;
    }
  • GetSignedCookie

    interface GetSignedCookie {
        (c: Context, secret: string | BufferSource, key: string): Promise<string | undefined | false>;
        (c: Context, secret: string): Promise<SignedCookie>;
        (c: Context, secret: string | BufferSource, key: string, prefixOptions: CookiePrefixOptions): Promise<string | undefined | false>;
    }
Functions
  • setCookie

    export declare const setCookie: (c: Context, name: string, value: string, opt?: CookieOptions) => void;
  • setSignedCookie

    export declare const setSignedCookie: (c: Context, name: string, value: string, secret: string | BufferSource, opt?: CookieOptions) => Promise<void>;
  • deleteCookie

    export declare const deleteCookie: (c: Context, name: string, opt?: CookieOptions) => string | undefined;
All
/**
 * @module
 * Cookie Helper for Hono.
 */
import type { Context } from '../../context';
import type { Cookie, CookieOptions, CookiePrefixOptions, SignedCookie } from '../../utils/cookie';
interface GetCookie {
    (c: Context, key: string): string | undefined;
    (c: Context): Cookie;
    (c: Context, key: string, prefixOptions: CookiePrefixOptions): string | undefined;
}
interface GetSignedCookie {
    (c: Context, secret: string | BufferSource, key: string): Promise<string | undefined | false>;
    (c: Context, secret: string): Promise<SignedCookie>;
    (c: Context, secret: string | BufferSource, key: string, prefixOptions: CookiePrefixOptions): Promise<string | undefined | false>;
}
export declare const getCookie: GetCookie;
export declare const getSignedCookie: GetSignedCookie;
export declare const setCookie: (c: Context, name: string, value: string, opt?: CookieOptions) => void;
export declare const setSignedCookie: (c: Context, name: string, value: string, secret: string | BufferSource, opt?: CookieOptions) => Promise<void>;
export declare const deleteCookie: (c: Context, name: string, opt?: CookieOptions) => string | undefined;
export {};

dist/types/preset/quick.d.ts

All
/**
 * @module
 * The preset that uses `LinearRouter`.
 */
import { HonoBase } from '../hono-base';
import type { HonoOptions } from '../hono-base';
import type { BlankEnv, BlankSchema, Env, Schema } from '../types';
export declare class Hono<E extends Env = BlankEnv, S extends Schema = BlankSchema, BasePath extends string = '/'> extends HonoBase<E, S, BasePath> {
    constructor(options?: HonoOptions<E>);
}

dist/types/middleware/logger/index.d.ts

Types
  • PrintFunc

    type PrintFunc = (str: string, ...rest: string[]) => void;
Functions
  • logger

    /**
     * Logger Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/logger}
     *
     * @param {PrintFunc} [fn=console.log] - Optional function for customized logging behavior.
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.use(logger())
     * app.get('/', (c) => c.text('Hello Hono!'))
     * ```
     */
    export declare const logger: (fn?: PrintFunc) => MiddlewareHandler;
All
/**
 * @module
 * Logger Middleware for Hono.
 */
import type { MiddlewareHandler } from '../../types';
type PrintFunc = (str: string, ...rest: string[]) => void;
/**
 * Logger Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/logger}
 *
 * @param {PrintFunc} [fn=console.log] - Optional function for customized logging behavior.
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.use(logger())
 * app.get('/', (c) => c.text('Hello Hono!'))
 * ```
 */
export declare const logger: (fn?: PrintFunc) => MiddlewareHandler;
export {};

dist/types/middleware/serve-static/index.d.ts

Types
  • ServeStaticOptions

    export type ServeStaticOptions<E extends Env = Env> = {
        root?: string;
        path?: string;
        precompressed?: boolean;
        mimes?: Record<string, string>;
        rewriteRequestPath?: (path: string) => string;
        onFound?: (path: string, c: Context<E>) => void | Promise<void>;
        onNotFound?: (path: string, c: Context<E>) => void | Promise<void>;
    };
Functions
  • serveStatic

    /**
     * This middleware is not directly used by the user. Create a wrapper specifying `getContent()` by the environment such as Deno or Bun.
     */
    export declare const serveStatic: <E extends Env = Env>(options: ServeStaticOptions<E> & {
        getContent: (path: string, c: Context<E, any, {}>) => Promise<Data | Response | null>;
        pathResolve?: ((path: string) => string) | undefined;
        isDir?: ((path: string) => boolean | undefined | Promise<boolean | undefined>) | undefined;
    }) => MiddlewareHandler;
All
/**
 * @module
 * Serve Static Middleware for Hono.
 */
import type { Context, Data } from '../../context';
import type { Env, MiddlewareHandler } from '../../types';
export type ServeStaticOptions<E extends Env = Env> = {
    root?: string;
    path?: string;
    precompressed?: boolean;
    mimes?: Record<string, string>;
    rewriteRequestPath?: (path: string) => string;
    onFound?: (path: string, c: Context<E>) => void | Promise<void>;
    onNotFound?: (path: string, c: Context<E>) => void | Promise<void>;
};
/**
 * This middleware is not directly used by the user. Create a wrapper specifying `getContent()` by the environment such as Deno or Bun.
 */
export declare const serveStatic: <E extends Env = Env>(options: ServeStaticOptions<E> & {
    getContent: (path: string, c: Context<E, any, {}>) => Promise<Data | Response | null>;
    pathResolve?: ((path: string) => string) | undefined;
    isDir?: ((path: string) => boolean | undefined | Promise<boolean | undefined>) | undefined;
}) => MiddlewareHandler;

dist/types/middleware/body-limit/index.d.ts

Types
  • OnError

    type OnError = (c: Context) => Response | Promise<Response>;
  • BodyLimitOptions

    type BodyLimitOptions = {
        maxSize: number;
        onError?: OnError;
    };
Functions
  • bodyLimit

    /**
     * Body Limit Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/body-limit}
     *
     * @param {BodyLimitOptions} options - The options for the body limit middleware.
     * @param {number} options.maxSize - The maximum body size allowed.
     * @param {OnError} [options.onError] - The error handler to be invoked if the specified body size is exceeded.
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.post(
     *   '/upload',
     *   bodyLimit({
     *     maxSize: 50 * 1024, // 50kb
     *     onError: (c) => {
     *       return c.text('overflow :(', 413)
     *     },
     *   }),
     *   async (c) => {
     *     const body = await c.req.parseBody()
     *     if (body['file'] instanceof File) {
     *       console.log(`Got file sized: ${body['file'].size}`)
     *     }
     *     return c.text('pass :)')
     *   }
     * )
     * ```
     */
    export declare const bodyLimit: (options: BodyLimitOptions) => MiddlewareHandler;
All
/**
 * @module
 * Body Limit Middleware for Hono.
 */
import type { Context } from '../../context';
import type { MiddlewareHandler } from '../../types';
type OnError = (c: Context) => Response | Promise<Response>;
type BodyLimitOptions = {
    maxSize: number;
    onError?: OnError;
};
/**
 * Body Limit Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/body-limit}
 *
 * @param {BodyLimitOptions} options - The options for the body limit middleware.
 * @param {number} options.maxSize - The maximum body size allowed.
 * @param {OnError} [options.onError] - The error handler to be invoked if the specified body size is exceeded.
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.post(
 *   '/upload',
 *   bodyLimit({
 *     maxSize: 50 * 1024, // 50kb
 *     onError: (c) => {
 *       return c.text('overflow :(', 413)
 *     },
 *   }),
 *   async (c) => {
 *     const body = await c.req.parseBody()
 *     if (body['file'] instanceof File) {
 *       console.log(`Got file sized: ${body['file'].size}`)
 *     }
 *     return c.text('pass :)')
 *   }
 * )
 * ```
 */
export declare const bodyLimit: (options: BodyLimitOptions) => MiddlewareHandler;
export {};

dist/types/http-exception.d.ts

Types
  • HTTPExceptionOptions

    /**
     * Options for creating an `HTTPException`.
     * @property res - Optional response object to use.
     * @property message - Optional custom error message.
     * @property cause - Optional cause of the error.
     */
    type HTTPExceptionOptions = {
        res?: Response;
        message?: string;
        cause?: unknown;
    };
All
/**
 * @module
 * This module provides the `HTTPException` class.
 */
import type { StatusCode } from './utils/http-status';
/**
 * Options for creating an `HTTPException`.
 * @property res - Optional response object to use.
 * @property message - Optional custom error message.
 * @property cause - Optional cause of the error.
 */
type HTTPExceptionOptions = {
    res?: Response;
    message?: string;
    cause?: unknown;
};
/**
 * `HTTPException` must be used when a fatal error such as authentication failure occurs.
 *
 * @see {@link https://hono.dev/docs/api/exception}
 *
 * @param {StatusCode} status - status code of HTTPException
 * @param {HTTPExceptionOptions} options - options of HTTPException
 * @param {HTTPExceptionOptions["res"]} options.res - response of options of HTTPException
 * @param {HTTPExceptionOptions["message"]} options.message - message of options of HTTPException
 * @param {HTTPExceptionOptions["cause"]} options.cause - cause of options of HTTPException
 *
 * @example
 * ```ts
 * import { HTTPException } from 'hono/http-exception'
 *
 * // ...
 *
 * app.post('/auth', async (c, next) => {
 *   // authentication
 *   if (authorized === false) {
 *     throw new HTTPException(401, { message: 'Custom error message' })
 *   }
 *   await next()
 * })
 * ```
 */
export declare class HTTPException extends Error {
    readonly res?: Response;
    readonly status: StatusCode;
    /**
     * Creates an instance of `HTTPException`.
     * @param status - HTTP status code for the exception. Defaults to 500.
     * @param options - Additional options for the exception.
     */
    constructor(status?: StatusCode, options?: HTTPExceptionOptions);
    /**
     * Returns the response object associated with the exception.
     * If a response object is not provided, a new response is created with the error message and status code.
     * @returns The response object.
     */
    getResponse(): Response;
}
export {};

dist/types/middleware/trailing-slash/index.d.ts

Functions
  • trimTrailingSlash

    /**
     * Trailing Slash Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/trailing-slash}
     *
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.use(trimTrailingSlash())
     * app.get('/about/me/', (c) => c.text('With Trailing Slash'))
     * ```
     */
    export declare const trimTrailingSlash: () => MiddlewareHandler;
  • appendTrailingSlash

    /**
     * Append trailing slash middleware for Hono.
     * Append a trailing slash to the URL if it doesn't have one. For example, `/path/to/page` will be redirected to `/path/to/page/`.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/trailing-slash}
     *
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.use(appendTrailingSlash())
     * ```
     */
    export declare const appendTrailingSlash: () => MiddlewareHandler;
All
/**
 * @module
 * Trailing Slash Middleware for Hono.
 */
import type { MiddlewareHandler } from '../../types';
/**
 * Trailing Slash Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/trailing-slash}
 *
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.use(trimTrailingSlash())
 * app.get('/about/me/', (c) => c.text('With Trailing Slash'))
 * ```
 */
export declare const trimTrailingSlash: () => MiddlewareHandler;
/**
 * Append trailing slash middleware for Hono.
 * Append a trailing slash to the URL if it doesn't have one. For example, `/path/to/page` will be redirected to `/path/to/page/`.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/trailing-slash}
 *
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.use(appendTrailingSlash())
 * ```
 */
export declare const appendTrailingSlash: () => MiddlewareHandler;

dist/types/middleware/compress/index.d.ts

Interfaces
  • CompressionOptions

    interface CompressionOptions {
        encoding?: (typeof ENCODING_TYPES)[number];
        threshold?: number;
    }
Functions
  • compress

    /**
     * Compress Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/compress}
     *
     * @param {CompressionOptions} [options] - The options for the compress middleware.
     * @param {'gzip' | 'deflate'} [options.encoding] - The compression scheme to allow for response compression. Either 'gzip' or 'deflate'. If not defined, both are allowed and will be used based on the Accept-Encoding header. 'gzip' is prioritized if this option is not provided and the client provides both in the Accept-Encoding header.
     * @param {number} [options.threshold=1024] - The minimum size in bytes to compress. Defaults to 1024 bytes.
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.use(compress())
     * ```
     */
    export declare const compress: (options?: CompressionOptions) => MiddlewareHandler;
All
/**
 * @module
 * Compress Middleware for Hono.
 */
import type { MiddlewareHandler } from '../../types';
declare const ENCODING_TYPES: readonly ["gzip", "deflate"];
interface CompressionOptions {
    encoding?: (typeof ENCODING_TYPES)[number];
    threshold?: number;
}
/**
 * Compress Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/compress}
 *
 * @param {CompressionOptions} [options] - The options for the compress middleware.
 * @param {'gzip' | 'deflate'} [options.encoding] - The compression scheme to allow for response compression. Either 'gzip' or 'deflate'. If not defined, both are allowed and will be used based on the Accept-Encoding header. 'gzip' is prioritized if this option is not provided and the client provides both in the Accept-Encoding header.
 * @param {number} [options.threshold=1024] - The minimum size in bytes to compress. Defaults to 1024 bytes.
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.use(compress())
 * ```
 */
export declare const compress: (options?: CompressionOptions) => MiddlewareHandler;
export {};

dist/types/middleware/basic-auth/index.d.ts

Types
  • MessageFunction

    type MessageFunction = (c: Context) => string | object | Promise<string | object>;
  • BasicAuthOptions

    type BasicAuthOptions = {
        username: string;
        password: string;
        realm?: string;
        hashFunction?: Function;
        invalidUserMessage?: string | object | MessageFunction;
    } | {
        verifyUser: (username: string, password: string, c: Context) => boolean | Promise<boolean>;
        realm?: string;
        hashFunction?: Function;
        invalidUserMessage?: string | object | MessageFunction;
    };
Functions
  • basicAuth

    /**
     * Basic Auth Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/basic-auth}
     *
     * @param {BasicAuthOptions} options - The options for the basic authentication middleware.
     * @param {string} options.username - The username for authentication.
     * @param {string} options.password - The password for authentication.
     * @param {string} [options.realm="Secure Area"] - The realm attribute for the WWW-Authenticate header.
     * @param {Function} [options.hashFunction] - The hash function used for secure comparison.
     * @param {Function} [options.verifyUser] - The function to verify user credentials.
     * @param {string | object | MessageFunction} [options.invalidUserMessage="Unauthorized"] - The invalid user message.
     * @returns {MiddlewareHandler} The middleware handler function.
     * @throws {HTTPException} If neither "username and password" nor "verifyUser" options are provided.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.use(
     *   '/auth/*',
     *   basicAuth({
     *     username: 'hono',
     *     password: 'acoolproject',
     *   })
     * )
     *
     * app.get('/auth/page', (c) => {
     *   return c.text('You are authorized')
     * })
     * ```
     */
    export declare const basicAuth: (options: BasicAuthOptions, ...users: {
        username: string;
        password: string;
    }[]) => MiddlewareHandler;
All
/**
 * @module
 * Basic Auth Middleware for Hono.
 */
import type { Context } from '../../context';
import type { MiddlewareHandler } from '../../types';
type MessageFunction = (c: Context) => string | object | Promise<string | object>;
type BasicAuthOptions = {
    username: string;
    password: string;
    realm?: string;
    hashFunction?: Function;
    invalidUserMessage?: string | object | MessageFunction;
} | {
    verifyUser: (username: string, password: string, c: Context) => boolean | Promise<boolean>;
    realm?: string;
    hashFunction?: Function;
    invalidUserMessage?: string | object | MessageFunction;
};
/**
 * Basic Auth Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/basic-auth}
 *
 * @param {BasicAuthOptions} options - The options for the basic authentication middleware.
 * @param {string} options.username - The username for authentication.
 * @param {string} options.password - The password for authentication.
 * @param {string} [options.realm="Secure Area"] - The realm attribute for the WWW-Authenticate header.
 * @param {Function} [options.hashFunction] - The hash function used for secure comparison.
 * @param {Function} [options.verifyUser] - The function to verify user credentials.
 * @param {string | object | MessageFunction} [options.invalidUserMessage="Unauthorized"] - The invalid user message.
 * @returns {MiddlewareHandler} The middleware handler function.
 * @throws {HTTPException} If neither "username and password" nor "verifyUser" options are provided.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.use(
 *   '/auth/*',
 *   basicAuth({
 *     username: 'hono',
 *     password: 'acoolproject',
 *   })
 * )
 *
 * app.get('/auth/page', (c) => {
 *   return c.text('You are authorized')
 * })
 * ```
 */
export declare const basicAuth: (options: BasicAuthOptions, ...users: {
    username: string;
    password: string;
}[]) => MiddlewareHandler;
export {};

dist/types/router/linear-router/index.d.ts

All
/**
 * @module
 * LinearRouter for Hono.
 */
export { LinearRouter } from './router';

dist/types/middleware/pretty-json/index.d.ts

Interfaces
  • PrettyOptions

    interface PrettyOptions {
        /**
         * Number of spaces for indentation.
         * @default 2
         */
        space?: number;
        /**
         * Query conditions for when to Pretty.
         * @default 'pretty'
         */
        query?: string;
    }
Functions
  • prettyJSON

    /**
     * Pretty JSON Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/pretty-json}
     *
     * @param options - The options for the pretty JSON middleware.
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.use(prettyJSON()) // With options: prettyJSON({ space: 4 })
     * app.get('/', (c) => {
     *   return c.json({ message: 'Hono!' })
     * })
     * ```
     */
    export declare const prettyJSON: (options?: PrettyOptions) => MiddlewareHandler;
All
/**
 * @module
 * Pretty JSON Middleware for Hono.
 */
import type { MiddlewareHandler } from '../../types';
interface PrettyOptions {
    /**
     * Number of spaces for indentation.
     * @default 2
     */
    space?: number;
    /**
     * Query conditions for when to Pretty.
     * @default 'pretty'
     */
    query?: string;
}
/**
 * Pretty JSON Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/pretty-json}
 *
 * @param options - The options for the pretty JSON middleware.
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.use(prettyJSON()) // With options: prettyJSON({ space: 4 })
 * app.get('/', (c) => {
 *   return c.json({ message: 'Hono!' })
 * })
 * ```
 */
export declare const prettyJSON: (options?: PrettyOptions) => MiddlewareHandler;
export {};

dist/types/middleware/etag/index.d.ts

Types
  • ETagOptions

    type ETagOptions = {
        retainedHeaders?: string[];
        weak?: boolean;
    };
Functions
  • etag

    /**
     * ETag Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/etag}
     *
     * @param {ETagOptions} [options] - The options for the ETag middleware.
     * @param {boolean} [options.weak=false] - Define using or not using a weak validation. If true is set, then `W/` is added to the prefix of the value.
     * @param {string[]} [options.retainedHeaders=RETAINED_304_HEADERS] - The headers that you want to retain in the 304 Response.
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.use('/etag/*', etag())
     * app.get('/etag/abc', (c) => {
     *   return c.text('Hono is cool')
     * })
     * ```
     */
    export declare const etag: (options?: ETagOptions) => MiddlewareHandler;
All
/**
 * @module
 * ETag Middleware for Hono.
 */
import type { MiddlewareHandler } from '../../types';
type ETagOptions = {
    retainedHeaders?: string[];
    weak?: boolean;
};
/**
 * Default headers to pass through on 304 responses. From the spec:
 * > The response must not contain a body and must include the headers that
 * > would have been sent in an equivalent 200 OK response: Cache-Control,
 * > Content-Location, Date, ETag, Expires, and Vary.
 */
export declare const RETAINED_304_HEADERS: string[];
/**
 * ETag Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/etag}
 *
 * @param {ETagOptions} [options] - The options for the ETag middleware.
 * @param {boolean} [options.weak=false] - Define using or not using a weak validation. If true is set, then `W/` is added to the prefix of the value.
 * @param {string[]} [options.retainedHeaders=RETAINED_304_HEADERS] - The headers that you want to retain in the 304 Response.
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.use('/etag/*', etag())
 * app.get('/etag/abc', (c) => {
 *   return c.text('Hono is cool')
 * })
 * ```
 */
export declare const etag: (options?: ETagOptions) => MiddlewareHandler;
export {};

dist/types/middleware/jsx-renderer/index.d.ts

Types
  • RendererOptions

    type RendererOptions = {
        docType?: boolean | string;
        stream?: boolean | Record<string, string>;
    };
  • ComponentWithChildren

    type ComponentWithChildren = (props: PropsWithChildren<PropsForRenderer & {
        Layout: FC;
    }>, c: Context) => HtmlEscapedString | Promise<HtmlEscapedString>;
Functions
  • jsxRenderer

    /**
     * JSX Renderer Middleware for hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/jsx-renderer}
     *
     * @param {ComponentWithChildren} [component] - The component to render, which can accept children and props.
     * @param {RendererOptions} [options] - The options for the JSX renderer middleware.
     * @param {boolean | string} [options.docType=true] - The DOCTYPE to be added at the beginning of the HTML. If set to false, no DOCTYPE will be added.
     * @param {boolean | Record<string, string>} [options.stream=false] - If set to true, enables streaming response with default headers. If a record is provided, custom headers will be used.
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.get(
     *   '/page/*',
     *   jsxRenderer(({ children }) => {
     *     return (
     *       <html>
     *         <body>
     *           <header>Menu</header>
     *           <div>{children}</div>
     *         </body>
     *       </html>
     *     )
     *   })
     * )
     *
     * app.get('/page/about', (c) => {
     *   return c.render(<h1>About me!</h1>)
     * })
     * ```
     */
    export declare const jsxRenderer: (component?: ComponentWithChildren, options?: RendererOptions) => MiddlewareHandler;
  • useRequestContext

    /**
     * useRequestContext for Hono.
     *
     * @template E - The environment type.
     * @template P - The parameter type.
     * @template I - The input type.
     * @returns {Context<E, P, I>} An instance of Context.
     *
     * @example
     * ```ts
     * const RequestUrlBadge: FC = () => {
     *   const c = useRequestContext()
     *   return <b>{c.req.url}</b>
     * }
     *
     * app.get('/page/info', (c) => {
     *   return c.render(
     *     <div>
     *       You are accessing: <RequestUrlBadge />
     *     </div>
     *   )
     * })
     * ```
     */
    export declare const useRequestContext: <E extends Env = any, P extends string = any, I extends Input = {}>() => Context<E, P, I>;
All
/**
 * @module
 * JSX Renderer Middleware for Hono.
 */
import type { Context, PropsForRenderer } from '../../context';
import type { FC, Context as JSXContext, PropsWithChildren } from '../../jsx';
import type { Env, Input, MiddlewareHandler } from '../../types';
import type { HtmlEscapedString } from '../../utils/html';
export declare const RequestContext: JSXContext<Context<any, any, {}> | null>;
type RendererOptions = {
    docType?: boolean | string;
    stream?: boolean | Record<string, string>;
};
type ComponentWithChildren = (props: PropsWithChildren<PropsForRenderer & {
    Layout: FC;
}>, c: Context) => HtmlEscapedString | Promise<HtmlEscapedString>;
/**
 * JSX Renderer Middleware for hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/jsx-renderer}
 *
 * @param {ComponentWithChildren} [component] - The component to render, which can accept children and props.
 * @param {RendererOptions} [options] - The options for the JSX renderer middleware.
 * @param {boolean | string} [options.docType=true] - The DOCTYPE to be added at the beginning of the HTML. If set to false, no DOCTYPE will be added.
 * @param {boolean | Record<string, string>} [options.stream=false] - If set to true, enables streaming response with default headers. If a record is provided, custom headers will be used.
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.get(
 *   '/page/*',
 *   jsxRenderer(({ children }) => {
 *     return (
 *       <html>
 *         <body>
 *           <header>Menu</header>
 *           <div>{children}</div>
 *         </body>
 *       </html>
 *     )
 *   })
 * )
 *
 * app.get('/page/about', (c) => {
 *   return c.render(<h1>About me!</h1>)
 * })
 * ```
 */
export declare const jsxRenderer: (component?: ComponentWithChildren, options?: RendererOptions) => MiddlewareHandler;
/**
 * useRequestContext for Hono.
 *
 * @template E - The environment type.
 * @template P - The parameter type.
 * @template I - The input type.
 * @returns {Context<E, P, I>} An instance of Context.
 *
 * @example
 * ```ts
 * const RequestUrlBadge: FC = () => {
 *   const c = useRequestContext()
 *   return <b>{c.req.url}</b>
 * }
 *
 * app.get('/page/info', (c) => {
 *   return c.render(
 *     <div>
 *       You are accessing: <RequestUrlBadge />
 *     </div>
 *   )
 * })
 * ```
 */
export declare const useRequestContext: <E extends Env = any, P extends string = any, I extends Input = {}>() => Context<E, P, I>;
export {};

dist/types/middleware/method-override/index.d.ts

Types
  • MethodOverrideOptions

    type MethodOverrideOptions = {
        app: Hono<any, any, any>;
    } & ({
        form?: string;
        header?: never;
        query?: never;
    } | {
        form?: never;
        header: string;
        query?: never;
    } | {
        form?: never;
        header?: never;
        query: string;
    });
Functions
  • methodOverride

    /**
     * Method Override Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/method-override}
     *
     * @param {MethodOverrideOptions} options - The options for the method override middleware.
     * @param {Hono} options.app - The instance of Hono is used in your application.
     * @param {string} [options.form=_method] - Form key with a value containing the method name.
     * @param {string} [options.header] - Header name with a value containing the method name.
     * @param {string} [options.query] - Query parameter key with a value containing the method name.
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * // If no options are specified, the value of `_method` in the form,
     * // e.g. DELETE, is used as the method.
     * app.use('/posts', methodOverride({ app }))
     *
     * app.delete('/posts', (c) => {
     *   // ....
     * })
     * ```
     */
    export declare const methodOverride: (options: MethodOverrideOptions) => MiddlewareHandler;
All
/**
 * @module
 * Method Override Middleware for Hono.
 */
import type { Hono } from '../../hono';
import type { MiddlewareHandler } from '../../types';
type MethodOverrideOptions = {
    app: Hono<any, any, any>;
} & ({
    form?: string;
    header?: never;
    query?: never;
} | {
    form?: never;
    header: string;
    query?: never;
} | {
    form?: never;
    header?: never;
    query: string;
});
/**
 * Method Override Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/method-override}
 *
 * @param {MethodOverrideOptions} options - The options for the method override middleware.
 * @param {Hono} options.app - The instance of Hono is used in your application.
 * @param {string} [options.form=_method] - Form key with a value containing the method name.
 * @param {string} [options.header] - Header name with a value containing the method name.
 * @param {string} [options.query] - Query parameter key with a value containing the method name.
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * // If no options are specified, the value of `_method` in the form,
 * // e.g. DELETE, is used as the method.
 * app.use('/posts', methodOverride({ app }))
 *
 * app.delete('/posts', (c) => {
 *   // ....
 * })
 * ```
 */
export declare const methodOverride: (options: MethodOverrideOptions) => MiddlewareHandler;
export {};

dist/types/helper/html/index.d.ts

Functions
  • html

    export declare const html: (strings: TemplateStringsArray, ...values: unknown[]) => HtmlEscapedString | Promise<HtmlEscapedString>;
All
/**
 * @module
 * html Helper for Hono.
 */
import { raw } from '../../utils/html';
import type { HtmlEscapedString } from '../../utils/html';
export { raw };
export declare const html: (strings: TemplateStringsArray, ...values: unknown[]) => HtmlEscapedString | Promise<HtmlEscapedString>;

dist/types/jsx/dom/server.d.ts

Interfaces
  • RenderToStringOptions

    export interface RenderToStringOptions {
        identifierPrefix?: string;
    }
  • RenderToReadableStreamOptions

    export interface RenderToReadableStreamOptions {
        identifierPrefix?: string;
        namespaceURI?: string;
        nonce?: string;
        bootstrapScriptContent?: string;
        bootstrapScripts?: string[];
        bootstrapModules?: string[];
        progressiveChunkSize?: number;
        signal?: AbortSignal;
        onError?: (error: unknown) => string | void;
    }
Functions
  • renderToString

    /**
     * Render JSX element to string.
     * @param element JSX element to render.
     * @param options Options for rendering.
     * @returns Rendered string.
     */
    declare const renderToString: (element: Child, options?: RenderToStringOptions) => string;
  • renderToReadableStream

    /**
     * Render JSX element to readable stream.
     * @param element JSX element to render.
     * @param options Options for rendering.
     * @returns Rendered readable stream.
     */
    declare const renderToReadableStream: (element: Child, options?: RenderToReadableStreamOptions) => Promise<ReadableStream<Uint8Array>>;
All
/**
 * @module
 * This module provides APIs for `hono/jsx/server`, which is compatible with `react-dom/server`.
 */
import type { Child } from '../base';
import version from './';
export interface RenderToStringOptions {
    identifierPrefix?: string;
}
/**
 * Render JSX element to string.
 * @param element JSX element to render.
 * @param options Options for rendering.
 * @returns Rendered string.
 */
declare const renderToString: (element: Child, options?: RenderToStringOptions) => string;
export interface RenderToReadableStreamOptions {
    identifierPrefix?: string;
    namespaceURI?: string;
    nonce?: string;
    bootstrapScriptContent?: string;
    bootstrapScripts?: string[];
    bootstrapModules?: string[];
    progressiveChunkSize?: number;
    signal?: AbortSignal;
    onError?: (error: unknown) => string | void;
}
/**
 * Render JSX element to readable stream.
 * @param element JSX element to render.
 * @param options Options for rendering.
 * @returns Rendered readable stream.
 */
declare const renderToReadableStream: (element: Child, options?: RenderToReadableStreamOptions) => Promise<ReadableStream<Uint8Array>>;
export { renderToString, renderToReadableStream, version };
declare const _default: {
    renderToString: (element: Child, options?: RenderToStringOptions) => string;
    renderToReadableStream: (element: Child, options?: RenderToReadableStreamOptions) => Promise<ReadableStream<Uint8Array>>;
    version: {
        version: string;
        useState: {
            <T>(initialState: T | (() => T)): [T, (newState: T | ((currentState: T) => T)) => void];
            <T_1 = undefined>(): [T_1 | undefined, (newState: T_1 | ((currentState: T_1 | undefined) => T_1 | undefined) | undefined) => void];
        };
        useEffect: (effect: () => void | (() => void), deps?: readonly unknown[] | undefined) => void;
        useRef: <T_2>(initialValue: T_2 | null) => import("./").RefObject<T_2>;
        useCallback: <T_3 extends Function>(callback: T_3, deps: readonly unknown[]) => T_3;
        use: <T_4>(promise: Promise<T_4>) => T_4;
        startTransition: (callback: () => void) => void;
        useTransition: () => [boolean, (callback: () => void | Promise<void>) => void];
        useDeferredValue: <T_5>(value: T_5, initialValue?: T_5 | undefined) => T_5;
        startViewTransition: (callback: () => void) => void;
        useViewTransition: () => [boolean, (callback: () => void) => void];
        useMemo: <T_6>(factory: () => T_6, deps: readonly unknown[]) => T_6;
        useLayoutEffect: (effect: () => void | (() => void), deps?: readonly unknown[] | undefined) => void;
        useInsertionEffect: (effect: () => void | (() => void), deps?: readonly unknown[] | undefined) => void;
        useReducer: <T_7, A>(reducer: (state: T_7, action: A) => T_7, initialArg: T_7, init?: ((initialState: T_7) => T_7) | undefined) => [T_7, (action: A) => void];
        useId: () => string;
        useDebugValue: (_value: unknown, _formatter?: ((value: unknown) => string) | undefined) => void;
        createRef: <T_8>() => import("./").RefObject<T_8>;
        forwardRef: <T_9, P = {}>(Component: (props: P, ref?: import("./").RefObject<T_9> | undefined) => import("../base").JSX.Element) => (props: P & {
            ref?: import("./").RefObject<T_9> | undefined;
        }) => import("../base").JSX.Element;
        useImperativeHandle: <T_10>(ref: import("./").RefObject<T_10>, createHandle: () => T_10, deps: readonly unknown[]) => void;
        useSyncExternalStore: <T_11>(subscribe: (callback: (value: T_11) => void) => () => void, getSnapshot: () => T_11, getServerSnapshot?: (() => T_11) | undefined) => T_11;
        useFormStatus: () => {
            pending: false;
            data: null;
            method: null;
            action: null;
        } | {
            pending: true;
            data: FormData;
            method: "get" | "post";
            action: string | ((formData: FormData) => void | Promise<void>);
        };
        useActionState: <T_12>(fn: Function, initialState: T_12, permalink?: string | undefined) => [T_12, Function];
        useOptimistic: <T_13, N>(state: T_13, updateState: (currentState: T_13, action: N) => T_13) => [T_13, (action: N) => void];
        Suspense: import("./").FC<import("./").PropsWithChildren<{
            fallback: any;
        }>>;
        ErrorBoundary: import("./").FC<import("./").PropsWithChildren<{
            fallback?: Child;
            fallbackRender?: import("../components").FallbackRender | undefined;
            onError?: import("../components").ErrorHandler | undefined;
        }>>;
        createContext: <T_14>(defaultValue: T_14) => import("./").Context<T_14>;
        useContext: <T_15>(context: import("./").Context<T_15>) => T_15;
        memo: <T_16>(component: import("./").FC<T_16>, propsAreEqual?: (prevProps: Readonly<T_16>, nextProps: Readonly<T_16>) => boolean) => import("./").FC<T_16>;
        isValidElement: (element: unknown) => element is import("./").JSXNode;
        createElement: (tag: string | ((props: import("../base").Props) => import("./").JSXNode), props: import("../base").Props | null, ...children: Child[]) => import("./").JSXNode;
        cloneElement: <T_17 extends import("./").JSXNode | import("../base").JSX.Element>(element: T_17, props: import("../base").Props, ...children: Child[]) => T_17;
        Children: {
            map: (children: Child[], fn: (child: Child, index: number) => Child) => Child[];
            forEach: (children: Child[], fn: (child: Child, index: number) => void) => void;
            count: (children: Child[]) => number;
            only: (_children: Child[]) => Child;
            toArray: (children: Child) => Child[];
        };
        Fragment: (props: Record<string, unknown>) => import("./").JSXNode;
        StrictMode: (props: Record<string, unknown>) => import("./").JSXNode;
        flushSync: (callback: () => void) => void;
        createPortal: (children: Child, container: HTMLElement, key?: string | undefined) => Child;
    };
};
export default _default;

dist/types/middleware/combine/index.d.ts

Types
  • Condition

    type Condition = (c: Context) => boolean;
Functions
  • some

    /**
     * Create a composed middleware that runs the first middleware that returns true.
     *
     * @param middleware - An array of MiddlewareHandler or Condition functions.
     * Middleware is applied in the order it is passed, and if any middleware exits without returning
     * an exception first, subsequent middleware will not be executed.
     * You can also pass a condition function that returns a boolean value. If returns true
     * the evaluation will be halted, and rest of the middleware will not be executed.
     * @returns A composed middleware.
     *
     * @example
     * ```ts
     * import { some } from 'hono/combine'
     * import { bearerAuth } from 'hono/bearer-auth'
     * import { myRateLimit } from '@/rate-limit'
     *
     * // If client has a valid token, then skip rate limiting.
     * // Otherwise, apply rate limiting.
     * app.use('/api/*', some(
     *   bearerAuth({ token }),
     *   myRateLimit({ limit: 100 }),
     * ));
     * ```
     */
    export declare const some: (...middleware: (MiddlewareHandler | Condition)[]) => MiddlewareHandler;
  • every

    /**
     * Create a composed middleware that runs all middleware and throws an error if any of them fail.
     *
     * @param middleware - An array of MiddlewareHandler or Condition functions.
     * Middleware is applied in the order it is passed, and if any middleware throws an error,
     * subsequent middleware will not be executed.
     * You can also pass a condition function that returns a boolean value. If returns false
     * the evaluation will be halted, and rest of the middleware will not be executed.
     * @returns A composed middleware.
     *
     * @example
     * ```ts
     * import { some, every } from 'hono/combine'
     * import { bearerAuth } from 'hono/bearer-auth'
     * import { myCheckLocalNetwork } from '@/check-local-network'
     * import { myRateLimit } from '@/rate-limit'
     *
     * // If client is in local network, then skip authentication and rate limiting.
     * // Otherwise, apply authentication and rate limiting.
     * app.use('/api/*', some(
     *   myCheckLocalNetwork(),
     *   every(
     *     bearerAuth({ token }),
     *     myRateLimit({ limit: 100 }),
     *   ),
     * ));
     * ```
     */
    export declare const every: (...middleware: (MiddlewareHandler | Condition)[]) => MiddlewareHandler;
  • except

    /**
     * Create a composed middleware that runs all middleware except when the condition is met.
     *
     * @param condition - A string or Condition function.
     * If there are multiple targets to match any of them, they can be passed as an array.
     * If a string is passed, it will be treated as a path pattern to match.
     * If a Condition function is passed, it will be evaluated against the request context.
     * @param middleware - A composed middleware
     *
     * @example
     * ```ts
     * import { except } from 'hono/combine'
     * import { bearerAuth } from 'hono/bearer-auth
     *
     * // If client is accessing public API, then skip authentication.
     * // Otherwise, require a valid token.
     * app.use('/api/*', except(
     *   '/api/public/*',
     *   bearerAuth({ token }),
     * ));
     * ```
     */
    export declare const except: (condition: string | Condition | (string | Condition)[], ...middleware: MiddlewareHandler[]) => MiddlewareHandler;
All
/**
 * @module
 * Combine Middleware for Hono.
 */
import type { Context } from '../../context';
import type { MiddlewareHandler } from '../../types';
type Condition = (c: Context) => boolean;
/**
 * Create a composed middleware that runs the first middleware that returns true.
 *
 * @param middleware - An array of MiddlewareHandler or Condition functions.
 * Middleware is applied in the order it is passed, and if any middleware exits without returning
 * an exception first, subsequent middleware will not be executed.
 * You can also pass a condition function that returns a boolean value. If returns true
 * the evaluation will be halted, and rest of the middleware will not be executed.
 * @returns A composed middleware.
 *
 * @example
 * ```ts
 * import { some } from 'hono/combine'
 * import { bearerAuth } from 'hono/bearer-auth'
 * import { myRateLimit } from '@/rate-limit'
 *
 * // If client has a valid token, then skip rate limiting.
 * // Otherwise, apply rate limiting.
 * app.use('/api/*', some(
 *   bearerAuth({ token }),
 *   myRateLimit({ limit: 100 }),
 * ));
 * ```
 */
export declare const some: (...middleware: (MiddlewareHandler | Condition)[]) => MiddlewareHandler;
/**
 * Create a composed middleware that runs all middleware and throws an error if any of them fail.
 *
 * @param middleware - An array of MiddlewareHandler or Condition functions.
 * Middleware is applied in the order it is passed, and if any middleware throws an error,
 * subsequent middleware will not be executed.
 * You can also pass a condition function that returns a boolean value. If returns false
 * the evaluation will be halted, and rest of the middleware will not be executed.
 * @returns A composed middleware.
 *
 * @example
 * ```ts
 * import { some, every } from 'hono/combine'
 * import { bearerAuth } from 'hono/bearer-auth'
 * import { myCheckLocalNetwork } from '@/check-local-network'
 * import { myRateLimit } from '@/rate-limit'
 *
 * // If client is in local network, then skip authentication and rate limiting.
 * // Otherwise, apply authentication and rate limiting.
 * app.use('/api/*', some(
 *   myCheckLocalNetwork(),
 *   every(
 *     bearerAuth({ token }),
 *     myRateLimit({ limit: 100 }),
 *   ),
 * ));
 * ```
 */
export declare const every: (...middleware: (MiddlewareHandler | Condition)[]) => MiddlewareHandler;
/**
 * Create a composed middleware that runs all middleware except when the condition is met.
 *
 * @param condition - A string or Condition function.
 * If there are multiple targets to match any of them, they can be passed as an array.
 * If a string is passed, it will be treated as a path pattern to match.
 * If a Condition function is passed, it will be evaluated against the request context.
 * @param middleware - A composed middleware
 *
 * @example
 * ```ts
 * import { except } from 'hono/combine'
 * import { bearerAuth } from 'hono/bearer-auth
 *
 * // If client is accessing public API, then skip authentication.
 * // Otherwise, require a valid token.
 * app.use('/api/*', except(
 *   '/api/public/*',
 *   bearerAuth({ token }),
 * ));
 * ```
 */
export declare const except: (condition: string | Condition | (string | Condition)[], ...middleware: MiddlewareHandler[]) => MiddlewareHandler;
export {};

dist/types/router.d.ts

Interfaces
  • Router

    /**
     * Interface representing a router.
     *
     * @template T - The type of the handler.
     */
    export interface Router<T> {
        /**
         * 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): 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>;
    }
Types
  • ParamIndexMap

    /**
     * Type representing a map of parameter indices.
     */
    export type ParamIndexMap = Record<string, number>;
  • ParamStash

    /**
     * Type representing a stash of parameters.
     */
    export type ParamStash = string[];
  • Params

    /**
     * Type representing a map of parameters.
     */
    export type Params = Record<string, string>;
  • Result

    /**
     * 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'
     *   ]
     * ]
     * ```
     */
    export type Result<T> = [
        [
            T,
            ParamIndexMap
        ][],
        ParamStash
    ] | [
        [
            T,
            Params
        ][]
    ];
All
/**
 * @module
 * This module provides types definitions and variables for the routers.
 */
/**
 * Constant representing all HTTP methods in uppercase.
 */
export declare const METHOD_NAME_ALL: "ALL";
/**
 * Constant representing all HTTP methods in lowercase.
 */
export declare const METHOD_NAME_ALL_LOWERCASE: "all";
/**
 * Array of supported HTTP methods.
 */
export declare const METHODS: readonly ["get", "post", "put", "delete", "options", "patch"];
/**
 * Error message indicating that a route cannot be added because the matcher is already built.
 */
export declare const MESSAGE_MATCHER_IS_ALREADY_BUILT = "Can not add a route since the matcher is already built.";
/**
 * Interface representing a router.
 *
 * @template T - The type of the handler.
 */
export interface Router<T> {
    /**
     * 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): 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>;
}
/**
 * Type representing a map of parameter indices.
 */
export type ParamIndexMap = Record<string, number>;
/**
 * Type representing a stash of parameters.
 */
export type ParamStash = string[];
/**
 * Type representing a map of parameters.
 */
export 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'
 *   ]
 * ]
 * ```
 */
export type Result<T> = [[T, ParamIndexMap][], ParamStash] | [[T, Params][]];
/**
 * Error class representing an unsupported path error.
 */
export declare class UnsupportedPathError extends Error {
}

dist/types/jsx/dom/index.d.ts

Functions
  • createElement

    declare const createElement: (tag: string | ((props: Props) => JSXNode), props: Props | null, ...children: Child[]) => JSXNode;
  • cloneElement

    declare const cloneElement: <T extends JSXNode | JSX.Element>(element: T, props: Props, ...children: Child[]) => T;
All
/**
 * @module
 * This module provides APIs for `hono/jsx/dom`.
 */
import { isValidElement, memo, reactAPICompatVersion } from '../base';
import type { Child, DOMAttributes, JSX, JSXNode, Props } from '../base';
import { Children } from '../children';
import { useContext } from '../context';
import { createRef, forwardRef, startTransition, startViewTransition, use, useCallback, useDebugValue, useDeferredValue, useEffect, useId, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore, useTransition, useViewTransition } from '../hooks';
import { ErrorBoundary, Suspense } from './components';
import { createContext } from './context';
import { useActionState, useFormStatus, useOptimistic } from './hooks';
import { Fragment } from './jsx-runtime';
import { createPortal, flushSync } from './render';
export { render } from './render';
declare const createElement: (tag: string | ((props: Props) => JSXNode), props: Props | null, ...children: Child[]) => JSXNode;
declare const cloneElement: <T extends JSXNode | JSX.Element>(element: T, props: Props, ...children: Child[]) => T;
export { reactAPICompatVersion as version, createElement as jsx, useState, useEffect, useRef, useCallback, use, startTransition, useTransition, useDeferredValue, startViewTransition, useViewTransition, useMemo, useLayoutEffect, useInsertionEffect, useReducer, useId, useDebugValue, createRef, forwardRef, useImperativeHandle, useSyncExternalStore, useFormStatus, useActionState, useOptimistic, Suspense, ErrorBoundary, createContext, useContext, memo, isValidElement, createElement, cloneElement, Children, Fragment, Fragment as StrictMode, DOMAttributes, flushSync, createPortal, };
declare const _default: {
    version: string;
    useState: {
        <T>(initialState: T | (() => T)): [T, (newState: T | ((currentState: T) => T)) => void];
        <T_1 = undefined>(): [T_1 | undefined, (newState: T_1 | ((currentState: T_1 | undefined) => T_1 | undefined) | undefined) => void];
    };
    useEffect: (effect: () => void | (() => void), deps?: readonly unknown[] | undefined) => void;
    useRef: <T_2>(initialValue: T_2 | null) => import("../hooks").RefObject<T_2>;
    useCallback: <T_3 extends Function>(callback: T_3, deps: readonly unknown[]) => T_3;
    use: <T_4>(promise: Promise<T_4>) => T_4;
    startTransition: (callback: () => void) => void;
    useTransition: () => [boolean, (callback: () => void | Promise<void>) => void];
    useDeferredValue: <T_5>(value: T_5, initialValue?: T_5 | undefined) => T_5;
    startViewTransition: (callback: () => void) => void;
    useViewTransition: () => [boolean, (callback: () => void) => void];
    useMemo: <T_6>(factory: () => T_6, deps: readonly unknown[]) => T_6;
    useLayoutEffect: (effect: () => void | (() => void), deps?: readonly unknown[] | undefined) => void;
    useInsertionEffect: (effect: () => void | (() => void), deps?: readonly unknown[] | undefined) => void;
    useReducer: <T_7, A>(reducer: (state: T_7, action: A) => T_7, initialArg: T_7, init?: ((initialState: T_7) => T_7) | undefined) => [T_7, (action: A) => void];
    useId: () => string;
    useDebugValue: (_value: unknown, _formatter?: ((value: unknown) => string) | undefined) => void;
    createRef: <T_8>() => import("../hooks").RefObject<T_8>;
    forwardRef: <T_9, P = {}>(Component: (props: P, ref?: import("../hooks").RefObject<T_9> | undefined) => JSX.Element) => (props: P & {
        ref?: import("../hooks").RefObject<T_9> | undefined;
    }) => JSX.Element;
    useImperativeHandle: <T_10>(ref: import("../hooks").RefObject<T_10>, createHandle: () => T_10, deps: readonly unknown[]) => void;
    useSyncExternalStore: <T_11>(subscribe: (callback: (value: T_11) => void) => () => void, getSnapshot: () => T_11, getServerSnapshot?: (() => T_11) | undefined) => T_11;
    useFormStatus: () => {
        pending: false;
        data: null;
        method: null;
        action: null;
    } | {
        pending: true;
        data: FormData;
        method: "get" | "post";
        action: string | ((formData: FormData) => void | Promise<void>);
    };
    useActionState: <T_12>(fn: Function, initialState: T_12, permalink?: string | undefined) => [T_12, Function];
    useOptimistic: <T_13, N>(state: T_13, updateState: (currentState: T_13, action: N) => T_13) => [T_13, (action: N) => void];
    Suspense: import("../base").FC<import("../types").PropsWithChildren<{
        fallback: any;
    }>>;
    ErrorBoundary: import("../base").FC<import("../types").PropsWithChildren<{
        fallback?: Child;
        fallbackRender?: import("../components").FallbackRender | undefined;
        onError?: import("../components").ErrorHandler | undefined;
    }>>;
    createContext: <T_14>(defaultValue: T_14) => import("../context").Context<T_14>;
    useContext: <T_15>(context: import("../context").Context<T_15>) => T_15;
    memo: <T_16>(component: import("../base").FC<T_16>, propsAreEqual?: (prevProps: Readonly<T_16>, nextProps: Readonly<T_16>) => boolean) => import("../base").FC<T_16>;
    isValidElement: (element: unknown) => element is JSXNode;
    createElement: (tag: string | ((props: Props) => JSXNode), props: Props | null, ...children: Child[]) => JSXNode;
    cloneElement: <T_17 extends JSXNode | JSX.Element>(element: T_17, props: Props, ...children: Child[]) => T_17;
    Children: {
        map: (children: Child[], fn: (child: Child, index: number) => Child) => Child[];
        forEach: (children: Child[], fn: (child: Child, index: number) => void) => void;
        count: (children: Child[]) => number;
        only: (_children: Child[]) => Child;
        toArray: (children: Child) => Child[];
    };
    Fragment: (props: Record<string, unknown>) => JSXNode;
    StrictMode: (props: Record<string, unknown>) => JSXNode;
    flushSync: (callback: () => void) => void;
    createPortal: (children: Child, container: HTMLElement, key?: string | undefined) => Child;
};
export default _default;
export type { Context } from '../context';
export type * from '../types';

dist/types/jsx/streaming.d.ts

Functions
  • renderToReadableStream

    /**
     * @experimental
     * `renderToReadableStream()` is an experimental feature.
     * The API might be changed.
     */
    export declare const renderToReadableStream: (str: HtmlEscapedString | Promise<HtmlEscapedString>, onError?: (e: unknown) => string | void) => ReadableStream<Uint8Array>;
All
/**
 * @module
 * This module enables JSX to supports streaming Response.
 */
import type { HtmlEscapedString } from '../utils/html';
import type { FC, PropsWithChildren } from './';
/**
 * @experimental
 * `Suspense` is an experimental feature.
 * The API might be changed.
 */
export declare const Suspense: FC<PropsWithChildren<{
    fallback: any;
}>>;
/**
 * @experimental
 * `renderToReadableStream()` is an experimental feature.
 * The API might be changed.
 */
export declare const renderToReadableStream: (str: HtmlEscapedString | Promise<HtmlEscapedString>, onError?: (e: unknown) => string | void) => ReadableStream<Uint8Array>;

dist/types/middleware/csrf/index.d.ts

Types
  • IsAllowedOriginHandler

    type IsAllowedOriginHandler = (origin: string, context: Context) => boolean;
Interfaces
  • CSRFOptions

    interface CSRFOptions {
        origin?: string | string[] | IsAllowedOriginHandler;
    }
Functions
  • csrf

    /**
     * CSRF Protection Middleware for Hono.
     *
     * @see {@link https://hono.dev/docs/middleware/builtin/csrf}
     *
     * @param {CSRFOptions} [options] - The options for the CSRF protection middleware.
     * @param {string|string[]|(origin: string, context: Context) => boolean} [options.origin] - Specify origins.
     * @returns {MiddlewareHandler} The middleware handler function.
     *
     * @example
     * ```ts
     * const app = new Hono()
     *
     * app.use(csrf())
     *
     * // Specifying origins with using `origin` option
     * // string
     * app.use(csrf({ origin: 'myapp.example.com' }))
     *
     * // string[]
     * app.use(
     *   csrf({
     *     origin: ['myapp.example.com', 'development.myapp.example.com'],
     *   })
     * )
     *
     * // Function
     * // It is strongly recommended that the protocol be verified to ensure a match to `$`.
     * // You should *never* do a forward match.
     * app.use(
     *   '*',
     *   csrf({
     *     origin: (origin) => /https:\/\/(\w+\.)?myapp\.example\.com$/.test(origin),
     *   })
     * )
     * ```
     */
    export declare const csrf: (options?: CSRFOptions) => MiddlewareHandler;
All
/**
 * @module
 * CSRF Protection Middleware for Hono.
 */
import type { Context } from '../../context';
import type { MiddlewareHandler } from '../../types';
type IsAllowedOriginHandler = (origin: string, context: Context) => boolean;
interface CSRFOptions {
    origin?: string | string[] | IsAllowedOriginHandler;
}
/**
 * CSRF Protection Middleware for Hono.
 *
 * @see {@link https://hono.dev/docs/middleware/builtin/csrf}
 *
 * @param {CSRFOptions} [options] - The options for the CSRF protection middleware.
 * @param {string|string[]|(origin: string, context: Context) => boolean} [options.origin] - Specify origins.
 * @returns {MiddlewareHandler} The middleware handler function.
 *
 * @example
 * ```ts
 * const app = new Hono()
 *
 * app.use(csrf())
 *
 * // Specifying origins with using `origin` option
 * // string
 * app.use(csrf({ origin: 'myapp.example.com' }))
 *
 * // string[]
 * app.use(
 *   csrf({
 *     origin: ['myapp.example.com', 'development.myapp.example.com'],
 *   })
 * )
 *
 * // Function
 * // It is strongly recommended that the protocol be verified to ensure a match to `$`.
 * // You should *never* do a forward match.
 * app.use(
 *   '*',
 *   csrf({
 *     origin: (origin) => /https:\/\/(\w+\.)?myapp\.example\.com$/.test(origin),
 *   })
 * )
 * ```
 */
export declare const csrf: (options?: CSRFOptions) => MiddlewareHandler;
export {};

dist/types/middleware/powered-by/index.d.ts

Functions
  • poweredBy

    export declare const poweredBy: () => MiddlewareHandler;
All
/**
 * @module
 * Powered By Middleware for Hono.
 */
import type { MiddlewareHandler } from '../../types';
export declare const poweredBy: () => MiddlewareHandler;

dist/types/jsx/dom/jsx-dev-runtime.d.ts

Functions
  • jsxDEV

    export declare const jsxDEV: (tag: string | Function, props: Props, key?: string) => JSXNode;
  • Fragment

    export declare const Fragment: (props: Record<string, unknown>) => JSXNode;
All
/**
 * @module
 * This module provides the `hono/jsx/dom` dev runtime.
 */
import type { JSXNode, Props } from '../base';
export declare const jsxDEV: (tag: string | Function, props: Props, key?: string) => JSXNode;
export declare const Fragment: (props: Record<string, unknown>) => JSXNode;

dist/types/helper/dev/index.d.ts

Interfaces
  • ShowRoutesOptions

    interface ShowRoutesOptions {
        verbose?: boolean;
        colorize?: boolean;
    }
  • RouteData

    interface RouteData {
        path: string;
        method: string;
        name: string;
        isMiddleware: boolean;
    }
Functions
  • inspectRoutes

    export declare const inspectRoutes: <E extends Env>(hono: Hono<E, import("../../types").BlankSchema, "/">) => RouteData[];
  • showRoutes

    export declare const showRoutes: <E extends Env>(hono: Hono<E, import("../../types").BlankSchema, "/">, opts?: ShowRoutesOptions) => void;
  • getRouterName

    export declare const getRouterName: <E extends Env>(app: Hono<E, import("../../types").BlankSchema, "/">) => string;
All
/**
 * @module
 * Dev Helper for Hono.
 */
import type { Hono } from '../../hono';
import type { Env } from '../../types';
interface ShowRoutesOptions {
    verbose?: boolean;
    colorize?: boolean;
}
interface RouteData {
    path: string;
    method: string;
    name: string;
    isMiddleware: boolean;
}
export declare const inspectRoutes: <E extends Env>(hono: Hono<E, import("../../types").BlankSchema, "/">) => RouteData[];
export declare const showRoutes: <E extends Env>(hono: Hono<E, import("../../types").BlankSchema, "/">, opts?: ShowRoutesOptions) => void;
export declare const getRouterName: <E extends Env>(app: Hono<E, import("../../types").BlankSchema, "/">) => string;
export {};

dist/types/helper/adapter/index.d.ts

Types
  • Runtime

    export type Runtime = "node" | "deno" | "bun" | "workerd" | "fastly" | "edge-light" | "other";
Functions
  • env

    export declare const env: <T extends Record<string, unknown>, C extends Context<any, any, {}> = Context<{}, any, {}>>(c: C, runtime?: Runtime) => T & C["env"];
  • getRuntimeKey

    export declare const getRuntimeKey: () => Runtime;
  • checkUserAgentEquals

    export declare const checkUserAgentEquals: (platform: string) => boolean;
All
/**
 * @module
 * Adapter Helper for Hono.
 */
import type { Context } from '../../context';
export type Runtime = 'node' | 'deno' | 'bun' | 'workerd' | 'fastly' | 'edge-light' | 'other';
export declare const env: <T extends Record<string, unknown>, C extends Context<any, any, {}> = Context<{}, any, {}>>(c: C, runtime?: Runtime) => T & C["env"];
export declare const knownUserAgents: Partial<Record<Runtime, string>>;
export declare const getRuntimeKey: () => Runtime;
export declare const checkUserAgentEquals: (platform: string) => boolean;

dist/types/router/pattern-router/index.d.ts

All
/**
 * @module
 * PatternRouter for Hono.
 */
export { PatternRouter } from './router';

dist/types/router/trie-router/index.d.ts

All
/**
 * @module
 * TrieRouter for Hono.
 */
export { TrieRouter } from './router';

dist/types/jsx/dom/css.d.ts

Interfaces
  • CreateCssJsxDomObjectsType

    interface CreateCssJsxDomObjectsType {
        (args: {
            id: Readonly<string>;
        }): readonly [
            {
                toString(this: CssClassName): string;
            },
            FC<PropsWithChildren<void>>
        ];
    }
  • CssType

    interface CssType {
        (strings: TemplateStringsArray, ...values: CssVariableType[]): string;
    }
  • CxType

    interface CxType {
        (...args: (string | boolean | null | undefined)[]): string;
    }
  • KeyframesType

    interface KeyframesType {
        (strings: TemplateStringsArray, ...values: CssVariableType[]): CssClassName;
    }
  • ViewTransitionType

    interface ViewTransitionType {
        (strings: TemplateStringsArray, ...values: CssVariableType[]): string;
        (content: string): string;
        (): string;
    }
  • DefaultContextType

    interface DefaultContextType {
        css: CssType;
        cx: CxType;
        keyframes: KeyframesType;
        viewTransition: ViewTransitionType;
        Style: FC<PropsWithChildren<void>>;
    }
Functions
  • createCssContext

    /**
     * @experimental
     * `createCssContext` is an experimental feature.
     * The API might be changed.
     */
    export declare const createCssContext: ({ id }: {
        id: Readonly<string>;
    }) => DefaultContextType;
All
/**
 * @module
 * This module provides APIs that enable `hono/jsx/dom` to support.
 */
import type { FC, PropsWithChildren } from '../';
import type { CssClassName, CssVariableType } from '../../helper/css/common';
export { rawCssString } from '../../helper/css/common';
interface CreateCssJsxDomObjectsType {
    (args: {
        id: Readonly<string>;
    }): readonly [
        {
            toString(this: CssClassName): string;
        },
        FC<PropsWithChildren<void>>
    ];
}
export declare const createCssJsxDomObjects: CreateCssJsxDomObjectsType;
interface CssType {
    (strings: TemplateStringsArray, ...values: CssVariableType[]): string;
}
interface CxType {
    (...args: (string | boolean | null | undefined)[]): string;
}
interface KeyframesType {
    (strings: TemplateStringsArray, ...values: CssVariableType[]): CssClassName;
}
interface ViewTransitionType {
    (strings: TemplateStringsArray, ...values: CssVariableType[]): string;
    (content: string): string;
    (): string;
}
interface DefaultContextType {
    css: CssType;
    cx: CxType;
    keyframes: KeyframesType;
    viewTransition: ViewTransitionType;
    Style: FC<PropsWithChildren<void>>;
}
/**
 * @experimental
 * `createCssContext` is an experimental feature.
 * The API might be changed.
 */
export declare const createCssContext: ({ id }: {
    id: Readonly<string>;
}) => DefaultContextType;
/**
 * @experimental
 * `css` is an experimental feature.
 * The API might be changed.
 */
export declare const css: CssType;
/**
 * @experimental
 * `cx` is an experimental feature.
 * The API might be changed.
 */
export declare const cx: CxType;
/**
 * @experimental
 * `keyframes` is an experimental feature.
 * The API might be changed.
 */
export declare const keyframes: KeyframesType;
/**
 * @experimental
 * `viewTransition` is an experimental feature.
 * The API might be changed.
 */
export declare const viewTransition: ViewTransitionType;
/**
 * @experimental
 * `Style` is an experimental feature.
 * The API might be changed.
 */
export declare const Style: FC<PropsWithChildren<void>>;

dist/types/helper/websocket/index.d.ts

Interfaces
  • WSEvents

    /**
     * WebSocket Event Listeners type
     */
    export interface WSEvents<T = unknown> {
        onOpen?: (evt: Event, ws: WSContext<T>) => void;
        onMessage?: (evt: MessageEvent<WSMessageReceive>, ws: WSContext<T>) => void;
        onClose?: (evt: CloseEvent, ws: WSContext<T>) => void;
        onError?: (evt: Event, ws: WSContext<T>) => void;
    }
Types
  • UpgradeWebSocket

    /**
     * Upgrade WebSocket Type
     */
    export type UpgradeWebSocket<T = unknown, U = any> = (createEvents: (c: Context) => WSEvents<T> | Promise<WSEvents<T>>, options?: U) => MiddlewareHandler<any, string, {
        outputFormat: "ws";
    }>;
  • WSReadyState

    export type WSReadyState = 0 | 1 | 2 | 3;
  • WSContext

    export type WSContext<T = unknown> = {
        send(source: string | ArrayBuffer | Uint8Array, options?: {
            compress: boolean;
        }): void;
        raw?: T;
        binaryType: BinaryType;
        readyState: WSReadyState;
        url: URL | null;
        protocol: string | null;
        close(code?: number, reason?: string): void;
    };
  • WSMessageReceive

    export type WSMessageReceive = string | Blob | ArrayBufferLike;
Functions
  • createWSMessageEvent

    export declare const createWSMessageEvent: (source: WSMessageReceive) => MessageEvent<WSMessageReceive>;
All
/**
 * @module
 * WebSocket Helper for Hono.
 */
import type { Context } from '../../context';
import type { MiddlewareHandler } from '../../types';
/**
 * WebSocket Event Listeners type
 */
export interface WSEvents<T = unknown> {
    onOpen?: (evt: Event, ws: WSContext<T>) => void;
    onMessage?: (evt: MessageEvent<WSMessageReceive>, ws: WSContext<T>) => void;
    onClose?: (evt: CloseEvent, ws: WSContext<T>) => void;
    onError?: (evt: Event, ws: WSContext<T>) => void;
}
/**
 * Upgrade WebSocket Type
 */
export type UpgradeWebSocket<T = unknown, U = any> = (createEvents: (c: Context) => WSEvents<T> | Promise<WSEvents<T>>, options?: U) => MiddlewareHandler<any, string, {
    outputFormat: 'ws';
}>;
export type WSReadyState = 0 | 1 | 2 | 3;
export type WSContext<T = unknown> = {
    send(source: string | ArrayBuffer | Uint8Array, options?: {
        compress: boolean;
    }): void;
    raw?: T;
    binaryType: BinaryType;
    readyState: WSReadyState;
    url: URL | null;
    protocol: string | null;
    close(code?: number, reason?: string): void;
};
export type WSMessageReceive = string | Blob | ArrayBufferLike;
export declare const createWSMessageEvent: (source: WSMessageReceive) => MessageEvent<WSMessageReceive>;

dist/types/helper/factory/index.d.ts

Types
  • InitApp

    type InitApp<E extends Env = Env> = (app: Hono<E>) => void;
Interfaces
  • CreateHandlersInterface

    export interface CreateHandlersInterface<E extends Env, P extends string> {
        <I extends Input = {}, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>): [
            H<E, P, I, R>
        ];
        <I extends Input = {}, I2 extends Input = I, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>): [
            H<E, P, I, R>,
            H<E, P, I2, R>
        ];
        <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>): [
            H<E, P, I, R>,
            H<E, P, I2, R>,
            H<E, P, I3, R>
        ];
        <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>): [
            H<E, P, I, R>,
            H<E, P, I2, R>,
            H<E, P, I3, R>,
            H<E, P, I4, R>
        ];
        <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>): [
            H<E, P, I, R>,
            H<E, P, I2, R>,
            H<E, P, I3, R>,
            H<E, P, I4, R>,
            H<E, P, I5, R>
        ];
        <I extends Input = {}, 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, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>): [
            H<E, P, I, R>,
            H<E, P, I2, R>,
            H<E, P, I3, R>,
            H<E, P, I4, R>,
            H<E, P, I5, R>,
            H<E, P, I6, R>
        ];
        <I extends Input = {}, 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, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>): [
            H<E, P, I, R>,
            H<E, P, I2, R>,
            H<E, P, I3, R>,
            H<E, P, I4, R>,
            H<E, P, I5, R>,
            H<E, P, I6, R>,
            H<E, P, I7, R>
        ];
        <I extends Input = {}, 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, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>): [
            H<E, P, I, R>,
            H<E, P, I2, R>,
            H<E, P, I3, R>,
            H<E, P, I4, R>,
            H<E, P, I5, R>,
            H<E, P, I6, R>,
            H<E, P, I7, R>,
            H<E, P, I8, R>
        ];
        <I extends Input = {}, 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, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>, handler9: H<E, P, I9, R>): [
            H<E, P, I, R>,
            H<E, P, I2, R>,
            H<E, P, I3, R>,
            H<E, P, I4, R>,
            H<E, P, I5, R>,
            H<E, P, I6, R>,
            H<E, P, I7, R>,
            H<E, P, I8, R>,
            H<E, P, I9, R>
        ];
        <I extends Input = {}, 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, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>, handler9: H<E, P, I9, R>, handler10: H<E, P, I10, R>): [
            H<E, P, I, R>,
            H<E, P, I2, R>,
            H<E, P, I3, R>,
            H<E, P, I4, R>,
            H<E, P, I5, R>,
            H<E, P, I6, R>,
            H<E, P, I7, R>,
            H<E, P, I8, R>,
            H<E, P, I9, R>,
            H<E, P, I10, R>
        ];
    }
Functions
  • createFactory

    export declare const createFactory: <E extends Env = any, P extends string = any>(init?: {
        initApp?: InitApp<E> | undefined;
    } | undefined) => Factory<E, P>;
  • createMiddleware

    export declare const createMiddleware: <E extends Env = any, P extends string = string, I extends Input = {}>(middleware: MiddlewareHandler<E, P, I>) => MiddlewareHandler<E, P, I>;
All
/**
 * @module
 * Factory Helper for Hono.
 */
import { Hono } from '../../hono';
import type { Env, H, HandlerResponse, Input, MiddlewareHandler } from '../../types';
type InitApp<E extends Env = Env> = (app: Hono<E>) => void;
export interface CreateHandlersInterface<E extends Env, P extends string> {
    <I extends Input = {}, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>): [
        H<E, P, I, R>
    ];
    <I extends Input = {}, I2 extends Input = I, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>): [H<E, P, I, R>, H<E, P, I2, R>];
    <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>];
    <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>];
    <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>, H<E, P, I5, R>];
    <I extends Input = {}, 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, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>, H<E, P, I5, R>, H<E, P, I6, R>];
    <I extends Input = {}, 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, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>): [
        H<E, P, I, R>,
        H<E, P, I2, R>,
        H<E, P, I3, R>,
        H<E, P, I4, R>,
        H<E, P, I5, R>,
        H<E, P, I6, R>,
        H<E, P, I7, R>
    ];
    <I extends Input = {}, 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, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>): [
        H<E, P, I, R>,
        H<E, P, I2, R>,
        H<E, P, I3, R>,
        H<E, P, I4, R>,
        H<E, P, I5, R>,
        H<E, P, I6, R>,
        H<E, P, I7, R>,
        H<E, P, I8, R>
    ];
    <I extends Input = {}, 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, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>, handler9: H<E, P, I9, R>): [
        H<E, P, I, R>,
        H<E, P, I2, R>,
        H<E, P, I3, R>,
        H<E, P, I4, R>,
        H<E, P, I5, R>,
        H<E, P, I6, R>,
        H<E, P, I7, R>,
        H<E, P, I8, R>,
        H<E, P, I9, R>
    ];
    <I extends Input = {}, 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, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>, handler9: H<E, P, I9, R>, handler10: H<E, P, I10, R>): [
        H<E, P, I, R>,
        H<E, P, I2, R>,
        H<E, P, I3, R>,
        H<E, P, I4, R>,
        H<E, P, I5, R>,
        H<E, P, I6, R>,
        H<E, P, I7, R>,
        H<E, P, I8, R>,
        H<E, P, I9, R>,
        H<E, P, I10, R>
    ];
}
export declare class Factory<E extends Env = any, P extends string = any> {
    private initApp?;
    constructor(init?: {
        initApp?: InitApp<E>;
    });
    createApp: () => Hono<E>;
    createMiddleware: <I extends Input = {}>(middleware: MiddlewareHandler<E, P, I>) => MiddlewareHandler<E, P, I>;
    createHandlers: CreateHandlersInterface<E, P>;
}
export declare const createFactory: <E extends Env = any, P extends string = any>(init?: {
    initApp?: InitApp<E> | undefined;
} | undefined) => Factory<E, P>;
export declare const createMiddleware: <E extends Env = any, P extends string = string, I extends Input = {}>(middleware: MiddlewareHandler<E, P, I>) => MiddlewareHandler<E, P, I>;
export {};

dist/types/middleware/timing/index.d.ts

All
import type { TimingVariables } from './timing';
export { TimingVariables };
export { timing, setMetric, startTime, endTime } from './timing';
declare module '../..' {
    interface ContextVariableMap extends TimingVariables {
    }
}

dist/types/router/reg-exp-router/index.d.ts

All
/**
 * @module
 * RegExpRouter for Hono.
 */
export { RegExpRouter } from './router';

dist/types/router/smart-router/index.d.ts

All
/**
 * @module
 * SmartRouter for Hono.
 */
export { SmartRouter } from './router';

dist/types/jsx/index.d.ts

All
/**
 * @module
 * JSX for Hono.
 */
import { Fragment, cloneElement, isValidElement, jsx, memo, reactAPICompatVersion } from './base';
import type { DOMAttributes } from './base';
import { Children } from './children';
import { ErrorBoundary } from './components';
import { createContext, useContext } from './context';
import { useActionState, useOptimistic } from './dom/hooks';
import { createRef, forwardRef, startTransition, startViewTransition, use, useCallback, useDebugValue, useDeferredValue, useEffect, useId, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore, useTransition, useViewTransition } from './hooks';
import { Suspense } from './streaming';
export { reactAPICompatVersion as version, jsx, memo, Fragment, Fragment as StrictMode, isValidElement, jsx as createElement, cloneElement, ErrorBoundary, createContext, useContext, useState, useEffect, useRef, useCallback, useReducer, useId, useDebugValue, use, startTransition, useTransition, useDeferredValue, startViewTransition, useViewTransition, useMemo, useLayoutEffect, useInsertionEffect, createRef, forwardRef, useImperativeHandle, useSyncExternalStore, useActionState, useOptimistic, Suspense, Children, DOMAttributes, };
declare const _default: {
    version: string;
    memo: <T>(component: import("./base").FC<T>, propsAreEqual?: (prevProps: Readonly<T>, nextProps: Readonly<T>) => boolean) => import("./base").FC<T>;
    Fragment: ({ children, }: {
        key?: string | undefined;
        children?: import("../utils/html").HtmlEscapedString | import("./base").Child;
    }) => import("../utils/html").HtmlEscapedString;
    StrictMode: ({ children, }: {
        key?: string | undefined;
        children?: import("../utils/html").HtmlEscapedString | import("./base").Child;
    }) => import("../utils/html").HtmlEscapedString;
    isValidElement: (element: unknown) => element is import("./base").JSXNode;
    createElement: (tag: string | Function, props: import("./base").Props | null, ...children: (string | number | import("../utils/html").HtmlEscapedString)[]) => import("./base").JSXNode;
    cloneElement: <T_1 extends import("./base").JSXNode | import("./base").JSX.Element>(element: T_1, props: Partial<import("./base").Props>, ...children: import("./base").Child[]) => T_1;
    ErrorBoundary: import("./base").FC<import("./types").PropsWithChildren<{
        fallback?: import("./base").Child;
        fallbackRender?: import("./components").FallbackRender | undefined;
        onError?: import("./components").ErrorHandler | undefined;
    }>>;
    createContext: <T_2>(defaultValue: T_2) => import("./context").Context<T_2>;
    useContext: <T_3>(context: import("./context").Context<T_3>) => T_3;
    useState: {
        <T_4>(initialState: T_4 | (() => T_4)): [T_4, (newState: T_4 | ((currentState: T_4) => T_4)) => void];
        <T_5 = undefined>(): [T_5 | undefined, (newState: T_5 | ((currentState: T_5 | undefined) => T_5 | undefined) | undefined) => void];
    };
    useEffect: (effect: () => void | (() => void), deps?: readonly unknown[] | undefined) => void;
    useRef: <T_6>(initialValue: T_6 | null) => import("./hooks").RefObject<T_6>;
    useCallback: <T_7 extends Function>(callback: T_7, deps: readonly unknown[]) => T_7;
    useReducer: <T_8, A>(reducer: (state: T_8, action: A) => T_8, initialArg: T_8, init?: ((initialState: T_8) => T_8) | undefined) => [T_8, (action: A) => void];
    useId: () => string;
    useDebugValue: (_value: unknown, _formatter?: ((value: unknown) => string) | undefined) => void;
    use: <T_9>(promise: Promise<T_9>) => T_9;
    startTransition: (callback: () => void) => void;
    useTransition: () => [boolean, (callback: () => void | Promise<void>) => void];
    useDeferredValue: <T_10>(value: T_10, initialValue?: T_10 | undefined) => T_10;
    startViewTransition: (callback: () => void) => void;
    useViewTransition: () => [boolean, (callback: () => void) => void];
    useMemo: <T_11>(factory: () => T_11, deps: readonly unknown[]) => T_11;
    useLayoutEffect: (effect: () => void | (() => void), deps?: readonly unknown[] | undefined) => void;
    useInsertionEffect: (effect: () => void | (() => void), deps?: readonly unknown[] | undefined) => void;
    createRef: <T_12>() => import("./hooks").RefObject<T_12>;
    forwardRef: <T_13, P = {}>(Component: (props: P, ref?: import("./hooks").RefObject<T_13> | undefined) => import("./base").JSX.Element) => (props: P & {
        ref?: import("./hooks").RefObject<T_13> | undefined;
    }) => import("./base").JSX.Element;
    useImperativeHandle: <T_14>(ref: import("./hooks").RefObject<T_14>, createHandle: () => T_14, deps: readonly unknown[]) => void;
    useSyncExternalStore: <T_15>(subscribe: (callback: (value: T_15) => void) => () => void, getSnapshot: () => T_15, getServerSnapshot?: (() => T_15) | undefined) => T_15;
    useActionState: <T_16>(fn: Function, initialState: T_16, permalink?: string | undefined) => [T_16, Function];
    useOptimistic: <T_17, N>(state: T_17, updateState: (currentState: T_17, action: N) => T_17) => [T_17, (action: N) => void];
    Suspense: import("./base").FC<import("./types").PropsWithChildren<{
        fallback: any;
    }>>;
    Children: {
        map: (children: import("./base").Child[], fn: (child: import("./base").Child, index: number) => import("./base").Child) => import("./base").Child[];
        forEach: (children: import("./base").Child[], fn: (child: import("./base").Child, index: number) => void) => void;
        count: (children: import("./base").Child[]) => number;
        only: (_children: import("./base").Child[]) => import("./base").Child;
        toArray: (children: import("./base").Child) => import("./base").Child[];
    };
};
export default _default;
export type * from './types';
export type { JSX } from './intrinsic-elements';

dist/types/jsx/dom/jsx-runtime.d.ts

All
/**
 * @module
 * This module provides the `hono/jsx/dom` runtime.
 */
export { jsxDEV as jsx, Fragment } from './jsx-dev-runtime';
export { jsxDEV as jsxs } from './jsx-dev-runtime';

dist/types/adapter/netlify/index.d.ts

All
/**
 * @module
 * Netlify Adapter for Hono.
 */
export * from './mod';

dist/types/adapter/vercel/index.d.ts

All
/**
 * @module
 * Vercel Adapter for Hono.
 */
export { handle } from './handler';
export { getConnInfo } from './conninfo';

dist/types/middleware/request-id/index.d.ts

All
import type { RequestIdVariables } from './request-id';
export type { RequestIdVariables };
export { requestId } from './request-id';
declare module '../..' {
    interface ContextVariableMap extends RequestIdVariables {
    }
}

dist/types/helper/css/index.d.ts

Types
  • CssClassName

    type CssClassName = HtmlEscapedString & CssClassNameCommon;
Interfaces
  • CssType

    interface CssType {
        (strings: TemplateStringsArray, ...values: CssVariableType[]): Promise<string>;
    }
  • CxType

    interface CxType {
        (...args: (CssClassName | Promise<string> | string | boolean | null | undefined)[]): Promise<string>;
    }
  • KeyframesType

    interface KeyframesType {
        (strings: TemplateStringsArray, ...values: CssVariableType[]): CssClassNameCommon;
    }
  • ViewTransitionType

    interface ViewTransitionType {
        (strings: TemplateStringsArray, ...values: CssVariableType[]): Promise<string>;
        (content: Promise<string>): Promise<string>;
        (): Promise<string>;
    }
  • StyleType

    interface StyleType {
        (args?: {
            children?: Promise<string>;
        }): HtmlEscapedString;
    }
  • DefaultContextType

    interface DefaultContextType {
        css: CssType;
        cx: CxType;
        keyframes: KeyframesType;
        viewTransition: ViewTransitionType;
        Style: StyleType;
    }
Functions
  • createCssContext

    /**
     * @experimental
     * `createCssContext` is an experimental feature.
     * The API might be changed.
     */
    export declare const createCssContext: ({ id }: {
        id: Readonly<string>;
    }) => DefaultContextType;
All
/**
 * @module
 * css Helper for Hono.
 */
import type { HtmlEscapedString } from '../../utils/html';
import type { CssClassName as CssClassNameCommon, CssVariableType } from './common';
export { rawCssString } from './common';
type CssClassName = HtmlEscapedString & CssClassNameCommon;
interface CssType {
    (strings: TemplateStringsArray, ...values: CssVariableType[]): Promise<string>;
}
interface CxType {
    (...args: (CssClassName | Promise<string> | string | boolean | null | undefined)[]): Promise<string>;
}
interface KeyframesType {
    (strings: TemplateStringsArray, ...values: CssVariableType[]): CssClassNameCommon;
}
interface ViewTransitionType {
    (strings: TemplateStringsArray, ...values: CssVariableType[]): Promise<string>;
    (content: Promise<string>): Promise<string>;
    (): Promise<string>;
}
interface StyleType {
    (args?: {
        children?: Promise<string>;
    }): HtmlEscapedString;
}
/**
 * @experimental
 * `createCssContext` is an experimental feature.
 * The API might be changed.
 */
export declare const createCssContext: ({ id }: {
    id: Readonly<string>;
}) => DefaultContextType;
interface DefaultContextType {
    css: CssType;
    cx: CxType;
    keyframes: KeyframesType;
    viewTransition: ViewTransitionType;
    Style: StyleType;
}
/**
 * @experimental
 * `css` is an experimental feature.
 * The API might be changed.
 */
export declare const css: CssType;
/**
 * @experimental
 * `cx` is an experimental feature.
 * The API might be changed.
 */
export declare const cx: CxType;
/**
 * @experimental
 * `keyframes` is an experimental feature.
 * The API might be changed.
 */
export declare const keyframes: KeyframesType;
/**
 * @experimental
 * `viewTransition` is an experimental feature.
 * The API might be changed.
 */
export declare const viewTransition: ViewTransitionType;
/**
 * @experimental
 * `Style` is an experimental feature.
 * The API might be changed.
 */
export declare const Style: StyleType;

dist/types/jsx/jsx-runtime.d.ts

Functions
  • jsxAttr

    export declare const jsxAttr: (name: string, value: string | Promise<string>) => HtmlEscapedString | Promise<HtmlEscapedString>;
  • jsxEscape

    export declare const jsxEscape: (value: string) => string;
All
/**
 * @module
 * This module provides Hono's JSX runtime.
 */
export { jsxDEV as jsx, Fragment } from './jsx-dev-runtime';
export { jsxDEV as jsxs } from './jsx-dev-runtime';
export type { JSX } from './jsx-dev-runtime';
import { html } from '../helper/html';
import type { HtmlEscapedString } from '../utils/html';
export { html as jsxTemplate };
export declare const jsxAttr: (name: string, value: string | Promise<string>) => HtmlEscapedString | Promise<HtmlEscapedString>;
export declare const jsxEscape: (value: string) => string;

dist/types/client/index.d.ts

All
/**
 * @module
 * The HTTP Client for Hono.
 */
export { hc } from './client';
export type { InferResponseType, InferRequestType, Fetch, ClientRequestOptions, ClientRequest, ClientResponse, } from './types';

dist/types/index.d.ts

All
/**
 * @module
 *
 * Hono - Web Framework built on Web Standards
 *
 * @example
 * ```ts
 * import { Hono } from 'hono'
 * const app = new Hono()
 *
 * app.get('/', (c) => c.text('Hono!'))
 *
 * export default app
 * ```
 */
import { Hono } from './hono';
/**
 * Types for environment variables, error handlers, handlers, middleware handlers, and more.
 */
export type { Env, ErrorHandler, Handler, MiddlewareHandler, Next, NotFoundHandler, ValidationTargets, Input, Schema, ToSchema, TypedResponse, } from './types';
/**
 * Types for context, context variable map, context renderer, and execution context.
 */
export type { Context, ContextVariableMap, ContextRenderer, ExecutionContext } from './context';
/**
 * Type for HonoRequest.
 */
export type { HonoRequest } from './request';
/**
 * Types for inferring request and response types and client request options.
 */
export type { InferRequestType, InferResponseType, ClientRequestOptions } from './client';
/**
 * Hono framework for building web applications.
 */
export { Hono };

dist/types/adapter/deno/index.d.ts

All
/**
 * @module
 * Deno Adapter for Hono.
 */
export { serveStatic } from './serve-static';
export { toSSG, denoFileSystemModule } from './ssg';
export { upgradeWebSocket } from './websocket';
export { getConnInfo } from './conninfo';

dist/types/adapter/service-worker/index.d.ts

All
/**
 * Cloudflare Workers Adapter for Hono.
 * @module
 */
export { handle } from './handler';

dist/types/middleware/secure-headers/index.d.ts

All
export type { ContentSecurityPolicyOptionHandler } from './secure-headers';
export { NONCE, secureHeaders } from './secure-headers';
import type { SecureHeadersVariables } from './secure-headers';
export type { SecureHeadersVariables };
declare module '../..' {
    interface ContextVariableMap extends SecureHeadersVariables {
    }
}

dist/types/validator/index.d.ts

All
/**
 * @module
 * Validator for Hono.
 */
export { validator } from './validator';
export type { ValidationFunction } from './validator';

dist/types/adapter/cloudflare-workers/index.d.ts

All
/**
 * @module
 * Cloudflare Workers Adapter for Hono.
 */
export { serveStatic } from './serve-static-module';
export { upgradeWebSocket } from './websocket';
export { getConnInfo } from './conninfo';

dist/types/middleware/jwt/index.d.ts

All
import type { JwtVariables } from './jwt';
export type { JwtVariables };
export { jwt, verify, decode, sign } from './jwt';
declare module '../..' {
    interface ContextVariableMap extends JwtVariables {
    }
}

dist/types/adapter/cloudflare-pages/index.d.ts

All
/**
 * @module
 * Cloudflare Pages Adapter for Hono.
 */
export { handle, handleMiddleware, serveStatic } from './handler';
export type { EventContext } from './handler';

dist/types/helper/ssg/index.d.ts

All
/**
 * @module
 * SSG Helper for Hono.
 */
export * from './ssg';
export { X_HONO_DISABLE_SSG_HEADER_KEY, ssgParams, isSSGContext, disableSSG, onlySSG, } from './middleware';

dist/types/jsx/jsx-dev-runtime.d.ts

Functions
  • jsxDEV

    export declare function jsxDEV(tag: string | Function, props: Record<string, unknown>, key?: string): JSXNode;
All
/**
 * @module
 * This module provides Hono's JSX dev runtime.
 */
import type { JSXNode } from './base';
export { Fragment } from './base';
export type { JSX } from './base';
export declare function jsxDEV(tag: string | Function, props: Record<string, unknown>, key?: string): JSXNode;

dist/types/adapter/aws-lambda/index.d.ts

All
/**
 * @module
 * AWS Lambda Adapter for Hono.
 */
export { handle, streamHandle } from './handler';
export type { APIGatewayProxyResult, LambdaEvent } from './handler';
export type { ApiGatewayRequestContext, ApiGatewayRequestContextV2, ALBRequestContext, LambdaContext, } from './types';

dist/types/helper/accepts/index.d.ts

All
/**
 * @module
 * Accepts Helper for Hono.
 */
export { accepts } from './accepts';

dist/types/utils/jwt/index.d.ts

All
/**
 * @module
 * JWT utility.
 */
export declare const Jwt: {
    sign: (payload: import("./types").JWTPayload, privateKey: import("./jws").SignatureKey, alg?: "HS256" | "HS384" | "HS512" | "RS256" | "RS384" | "RS512" | "PS256" | "PS384" | "PS512" | "ES256" | "ES384" | "ES512" | "EdDSA") => Promise<string>;
    verify: (token: string, publicKey: import("./jws").SignatureKey, alg?: "HS256" | "HS384" | "HS512" | "RS256" | "RS384" | "RS512" | "PS256" | "PS384" | "PS512" | "ES256" | "ES384" | "ES512" | "EdDSA") => Promise<import("./types").JWTPayload>;
    decode: (token: string) => {
        header: import("./jwt").TokenHeader;
        payload: import("./types").JWTPayload;
    };
};

dist/types/helper/testing/index.d.ts

Types
  • ExtractEnv

    type ExtractEnv<T> = T extends Hono<infer E, Schema, string> ? E : never;
Functions
  • testClient

    export declare const testClient: <T extends Hono<any, Schema, string>>(app: T, Env?: {} | ExtractEnv<T>["Bindings"] | undefined, executionCtx?: ExecutionContext) => UnionToIntersection<Client<T>>;
All
/**
 * @module
 * Testing Helper for Hono.
 */
import type { Client } from '../../client/types';
import type { ExecutionContext } from '../../context';
import type { Hono } from '../../hono';
import type { Schema } from '../../types';
import type { UnionToIntersection } from '../../utils/types';
type ExtractEnv<T> = T extends Hono<infer E, Schema, string> ? E : never;
export declare const testClient: <T extends Hono<any, Schema, string>>(app: T, Env?: {} | ExtractEnv<T>["Bindings"] | undefined, executionCtx?: ExecutionContext) => UnionToIntersection<Client<T>>;
export {};

dist/types/adapter/bun/index.d.ts

All
/**
 * @module
 * Bun Adapter for Hono.
 */
export { serveStatic } from './serve-static';
export { bunFileSystemModule, toSSG } from './ssg';
export { createBunWebSocket } from './websocket';
export { getConnInfo } from './conninfo';

dist/types/helper/conninfo/index.d.ts

All
/**
 * @module
 * ConnInfo Helper for Hono.
 */
export type { AddressType, NetAddrInfo, ConnInfo, GetConnInfo } from './types';

dist/types/helper/streaming/index.d.ts

All
/**
 * @module
 * Streaming Helper for Hono.
 */
export { stream } from './stream';
export type { SSEMessage } from './sse';
export { streamSSE, SSEStreamingApi } from './sse';
export { streamText } from './text';