@tanstack/react-router 1.27.0 → 1.28.2

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 (54) hide show
  1. package/dist/cjs/Matches.cjs +45 -23
  2. package/dist/cjs/Matches.cjs.map +1 -1
  3. package/dist/cjs/Matches.d.cts +5 -6
  4. package/dist/cjs/fileRoute.cjs.map +1 -1
  5. package/dist/cjs/fileRoute.d.cts +13 -14
  6. package/dist/cjs/index.cjs +0 -1
  7. package/dist/cjs/index.cjs.map +1 -1
  8. package/dist/cjs/index.d.cts +2 -2
  9. package/dist/cjs/link.cjs.map +1 -1
  10. package/dist/cjs/link.d.cts +34 -24
  11. package/dist/cjs/redirects.cjs.map +1 -1
  12. package/dist/cjs/redirects.d.cts +3 -1
  13. package/dist/cjs/route.cjs.map +1 -1
  14. package/dist/cjs/route.d.cts +44 -47
  15. package/dist/cjs/routeInfo.d.cts +5 -7
  16. package/dist/cjs/router.cjs +374 -327
  17. package/dist/cjs/router.cjs.map +1 -1
  18. package/dist/cjs/router.d.cts +3 -3
  19. package/dist/cjs/useParams.cjs.map +1 -1
  20. package/dist/cjs/utils.cjs +20 -2
  21. package/dist/cjs/utils.cjs.map +1 -1
  22. package/dist/cjs/utils.d.cts +11 -4
  23. package/dist/esm/Matches.d.ts +5 -6
  24. package/dist/esm/Matches.js +46 -24
  25. package/dist/esm/Matches.js.map +1 -1
  26. package/dist/esm/fileRoute.d.ts +13 -14
  27. package/dist/esm/fileRoute.js.map +1 -1
  28. package/dist/esm/index.d.ts +2 -2
  29. package/dist/esm/index.js +1 -2
  30. package/dist/esm/link.d.ts +34 -24
  31. package/dist/esm/link.js.map +1 -1
  32. package/dist/esm/redirects.d.ts +3 -1
  33. package/dist/esm/redirects.js.map +1 -1
  34. package/dist/esm/route.d.ts +44 -47
  35. package/dist/esm/route.js.map +1 -1
  36. package/dist/esm/routeInfo.d.ts +5 -7
  37. package/dist/esm/router.d.ts +3 -3
  38. package/dist/esm/router.js +375 -328
  39. package/dist/esm/router.js.map +1 -1
  40. package/dist/esm/useParams.js.map +1 -1
  41. package/dist/esm/utils.d.ts +11 -4
  42. package/dist/esm/utils.js +20 -2
  43. package/dist/esm/utils.js.map +1 -1
  44. package/package.json +4 -2
  45. package/src/Matches.tsx +75 -37
  46. package/src/fileRoute.ts +17 -36
  47. package/src/index.tsx +0 -2
  48. package/src/link.tsx +189 -82
  49. package/src/redirects.ts +4 -2
  50. package/src/route.ts +149 -187
  51. package/src/routeInfo.ts +5 -7
  52. package/src/router.ts +501 -429
  53. package/src/useParams.tsx +2 -2
  54. package/src/utils.ts +41 -8
package/src/useParams.tsx CHANGED
@@ -21,7 +21,7 @@ export function useParams<
21
21
  return useMatch({
22
22
  ...opts,
23
23
  select: (match) => {
24
- return opts.select ? opts.select(match.params) : match.params
24
+ return opts.select ? opts.select(match.params as TParams) : match.params
25
25
  },
26
- })
26
+ }) as TSelected
27
27
  }
package/src/utils.ts CHANGED
@@ -15,12 +15,14 @@ export type PickRequired<T> = {
15
15
  }
16
16
 
17
17
  // from https://stackoverflow.com/a/76458160
18
- export type WithoutEmpty<T> = T extends T ? ({} extends T ? never : T) : never
18
+ export type WithoutEmpty<T> = T extends any ? ({} extends T ? never : T) : never
19
19
 
20
20
  // export type Expand<T> = T
21
21
  export type Expand<T> = T extends object
22
22
  ? T extends infer O
23
- ? { [K in keyof O]: O[K] }
23
+ ? O extends Function
24
+ ? O
25
+ : { [K in keyof O]: O[K] }
24
26
  : never
25
27
  : T
26
28
 
@@ -36,10 +38,12 @@ export type DeepPartial<T> = T extends object
36
38
  }
37
39
  : T
38
40
 
39
- // eslint-disable-next-line @typescript-eslint/naming-convention
40
- export type MakeDifferenceOptional<T, U> = Omit<U, keyof T> &
41
- Partial<Pick<U, keyof T & keyof U>> &
42
- PickRequired<Omit<U, keyof PickRequired<T>>>
41
+ export type MakeDifferenceOptional<TLeft, TRight> = Omit<
42
+ TRight,
43
+ keyof TLeft
44
+ > & {
45
+ [K in keyof TLeft & keyof TRight]?: TRight[K]
46
+ }
43
47
 
44
48
  // from https://stackoverflow.com/a/53955431
45
49
  // eslint-disable-next-line @typescript-eslint/naming-convention
@@ -78,8 +82,6 @@ export type UnionToTuple<T, TLast = LastInUnion<T>> = [T] extends [never]
78
82
 
79
83
  //
80
84
 
81
- export const isServer = typeof document === 'undefined'
82
-
83
85
  export function last<T>(arr: Array<T>) {
84
86
  return arr[arr.length - 1]
85
87
  }
@@ -306,3 +308,34 @@ export function removeTrailingSlash(value: string): string {
306
308
  export function exactPathTest(pathName1: string, pathName2: string): boolean {
307
309
  return removeTrailingSlash(pathName1) === removeTrailingSlash(pathName2)
308
310
  }
311
+
312
+ export type ControlledPromise<T> = Promise<T> & {
313
+ resolve: (value: T) => void
314
+ reject: (value: any) => void
315
+ status: 'pending' | 'resolved' | 'rejected'
316
+ }
317
+
318
+ export function createControlledPromise<T>(onResolve?: () => void) {
319
+ let resolveLoadPromise!: () => void
320
+ let rejectLoadPromise!: (value: any) => void
321
+
322
+ const controlledPromise = new Promise<void>((resolve, reject) => {
323
+ resolveLoadPromise = resolve
324
+ rejectLoadPromise = reject
325
+ }) as ControlledPromise<T>
326
+
327
+ controlledPromise.status = 'pending'
328
+
329
+ controlledPromise.resolve = () => {
330
+ controlledPromise.status = 'resolved'
331
+ resolveLoadPromise()
332
+ onResolve?.()
333
+ }
334
+
335
+ controlledPromise.reject = (e) => {
336
+ controlledPromise.status = 'rejected'
337
+ rejectLoadPromise(e)
338
+ }
339
+
340
+ return controlledPromise
341
+ }