hono
Version:
Web framework built on Web Standards
356 lines (355 loc) • 11.1 kB
TypeScript
/**
* @module
* Factory Helper for Hono.
*/
import { Hono } from '../../hono';
import type { HonoOptions } from '../../hono-base';
import type { Env, H, HandlerResponse, Input, IntersectNonAnyTypes, 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, E2 extends Env = E>(handler1: H<E2, P, I, R>): [
H<E2, P, I, R>
];
<I extends Input = {}, I2 extends Input = I, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
E,
E2
]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>): [
H<E2, P, I, R>,
H<E3, P, I2, R>
];
<I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
E,
E2
]>, E4 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3
]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>): [
H<E2, P, I, R>,
H<E3, P, I2, R>,
H<E4, 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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
E,
E2
]>, E4 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3
]>, E5 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4
]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>): [
H<E2, P, I, R>,
H<E3, P, I2, R>,
H<E4, P, I3, R>,
H<E5, 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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
E,
E2
]>, E4 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3
]>, E5 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4
]>, E6 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5
]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>): [
H<E2, P, I, R>,
H<E3, P, I2, R>,
H<E4, P, I3, R>,
H<E5, P, I4, R>,
H<E6, 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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
E,
E2
]>, E4 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3
]>, E5 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4
]>, E6 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5
]>, E7 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6
]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>): [
H<E2, P, I, R>,
H<E3, P, I2, R>,
H<E4, P, I3, R>,
H<E5, P, I4, R>,
H<E6, P, I5, R>,
H<E7, 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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
E,
E2
]>, E4 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3
]>, E5 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4
]>, E6 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5
]>, E7 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6
]>, E8 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6,
E7
]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>): [
H<E2, P, I, R>,
H<E3, P, I2, R>,
H<E4, P, I3, R>,
H<E5, P, I4, R>,
H<E6, P, I5, R>,
H<E7, P, I6, R>,
H<E8, 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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
E,
E2
]>, E4 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3
]>, E5 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4
]>, E6 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5
]>, E7 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6
]>, E8 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6,
E7
]>, E9 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6,
E7,
E8
]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>, handler8: H<E9, P, I8, R>): [
H<E2, P, I, R>,
H<E3, P, I2, R>,
H<E4, P, I3, R>,
H<E5, P, I4, R>,
H<E6, P, I5, R>,
H<E7, P, I6, R>,
H<E8, P, I7, R>,
H<E9, 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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
E,
E2
]>, E4 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3
]>, E5 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4
]>, E6 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5
]>, E7 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6
]>, E8 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6,
E7
]>, E9 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6,
E7,
E8
]>, E10 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6,
E7,
E8,
E9
]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>, handler8: H<E9, P, I8, R>, handler9: H<E10, P, I9, R>): [
H<E2, P, I, R>,
H<E3, P, I2, R>,
H<E4, P, I3, R>,
H<E5, P, I4, R>,
H<E6, P, I5, R>,
H<E7, P, I6, R>,
H<E8, P, I7, R>,
H<E9, P, I8, R>,
H<E10, 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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
E,
E2
]>, E4 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3
]>, E5 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4
]>, E6 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5
]>, E7 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6
]>, E8 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6,
E7
]>, E9 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6,
E7,
E8
]>, E10 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6,
E7,
E8,
E9
]>, E11 extends Env = IntersectNonAnyTypes<[
E,
E2,
E3,
E4,
E5,
E6,
E7,
E8,
E9,
E10
]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>, handler8: H<E9, P, I8, R>, handler9: H<E10, P, I9, R>, handler10: H<E11, P, I10, R>): [
H<E2, P, I, R>,
H<E3, P, I2, R>,
H<E4, P, I3, R>,
H<E5, P, I4, R>,
H<E6, P, I5, R>,
H<E7, P, I6, R>,
H<E8, P, I7, R>,
H<E9, P, I8, R>,
H<E10, P, I9, R>,
H<E11, P, I10, R>
];
}
export declare class Factory<E extends Env = Env, P extends string = string> {
constructor(init?: {
initApp?: InitApp<E>;
defaultAppOptions?: HonoOptions<E>;
});
createApp: (options?: HonoOptions<E>) => 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 = Env, P extends string = string>(init?: {
initApp?: InitApp<E>;
defaultAppOptions?: HonoOptions<E>;
}) => 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 {};