import { CreateRouteOptions } from './createRouteOptions'; import { Rejection, Rejections } from './rejection'; import { GenericRoute, Route, Routes } from './route'; export type RouteContext = GenericRoute | Rejection; export type ToRouteContext = TContext extends RouteContext[] ? TContext : []; export type ExtractRouteContext = TOptions extends { context: infer TContext extends RouteContext[]; } ? TOptions extends { parent: infer TParent extends Route; } ? [...ToRouteContext, ...TContext] : TContext : TOptions extends { parent: infer TParent extends Route; } ? ToRouteContext : []; export type ExtractRouteContextRoutes = RouteContextToRoute>; export type ExtractRouteContextRejections = RouteContextToRejection>; export type RouteContextToRoute = RouteContext[] extends TContext ? Routes : undefined extends TContext ? Routes : FilterRouteContextRoutes; type FilterRouteContextRoutes = TContext extends [infer First, ...infer Rest extends RouteContext[]] ? First extends GenericRoute ? [First, ...FilterRouteContextRoutes] : FilterRouteContextRoutes : []; export type RouteContextToRejection = RouteContext[] extends TContext ? Rejections : undefined extends TContext ? Rejections : FilterRouteContextRejections; type FilterRouteContextRejections = TContext extends [infer First, ...infer Rest extends RouteContext[]] ? First extends Rejection ? [First, ...FilterRouteContextRejections] : FilterRouteContextRejections : []; export {};