@tanstack/react-router 1.30.1 → 1.31.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 (58) hide show
  1. package/dist/cjs/Matches.cjs.map +1 -1
  2. package/dist/cjs/Matches.d.cts +10 -10
  3. package/dist/cjs/RouterProvider.cjs.map +1 -1
  4. package/dist/cjs/RouterProvider.d.cts +7 -7
  5. package/dist/cjs/fileRoute.d.cts +1 -1
  6. package/dist/cjs/link.cjs.map +1 -1
  7. package/dist/cjs/link.d.cts +42 -42
  8. package/dist/cjs/redirects.cjs.map +1 -1
  9. package/dist/cjs/redirects.d.cts +5 -6
  10. package/dist/cjs/route.cjs.map +1 -1
  11. package/dist/cjs/route.d.cts +6 -6
  12. package/dist/cjs/routeInfo.d.cts +19 -2
  13. package/dist/cjs/router.cjs +69 -52
  14. package/dist/cjs/router.cjs.map +1 -1
  15. package/dist/cjs/router.d.cts +15 -15
  16. package/dist/cjs/routerContext.cjs.map +1 -1
  17. package/dist/cjs/routerContext.d.cts +1 -1
  18. package/dist/cjs/useNavigate.cjs.map +1 -1
  19. package/dist/cjs/useNavigate.d.cts +3 -4
  20. package/dist/cjs/useRouter.cjs.map +1 -1
  21. package/dist/cjs/useRouter.d.cts +3 -4
  22. package/dist/cjs/useRouterState.cjs.map +1 -1
  23. package/dist/cjs/useRouterState.d.cts +3 -4
  24. package/dist/esm/Matches.d.ts +10 -10
  25. package/dist/esm/Matches.js.map +1 -1
  26. package/dist/esm/RouterProvider.d.ts +7 -7
  27. package/dist/esm/RouterProvider.js.map +1 -1
  28. package/dist/esm/fileRoute.d.ts +1 -1
  29. package/dist/esm/link.d.ts +42 -42
  30. package/dist/esm/link.js.map +1 -1
  31. package/dist/esm/redirects.d.ts +5 -6
  32. package/dist/esm/redirects.js.map +1 -1
  33. package/dist/esm/route.d.ts +6 -6
  34. package/dist/esm/route.js.map +1 -1
  35. package/dist/esm/routeInfo.d.ts +19 -2
  36. package/dist/esm/router.d.ts +15 -15
  37. package/dist/esm/router.js +69 -52
  38. package/dist/esm/router.js.map +1 -1
  39. package/dist/esm/routerContext.d.ts +1 -1
  40. package/dist/esm/routerContext.js.map +1 -1
  41. package/dist/esm/useNavigate.d.ts +3 -4
  42. package/dist/esm/useNavigate.js.map +1 -1
  43. package/dist/esm/useRouter.d.ts +3 -4
  44. package/dist/esm/useRouter.js.map +1 -1
  45. package/dist/esm/useRouterState.d.ts +3 -4
  46. package/dist/esm/useRouterState.js.map +1 -1
  47. package/package.json +1 -1
  48. package/src/Matches.tsx +40 -22
  49. package/src/RouterProvider.tsx +34 -11
  50. package/src/link.tsx +124 -139
  51. package/src/redirects.ts +14 -14
  52. package/src/route.ts +3 -3
  53. package/src/routeInfo.ts +72 -4
  54. package/src/router.ts +132 -68
  55. package/src/routerContext.tsx +1 -1
  56. package/src/useNavigate.tsx +9 -10
  57. package/src/useRouter.tsx +4 -5
  58. package/src/useRouterState.tsx +5 -6
package/src/link.tsx CHANGED
@@ -4,20 +4,20 @@ import { useMatch } from './Matches'
4
4
  import { useRouterState } from './useRouterState'
5
5
  import { useRouter } from './useRouter'
6
6
  import { deepEqual, exactPathTest, functionalUpdate } from './utils'
7
- import type { ParsedLocation } from '.'
7
+ import type { AnyRouter, ParsedLocation } from '.'
8
8
  import type { HistoryState } from '@tanstack/history'
9
9
  import type { Trim } from './fileRoute'
10
10
  import type { AnyRoute, RootSearchSchema } from './route'
