import type { Infer, Pred } from 'runtyp'; import type { DefineErrorsInput, RouteFailuresFor } from './defineErrors'; import { emptyObjectInput } from './routeDefaults'; /** Preds (+ optional errors) for a route — used by `route` and `HandlerFor`. */ export type RouteHandlerDef = { input?: Pred; output?: Pred; errors?: DefineErrorsInput; }; type RoutePredsOf = Pick; type InferPred = T extends Pred ? U : never; type HandlerInput = [RoutePredsOf['input']] extends [undefined] ? Infer : InferPred['input']>; type HandlerOutput = [RoutePredsOf['output']] extends [undefined] ? void : InferPred['output']>; /** Handler fn type derived from route preds — use on a separate binding passed as `handler:`. */ export type HandlerFor = (input: HandlerInput, ctx: Ctx) => Promise | RouteFailuresFor['errors']>>; export {};