import type { Context as Context_hono } from 'hono'; import type { IfAnyThenEmptyObject, RemoveBlankRecord, UnionToIntersection } from 'hono/utils/types'; import type { FrogBase, RouteOptions } from '../frog-base.js'; import type { Context, FrameContext, TransactionContext } from './context.js'; import type { Env } from './env.js'; import type { FrameResponse } from './frame.js'; import type { HandlerResponse } from './response.js'; import type { TransactionResponse } from './transaction.js'; export type Next = () => Promise; export type Input = { in?: Partial; out?: Partial<{ [K in keyof ValidationTargets]: unknown; }>; }; export type BlankSchema = {}; export type BlankInput = {}; export type FrameHandler = (c: FrameContext) => HandlerResponse; export type TransactionHandler = (c: TransactionContext) => HandlerResponse; export type Handler = any> = (c: Context) => R; export type MiddlewareHandler = (c: Context_hono, next: Next) => Promise; export type H = any, M extends string = string> = M extends 'frame' ? FrameHandler : M extends 'transaction' ? TransactionHandler : Handler; export interface HandlerInterface {

= MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, E2 extends Env = E>(path: P, handler: H, options?: RouteOptions): FrogBase, I['in'], MergeTypedResponseData>, BasePath>;

= MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(path: P, middleware: MiddlewareHandler, handler: H, options?: RouteOptions): FrogBase, I2['in'], MergeTypedResponseData>, BasePath>;

= MergePath, R extends HandlerResponse = 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, middleware: MiddlewareHandler, middleware_2: MiddlewareHandler, handler: H, options?: RouteOptions): FrogBase, I3['in'], MergeTypedResponseData>, BasePath>;

= MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(path: P, middleware: MiddlewareHandler, middleware_2: MiddlewareHandler, middleware_3: MiddlewareHandler, handler: H, options?: RouteOptions): FrogBase, I4['in'], MergeTypedResponseData>, BasePath>;

= MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>>(path: P, middleware: MiddlewareHandler, middleware_2: MiddlewareHandler, middleware_3: MiddlewareHandler, middleware_4: MiddlewareHandler, handler: H, options?: RouteOptions): FrogBase, I5['in'], MergeTypedResponseData>, BasePath>;

= MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, E2 extends Env = E, E3 extends Env = 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, middleware: MiddlewareHandler, middleware_2: MiddlewareHandler, middleware_3: MiddlewareHandler, middleware_4: MiddlewareHandler, middleware_5: MiddlewareHandler, handler: H, options?: RouteOptions): FrogBase, I6['in'], MergeTypedResponseData>, BasePath>;

= MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, E2 extends Env = E, E3 extends Env = 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, middleware: MiddlewareHandler, middleware_2: MiddlewareHandler, middleware_3: MiddlewareHandler, middleware_4: MiddlewareHandler, middleware_5: MiddlewareHandler, middleware_6: MiddlewareHandler, handler: H, options?: RouteOptions): FrogBase, I7['in'], MergeTypedResponseData>, BasePath>;

= MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, E2 extends Env = E, E3 extends Env = 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, middleware: MiddlewareHandler, middleware_2: MiddlewareHandler, middleware_3: MiddlewareHandler, middleware_4: MiddlewareHandler, middleware_5: MiddlewareHandler, middleware_6: MiddlewareHandler, middleware_7: MiddlewareHandler, handler: H, options?: RouteOptions): FrogBase, I8['in'], MergeTypedResponseData>, BasePath>;

= MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, E2 extends Env = E, E3 extends Env = 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, middleware: MiddlewareHandler, middleware_2: MiddlewareHandler, middleware_3: MiddlewareHandler, middleware_4: MiddlewareHandler, middleware_5: MiddlewareHandler, middleware_6: MiddlewareHandler, middleware_7: MiddlewareHandler, middleware_8: MiddlewareHandler, handler: H, options?: RouteOptions): FrogBase, I9['in'], MergeTypedResponseData>, BasePath>;

= MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, E2 extends Env = E, E3 extends Env = 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, middleware: MiddlewareHandler, middleware_2: MiddlewareHandler, middleware_3: MiddlewareHandler, middleware_4: MiddlewareHandler, middleware_5: MiddlewareHandler, middleware_6: MiddlewareHandler, middleware_7: MiddlewareHandler, middleware_8: MiddlewareHandler, middleware_9: MiddlewareHandler, handler: H, options?: RouteOptions): FrogBase, I10['in'], MergeTypedResponseData>, BasePath>; } export interface MiddlewareHandlerInterface { (...handlers: MiddlewareHandler>>[]): FrogBase, S, BasePath>; (handler: MiddlewareHandler>>): FrogBase, S, BasePath>; , P extends string = MergePath>>(...handlers: [MiddlewareHandler, MiddlewareHandler]): FrogBase, S, BasePath>; , P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): FrogBase, S, BasePath>; , P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): FrogBase, S, BasePath>; , P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): FrogBase, S, BasePath>; , P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): FrogBase, S, BasePath>; , P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): FrogBase, S, BasePath>; , P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): FrogBase, S, BasePath>; , P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): FrogBase, S, BasePath>; , P extends string = MergePath>>(...handlers: [ MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler, MiddlewareHandler ]): FrogBase, S, BasePath>;

(path: P, ...handlers: MiddlewareHandler>[]): FrogBase; } export interface OnHandlerInterface { = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, E2 extends Env = E>(method: M, path: P, handler: H): FrogBase, S & ToSchema, I['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(method: M, path: P, ...handlers: [H, H]): FrogBase, S & ToSchema, I2['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = 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, H, H ]): FrogBase, S & ToSchema, I3['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(method: M, path: P, ...handlers: [ H, H, H, H ]): FrogBase, S & ToSchema, I4['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>>(method: M, path: P, ...handlers: [ H, H, H, H, H ]): FrogBase, S & ToSchema, I5['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, E2 extends Env = E, E3 extends Env = 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, H, H, H, H, H ]): FrogBase, S & ToSchema, I6['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, E2 extends Env = E, E3 extends Env = 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, H, H, H, H, H, H ]): FrogBase, S & ToSchema, I7['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, E2 extends Env = E, E3 extends Env = 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, H, H, H, H, H, H, H ]): FrogBase, S & ToSchema, I8['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, E2 extends Env = E, E3 extends Env = 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, H, H, H, H, H, H, H, H ]): FrogBase, S & ToSchema, I9['in'], MergeTypedResponseData>, BasePath>; = MergePath, 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, H, H, H, H, H, H, H, H, H ]): FrogBase, S & ToSchema, I10['in'], MergeTypedResponseData>>, BasePath>; = any, I extends Input = {}>(method: M, path: P, ...handlers: H, I, R>[]): FrogBase, I['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, E2 extends Env = E>(methods: Ms, path: P, handler: H): FrogBase, S & ToSchema, I['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(methods: Ms, path: P, ...handlers: [H, H]): FrogBase, S & ToSchema, I2['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = 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, H, H ]): FrogBase, S & ToSchema, I3['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(methods: Ms, path: P, ...handlers: [ H, H, H, H ]): FrogBase, S & ToSchema, I4['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>>(methods: Ms, path: P, ...handlers: [ H, H, H, H, H ]): FrogBase, S & ToSchema, I5['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, E2 extends Env = E, E3 extends Env = 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, H, H, H, H, H ]): FrogBase, S & ToSchema, I6['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, E2 extends Env = E, E3 extends Env = 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, H, H, H, H, H, H ]): FrogBase, S & ToSchema, I7['in'], MergeTypedResponseData>, BasePath>; = MergePath, R extends HandlerResponse = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, E2 extends Env = E, E3 extends Env = 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, H, H, H, H, H, H, H ]): FrogBase, S & ToSchema, I8['in'], MergeTypedResponseData>, BasePath>; = MergePath, 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, H, H, H, H, H, H, H, H ]): FrogBase, S & ToSchema, I9['in'], MergeTypedResponseData>>, BasePath>; = MergePath, 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, H, H, H, H, H, H, H, H, H ]): FrogBase, S & ToSchema, I10['in'], MergeTypedResponseData>>, BasePath>;

= any, I extends Input = {}>(methods: string[], path: P, ...handlers: H, I, R>[]): FrogBase, I['in'], MergeTypedResponseData>, BasePath>; = any>(methods: string | string[], paths: string[], ...handlers: H[]): FrogBase>, BasePath>; } type ExtractKey = S extends Record ? Key extends string ? Key : never : string; export type ToSchema = { [K in P]: { [K2 in M as AddDollar]: { input: unknown extends I ? AddParam<{}, P> : AddParam; output: unknown extends O ? {} : O; }; }; }; export type Schema = { [Path: string]: { [Method: `$${Lowercase}`]: { input: Partial & { param?: Record; }; output: any; }; }; }; type ExtractParams = string extends Path ? Record : Path extends `${infer _Start}:${infer Param}/${infer Rest}` ? { [K in Param | keyof ExtractParams<`/${Rest}`>]: string; } : Path extends `${infer _Start}:${infer Param}` ? { [K in Param]: string; } : never; type FlattenIfIntersect = T extends infer O ? { [K in keyof O]: O[K]; } : never; export type MergeSchemaPath = { [P in keyof OrigSchema as MergePath]: { [M in keyof OrigSchema[P]]: OrigSchema[P][M] extends { input: infer Input; output: infer Output; } ? { input: Input extends { param: infer _; } ? ExtractParams extends never ? Input : FlattenIfIntersect; }> : RemoveBlankRecord> extends never ? Input : Input & { param: ExtractParams; }; output: Output; } : never; }; }; export type AddParam = ParamKeys

