import type { Pred } from 'runtyp'; import type { RouteErrorDef, RouteErrorSpec, RouteFailure } from './types'; import { builtInErrors, type ThrowableBuiltinCode } from './builtinErrors'; export type { RouteErrorSpec } from './types'; type FailFn = Spec['data'] extends Pred ? undefined extends D ? (data?: Exclude) => RouteFailure & { code: Code; } : (data: D) => RouteFailure & { code: Code; } : () => RouteFailure & { code: Code; }; type BuiltinFailers = { [K in ThrowableBuiltinCode]: FailFn<(typeof builtInErrors)[K], K>; }; /** Internal marker — domain defs only (builtin failers are implicit). */ declare const ERROR_DEFS: unique symbol; /** Pass the whole handle to `route({ errors: e })` — domain codes only. */ type ErrorsHandle = { [ERROR_DEFS]: Readonly>; }; export type ErrorsHandleWithFailers> = ErrorsHandle & BuiltinFailers & { [K in keyof T & string]: FailFn; }; export type DefineErrorsInput = Record | ErrorsHandle; type FailersFromHandle = Extract<{ [K in keyof H]: H[K] extends (...args: any[]) => infer R ? R : never; }[keyof H], RouteFailure>; type DomainFailuresFromDefs> = Extract<{ [K in keyof E & string]: RouteFailure & { code: K; }; }[keyof E & string], RouteFailure>; /** Union of RouteFailure values from an errors handle (builtins + domain failers). */ export type RouteFailuresFrom = FailersFromHandle; /** Declare domain route errors; builtin failers are always on the returned handle. */ export declare function defineErrors>(spec?: T): ErrorsHandleWithFailers; /** Builtin-only fail handle — use in handlers when a route has no domain errors. */ export declare const err: ErrorsHandleWithFailers<{}>; /** Failures from {@link err} — builtins only (every route allows these). */ export type BuiltinRouteFailures = FailersFromHandle; /** Failures allowed on a route from its `errors:` param (builtins when omitted). */ export type RouteFailuresFor = [ E ] extends [undefined] ? BuiltinRouteFailures : E extends ErrorsHandle ? FailersFromHandle : E extends Record ? BuiltinRouteFailures | DomainFailuresFromDefs : BuiltinRouteFailures; export declare function resolveRouteErrorDefs(errors?: DefineErrorsInput): Record | undefined;