import type { PageSearchParams } from "@evjs/shared"; import type { createRouter, ResolveParams, RootRoute, Route } from "@tanstack/react-router"; import type { Register } from "../../index.js"; type EvEmpty = Record; export interface PageRouteTypeDefinition { id: string; path: string; module: unknown; } export type PageRouteTypeDefinitions = { [K in keyof TRoutes]: PageRouteTypeDefinition; }; export type CreatePageRouteRegister> = { pageRoutes: TRoutes; router: ReturnType>>; }; type RegisteredPageRouteDefinitions = Register extends { pageRoutes: infer TRoutes; } ? TRoutes extends PageRouteTypeDefinitions ? TRoutes : never : never; type RegisteredPageRoute = RegisteredPageRouteDefinitions[keyof RegisteredPageRouteDefinitions]; export type PageRoutePath = [RegisteredPageRoute] extends [never] ? string : RegisteredPageRoute["path"]; type PageRouteDefinitionByPath = Extract; type PageRouteModuleByPath = PageRouteDefinitionByPath extends { module: infer TModule; } ? TModule : unknown; export type PageRouteParams = ResolveParams & PageRouteSplatParams; type PageRouteSplatParams = TPath extends "$" | `${string}/$` | `${string}/$/${string}` ? { _splat: string; } : Record; export type PageRouteSearch = PageRouteModuleByPath extends { validateSearch: (...args: never[]) => infer TSearch; } ? TSearch extends Record ? TSearch : PageSearchParams : PageSearchParams; export type PageRouteLoaderData = PageRouteModuleByPath extends { loader: (...args: never[]) => infer TLoaderData; } ? Awaited : unknown; type EvModuleSearchValidator = TModule extends { validateSearch: infer TValidator; } ? TValidator : undefined; type EvModuleLoader = TModule extends { loader: infer TLoader; } ? TLoader : undefined; type EvRootRoute = RootRoute; type EvPageRoute = Route, PageRouteParams, EvEmpty, EvEmpty, EvEmpty, EvEmpty, EvModuleLoader, unknown, unknown, unknown, unknown, unknown>; type EvRouteDefinitionValue> = TRoutes[keyof TRoutes]; type EvRouteFromDefinition = TDefinition extends { id: infer TId extends string; path: infer TPath extends string; module: infer TModule; } ? EvPageRoute : never; type EvPageRouteTypes> = { fullPaths: EvRouteDefinitionValue["path"]; to: EvRouteDefinitionValue["path"]; id: EvRouteDefinitionValue["id"]; fileRoutesByFullPath: { [K in keyof TRoutes as TRoutes[K]["path"]]: EvRouteFromDefinition; }; fileRoutesByTo: { [K in keyof TRoutes as TRoutes[K]["path"]]: EvRouteFromDefinition; }; fileRoutesById: { [K in keyof TRoutes as TRoutes[K]["id"]]: EvRouteFromDefinition; }; }; type EvPageRouteTree> = EvRootRoute>; export {}; //# sourceMappingURL=route-types.d.ts.map