import type { StructuralSharingOption, ValidateSelected } from './structuralSharing'; import type { AnyRouter, FromPathOption, MakeRouteMatch, MakeRouteMatchUnion, RegisteredRouter, ResolveUseLoaderData, ResolveUseLoaderDeps, ResolveUseParams, ResolveUseSearch, RouterState, StrictOrFrom, ThrowConstraint, ThrowOrOptional, UseLoaderDataResult, UseLoaderDepsResult, UseNavigateResult, UseParamsResult, UseRouteContextBaseOptions, UseRouteContextOptions, UseRouteContextResult, UseSearchResult, } from '@tanstack/router-core'; export interface UseMatchBaseOptions< TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected, TStructuralSharing extends boolean, > { select?: ( match: MakeRouteMatch, ) => ValidateSelected; shouldThrow?: TThrow; } export type UseMatchRoute = < TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean, >( opts?: UseMatchBaseOptions & StructuralSharingOption, ) => UseMatchResult; export type UseMatchOptions< TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TThrow extends boolean, TSelected, TStructuralSharing extends boolean, > = StrictOrFrom & UseMatchBaseOptions & StructuralSharingOption; export type UseMatchResult< TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected, > = unknown extends TSelected ? TStrict extends true ? MakeRouteMatch : MakeRouteMatchUnion : TSelected; export interface UseParamsBaseOptions< TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected, TStructuralSharing, > { select?: ( params: ResolveUseParams, ) => ValidateSelected; shouldThrow?: TThrow; } export type UseParamsRoute = < TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean, >( opts?: UseParamsBaseOptions & StructuralSharingOption, ) => UseParamsResult; export type UseParamsOptions< TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TThrow extends boolean, TSelected, TStructuralSharing, > = StrictOrFrom & UseParamsBaseOptions & StructuralSharingOption; export interface UseSearchBaseOptions< TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected, TStructuralSharing, > { select?: ( search: ResolveUseSearch, ) => ValidateSelected; shouldThrow?: TThrow; } export type UseSearchRoute = < TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean, >( opts?: UseSearchBaseOptions & StructuralSharingOption, ) => UseSearchResult; export type UseSearchOptions< TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected, TStructuralSharing, > = StrictOrFrom & UseSearchBaseOptions & StructuralSharingOption; export interface UseLoaderDataBaseOptions< TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected, TStructuralSharing, > { select?: ( data: ResolveUseLoaderData, ) => ValidateSelected; } export type UseLoaderDataRoute = < TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean, >( opts?: UseLoaderDataBaseOptions & StructuralSharingOption, ) => UseLoaderDataResult; export type UseLoaderDataOptions< TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected, TStructuralSharing, > = StrictOrFrom & UseLoaderDataBaseOptions & StructuralSharingOption; export interface UseLoaderDepsBaseOptions< TRouter extends AnyRouter, TFrom, TSelected, TStructuralSharing, > { select?: ( deps: ResolveUseLoaderDeps, ) => ValidateSelected; } export type UseLoaderDepsRoute = < TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean, >( opts?: UseLoaderDepsBaseOptions & StructuralSharingOption, ) => UseLoaderDepsResult; export type UseLoaderDepsOptions< TRouter extends AnyRouter, TFrom extends string | undefined, TSelected, TStructuralSharing, > = StrictOrFrom & UseLoaderDepsBaseOptions & StructuralSharingOption; export type UseRouteContextRoute = < TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, >( opts?: UseRouteContextBaseOptions, ) => UseRouteContextResult; export interface UseLocationBaseOptions< TRouter extends AnyRouter, TSelected, TStructuralSharing extends boolean = boolean, > { select?: ( location: RouterState['location'], ) => ValidateSelected; } export type UseLocationResult = unknown extends TSelected ? RouterState['location'] : TSelected; export interface UseMatchesBaseOptions { select?: ( matches: Array>, ) => ValidateSelected; } export type UseMatchesResult = unknown extends TSelected ? Array> : TSelected;