@tanstack/react-router 1.53.1 → 1.56.1

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.
Files changed (81) hide show
  1. package/dist/cjs/Matches.cjs.map +1 -1
  2. package/dist/cjs/Matches.d.cts +2 -2
  3. package/dist/cjs/RouterProvider.cjs.map +1 -1
  4. package/dist/cjs/RouterProvider.d.cts +2 -2
  5. package/dist/cjs/fileRoute.cjs.map +1 -1
  6. package/dist/cjs/fileRoute.d.cts +10 -1
  7. package/dist/cjs/index.d.cts +3 -3
  8. package/dist/cjs/link.cjs.map +1 -1
  9. package/dist/cjs/link.d.cts +22 -21
  10. package/dist/cjs/redirects.cjs.map +1 -1
  11. package/dist/cjs/redirects.d.cts +2 -2
  12. package/dist/cjs/route.cjs +18 -2
  13. package/dist/cjs/route.cjs.map +1 -1
  14. package/dist/cjs/route.d.cts +8 -5
  15. package/dist/cjs/routeInfo.d.cts +32 -21
  16. package/dist/cjs/router.cjs +4 -1
  17. package/dist/cjs/router.cjs.map +1 -1
  18. package/dist/cjs/router.d.cts +2 -2
  19. package/dist/cjs/useLoaderData.cjs.map +1 -1
  20. package/dist/cjs/useLoaderData.d.cts +3 -3
  21. package/dist/cjs/useLoaderDeps.cjs.map +1 -1
  22. package/dist/cjs/useLoaderDeps.d.cts +2 -2
  23. package/dist/cjs/useMatch.cjs.map +1 -1
  24. package/dist/cjs/useMatch.d.cts +2 -2
  25. package/dist/cjs/useNavigate.cjs.map +1 -1
  26. package/dist/cjs/useNavigate.d.cts +2 -2
  27. package/dist/cjs/useParams.cjs.map +1 -1
  28. package/dist/cjs/useParams.d.cts +2 -2
  29. package/dist/cjs/useRouteContext.cjs.map +1 -1
  30. package/dist/cjs/useRouteContext.d.cts +2 -2
  31. package/dist/cjs/useSearch.cjs.map +1 -1
  32. package/dist/cjs/useSearch.d.cts +2 -2
  33. package/dist/esm/Matches.d.ts +2 -2
  34. package/dist/esm/Matches.js.map +1 -1
  35. package/dist/esm/RouterProvider.d.ts +2 -2
  36. package/dist/esm/RouterProvider.js.map +1 -1
  37. package/dist/esm/fileRoute.d.ts +10 -1
  38. package/dist/esm/fileRoute.js.map +1 -1
  39. package/dist/esm/index.d.ts +3 -3
  40. package/dist/esm/link.d.ts +22 -21
  41. package/dist/esm/link.js.map +1 -1
  42. package/dist/esm/redirects.d.ts +2 -2
  43. package/dist/esm/redirects.js.map +1 -1
  44. package/dist/esm/route.d.ts +8 -5
  45. package/dist/esm/route.js +18 -2
  46. package/dist/esm/route.js.map +1 -1
  47. package/dist/esm/routeInfo.d.ts +32 -21
  48. package/dist/esm/router.d.ts +2 -2
  49. package/dist/esm/router.js +4 -1
  50. package/dist/esm/router.js.map +1 -1
  51. package/dist/esm/useLoaderData.d.ts +3 -3
  52. package/dist/esm/useLoaderData.js.map +1 -1
  53. package/dist/esm/useLoaderDeps.d.ts +2 -2
  54. package/dist/esm/useLoaderDeps.js.map +1 -1
  55. package/dist/esm/useMatch.d.ts +2 -2
  56. package/dist/esm/useMatch.js.map +1 -1
  57. package/dist/esm/useNavigate.d.ts +2 -2
  58. package/dist/esm/useNavigate.js.map +1 -1
  59. package/dist/esm/useParams.d.ts +2 -2
  60. package/dist/esm/useParams.js.map +1 -1
  61. package/dist/esm/useRouteContext.d.ts +2 -2
  62. package/dist/esm/useRouteContext.js.map +1 -1
  63. package/dist/esm/useSearch.d.ts +2 -2
  64. package/dist/esm/useSearch.js.map +1 -1
  65. package/package.json +1 -1
  66. package/src/Matches.tsx +15 -22
  67. package/src/RouterProvider.tsx +4 -4
  68. package/src/fileRoute.ts +25 -1
  69. package/src/index.tsx +10 -1
  70. package/src/link.tsx +81 -76
  71. package/src/redirects.ts +8 -8
  72. package/src/route.ts +98 -9
  73. package/src/routeInfo.ts +116 -38
  74. package/src/router.ts +9 -5
  75. package/src/useLoaderData.tsx +3 -3
  76. package/src/useLoaderDeps.tsx +3 -3
  77. package/src/useMatch.tsx +9 -3
  78. package/src/useNavigate.tsx +5 -5
  79. package/src/useParams.tsx +10 -3
  80. package/src/useRouteContext.ts +8 -3
  81. package/src/useSearch.tsx +11 -4