11
11
  import type {
12
12
  RouteByPath,
13
- RouteLeaves,
13
+ RouteByToPath,
14
14
  RoutePaths,
15
15
  RoutePathsAutoComplete,
16
+ RouteToPath,
16
17
  } from './routeInfo'
17
18
  import type { RegisteredRouter } from './router'
18
19
  import type {
19
20
  Expand,
20
- IsUnion,
21
21
  MakeDifferenceOptional,
22
22
  NoInfer,
23
23
  NonNullableUpdater,
@@ -79,94 +79,96 @@ export type Last<T extends Array<any>> = T extends [...infer _, infer L]
79
79
  ? L
80
80
  : never
81
81
 
82
- export type RemoveTrailingSlashes<T> = T extends `${infer R}/`
83
- ? RemoveTrailingSlashes<R>
84
- : T
82
+ export type RemoveTrailingSlashes<T> = T extends `${infer R}/` ? R : T
85
83
 
86
- export type RemoveLeadingSlashes<T> = T extends `/${infer R}`
87
- ? RemoveLeadingSlashes<R>
88
- : T
84
+ export type RemoveLeadingSlashes<T> = T extends `/${infer R}` ? R : T
89
85
 
90
- export type ResolvePaths<TRouteTree extends AnyRoute, TSearchPath> =
91
- RouteByPath<TRouteTree, RemoveTrailingSlashes<TSearchPath>> extends never
92
- ? RouteLeaves<TRouteTree>
93
- : RouteLeaves<RouteByPath<TRouteTree, RemoveTrailingSlashes<TSearchPath>>>
86
+ export type ResolvePaths<TRouter extends AnyRouter, TSearchPath> =
87
+ RouteByPath<
88
+ TRouter['routeTree'],
89
+ RemoveTrailingSlashes<TSearchPath>
90
+ > extends never
91
+ ? RouteToPath<TRouter, TRouter['routeTree']>
92
+ : RouteToPath<
93
+ TRouter,
94
+ RouteByPath<TRouter['routeTree'], RemoveTrailingSlashes<TSearchPath>>
95
+ >
94
96
 
95
97
  export type SearchPaths<
96
- TRouteTree extends AnyRoute,
98
+ TRouter extends AnyRouter,
97
99
  TSearchPath extends string,
98
- TPaths = ResolvePaths<TRouteTree, TSearchPath>,
99
- > = TPaths extends `${RemoveTrailingSlashes<TSearchPath>}/${infer TRest}`
100
+ TPaths = ResolvePaths<TRouter, TSearchPath>,
101
+ > = TPaths extends `${RemoveTrailingSlashes<TSearchPath>}${infer TRest}`
100
102
  ? TRest
101
103
  : never
102
104
 
103
105
  export type SearchRelativePathAutoComplete<
104
- TRouteTree extends AnyRoute,
106
+ TRouter extends AnyRouter,
105
107
  TTo extends string,
106
108
  TSearchPath extends string,
107
- > = `${TTo}/${SearchPaths<TRouteTree, TSearchPath>}`
109
+ > = `${TTo}/${RemoveLeadingSlashes<SearchPaths<TRouter, TSearchPath>>}`
108
110
 
109
111
  export type RelativeToParentPathAutoComplete<
110
- TRouteTree extends AnyRoute,
112
+ TRouter extends AnyRouter,
111
113
  TFrom extends string,
112
114
  TTo extends string,
113
115
  TResolvedPath extends string = RemoveTrailingSlashes<
114
116
  ResolveRelativePath<TFrom, TTo>
115
117
  >,
116
118
  > =
117
- | SearchRelativePathAutoComplete<TRouteTree, TTo, TResolvedPath>
119
+ | SearchRelativePathAutoComplete<TRouter, TTo, TResolvedPath>
118
120
  | (TResolvedPath extends '' ? never : `${TTo}/../`)
119
121
 
120
122
  export type RelativeToCurrentPathAutoComplete<
121
- TRouteTree extends AnyRoute,
123
+ TRouter extends AnyRouter,
122
124
  TFrom extends string,
123
125
  TTo extends string,
124
126
  TRestTo extends string,
125
127
  TResolvedPath extends
126
128
  string = RemoveTrailingSlashes<`${RemoveTrailingSlashes<TFrom>}/${RemoveLeadingSlashes<TRestTo>}`>,
127
- > = SearchRelativePathAutoComplete<TRouteTree, TTo, TResolvedPath>
129
+ > = SearchRelativePathAutoComplete<TRouter, TTo, TResolvedPath>
128
130
 
129
131
  export type AbsolutePathAutoComplete<
130
- TRouteTree extends AnyRoute,
132
+ TRouter extends AnyRouter,
131
133
  TFrom extends string,
132
134
  > =
133
135
  | (string extends TFrom
134
136
  ? './'
135
137
  : TFrom extends `/`
136
138
  ? never
137
- : SearchPaths<TRouteTree, TFrom> extends ''
139
+ : SearchPaths<TRouter, TFrom> extends ''
138
140
  ? never
139
141
  : './')
140
142
  | (string extends TFrom ? '../' : TFrom extends `/` ? never : '../')
141
- | RouteLeaves<TRouteTree>
142
- | (TFrom extends '/' ? never : SearchPaths<TRouteTree, TFrom>)
143
+ | RouteToPath<TRouter, TRouter['routeTree']>
144
+ | (TFrom extends '/'
145
+ ? never
146
+ : string extends TFrom
147
+ ? RemoveLeadingSlashes<RouteToPath<TRouter, TRouter['routeTree']>>
148
+ : RemoveLeadingSlashes<SearchPaths<TRouter, TFrom>>)
143
149
 
144
150
  export type RelativeToPathAutoComplete<
145
- TRouteTree extends AnyRoute,
151
+ TRouter extends AnyRouter,
146
152
  TFrom extends string,
147
153
  TTo extends string,
148
154
  > = TTo extends `..${string}`
149
- ? RelativeToParentPathAutoComplete<
150
- TRouteTree,
151
- TFrom,
152
- RemoveTrailingSlashes<TTo>
153
- >
155
+ ? RelativeToParentPathAutoComplete<TRouter, TFrom, RemoveTrailingSlashes<TTo>>
154
156
  : TTo extends `./${infer TRestTTo}`
155
157
  ? RelativeToCurrentPathAutoComplete<
156
- TRouteTree,
158
+ TRouter,
157
159
  TFrom,
158
160
  RemoveTrailingSlashes<TTo>,
159
161
  TRestTTo
160
162
  >
161
- : AbsolutePathAutoComplete<TRouteTree, TFrom>
163
+ : AbsolutePathAutoComplete<TRouter, TFrom>
162
164
 
163
165
  export type NavigateOptions<
164
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
165
- TFrom extends RoutePaths<TRouteTree> | string = string,
166
+ TRouter extends AnyRouter = RegisteredRouter,
167
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
166
168
  TTo extends string = '',
167
- TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
169
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
168
170
  TMaskTo extends string = '',
169
- > = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
171
+ > = ToOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {
170
172
  // `replace` is a boolean that determines whether the navigation should replace the current history entry or push a new one.
171
173
  replace?: boolean
172
174
  resetScroll?: boolean
@@ -177,37 +179,37 @@ export type NavigateOptions<
177
179
  }
178
180
 
179
181
  export type ToOptions<
180
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
181
- TFrom extends RoutePaths<TRouteTree> | string = string,
182
+ TRouter extends AnyRouter = RegisteredRouter,
183
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
182
184
  TTo extends string = '',
183
- TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
185
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
184
186
  TMaskTo extends string = '',
185
- > = ToSubOptions<TRouteTree, TFrom, TTo> & {
187
+ > = ToSubOptions<TRouter, TFrom, TTo> & {
186
188
  _fromLocation?: ParsedLocation
187
- mask?: ToMaskOptions<TRouteTree, TMaskFrom, TMaskTo>
189
+ mask?: ToMaskOptions<TRouter, TMaskFrom, TMaskTo>
188
190
  }
189
191
 
190
192
  export type ToMaskOptions<
191
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
192
- TMaskFrom extends RoutePaths<TRouteTree> | string = string,
193
+ TRouteTree extends AnyRouter = RegisteredRouter,
194
+ TMaskFrom extends RoutePaths<TRouteTree['routeTree']> | string = string,
193
195
  TMaskTo extends string = '',
194
196
  > = ToSubOptions<TRouteTree, TMaskFrom, TMaskTo> & {
195
197
  unmaskOnReload?: boolean
196
198
  }
197
199
 
198
200
  export type ToSubOptions<
199
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
200
- TFrom extends RoutePaths<TRouteTree> | string = string,
201
+ TRouter extends AnyRouter = RegisteredRouter,
202
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
201
203
  TTo extends string = '',
202
204
  > = {
203
- to?: ToPathOption<TRouteTree, TFrom, TTo> & {}
205
+ to?: ToPathOption<TRouter, TFrom, TTo> & {}
204
206
  hash?: true | Updater<string>
205
207
  state?: true | NonNullableUpdater<HistoryState>
206
208
  // The source route path. This is automatically set when using route-level APIs, but for type-safe relative routing on the router itself, this is required
207
- from?: RoutePathsAutoComplete<TRouteTree, TFrom> & {}
209
+ from?: RoutePathsAutoComplete<TRouter['routeTree'], TFrom> & {}
208
210
  // // When using relative route paths, this option forces resolution from the current path, instead of the route API's path or `from` path
209
- } & SearchParamOptions<TRouteTree, TFrom, TTo> &
210
- PathParamOptions<TRouteTree, TFrom, TTo>
211
+ } & SearchParamOptions<TRouter, TFrom, TTo> &
212
+ PathParamOptions<TRouter, TFrom, TTo>
211
213
 
212
214
  type ParamsReducer<TFrom, TTo> = TTo | ((current: TFrom) => TTo)
213
215
 
@@ -220,20 +222,18 @@ type ExcludeRootSearchSchema<T, TExcluded = Exclude<T, RootSearchSchema>> = [
220
222
  : TExcluded
221
223
 
222
224
  export type ResolveRoute<
223
- TRouteTree extends AnyRoute,
225
+ TRouter extends AnyRouter,
224
226
  TFrom,
225
227
  TTo,
226
- TPath = RemoveTrailingSlashes<
227
- string extends TFrom
228
- ? TTo
229
- : string extends TTo
230
- ? TFrom
231
- : ResolveRelativePath<TFrom, TTo>
232
- >,
228
+ TPath = string extends TFrom
229
+ ? TTo
230
+ : string extends TTo
231
+ ? TFrom
232
+ : ResolveRelativePath<TFrom, TTo>,
233
233
  > = TPath extends string
234
- ? RouteByPath<TRouteTree, `${TPath}/`> extends never
235
- ? RouteByPath<TRouteTree, TPath>
236
- : RouteByPath<TRouteTree, `${TPath}/`>
234
+ ? string extends TTo
235
+ ? RouteByPath<TRouter['routeTree'], TPath>
236
+ : RouteByToPath<TRouter, TPath>
237
237
  : never
238
238
 
239
239
  type PostProcessParams<
@@ -242,25 +242,22 @@ type PostProcessParams<
242
242
  > = TParamVariant extends 'SEARCH' ? ExcludeRootSearchSchema<T> : T
243
243
 
244
244
  type ResolveFromParams<
245
- TRouteTree extends AnyRoute,
245
+ TRouter extends AnyRouter,
246
246
  TParamVariant extends ParamVariant,
247
247
  TFrom,
248
- TFromRouteType extends
249
- | 'allParams'
250
- | 'fullSearchSchema' = TParamVariant extends 'PATH'
251
- ? 'allParams'
252
- : 'fullSearchSchema',
253
248
  > = PostProcessParams<
254
- RouteByPath<TRouteTree, TFrom>['types'][TFromRouteType],
249
+ RouteByPath<TRouter['routeTree'], TFrom>['types'][TParamVariant extends 'PATH'
250
+ ? 'allParams'
251
+ : 'fullSearchSchema'],
255
252
  TParamVariant
256
253
  >
257
254
 
258
255
  type ResolveToParams<
259
- TRouteTree extends AnyRoute,
256
+ TRouter extends AnyRouter,
260
257
  TParamVariant extends ParamVariant,
261
258
  TFrom,
262
259
  TTo,
263
- TRoute extends AnyRoute = ResolveRoute<TRouteTree, TFrom, TTo>,
260
+ TRoute extends AnyRoute = ResolveRoute<TRouter, TFrom, TTo>,
264
261
  > = PostProcessParams<
265
262
  TRoute['types'][TParamVariant extends 'PATH'
266
263
  ? 'allParams'
@@ -269,22 +266,22 @@ type ResolveToParams<
269
266
  >
270
267
 
271
268
  type ResolveRelativeToParams<
272
- TRouteTree extends AnyRoute,
269
+ TRouter extends AnyRouter,
273
270
  TParamVariant extends ParamVariant,
274
271
  TFrom,
275
272
  TTo,
276
- TToParams = ResolveToParams<TRouteTree, TParamVariant, TFrom, TTo>,
273
+ TToParams = ResolveToParams<TRouter, TParamVariant, TFrom, TTo>,
277
274
  > = TParamVariant extends 'SEARCH'
278
275
  ? TToParams
279
276
  : string extends TFrom
280
277
  ? TToParams
281
278
  : MakeDifferenceOptional<
282
- ResolveFromParams<TRouteTree, TParamVariant, TFrom>,
279
+ ResolveFromParams<TRouter, TParamVariant, TFrom>,
283
280
  TToParams
284
281
  >
285
282
 
286
283
  type MakeOptionalParams<
287
- TRouteTree extends AnyRoute,
284
+ TRouter extends AnyRouter,
288
285
  TParamVariant extends ParamVariant,
289
286
  TFrom,
290
287
  TTo,
@@ -293,29 +290,25 @@ type MakeOptionalParams<
293
290
  search?:
294
291
  | true
295
292
  | (ParamsReducer<
296
- Expand<ResolveFromParams<TRouteTree, TParamVariant, TFrom>>,
297
- Expand<
298
- ResolveRelativeToParams<TRouteTree, TParamVariant, TFrom, TTo>
299
- >
293
+ Expand<ResolveFromParams<TRouter, TParamVariant, TFrom>>,
294
+ Expand<ResolveRelativeToParams<TRouter, TParamVariant, TFrom, TTo>>
300
295
  > & {})
301
296
  }
302
297
  : {
303
298
  params?:
304
299
  | true
305
300
  | (ParamsReducer<
306
- Expand<ResolveFromParams<TRouteTree, TParamVariant, TFrom>>,
307
- Expand<
308
- ResolveRelativeToParams<TRouteTree, TParamVariant, TFrom, TTo>
309
- >
301
+ Expand<ResolveFromParams<TRouter, TParamVariant, TFrom>>,
302
+ Expand<ResolveRelativeToParams<TRouter, TParamVariant, TFrom, TTo>>
310
303
  > & {})
311
304
  }
312
305
 
313
306
  type MakeRequiredParamsReducer<
314
- TRouteTree extends AnyRoute,
307
+ TRouter extends AnyRouter,
315
308
  TParamVariant extends ParamVariant,
316
309
  TFrom,
317
310
  TToParams,
318
- TFromParams = ResolveFromParams<TRouteTree, TParamVariant, TFrom>,
311
+ TFromParams = ResolveFromParams<TRouter, TParamVariant, TFrom>,
319
312
  > =
320
313
  | ([TFromParams] extends [WithoutEmpty<PickRequired<TToParams>>]
321
314
  ? true
@@ -323,7 +316,7 @@ type MakeRequiredParamsReducer<
323
316
  | ParamsReducer<Expand<TFromParams>, TToParams>
324
317
 
325
318
  export type MakeRequiredParams<
326
- TRouteTree extends AnyRoute,
319
+ TRouter extends AnyRouter,
327
320
  TParamVariant extends ParamVariant,
328
321
  TFrom,
329
322
  TTo,
@@ -331,20 +324,20 @@ export type MakeRequiredParams<
331
324
  ? {
332
325
  search: Expand<
333
326
  MakeRequiredParamsReducer<
334
- TRouteTree,
327
+ TRouter,
335
328
  TParamVariant,
336
329
  TFrom,
337
- Expand<ResolveRelativeToParams<TRouteTree, TParamVariant, TFrom, TTo>>
330
+ Expand<ResolveRelativeToParams<TRouter, TParamVariant, TFrom, TTo>>
338
331
  >
339
332
  > & {}
340
333
  }
341
334
  : {
342
335
  params: Expand<
343
336
  MakeRequiredParamsReducer<
344
- TRouteTree,
337
+ TRouter,
345
338
  TParamVariant,
346
339
  TFrom,
347
- Expand<ResolveRelativeToParams<TRouteTree, TParamVariant, TFrom, TTo>>
340
+ Expand<ResolveRelativeToParams<TRouter, TParamVariant, TFrom, TTo>>
348
341
  >
349
342
  > & {}
350
343
  }
@@ -359,7 +352,7 @@ export type IsRequiredParams<TParams> = keyof TParams extends infer K extends
359
352
  : never
360
353
 
361
354
  export type IsRequired<
362
- TRouteTree extends AnyRoute,
355
+ TRouter extends AnyRouter,
363
356
  TParamVariant extends ParamVariant,
364
357
  TFrom,
365
358
  TTo,
@@ -367,42 +360,42 @@ export type IsRequired<
367
360
  ? string extends TFrom
368
361
  ? never
369
362
  : IsRequiredParams<
370
- ResolveRelativeToParams<TRouteTree, TParamVariant, TFrom, TTo>
363
+ ResolveRelativeToParams<TRouter, TParamVariant, TFrom, TTo>
371
364
  >
372
365
  : IsRequiredParams<
373
- ResolveRelativeToParams<TRouteTree, TParamVariant, TFrom, TTo>
366
+ ResolveRelativeToParams<TRouter, TParamVariant, TFrom, TTo>
374
367
  >
375
368
 
376
369
  export type ParamOptions<
377
- TRouteTree extends AnyRoute,
370
+ TRouter extends AnyRouter,
378
371
  TFrom,
379
372
  TTo extends string,
380
373
  TParamVariant extends ParamVariant,
381
374
  > =
382
- IsRequired<TRouteTree, TParamVariant, TFrom, TTo> extends never
383
- ? MakeOptionalParams<TRouteTree, TParamVariant, TFrom, TTo>
384
- : MakeRequiredParams<TRouteTree, TParamVariant, TFrom, TTo>
375
+ IsRequired<TRouter, TParamVariant, TFrom, TTo> extends never
376
+ ? MakeOptionalParams<TRouter, TParamVariant, TFrom, TTo>
377
+ : MakeRequiredParams<TRouter, TParamVariant, TFrom, TTo>
385
378
 
386
379
  export type SearchParamOptions<
387
- TRouteTree extends AnyRoute,
380
+ TRouter extends AnyRouter,
388
381
  TFrom,
389
382
  TTo extends string,
390
- > = ParamOptions<TRouteTree, TFrom, TTo, 'SEARCH'>
383
+ > = ParamOptions<TRouter, TFrom, TTo, 'SEARCH'>
391
384
 
392
385
  export type PathParamOptions<
393
- TRouteTree extends AnyRoute,
386
+ TRouter extends AnyRouter,
394
387
  TFrom,
395
388
  TTo extends string,
396
- > = ParamOptions<TRouteTree, TFrom, TTo, 'PATH'>
389
+ > = ParamOptions<TRouter, TFrom, TTo, 'PATH'>
397
390
 
398
391
  export type ToPathOption<
399
- TRouteTree extends AnyRoute = AnyRoute,
400
- TFrom extends RoutePaths<TRouteTree> | string = string,
392
+ TRouter extends AnyRouter = AnyRouter,
393
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
401
394
  TTo extends string = string,
402
395
  > =
403
- | CheckPath<TRouteTree, TTo, never, TFrom, TTo>
396
+ | CheckPath<TRouter, TTo, never, TFrom, TTo>
404
397
  | RelativeToPathAutoComplete<
405
- TRouteTree,
398
+ TRouter,
406
399
  NoInfer<TFrom> extends string ? NoInfer<TFrom> : '',
407
400
  NoInfer<TTo> & string
408
401
  >
@@ -414,12 +407,12 @@ export interface ActiveOptions {
414
407
  }
415
408
 
416
409
  export type LinkOptions<
417
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
418
- TFrom extends RoutePaths<TRouteTree> | string = string,
410
+ TRouter extends AnyRouter = RegisteredRouter,
411
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
419
412
  TTo extends string = '',
420
- TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
413
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
421
414
  TMaskTo extends string = '',
422
- > = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
415
+ > = NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {
423
416
  // The standard anchor tag target attribute
424
417
  target?: HTMLAnchorElement['target']
425
418
  // Defaults to `{ exact: false, includeHash: false }`
@@ -432,16 +425,8 @@ export type LinkOptions<
432
425
  disabled?: boolean
433
426
  }
434
427
 
435
- export type CheckPath<TRouteTree extends AnyRoute, TPass, TFail, TFrom, TTo> =
436
- ResolveRoute<TRouteTree, TFrom, TTo> extends infer TRoute extends AnyRoute
437
- ? [TRoute] extends [never]
438
- ? TFail
439
- : string extends TTo
440
- ? TPass
441
- : unknown extends TRoute['children']
442
- ? TPass
443
- : TFail
444
- : TFail
428
+ export type CheckPath<TRouter extends AnyRouter, TPass, TFail, TFrom, TTo> =
429
+ ResolveRoute<TRouter, TFrom, TTo> extends never ? TFail : TPass
445
430
 
446
431
  export type ResolveRelativePath<TFrom, TTo = '.'> = TFrom extends string
447
432
  ? TTo extends string
@@ -493,13 +478,13 @@ type LinkCurrentTargetElement = {
493
478
  const preloadWarning = 'Error preloading route! ☝️'
494
479
 
495
480
  export function useLinkProps<
496
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
497
- TFrom extends RoutePaths<TRouteTree> | string = string,
481
+ TRouter extends AnyRouter = RegisteredRouter,
482
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
498
483
  TTo extends string = '',
499
- TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
484
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
500
485
  TMaskTo extends string = '',
501
486
  >(
502
- options: UseLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,
487
+ options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
503
488
  ): React.AnchorHTMLAttributes<HTMLAnchorElement> {
504
489
  const router = useRouter()
505
490
  const matchPathname = useMatch({
@@ -739,21 +724,21 @@ export function useLinkProps<
739
724
  }
740
725
 
741
726
  export type UseLinkPropsOptions<
742
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
743
- TFrom extends RoutePaths<TRouteTree> | string = string,
727
+ TRouter extends AnyRouter = RegisteredRouter,
728
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
744
729
  TTo extends string = '',
745
- TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
730
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
746
731
  TMaskTo extends string = '',
747
- > = ActiveLinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &
732
+ > = ActiveLinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &
748
733
  React.AnchorHTMLAttributes<HTMLAnchorElement>
749
734
 
750
735
  export type ActiveLinkOptions<
751
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
752
- TFrom extends RoutePaths<TRouteTree> | string = string,
736
+ TRouter extends AnyRouter = RegisteredRouter,
737
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
753
738
  TTo extends string = '',
754
- TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
739
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
755
740
  TMaskTo extends string = '',
756
- > = LinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
741
+ > = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {
757
742
  // A function that returns additional props for the `active` state of this link. These props override other props passed to the link (`style`'s are merged, `className`'s are concatenated)
758
743
  activeProps?:
759
744
  | React.AnchorHTMLAttributes<HTMLAnchorElement>
@@ -765,12 +750,12 @@ export type ActiveLinkOptions<
765
750
  }
766
751
 
767
752
  export type LinkProps<
768
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
769
- TFrom extends RoutePaths<TRouteTree> | string = string,
753
+ TRouter extends AnyRouter = RegisteredRouter,
754
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
770
755
  TTo extends string = string,
771
- TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
756
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
772
757
  TMaskTo extends string = '',
773
- > = ActiveLinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
758
+ > = ActiveLinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {
774
759
  // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns
775
760
  children?:
776
761
  | React.ReactNode
@@ -798,13 +783,13 @@ type LinkComponentProps<TComp> = React.PropsWithoutRef<
798
783
  >
799
784
 
800
785
  export type LinkComponent<TComp> = <
801
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
802
- TFrom extends RoutePaths<TRouteTree> | string = string,
786
+ TRouter extends AnyRouter = RegisteredRouter,
787
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
803
788
  TTo extends string = '',
804
- TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
789
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
805
790
  TMaskTo extends string = '',
806
791
  >(
807
- props: LinkProps<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &
792
+ props: LinkProps<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &
808
793
  LinkComponentProps<TComp>,
809
794
  ) => React.ReactElement
810
795
 
package/src/redirects.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  import type { NavigateOptions } from './link'
2
2
  import type { AnyRoute } from './route'
3
3
  import type { RoutePaths } from './routeInfo'
4
- import type { RegisteredRouter } from './router'
4
+ import type { AnyRouter, RegisteredRouter } from './router'
5
5
  import type { PickAsRequired } from './utils'
6
6
 
7
7
  export type AnyRedirect = Redirect<any, any, any, any, any>
8
8
 
9
9
  export type Redirect<
10
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
11
- TFrom extends RoutePaths<TRouteTree> = '/',
10
+ TRouter extends AnyRouter = RegisteredRouter,
11
+ TFrom extends RoutePaths<TRouter['routeTree']> = '/',
12
12
  TTo extends string = '',
13
- TMaskFrom extends RoutePaths<TRouteTree> = TFrom,
13
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> = TFrom,
14
14
  TMaskTo extends string = '',
15
15
  > = {
16
16
  /**
@@ -21,30 +21,30 @@ export type Redirect<
21
21
  statusCode?: number
22
22
  throw?: any
23
23
  headers?: HeadersInit
24
- } & NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>
24
+ } & NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>
25
25
 
26
26
  export type ResolvedRedirect<
27
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
28
- TFrom extends RoutePaths<TRouteTree> = '/',
27
+ TRouter extends AnyRouter = RegisteredRouter,
28
+ TFrom extends RoutePaths<TRouter['routeTree']> = '/',
29
29
  TTo extends string = '',
30
- TMaskFrom extends RoutePaths<TRouteTree> = TFrom,
30
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> = TFrom,
31
31
  TMaskTo extends string = '',
32
32
  > = PickAsRequired<
33
- Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,
33
+ Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
34
34
  'code' | 'statusCode' | 'headers'
35
35
  > & {
36
36
  href: string
37
37
  }
38
38
 
39
39
  export function redirect<
40
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
41
- TFrom extends RoutePaths<TRouteTree> = '/',
40
+ TRouter extends AnyRouter = RegisteredRouter,
41
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
42
42
  TTo extends string = '',
43
- TMaskFrom extends RoutePaths<TRouteTree> = TFrom,
43
+ TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
44
44
  TMaskTo extends string = '',
45
45
  >(
46
- opts: Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,
47
- ): Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> {
46
+ opts: Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
47
+ ): Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> {
48
48
  ;(opts as any).isRedirect = true
49
49
  opts.statusCode = opts.statusCode || opts.code || 301
50
50
  opts.headers = opts.headers || {}
package/src/route.ts CHANGED
@@ -11,7 +11,7 @@ import type { MakeRouteMatch, RouteMatch } from './Matches'
11
11
  import type { NavigateOptions, ParsePathParams, ToSubOptions } from './link'
12
12
  import type { ParsedLocation } from './location'
13
13
  import type { RouteById, RouteIds, RoutePaths } from './routeInfo'
14
- import type { AnyRouter, RegisteredRouter } from './router'
14
+ import type { AnyRouter, RegisteredRouter, Router } from './router'
15
15
  import type {
16
16
  Assign,
17
17
  Expand,
@@ -360,7 +360,7 @@ export interface LoaderFnContext<
360
360
  /**
361
361
  * @deprecated Use `throw redirect({ to: '/somewhere' })` instead
362
362
  **/
363
- navigate: (opts: NavigateOptions<AnyRoute>) => Promise<void>
363
+ navigate: (opts: NavigateOptions<AnyRouter>) => Promise<void>
364
364
  parentMatchPromise?: Promise<void>
365
365
  cause: 'preload' | 'enter' | 'stay'
366
366
  route: Route
@@ -1230,7 +1230,7 @@ export function createRouteMask<
1230
1230
  >(
1231
1231
  opts: {
1232
1232
  routeTree: TRouteTree
1233
- } & ToSubOptions<TRouteTree, TFrom, TTo>,
1233
+ } & ToSubOptions<Router<TRouteTree, 'never'>, TFrom, TTo>,
1234
1234
  ): RouteMask<TRouteTree> {
1235
1235
  return opts as any
1236
1236
  }