import type { FromPathOption, NavigateOptions, PathParamOptions, SearchParamOptions, ToPathOption, } from './link' import type { Redirect } from './redirect' import type { RouteIds } from './routeInfo' import type { AnyRouter, RegisteredRouter } from './router' import type { UseParamsResult } from './useParams' import type { UseSearchResult } from './useSearch' import type { Constrain, ConstrainLiteral } from './utils' export type ValidateFromPath< TRouter extends AnyRouter = RegisteredRouter, TFrom = string, > = FromPathOption export type ValidateToPath< TRouter extends AnyRouter = RegisteredRouter, TTo extends string | undefined = undefined, TFrom extends string = string, > = ToPathOption export type ValidateSearch< TRouter extends AnyRouter = RegisteredRouter, TTo extends string | undefined = undefined, TFrom extends string = string, > = SearchParamOptions export type ValidateParams< TRouter extends AnyRouter = RegisteredRouter, TTo extends string | undefined = undefined, TFrom extends string = string, > = PathParamOptions /** * @internal */ export type InferFrom< TOptions, TDefaultFrom extends string = string, > = TOptions extends { from: infer TFrom extends string } ? TFrom : TDefaultFrom /** * @internal */ export type InferTo = TOptions extends { to: infer TTo extends string } ? TTo : undefined /** * @internal */ export type InferMaskTo = TOptions extends { mask: { to: infer TTo extends string } } ? TTo : '' export type InferMaskFrom = TOptions extends { mask: { from: infer TFrom extends string } } ? TFrom : string export type ValidateNavigateOptions< TRouter extends AnyRouter = RegisteredRouter, TOptions = unknown, TDefaultFrom extends string = string, > = Constrain< TOptions, NavigateOptions< TRouter, InferFrom, InferTo, InferMaskFrom, InferMaskTo > > export type ValidateNavigateOptionsArray< TRouter extends AnyRouter = RegisteredRouter, TOptions extends ReadonlyArray = ReadonlyArray, TDefaultFrom extends string = string, > = { [K in keyof TOptions]: ValidateNavigateOptions< TRouter, TOptions[K], TDefaultFrom > } export type ValidateRedirectOptions< TRouter extends AnyRouter = RegisteredRouter, TOptions = unknown, TDefaultFrom extends string = string, > = Constrain< TOptions, Redirect< TRouter, InferFrom, InferTo, InferMaskFrom, InferMaskTo > > export type ValidateRedirectOptionsArray< TRouter extends AnyRouter = RegisteredRouter, TOptions extends ReadonlyArray = ReadonlyArray, TDefaultFrom extends string = string, > = { [K in keyof TOptions]: ValidateRedirectOptions< TRouter, TOptions[K], TDefaultFrom > } export type ValidateId< TRouter extends AnyRouter = RegisteredRouter, TId extends string = string, > = ConstrainLiteral> /** * @internal */ export type InferStrict = TOptions extends { strict: infer TStrict extends boolean } ? TStrict : true /** * @internal */ export type InferShouldThrow = TOptions extends { shouldThrow: infer TShouldThrow extends boolean } ? TShouldThrow : true /** * @internal */ export type InferSelected = TOptions extends { select: (...args: Array) => infer TSelected } ? TSelected : unknown export type ValidateUseSearchResult< TOptions, TRouter extends AnyRouter = RegisteredRouter, > = UseSearchResult< TRouter, InferFrom, InferStrict, InferSelected > export type ValidateUseParamsResult< TOptions, TRouter extends AnyRouter = RegisteredRouter, > = Constrain< TOptions, UseParamsResult< TRouter, InferFrom, InferStrict, InferSelected > >