package/src/link.tsx CHANGED
@@ -97,6 +97,8 @@ export type Last<T extends Array<any>> = T extends [...infer _, infer L]
97
97
  ? L
98
98
  : never
99
99
 
100
+ export type AddTrailingSlash<T> = T extends `${string}/` ? T : `${T & string}/`
101
+
100
102
  export type RemoveTrailingSlashes<T> = T extends `${infer R}/` ? R : T
101
103
 
102
104
  export type RemoveLeadingSlashes<T> = T extends `/${infer R}` ? R : T
@@ -116,15 +118,14 @@ export type SearchPaths<
116
118
  TRouter extends AnyRouter,
117
119
  TSearchPath extends string,
118
120
  TPaths = ResolvePaths<TRouter, TSearchPath>,
119
- > = TPaths extends `${RemoveTrailingSlashes<TSearchPath>}${infer TRest}`
120
- ? TRest
121
- : never
121
+ TPrefix extends string = `${RemoveTrailingSlashes<TSearchPath>}/`,
122
+ > = TPaths extends `${TPrefix}${infer TRest}` ? TRest : never
122
123
 
123
124
  export type SearchRelativePathAutoComplete<
124
125
  TRouter extends AnyRouter,
125
126
  TTo extends string,
126
127
  TSearchPath extends string,
127
- > = `${TTo}${SearchPaths<TRouter, TSearchPath>}`
128
+ > = `${TTo}/${SearchPaths<TRouter, TSearchPath>}`
128
129
 
129
130
  export type RelativeToParentPathAutoComplete<
130
131
  TRouter extends AnyRouter,
@@ -144,7 +145,9 @@ export type RelativeToCurrentPathAutoComplete<
144
145
  TFrom extends string,
145
146
  TTo extends string,
146
147
  TResolvedPath extends string = ResolveRelativePath<TFrom, TTo>,
147
- > = SearchRelativePathAutoComplete<TRouter, TTo, TResolvedPath>
148
+ > =
149
+ | SearchRelativePathAutoComplete<TRouter, TTo, TResolvedPath>
150
+ | CurrentPath<TrailingSlashOptionByRouter<TRouter>>
148
151
 
149
152
  export type AbsolutePathAutoComplete<
150
153
  TRouter extends AnyRouter,
@@ -173,22 +176,28 @@ export type RelativeToPathAutoComplete<
173
176
  TRouter extends AnyRouter,
174
177
  TFrom extends string,
175
178
  TTo extends string,
176
- > = TTo extends `..${string}`
177
- ? RelativeToParentPathAutoComplete<TRouter, TFrom, RemoveTrailingSlashes<TTo>>
178
- : TTo extends `.${string}`
179
- ? RelativeToCurrentPathAutoComplete<
179
+ > = string extends TFrom
180
+ ? AbsolutePathAutoComplete<TRouter, TFrom>
181
+ : TTo extends `..${string}`
182
+ ? RelativeToParentPathAutoComplete<
180
183
  TRouter,
181
184
  TFrom,
182
185
  RemoveTrailingSlashes<TTo>
183
186
  >
184
- : AbsolutePathAutoComplete<TRouter, TFrom>
187
+ : TTo extends `.${string}`
188
+ ? RelativeToCurrentPathAutoComplete<
189
+ TRouter,
190
+ TFrom,
191
+ RemoveTrailingSlashes<TTo>
192
+ >
193
+ : AbsolutePathAutoComplete<TRouter, TFrom>
185
194
 
186
195
  export type NavigateOptions<
187
196
  TRouter extends AnyRouter = RegisteredRouter,
188
- TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
189
- TTo extends string = '',
190
- TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
191
- TMaskTo extends string = '',
197
+ TFrom extends string = string,
198
+ TTo extends string | undefined = '.',
199
+ TMaskFrom extends string = TFrom,
200
+ TMaskTo extends string = '.',
192
201
  > = ToOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & NavigateOptionProps
193
202
 