extends never ? I : I extends { param: infer _; } ? I : I & { param: UnionToIntersection>>; }; type AddDollar = `$${Lowercase}`; export type MergePath = A extends '' ? B : A extends '/' ? B : A extends `${infer P}/` ? B extends `/${infer Q}` ? `${P}/${Q}` : `${P}/${B}` : B extends `/${infer Q}` ? Q extends '' ? A : `${A}/${Q}` : `${A}/${B}`; export type TypedResponse = { data: T; format: 'json'; }; type ExtractResponseData = T extends Promise ? T2 extends TypedResponse ? U : {} : T extends TypedResponse ? U : {}; type MergeTypedResponseData = ExtractResponseData; export type ValidationTargets = { json: any; form: Record; query: Record; param: Record; header: Record; cookie: Record; }; type ParamKeyName = NameWithPattern extends `${infer Name}{${infer Rest}` ? Rest extends `${infer _Pattern}?` ? `${Name}?` : Name : NameWithPattern; type ParamKey = Component extends `:${infer NameWithPattern}` ? ParamKeyName : never; export type ParamKeys = Path extends `${infer Component}/${infer Rest}` ? ParamKey | ParamKeys : ParamKey; export type ParamKeyToRecord = T extends `${infer R}?` ? Record : { [K in T]: string; }; export type InputToDataByTarget = T extends { [K in Target]: infer R; } ? R : never; export type RemoveQuestion = T extends `${infer R}?` ? R : T; export type UndefinedIfHavingQuestion = T extends `${infer _}?` ? string | undefined : string; export type ExtractSchema = UnionToIntersection ? S : never>; type EnvOrEmpty = T extends Env ? (Env extends T ? {} : T) : T; type IntersectNonAnyTypes = T extends [ infer Head, ...infer Rest ] ? IfAnyThenEmptyObject> & IntersectNonAnyTypes : {}; export {}; //# sourceMappingURL=routes.d.ts.map