UNPKG

@router-cli/react-router

Version:

File based routing cli for react-router-dom. Types and components. see @router-cli/react-router-dev for the cli and plugins.

27 lines (19 loc) 1.49 kB
import { AnyRouteComponent, AnyRouteImport, AnyRouteImports, AnyRouteOptions } from "../types"; export type ExtractRouteData<T extends AnyRouteImport> = Awaited<ReturnType<T>>; export type ExtractRouteDataMap<T extends AnyRouteImports> = { [Prop in keyof T]: ExtractRouteData<T[Prop]>; } export type PickRequired<T> = { [K in keyof T as undefined extends T[K] ? never : K]: T[K] } export type PickRoutesWithSchema<T extends Record<string, AnyRouteComponent>, TSchema extends keyof AnyRouteOptions["__types"]> = { [K in keyof T as ExtractRouteSchema<T[K]["routeData"], TSchema> extends false ? never : K]: T[K]["routeData"]["__types"][TSchema] } export type PickRoutesWithLoader<T extends Record<string, AnyRouteComponent>> = { [K in keyof T as ExtractRouteLoader<T[K]["routeData"]> extends false ? never : K]: T[K]["routeData"]["__types"]["params"]; } export type ExtractRouteRequiredSchema<T extends AnyRouteOptions, TSchema extends keyof T["__types"]> = ExtractRequiredSchema<T["__types"][TSchema]>;; export type ExtractRouteSchema<T extends AnyRouteOptions, TSchema extends keyof T["__types"]> = ExtractSchema<T["__types"][TSchema]>; export type ExtractRequiredSchema<T> = keyof PickRequired<T> extends never ? never : PickRequired<T>; export type ExtractSchema<T> = keyof T extends never ? never : T; export type ExtractRouteLoader<T extends AnyRouteOptions> = T["__types"]["loader"] extends never ? never : T["__types"]["loader"];