194
203
  export interface NavigateOptionProps {
@@ -204,15 +213,15 @@ export interface NavigateOptionProps {
204
213
 
205
214
  export type ToOptions<
206
215
  TRouter extends AnyRouter = RegisteredRouter,
207
- TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
208
- TTo extends string = '',
209
- TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
210
- TMaskTo extends string = '',
216
+ TFrom extends string = string,
217
+ TTo extends string | undefined = '.',
218
+ TMaskFrom extends string = TFrom,
219
+ TMaskTo extends string = '.',
211
220
  > = ToSubOptions<TRouter, TFrom, TTo> & MaskOptions<TRouter, TMaskFrom, TMaskTo>
212
221
 
213
222
  export interface MaskOptions<
214
223
  in out TRouter extends AnyRouter,
215
- in out TMaskFrom extends RoutePaths<TRouter['routeTree']> | string,
224
+ in out TMaskFrom extends string,
216
225
  in out TMaskTo extends string,
217
226
  > {
218
227
  _fromLocation?: ParsedLocation
@@ -221,16 +230,16 @@ export interface MaskOptions<
221
230
 
222
231
  export type ToMaskOptions<
223
232
  TRouteTree extends AnyRouter = RegisteredRouter,
224
- TMaskFrom extends RoutePaths<TRouteTree['routeTree']> | string = string,
225
- TMaskTo extends string = '',
233
+ TMaskFrom extends string = string,
234
+ TMaskTo extends string = '.',
226
235
  > = ToSubOptions<TRouteTree, TMaskFrom, TMaskTo> & {
227
236
  unmaskOnReload?: boolean
228
237
  }
229
238
 
230
239
  export type ToSubOptions<
231
240
  TRouter extends AnyRouter = RegisteredRouter,
232
- TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
233
- TTo extends string = '',
241
+ TFrom extends string = string,
242
+ TTo extends string | undefined = '.',
234
243
  > = ToSubOptionsProps<TRouter, TFrom, TTo> &
235
244
  SearchParamOptions<TRouter, TFrom, TTo> &
236
245
  PathParamOptions<TRouter, TFrom, TTo>
@@ -238,7 +247,7 @@ export type ToSubOptions<
238
247
  export interface ToSubOptionsProps<
239
248
  in out TRouter extends AnyRouter = RegisteredRouter,
240
249
  in out TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
241
- in out TTo extends string = '',
250
+ in out TTo extends string | undefined = '.',
242
251
  > {
243
252
  to?: ToPathOption<TRouter, TFrom, TTo> & {}
244
253
  hash?: true | Updater<string>
@@ -316,15 +325,17 @@ export type ResolveToParams<
316
325
  TTo,
317
326
  > =
318
327
  ResolveRelativePath<TFrom, TTo> extends infer TPath
319
- ? string extends TPath
320
- ? ResolveAllToParams<TRouter, TParamVariant>
321
- : TPath extends CatchAllPaths<TrailingSlashOptionByRouter<TRouter>>
328
+ ? undefined extends TPath
329
+ ? never
330
+ : string extends TPath
322
331
  ? ResolveAllToParams<TRouter, TParamVariant>
323
- : ResolveRoute<
324
- TRouter,
325
- TFrom,
326
- TTo
327
- >['types'][ResolveToParamType<TParamVariant>]
332
+ : TPath extends CatchAllPaths<TrailingSlashOptionByRouter<TRouter>>
333
+ ? ResolveAllToParams<TRouter, TParamVariant>
334
+ : ResolveRoute<
335
+ TRouter,
336
+ TFrom,
337
+ TTo
338
+ >['types'][ResolveToParamType<TParamVariant>]
328
339
  : never
329
340
 
330
341
  type ResolveRelativeToParams<
@@ -410,20 +421,12 @@ export type IsRequired<
410
421
  >
411
422
  : never
412
423
 
413
- export type SearchParamOptions<
414
- TRouter extends AnyRouter,
415
- TFrom,
416
- TTo extends string,
417
- > =
424
+ export type SearchParamOptions<TRouter extends AnyRouter, TFrom, TTo> =
418
425
  IsRequired<TRouter, 'SEARCH', TFrom, TTo> extends never
419
426
  ? MakeOptionalSearchParams<TRouter, TFrom, TTo>
420
427
  : MakeRequiredSearchParams<TRouter, TFrom, TTo>
421
428
 
422
- export type PathParamOptions<
423
- TRouter extends AnyRouter,
424
- TFrom,
425
- TTo extends string,
426
- > =
429
+ export type PathParamOptions<TRouter extends AnyRouter, TFrom, TTo> =
427
430
  IsRequired<TRouter, 'PATH', TFrom, TTo> extends never
428
431
  ? MakeOptionalPathParams<TRouter, TFrom, TTo>
429
432
  : MakeRequiredPathParams<TRouter, TFrom, TTo>
@@ -431,7 +434,7 @@ export type PathParamOptions<
431
434
  export type ToPathOption<
432
435
  TRouter extends AnyRouter = AnyRouter,
433
436
  TFrom extends string = string,
434
- TTo extends string = string,
437
+ TTo extends string | undefined = string,
435
438
  > =
436
439
  | CheckPath<TRouter, TTo, never, TFrom, TTo>
437
440
  | RelativeToPathAutoComplete<
@@ -469,9 +472,9 @@ export interface ActiveOptions {
469
472
  export type LinkOptions<
470
473
  TRouter extends AnyRouter = RegisteredRouter,
471
474
  TFrom extends string = string,
472
- TTo extends string = '',
475
+ TTo extends string | undefined = '.',
473
476
  TMaskFrom extends string = TFrom,
474
- TMaskTo extends string = '',
477
+ TMaskTo extends string = '.',
475
478
  > = NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & LinkOptionsProps
476
479
 
477
480
  export interface LinkOptionsProps {
@@ -519,29 +522,31 @@ export type ResolveRelativePath<TFrom, TTo = '.'> = string extends TFrom
519
522
  ? TTo
520
523
  : string extends TTo
521
524
  ? TFrom
522
- : TFrom extends string
523
- ? TTo extends string
524
- ? TTo extends '.'
525
- ? TFrom
526
- : TTo extends `./`
527
- ? Join<[TFrom, '/']>
528
- : TTo extends `./${infer TRest}`
529
- ? ResolveRelativePath<TFrom, TRest>
530
- : TTo extends `/${infer TRest}`
531
- ? TTo
532
- : Split<TTo> extends ['..', ...infer ToRest]
533
- ? Split<TFrom> extends [...infer FromRest, infer FromTail]
534
- ? ToRest extends ['/']
535
- ? Join<['/', ...FromRest, '/']>
536
- : ResolveRelativePath<Join<FromRest>, Join<ToRest>>
537
- : never
538
- : Split<TTo> extends ['.', ...infer ToRest]
539
- ? ToRest extends ['/']
540
- ? Join<[TFrom, '/']>
541
- : ResolveRelativePath<TFrom, Join<ToRest>>
542
- : CleanPath<Join<['/', ...Split<TFrom>, ...Split<TTo>]>>
525
+ : undefined extends TTo
526
+ ? TFrom
527
+ : TFrom extends string
528
+ ? TTo extends string
529
+ ? TTo extends '.'
530
+ ? TFrom
531
+ : TTo extends `./`
532
+ ? Join<[TFrom, '/']>
533
+ : TTo extends `./${infer TRest}`
534
+ ? ResolveRelativePath<TFrom, TRest>
535
+ : TTo extends `/${infer TRest}`
536
+ ? TTo
537
+ : Split<TTo> extends ['..', ...infer ToRest]
538
+ ? Split<TFrom> extends [...infer FromRest, infer FromTail]
539
+ ? ToRest extends ['/']
540
+ ? Join<['/', ...FromRest, '/']>
541
+ : ResolveRelativePath<Join<FromRest>, Join<ToRest>>
542
+ : never
543
+ : Split<TTo> extends ['.', ...infer ToRest]
544
+ ? ToRest extends ['/']
545
+ ? Join<[TFrom, '/']>
546
+ : ResolveRelativePath<TFrom, Join<ToRest>>
547
+ : CleanPath<Join<['/', ...Split<TFrom>, ...Split<TTo>]>>
548
+ : never
543
549
  : never
544
- : never
545
550
 
546
551
  // type Test1 = ResolveRelativePath<'/', '/posts'>
547
552
  // // ^?
@@ -844,18 +849,18 @@ export function useLinkProps<
844
849
  export type UseLinkPropsOptions<
845
850
  TRouter extends AnyRouter = RegisteredRouter,
846
851
  TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
847
- TTo extends string = '',
852
+ TTo extends string | undefined = '.',
848
853
  TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
849
- TMaskTo extends string = '',
854
+ TMaskTo extends string = '.',
850
855
  > = ActiveLinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &
851
856
  React.AnchorHTMLAttributes<HTMLAnchorElement>
852
857
 
853
858
  export type ActiveLinkOptions<
854
859
  TRouter extends AnyRouter = RegisteredRouter,
855
860
  TFrom extends string = string,
856
- TTo extends string = '',
861
+ TTo extends string | undefined = '.',
857
862
  TMaskFrom extends string = TFrom,
858
- TMaskTo extends string = '',
863
+ TMaskTo extends string = '.',
859
864
  > = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & ActiveLinkOptionProps
860
865
 
861
866
  type ActiveLinkAnchorProps = Omit<
@@ -881,9 +886,9 @@ export interface ActiveLinkOptionProps {
881
886
  export type LinkProps<
882
887
  TRouter extends AnyRouter = RegisteredRouter,
883
888
  TFrom extends string = string,
884
- TTo extends string = '',
889
+ TTo extends string | undefined = '.',
885
890
  TMaskFrom extends string = TFrom,
886
- TMaskTo extends string = '',
891
+ TMaskTo extends string = '.',
887
892
  > = ActiveLinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &
888
893
  LinkPropsChildren
889
894
 
@@ -918,16 +923,16 @@ export type LinkComponentProps<
918
923
  TComp,
919
924
  TRouter extends AnyRouter = RegisteredRouter,
920
925
  TFrom extends string = string,
921
- TTo extends string = '',
926
+ TTo extends string | undefined = '.',
922
927
  TMaskFrom extends string = TFrom,
923
- TMaskTo extends string = '',
928
+ TMaskTo extends string = '.',
924
929
  > = LinkComponentReactProps<TComp> &
925
930
  LinkProps<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>
926
931
 
927
932
  export type LinkComponent<TComp> = <
928
933
  TRouter extends RegisteredRouter = RegisteredRouter,
929
934
  TFrom extends string = string,
930
- TTo extends string = '',
935
+ TTo extends string | undefined = undefined,
931
936
  TMaskFrom extends string = TFrom,
932
937
  TMaskTo extends string = '',
933
938
  >(
package/src/redirects.ts CHANGED
@@ -7,10 +7,10 @@ export type AnyRedirect = Redirect<any, any, any, any, any>
7
7
 
8
8
  export type Redirect<
9
9
  TRouter extends AnyRouter = RegisteredRouter,
10
- TFrom extends RoutePaths<TRouter['routeTree']> = '/',
11
- TTo extends string = '',
12
- TMaskFrom extends RoutePaths<TRouter['routeTree']> = TFrom,
13
- TMaskTo extends string = '',
10
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = '/',
11
+ TTo extends string | undefined = '.',
12
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
13
+ TMaskTo extends string = '.',
14
14
  > = {
15
15
  /**
16
16
  * @deprecated Use `statusCode` instead
@@ -36,10 +36,10 @@ export type ResolvedRedirect<
36
36
  }
37
37
 
38
38
  export function redirect<
39
- TRouter extends AnyRouter = RegisteredRouter,
40
- TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
41
- TTo extends string = '',
42
- TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
39
+ TRouter extends RegisteredRouter,
40
+ TTo extends string | undefined,
41
+ TFrom extends string = string,
42
+ TMaskFrom extends string = TFrom,
43
43
  TMaskTo extends string = '',
44
44
  >(
45
45
  opts: Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
package/src/route.ts CHANGED
@@ -1078,10 +1078,49 @@ export class Route<
1078
1078
  TLoaderFn,
1079
1079
  TNewChildren
1080
1080
  > {
1081
- this.children = (
1082
- Array.isArray(children) ? children : Object.values(children)
1083
- ) as any
1084
- return this as any
1081
+ return this._addFileChildren(children)
1082
+ }
1083
+
1084
+ _addFileChildren<const TNewChildren>(
1085
+ children: TNewChildren,
1086
+ ): Route<
1087
+ TParentRoute,
1088
+ TPath,
1089
+ TFullPath,
1090
+ TCustomId,
1091
+ TId,
1092
+ TSearchValidator,
1093
+ TParams,
1094
+ TRouterContext,
1095
+ TRouteContextFn,
1096
+ TBeforeLoadFn,
1097
+ TLoaderDeps,
1098
+ TLoaderFn,
1099
+ TNewChildren
1100
+ > {
1101
+ if (Array.isArray(children)) {
1102
+ this.children = children as TChildren
1103
+ }
1104
+
1105
+ if (typeof children === 'object' && children !== null) {
1106
+ this.children = Object.values(children) as TChildren
1107
+ }
1108
+
1109
+ return this as unknown as Route<
1110
+ TParentRoute,
1111
+ TPath,
1112
+ TFullPath,
1113
+ TCustomId,
1114
+ TId,
1115
+ TSearchValidator,
1116
+ TParams,
1117
+ TRouterContext,
1118
+ TRouteContextFn,
1119
+ TBeforeLoadFn,
1120
+ TLoaderDeps,
1121
+ TLoaderFn,
1122
+ TNewChildren
1123
+ >
1085
1124
  }
1086
1125
 
1087
1126
  updateLoader = <TNewLoaderFn>(options: {
@@ -1336,9 +1375,10 @@ export class RootRoute<
1336
1375
  in out TRouterContext = {},
1337
1376
  in out TRouteContextFn = AnyContext,
1338
1377
  in out TBeforeLoadFn = AnyContext,
1339
- TLoaderDeps extends Record<string, any> = {},
1378
+ in out TLoaderDeps extends Record<string, any> = {},
1340
1379
  in out TLoaderFn = undefined,
1341
- TChildren = unknown,
1380
+ in out TChildren = unknown,
1381
+ in out TFileRouteTypes = unknown,
1342
1382
  > extends Route<
1343
1383
  any, // TParentRoute
1344
1384
  '/', // TPath
@@ -1383,9 +1423,58 @@ export class RootRoute<
1383
1423
  TBeforeLoadFn,
1384
1424
  TLoaderDeps,
1385
1425
  TLoaderFn,
1386
- TNewChildren
1426
+ TNewChildren,
1427
+ TFileRouteTypes
1428
+ > {
1429
+ super.addChildren(children)
1430
+ return this as unknown as RootRoute<
1431
+ TSearchValidator,
1432
+ TRouterContext,
1433
+ TRouteContextFn,
1434
+ TBeforeLoadFn,
1435
+ TLoaderDeps,
1436
+ TLoaderFn,
1437
+ TNewChildren,
1438
+ TFileRouteTypes
1439
+ >
1440
+ }
1441
+
1442
+ _addFileChildren<const TNewChildren>(
1443
+ children: TNewChildren,
1444
+ ): RootRoute<
1445
+ TSearchValidator,
1446
+ TRouterContext,
1447
+ TRouteContextFn,
1448
+ TBeforeLoadFn,
1449
+ TLoaderDeps,
1450
+ TLoaderFn,
1451
+ TNewChildren,
1452
+ TFileRouteTypes
1387
1453
  > {
1388
- return super.addChildren(children)
1454
+ super._addFileChildren(children)
1455
+ return this as unknown as RootRoute<
1456
+ TSearchValidator,
1457
+ TRouterContext,
1458
+ TRouteContextFn,
1459
+ TBeforeLoadFn,
1460
+ TLoaderDeps,
1461
+ TLoaderFn,
1462
+ TNewChildren,
1463
+ TFileRouteTypes
1464
+ >
1465
+ }
1466
+
1467
+ _addFileTypes<TFileRouteTypes>(): RootRoute<
1468
+ TSearchValidator,
1469
+ TRouterContext,
1470
+ TRouteContextFn,
1471
+ TBeforeLoadFn,
1472
+ TLoaderDeps,
1473
+ TLoaderFn,
1474
+ TChildren,
1475
+ TFileRouteTypes
1476
+ > {
1477
+ return this as any
1389
1478
  }
1390
1479
  }
1391
1480
 
@@ -1466,7 +1555,7 @@ export type RouteMask<TRouteTree extends AnyRoute> = {
1466
1555
 
1467
1556
  export function createRouteMask<
1468
1557
  TRouteTree extends AnyRoute,
1469
- TFrom extends RoutePaths<TRouteTree>,
1558
+ TFrom extends RoutePaths<TRouteTree> | string,
1470
1559
  TTo extends string,
1471
1560
  >(
1472
1561
  opts: {
package/src/routeInfo.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import type { InferFileRouteTypes } from './fileRoute'
2
+ import type { AddTrailingSlash, RemoveTrailingSlashes } from './link'
1
3
  import type { AnyRoute } from './route'
2
4
  import type { AnyRouter, TrailingSlashOption } from './router'
3
5
  import type { MergeUnion } from './utils'
@@ -30,16 +32,32 @@ export type ParseRouteWithoutBranches<TRouteTree> =
30
32
  : never
31
33
  : never
32
34
 
33
- export type RoutesById<TRouteTree extends AnyRoute> = {
34
- [K in ParseRoute<TRouteTree> as K['id']]: K
35
- }
35
+ export type CodeRoutesById<TRouteTree extends AnyRoute> =
36
+ ParseRoute<TRouteTree> extends infer TRoutes extends AnyRoute
37
+ ? {
38
+ [K in TRoutes as K['id']]: K
39
+ }
40
+ : never
41
+
42
+ export type RoutesById<TRouteTree extends AnyRoute> =
43
+ InferFileRouteTypes<TRouteTree> extends never
44
+ ? CodeRoutesById<TRouteTree>
45
+ : InferFileRouteTypes<TRouteTree>['fileRoutesById']
36
46
 
37
47
  export type RouteById<TRouteTree extends AnyRoute, TId> = Extract<
38
- RoutesById<TRouteTree>[TId],
48
+ RoutesById<TRouteTree>[TId & keyof RoutesById<TRouteTree>],
39
49
  AnyRoute
40
50
  >
41
51
 
42
- export type RouteIds<TRouteTree extends AnyRoute> = ParseRoute<TRouteTree>['id']
52
+ export type CodeRouteIds<TRouteTree extends AnyRoute> =
53
+ ParseRoute<TRouteTree> extends infer TRoutes extends AnyRoute
54
+ ? TRoutes['id']
55
+ : never
56
+
57
+ export type RouteIds<TRouteTree extends AnyRoute> =
58
+ InferFileRouteTypes<TRouteTree> extends never
59
+ ? CodeRouteIds<TRouteTree>
60
+ : InferFileRouteTypes<TRouteTree>['id']
43
61
 
44
62
  export type ParentPath<TOption> = 'always' extends TOption
45
63
  ? '../'
@@ -53,22 +71,34 @@ export type CurrentPath<TOption> = 'always' extends TOption
53
71
  ? '.'
54
72
  : './' | '.'
55
73
 
56
- export type CatchAllPaths<TOption> =
57
- | CurrentPath<TOption>
58
- | ParentPath<TOption>
59
- | ''
74
+ export type CatchAllPaths<TOption> = CurrentPath<TOption> | ParentPath<TOption>
60
75
 
61
- export type RoutesByPath<TRouteTree extends AnyRoute> = {
62
- [K in ParseRoute<TRouteTree> as K['fullPath']]: K
63
- }
76
+ export type CodeRoutesByPath<TRouteTree extends AnyRoute> =
77
+ ParseRoute<TRouteTree> extends infer TRoutes extends AnyRoute
78
+ ? {
79
+ [K in TRoutes as K['fullPath']]: K
80
+ }
81
+ : never
82
+
83
+ export type RoutesByPath<TRouteTree extends AnyRoute> =
84
+ InferFileRouteTypes<TRouteTree> extends never
85
+ ? CodeRoutesByPath<TRouteTree>
86
+ : InferFileRouteTypes<TRouteTree>['fileRoutesByFullPath']
64
87
 
65
88
  export type RouteByPath<TRouteTree extends AnyRoute, TPath> = Extract<
66
- RoutesByPath<TRouteTree>[TPath],
89
+ RoutesByPath<TRouteTree>[TPath & keyof RoutesByPath<TRouteTree>],
67
90
  AnyRoute
68
91
  >
69
92
 
93
+ export type CodeRoutePaths<TRouteTree extends AnyRoute> =
94
+ ParseRoute<TRouteTree> extends infer TRoutes extends AnyRoute
95
+ ? TRoutes['fullPath']
96
+ : never
97
+
70
98
  export type RoutePaths<TRouteTree extends AnyRoute> =
71
- | ParseRoute<TRouteTree>['fullPath']
99
+ | (InferFileRouteTypes<TRouteTree> extends never
100
+ ? CodeRoutePaths<TRouteTree>
101
+ : InferFileRouteTypes<TRouteTree>['fullPaths'])
72
102
  | '/'
73
103
 
74
104
  export type RouteToPathAlwaysTrailingSlash<TRoute extends AnyRoute> =
@@ -107,7 +137,7 @@ export type RouteToByRouter<
107
137
  TRoute extends AnyRoute,
108
138
  > = RouteToPathByTrailingSlashOption<TRoute>[TrailingSlashOptionByRouter<TRouter>]
109
139
 
110
- export type RouteToPath<
140
+ export type CodeRouteToPath<
111
141
  TRouter extends AnyRouter,
112
142
  TRouteTree extends AnyRoute,
113
143
  > =
@@ -117,34 +147,82 @@ export type RouteToPath<
117
147
  : never
118
148
  : never
119
149
 
120
- export type RoutesByToPath<TRouter extends AnyRouter> = {
121
- [TRoute in ParseRouteWithoutBranches<TRouter['routeTree']> as RouteToByRouter<
122
- TRouter,
123
- TRoute
124
- >]: TRoute
125
- }
150
+ export type FileRouteToPath<
151
+ TRouter extends AnyRouter,
152
+ TTo = InferFileRouteTypes<TRouter['routeTree']>['to'],
153
+ TTrailingSlashOption = TrailingSlashOptionByRouter<TRouter>,
154
+ > = 'never' extends TTrailingSlashOption
155
+ ? TTo
156
+ : 'always' extends TTrailingSlashOption
157
+ ? AddTrailingSlash<TTo>
158
+ : TTo | AddTrailingSlash<TTo>
126
159
 
127
- export type RouteByToPath<TRouter extends AnyRouter, TTo> = Extract<
128
- RoutesByToPath<TRouter>[TTo],
160
+ export type RouteToPath<
161
+ TRouter extends AnyRouter,
162
+ TRouteTree extends AnyRoute,
163
+ > =
164
+ InferFileRouteTypes<TRouter['routeTree']> extends never
165
+ ? CodeRouteToPath<TRouter, TRouteTree>
166
+ : FileRouteToPath<TRouter>
167
+
168
+ export type CodeRoutesByToPath<TRouter extends AnyRouter> =
169
+ ParseRouteWithoutBranches<TRouter['routeTree']> extends infer TRoutes extends
170
+ AnyRoute
171
+ ? {
172
+ [TRoute in TRoutes as RouteToByRouter<TRouter, TRoute>]: TRoute
173
+ }
174
+ : never
175
+
176
+ export type RoutesByToPath<TRouter extends AnyRouter> =
177
+ InferFileRouteTypes<TRouter['routeTree']> extends never
178
+ ? CodeRoutesByToPath<TRouter>
179
+ : InferFileRouteTypes<TRouter['routeTree']>['fileRoutesByTo']
180
+
181
+ export type CodeRouteByToPath<TRouter extends AnyRouter, TTo> = Extract<
182
+ RoutesByToPath<TRouter>[TTo & keyof RoutesByToPath<TRouter>],
129
183
  AnyRoute
130
184
  >
131
185
 
132
- export type FullSearchSchema<TRouteTree extends AnyRoute> = MergeUnion<
133
- ParseRoute<TRouteTree>['types']['fullSearchSchema']
134
- >
186
+ export type FileRouteByToPath<TRouter extends AnyRouter, TTo> =
187
+ 'never' extends TrailingSlashOptionByRouter<TRouter>
188
+ ? CodeRouteByToPath<TRouter, TTo>
189
+ : 'always' extends TrailingSlashOptionByRouter<TRouter>
190
+ ? TTo extends '/'
191
+ ? CodeRouteByToPath<TRouter, TTo>
192
+ : TTo extends `${infer TPath}/`
193
+ ? CodeRouteByToPath<TRouter, TPath>
194
+ : never
195
+ : CodeRouteByToPath<
196
+ TRouter,
197
+ TTo extends '/' ? TTo : RemoveTrailingSlashes<TTo>
198
+ >
135
199
 
136
- export type FullSearchSchemaInput<TRouteTree extends AnyRoute> = MergeUnion<
137
- ParseRoute<TRouteTree>['types']['fullSearchSchemaInput']
138
- >
200
+ export type RouteByToPath<TRouter extends AnyRouter, TTo> =
201
+ InferFileRouteTypes<TRouter['routeTree']> extends never
202
+ ? CodeRouteByToPath<TRouter, TTo>
203
+ : FileRouteByToPath<TRouter, TTo>
139
204
 
140
- export type AllParams<TRouteTree extends AnyRoute> = MergeUnion<
141
- ParseRoute<TRouteTree>['types']['allParams']
142
- >
205
+ export type FullSearchSchema<TRouteTree extends AnyRoute> =
206
+ ParseRoute<TRouteTree> extends infer TRoutes extends AnyRoute
207
+ ? MergeUnion<TRoutes['types']['fullSearchSchema']>
208
+ : never
143
209
 
144
- export type AllContext<TRouteTree extends AnyRoute> = MergeUnion<
145
- ParseRoute<TRouteTree>['types']['allContext']
146
- >
210
+ export type FullSearchSchemaInput<TRouteTree extends AnyRoute> =
211
+ ParseRoute<TRouteTree> extends infer TRoutes extends AnyRoute
212
+ ? MergeUnion<TRoutes['types']['fullSearchSchemaInput']>
213
+ : never
147
214
 
148
- export type AllLoaderData<TRouteTree extends AnyRoute> = MergeUnion<
149
- ParseRoute<TRouteTree>['types']['loaderData']
150
- >
215
+ export type AllParams<TRouteTree extends AnyRoute> =
216
+ ParseRoute<TRouteTree> extends infer TRoutes extends AnyRoute
217
+ ? MergeUnion<TRoutes['types']['allParams']>
218
+ : never
219
+
220
+ export type AllContext<TRouteTree extends AnyRoute> =
221
+ ParseRoute<TRouteTree> extends infer TRoutes extends AnyRoute
222
+ ? MergeUnion<TRoutes['types']['allContext']>
223
+ : never
224
+
225
+ export type AllLoaderData<TRouteTree extends AnyRoute> =
226
+ ParseRoute<TRouteTree> extends infer TRoutes extends AnyRoute
227
+ ? MergeUnion<TRoutes['types']['loaderData']>
228
+ : never