Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions packages/react-router/src/fileRoute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,12 @@ import type {
import type { RegisteredRouter } from './router'
import type {
AnyContext,
AnyRoute as AnyCoreRoute,
AnyPathParams,
AnyRouter,
AnyValidator,
Constrain,
ConstrainLiteral,
FileRoutesByPath,
ResolveParams,
RouteById,
Expand Down Expand Up @@ -175,7 +178,7 @@ export type LazyRouteOptions = Pick<
'component' | 'errorComponent' | 'pendingComponent' | 'notFoundComponent'
>

export class LazyRoute<TRoute extends AnyRoute> {
export class LazyRoute<TRoute extends AnyCoreRoute> {
options: {
id: string
} & LazyRouteOptions
Expand Down Expand Up @@ -236,11 +239,15 @@ export class LazyRoute<TRoute extends AnyRoute> {
}

export function createLazyRoute<
TId extends RouteIds<RegisteredRouter['routeTree']>,
TRoute extends AnyRoute = RouteById<RegisteredRouter['routeTree'], TId>,
>(id: TId) {
TRouter extends AnyRouter = RegisteredRouter,
TId extends string = string,
TRoute extends AnyCoreRoute = RouteById<TRouter['routeTree'], TId>,
>(id: ConstrainLiteral<TId, RouteIds<TRouter['routeTree']>>) {
return (opts: LazyRouteOptions) => {
return new LazyRoute<TRoute>({ id: id as any, ...opts })
return new LazyRoute<TRoute>({
id: id,
...opts,
})
}
}

Expand Down
6 changes: 4 additions & 2 deletions packages/react-router/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,10 @@ export type {
AnyRouterWithContext,
CommitLocationOptions,
MatchLocation,
UseNavigateResult,
AnyRedirect,
Redirect,
ResolvedRedirect,
} from '@tanstack/router-core'
export type {
UseLinkPropsOptions,
Expand Down Expand Up @@ -232,7 +236,6 @@ export { useLoaderDeps } from './useLoaderDeps'
export { useLoaderData } from './useLoaderData'

export { redirect, isRedirect } from './redirects'
export type { AnyRedirect, Redirect, ResolvedRedirect } from './redirects'

export {
RouteApi,
Expand Down Expand Up @@ -310,7 +313,6 @@ export type { UseBlockerOpts, ShouldBlockFn } from './useBlocker'
export { useBlocker, Block } from './useBlocker'

export { useNavigate, Navigate } from './useNavigate'
export type { UseNavigateResult } from './useNavigate'

export { useParams } from './useParams'
export { useSearch } from './useSearch'
Expand Down
40 changes: 4 additions & 36 deletions packages/react-router/src/redirects.ts
Original file line number Diff line number Diff line change
@@ -1,41 +1,9 @@
import type { AnyRouter, RegisteredRouter } from './router'
import type {
NavigateOptions,
PickAsRequired,
RoutePaths,
AnyRedirect,
Redirect,
ResolvedRedirect,
} from '@tanstack/router-core'

export type AnyRedirect = Redirect<any, any, any, any, any>

export type Redirect<
TRouter extends AnyRouter = RegisteredRouter,
TFrom extends RoutePaths<TRouter['routeTree']> | string = '/',
TTo extends string | undefined = '.',
TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
TMaskTo extends string = '.',
> = {
href?: string
/**
* @deprecated Use `statusCode` instead
**/
code?: number
statusCode?: number
throw?: any
headers?: HeadersInit
} & NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>

export type ResolvedRedirect<
TRouter extends AnyRouter = RegisteredRouter,
TFrom extends RoutePaths<TRouter['routeTree']> = '/',
TTo extends string = '',
TMaskFrom extends RoutePaths<TRouter['routeTree']> = TFrom,
TMaskTo extends string = '',
> = PickAsRequired<
Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
'code' | 'statusCode' | 'headers'
> & {
href: string
}
import type { RegisteredRouter } from './router'

export function redirect<
TRouter extends RegisteredRouter,
Expand Down
3 changes: 1 addition & 2 deletions packages/react-router/src/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,14 @@ import type {
ToMaskOptions,
TrimPathRight,
UpdatableStaticRouteOption,
UseNavigateResult,
} from '@tanstack/router-core'
import type { UseLoaderDataRoute } from './useLoaderData'
import type { UseMatchRoute } from './useMatch'
import type { UseLoaderDepsRoute } from './useLoaderDeps'
import type { UseParamsRoute } from './useParams'
import type { UseSearchRoute } from './useSearch'
import type * as React from 'react'
import type { UseNavigateResult } from './useNavigate'
import type {
AnyRouteMatch,
MakeRouteMatchFromRoute,
Expand All @@ -68,7 +68,6 @@ import type {
import type { AnyRouter, RegisteredRouter, Router } from './router'
import type { NotFoundError } from './not-found'
import type { LazyRoute } from './fileRoute'

import type { UseRouteContextRoute } from './useRouteContext'

export type RouteOptions<
Expand Down
3 changes: 2 additions & 1 deletion packages/react-router/src/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import type { NoInfer } from '@tanstack/react-store'

import type {
AnyContext,
AnyRedirect,
AnySchema,
AnyValidator,
BuildLocationFn,
Expand All @@ -56,6 +57,7 @@ import type {
PickAsRequired,
Register,
ResolveRelativePath,
ResolvedRedirect,
RouteById,
RoutePaths,
RoutesById,
Expand Down Expand Up @@ -88,7 +90,6 @@ import type {
MatchRouteOptions,
} from './Matches'

import type { AnyRedirect, ResolvedRedirect } from './redirects'
import type { NotFoundError } from './not-found'

declare global {
Expand Down
9 changes: 6 additions & 3 deletions packages/react-router/src/typePrimitives.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,18 @@ import type {
FromPathOption,
NavigateOptions,
PathParamOptions,
Redirect,
RouteIds,
SearchParamOptions,
ToPathOption,
UseParamsResult,
UseSearchResult,
} from '@tanstack/router-core'
import type { LinkComponentProps } from './link'
import type { Redirect } from './redirects'
import type { AnyRouter, RegisteredRouter } from './router'
import type { UseParamsOptions, UseParamsResult } from './useParams'
import type { UseSearchOptions, UseSearchResult } from './useSearch'

import type { UseParamsOptions } from './useParams'
import type { UseSearchOptions } from './useSearch'

export type ValidateFromPath<
TRouter extends AnyRouter = RegisteredRouter,
Expand Down
26 changes: 6 additions & 20 deletions packages/react-router/src/useLoaderData.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ import type {
ValidateSelected,
} from './structuralSharing'
import type { AnyRouter, RegisteredRouter } from './router'
import type { AllLoaderData, Expand, RouteById } from '@tanstack/router-core'
import type { StrictOrFrom } from './utils'
import type {
ResolveUseLoaderData,
StrictOrFrom,
UseLoaderDataResult,
} from '@tanstack/router-core'

export interface UseLoaderDataBaseOptions<
TRouter extends AnyRouter,
Expand All @@ -15,7 +18,7 @@ export interface UseLoaderDataBaseOptions<
TStructuralSharing,
> {
select?: (
match: ResolveLoaderData<TRouter, TFrom, TStrict>,
match: ResolveUseLoaderData<TRouter, TFrom, TStrict>,
) => ValidateSelected<TRouter, TSelected, TStructuralSharing>
}

Expand All @@ -35,23 +38,6 @@ export type UseLoaderDataOptions<
> &
StructuralSharingOption<TRouter, TSelected, TStructuralSharing>

export type ResolveLoaderData<
TRouter extends AnyRouter,
TFrom,
TStrict extends boolean,
> = TStrict extends false
? AllLoaderData<TRouter['routeTree']>
: Expand<RouteById<TRouter['routeTree'], TFrom>['types']['loaderData']>

export type UseLoaderDataResult<
TRouter extends AnyRouter,
TFrom,
TStrict extends boolean,
TSelected,
> = unknown extends TSelected
? ResolveLoaderData<TRouter, TFrom, TStrict>
: TSelected

export type UseLoaderDataRoute<out TId> = <
TRouter extends AnyRouter = RegisteredRouter,
TSelected = unknown,
Expand Down
19 changes: 6 additions & 13 deletions packages/react-router/src/useLoaderDeps.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ import type {
ValidateSelected,
} from './structuralSharing'
import type { AnyRouter, RegisteredRouter } from './router'
import type { StrictOrFrom } from './utils'
import type { Expand, RouteById } from '@tanstack/router-core'
import type {
ResolveUseLoaderDeps,
StrictOrFrom,
UseLoaderDepsResult,
} from '@tanstack/router-core'

export interface UseLoaderDepsBaseOptions<
TRouter extends AnyRouter,
Expand All @@ -14,7 +17,7 @@ export interface UseLoaderDepsBaseOptions<
TStructuralSharing,
> {
select?: (
deps: ResolveLoaderDeps<TRouter, TFrom>,
deps: ResolveUseLoaderDeps<TRouter, TFrom>,
) => ValidateSelected<TRouter, TSelected, TStructuralSharing>
}

Expand All @@ -27,16 +30,6 @@ export type UseLoaderDepsOptions<
UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected, TStructuralSharing> &
StructuralSharingOption<TRouter, TSelected, TStructuralSharing>

export type ResolveLoaderDeps<TRouter extends AnyRouter, TFrom> = Expand<
RouteById<TRouter['routeTree'], TFrom>['types']['loaderDeps']
>

export type UseLoaderDepsResult<
TRouter extends AnyRouter,
TFrom,
TSelected,
> = unknown extends TSelected ? ResolveLoaderDeps<TRouter, TFrom> : TSelected

export type UseLoaderDepsRoute<out TId> = <
TRouter extends AnyRouter = RegisteredRouter,
TSelected = unknown,
Expand Down
3 changes: 1 addition & 2 deletions packages/react-router/src/useMatch.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ import type {
} from './structuralSharing'
import type { AnyRouter, RegisteredRouter } from './router'
import type { MakeRouteMatch, MakeRouteMatchUnion } from './Matches'
import type { StrictOrFrom } from './utils'
import type { ThrowOrOptional } from '@tanstack/router-core'
import type { StrictOrFrom, ThrowOrOptional } from '@tanstack/router-core'

export interface UseMatchBaseOptions<
TRouter extends AnyRouter,
Expand Down
17 changes: 5 additions & 12 deletions packages/react-router/src/useNavigate.tsx
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
import * as React from 'react'
import { useRouter } from './useRouter'
import type { FromPathOption, NavigateOptions } from '@tanstack/router-core'
import type {
FromPathOption,
NavigateOptions,
UseNavigateResult,
} from '@tanstack/router-core'
import type { AnyRouter, RegisteredRouter } from './router'

export type UseNavigateResult<TDefaultFrom extends string> = <
TRouter extends RegisteredRouter,
TTo extends string | undefined,
TFrom extends string = TDefaultFrom,
TMaskFrom extends string = TFrom,
TMaskTo extends string = '',
>({
from,
...rest
}: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<void>

export function useNavigate<
TRouter extends AnyRouter = RegisteredRouter,
TDefaultFrom extends string = string,
Expand Down
26 changes: 4 additions & 22 deletions packages/react-router/src/useParams.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@ import type {
ValidateSelected,
} from './structuralSharing'
import type { AnyRouter, RegisteredRouter } from './router'
import type { StrictOrFrom } from './utils'
import type {
AllParams,
Expand,
RouteById,
ResolveUseParams,
StrictOrFrom,
ThrowOrOptional,
UseParamsResult,
} from '@tanstack/router-core'

export interface UseParamsBaseOptions<
Expand All @@ -22,7 +21,7 @@ export interface UseParamsBaseOptions<
TStructuralSharing,
> {
select?: (
params: ResolveParams<TRouter, TFrom, TStrict>,
params: ResolveUseParams<TRouter, TFrom, TStrict>,
) => ValidateSelected<TRouter, TSelected, TStructuralSharing>
shouldThrow?: TThrow
}
Expand All @@ -45,23 +44,6 @@ export type UseParamsOptions<
> &
StructuralSharingOption<TRouter, TSelected, TStructuralSharing>

export type ResolveParams<
TRouter extends AnyRouter,
TFrom,
TStrict extends boolean,
> = TStrict extends false
? AllParams<TRouter['routeTree']>
: Expand<RouteById<TRouter['routeTree'], TFrom>['types']['allParams']>

export type UseParamsResult<
TRouter extends AnyRouter,
TFrom,
TStrict extends boolean,
TSelected,
> = unknown extends TSelected
? ResolveParams<TRouter, TFrom, TStrict>
: TSelected

export type UseParamsRoute<out TFrom> = <
TRouter extends AnyRouter = RegisteredRouter,
TSelected = unknown,
Expand Down
Loading