@tanstack/react-router 1.2.5 → 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.
- package/build/cjs/fileRoute.js.map +1 -1
- package/build/cjs/link.js.map +1 -1
- package/build/cjs/route.js +98 -0
- package/build/cjs/route.js.map +1 -1
- package/build/cjs/router.js +3 -3
- package/build/cjs/router.js.map +1 -1
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +101 -3
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +355 -355
- package/build/types/link.d.ts +1 -11
- package/build/types/utils.d.ts +1 -21
- package/build/umd/index.development.js +101 -3
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -2
- package/src/fileRoute.ts +0 -1
- package/src/link.tsx +0 -47
- package/src/route.ts +98 -0
- package/src/router.ts +3 -4
- package/src/utils.ts +1 -48
package/build/types/link.d.ts
CHANGED
|
@@ -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,
|
|
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> = {}> {
|
package/build/types/utils.d.ts
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { AnyRoute } from './route';
|
|
3
|
-
import {
|
|
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
|
|
@@ -2436,11 +2534,11 @@
|
|
|
2436
2534
|
return false;
|
|
2437
2535
|
});
|
|
2438
2536
|
if (foundMask) {
|
|
2439
|
-
|
|
2537
|
+
maskedDest = {
|
|
2538
|
+
...pick(opts, ['from']),
|
|
2440
2539
|
...foundMask,
|
|
2441
|
-
|
|
2540
|
+
params
|
|
2442
2541
|
};
|
|
2443
|
-
maskedDest = foundMask;
|
|
2444
2542
|
maskedNext = build(maskedDest);
|
|
2445
2543
|
}
|
|
2446
2544
|
}
|