@tanstack/react-router 1.2.6 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { Trim } from './fileRoute';
3
3
  import { AnyRoute, ReactNode, RootSearchSchema } from './route';
4
- import { RouteByPath, RouteIds, RoutePaths } from './routeInfo';
4
+ import { RouteByPath, RoutePaths } from './routeInfo';
5
5
  import { RegisteredRouter } from './router';
6
6
  import { LinkProps, UseLinkPropsOptions } from './useNavigate';
7
7
  import { Expand, NoInfer, NonNullableUpdater, PickRequired, Updater, WithoutEmpty } from './utils';
@@ -56,7 +56,6 @@ type MakePathParamOptions<T> = {
56
56
  export type SearchParamOptions<TRouteTree extends AnyRoute, TFrom, TTo extends string, TResolved> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'SEARCH'>;
57
57
  export type PathParamOptions<TRouteTree extends AnyRoute, TFrom, TTo extends string, TResolved> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'PATH'>;
58
58
  export type ToPathOption<TRouteTree extends AnyRoute = AnyRoute, TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string = ''> = TTo | RelativeToPathAutoComplete<RoutePaths<TRouteTree>, NoInfer<TFrom> extends string ? NoInfer<TFrom> : '', NoInfer<TTo> & string>;
59
- export type ToIdOption<TRouteTree extends AnyRoute = AnyRoute, TFrom extends RoutePaths<TRouteTree> | undefined = undefined, TTo extends string = ''> = TTo | RelativeToPathAutoComplete<RouteIds<TRouteTree>, NoInfer<TFrom> extends string ? NoInfer<TFrom> : '', NoInfer<TTo> & string>;
60
59
  export interface ActiveOptions {
61
60
  exact?: boolean;
62
61
  includeHash?: boolean;
@@ -69,19 +68,10 @@ export type LinkOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTre
69
68
  preloadDelay?: number;
70
69
  disabled?: boolean;
71
70
  };
72
- export type CheckRelativePath<TRouteTree extends AnyRoute, TFrom, TTo> = TTo extends string ? TFrom extends string ? ResolveRelativePath<TFrom, TTo> extends RoutePaths<TRouteTree> ? {} : {
73
- Error: `${TFrom} + ${TTo} resolves to ${ResolveRelativePath<TFrom, TTo>}, which is not a valid route path.`;
74
- 'Valid Route Paths': RoutePaths<TRouteTree>;
75
- } : {} : {};
76
71
  export type CheckPath<TRouteTree extends AnyRoute, TPath, TPass> = Exclude<TPath, RoutePaths<TRouteTree>> extends never ? TPass : CheckPathError<TRouteTree, Exclude<TPath, RoutePaths<TRouteTree>>>;
77
72
  export type CheckPathError<TRouteTree extends AnyRoute, TInvalids> = {
78
73
  to: RoutePaths<TRouteTree>;
79
74
  };
80
- export type CheckId<TRouteTree extends AnyRoute, TPath, TPass> = Exclude<TPath, RouteIds<TRouteTree>> extends never ? TPass : CheckIdError<TRouteTree, Exclude<TPath, RouteIds<TRouteTree>>>;
81
- export type CheckIdError<TRouteTree extends AnyRoute, TInvalids> = {
82
- Error: `${TInvalids extends string ? TInvalids : never} is not a valid route ID.`;
83
- 'Valid Route IDs': RouteIds<TRouteTree>;
84
- };
85
75
  export type ResolveRelativePath<TFrom, TTo = '.'> = TFrom extends string ? TTo extends string ? TTo extends '.' ? TFrom : TTo extends `./` ? Join<[TFrom, '/']> : TTo extends `./${infer TRest}` ? ResolveRelativePath<TFrom, TRest> : TTo extends `/${infer TRest}` ? TTo : Split<TTo> extends ['..', ...infer ToRest] ? Split<TFrom> extends [...infer FromRest, infer FromTail] ? ToRest extends ['/'] ? Join<[...FromRest, '/']> : ResolveRelativePath<Join<FromRest>, Join<ToRest>> : never : Split<TTo> extends ['.', ...infer ToRest] ? ToRest extends ['/'] ? Join<[TFrom, '/']> : ResolveRelativePath<TFrom, Join<ToRest>> : CleanPath<Join<['/', ...Split<TFrom>, ...Split<TTo>]>> : never : never;
86
76
  export declare function useLinkProps<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string = ''>(options: UseLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): React.AnchorHTMLAttributes<HTMLAnchorElement>;
87
77
  export interface LinkComponent<TProps extends Record<string, any> = {}> {
@@ -1,17 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { AnyRoute } from './route';
3
- import { ParseRoute, RouteIds, RoutesById, RouteById } from './routeInfo';
3
+ import { RouteIds, RouteById } from './routeInfo';
4
4
  import { RegisteredRouter } from './router';
5
5
  export type NoInfer<T> = [T][T extends any ? 0 : never];
6
6
  export type IsAny<T, Y, N = T> = 1 extends 0 & T ? Y : N;
7
- export type IsAnyBoolean<T> = 1 extends 0 & T ? true : false;
8
- export type IsKnown<T, Y, N> = unknown extends T ? N : Y;
9
7
  export type PickAsRequired<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
10
- export type PickAsPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
11
- export type PickUnsafe<T, K> = K extends keyof T ? Pick<T, K> : never;
12
- export type PickExtra<T, K> = {
13
- [TKey in keyof K as string extends TKey ? never : TKey extends keyof T ? never : TKey]: K[TKey];
14
- };
15
8
  export type PickRequired<T> = {
16
9
  [K in keyof T as undefined extends T[K] ? never : K]: T[K];
17
10
  };
@@ -22,21 +15,9 @@ export type Expand<T> = T extends object ? T extends infer O ? {
22
15
  export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => any ? I : never;
23
16
  export type Assign<Left, Right> = Omit<Left, keyof Right> & Right;
24
17
  export type AssignAll<T extends any[]> = T extends [infer Left, ...infer Right] ? Right extends any[] ? Assign<Left, AssignAll<Right>> : Left : {};
25
- export type Values<O> = O[ValueKeys<O>];
26
- export type ValueKeys<O> = Extract<keyof O, PropertyKey>;
27
- export type DeepAwaited<T> = T extends Promise<infer A> ? DeepAwaited<A> : T extends Record<infer A, Promise<infer B>> ? {
28
- [K in A]: DeepAwaited<B>;
29
- } : T;
30
- export type PathParamMask<TRoutePath extends string> = TRoutePath extends `${infer L}/$${infer C}/${infer R}` ? PathParamMask<`${L}/${string}/${R}`> : TRoutePath extends `${infer L}/$${infer C}` ? PathParamMask<`${L}/${string}`> : TRoutePath;
31
18
  export type Timeout = ReturnType<typeof setTimeout>;
32
19
  export type Updater<TPrevious, TResult = TPrevious> = TResult | ((prev?: TPrevious) => TResult);
33
20
  export type NonNullableUpdater<TPrevious, TResult = TPrevious> = TResult | ((prev: TPrevious) => TResult);
34
- export type PickExtract<T, U> = {
35
- [K in keyof T as T[K] extends U ? K : never]: T[K];
36
- };
37
- export type PickExclude<T, U> = {
38
- [K in keyof T as T[K] extends U ? never : K]: T[K];
39
- };
40
21
  type LastInUnion<U> = UnionToIntersection<U extends unknown ? (x: U) => 0 : never> extends (x: infer L) => 0 ? L : never;
41
22
  export type UnionToTuple<U, Last = LastInUnion<U>> = [U] extends [never] ? [] : [...UnionToTuple<Exclude<U, Last>>, Last];
42
23
  export declare const isServer: boolean;
@@ -61,7 +42,6 @@ export type StrictOrFrom<TFrom> = {
61
42
  from?: never;
62
43
  strict: false;
63
44
  };
64
- export type RouteFromIdOrRoute<T, TRouteTree extends AnyRoute = RegisteredRouter['routeTree']> = T extends ParseRoute<TRouteTree> ? T : T extends RouteIds<TRouteTree> ? RoutesById<TRouteTree>[T] : T extends string ? RouteIds<TRouteTree> : never;
65
45
  export declare function useRouteContext<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>, TStrict extends boolean = true, TRouteContext = RouteById<TRouteTree, TFrom>['types']['allContext'], TSelected = TRouteContext>(opts: StrictOrFrom<TFrom> & {
66
46
  select?: (search: TRouteContext) => TSelected;
67
47
  }): TStrict extends true ? TSelected : TSelected | undefined;
@@ -1485,6 +1485,104 @@
1485
1485
 
1486
1486
  // The parse type here allows a zod schema to be passed directly to the validator
1487
1487
 
1488
+ // TODO: This is part of a future APi to move away from classes and
1489
+ // towards a more functional API. It's not ready yet.
1490
+
1491
+ // type RouteApiInstance<
1492
+ // TId extends RouteIds<RegisteredRouter['routeTree']>,
1493
+ // TRoute extends AnyRoute = RouteById<RegisteredRouter['routeTree'], TId>,
1494
+ // TFullSearchSchema extends Record<
1495
+ // string,
1496
+ // any
1497
+ // > = TRoute['types']['fullSearchSchema'],
1498
+ // TAllParams extends AnyPathParams = TRoute['types']['allParams'],
1499
+ // TAllContext extends Record<string, any> = TRoute['types']['allContext'],
1500
+ // TLoaderDeps extends Record<string, any> = TRoute['types']['loaderDeps'],
1501
+ // TLoaderData extends any = TRoute['types']['loaderData'],
1502
+ // > = {
1503
+ // id: TId
1504
+ // useMatch: <TSelected = TAllContext>(opts?: {
1505
+ // select?: (s: TAllContext) => TSelected
1506
+ // }) => TSelected
1507
+
1508
+ // useRouteContext: <TSelected = TAllContext>(opts?: {
1509
+ // select?: (s: TAllContext) => TSelected
1510
+ // }) => TSelected
1511
+
1512
+ // useSearch: <TSelected = TFullSearchSchema>(opts?: {
1513
+ // select?: (s: TFullSearchSchema) => TSelected
1514
+ // }) => TSelected
1515
+
1516
+ // useParams: <TSelected = TAllParams>(opts?: {
1517
+ // select?: (s: TAllParams) => TSelected
1518
+ // }) => TSelected
1519
+
1520
+ // useLoaderDeps: <TSelected = TLoaderDeps>(opts?: {
1521
+ // select?: (s: TLoaderDeps) => TSelected
1522
+ // }) => TSelected
1523
+
1524
+ // useLoaderData: <TSelected = TLoaderData>(opts?: {
1525
+ // select?: (s: TLoaderData) => TSelected
1526
+ // }) => TSelected
1527
+ // }
1528
+
1529
+ // export function RouteApi_v2<
1530
+ // TId extends RouteIds<RegisteredRouter['routeTree']>,
1531
+ // TRoute extends AnyRoute = RouteById<RegisteredRouter['routeTree'], TId>,
1532
+ // TFullSearchSchema extends Record<
1533
+ // string,
1534
+ // any
1535
+ // > = TRoute['types']['fullSearchSchema'],
1536
+ // TAllParams extends AnyPathParams = TRoute['types']['allParams'],
1537
+ // TAllContext extends Record<string, any> = TRoute['types']['allContext'],
1538
+ // TLoaderDeps extends Record<string, any> = TRoute['types']['loaderDeps'],
1539
+ // TLoaderData extends any = TRoute['types']['loaderData'],
1540
+ // >({
1541
+ // id,
1542
+ // }: {
1543
+ // id: TId
1544
+ // }): RouteApiInstance<
1545
+ // TId,
1546
+ // TRoute,
1547
+ // TFullSearchSchema,
1548
+ // TAllParams,
1549
+ // TAllContext,
1550
+ // TLoaderDeps,
1551
+ // TLoaderData
1552
+ // > {
1553
+ // return {
1554
+ // id,
1555
+
1556
+ // useMatch: (opts) => {
1557
+ // return useMatch({ ...opts, from: id })
1558
+ // },
1559
+
1560
+ // useRouteContext: (opts) => {
1561
+ // return useMatch({
1562
+ // ...opts,
1563
+ // from: id,
1564
+ // select: (d: any) => (opts?.select ? opts.select(d.context) : d.context),
1565
+ // } as any)
1566
+ // },
1567
+
1568
+ // useSearch: (opts) => {
1569
+ // return useSearch({ ...opts, from: id } as any)
1570
+ // },
1571
+
1572
+ // useParams: (opts) => {
1573
+ // return useParams({ ...opts, from: id } as any)
1574
+ // },
1575
+
1576
+ // useLoaderDeps: (opts) => {
1577
+ // return useLoaderDeps({ ...opts, from: id } as any) as any
1578
+ // },
1579
+
1580
+ // useLoaderData: (opts) => {
1581
+ // return useLoaderData({ ...opts, from: id } as any) as any
1582
+ // },
1583
+ // }
1584
+ // }
1585
+
1488
1586
  class RouteApi {
1489
1587
  constructor({
1490
1588
  id