@tanstack/react-router 1.131.5 → 1.132.0-alpha.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.
Files changed (126) hide show
  1. package/dist/cjs/Asset.cjs +2 -2
  2. package/dist/cjs/Asset.cjs.map +1 -1
  3. package/dist/cjs/CatchBoundary.cjs.map +1 -1
  4. package/dist/cjs/ClientOnly.cjs.map +1 -1
  5. package/dist/cjs/HeadContent.cjs +10 -17
  6. package/dist/cjs/HeadContent.cjs.map +1 -1
  7. package/dist/cjs/Match.cjs +37 -44
  8. package/dist/cjs/Match.cjs.map +1 -1
  9. package/dist/cjs/Matches.cjs +8 -12
  10. package/dist/cjs/Matches.cjs.map +1 -1
  11. package/dist/cjs/RouterProvider.cjs.map +1 -1
  12. package/dist/cjs/SafeFragment.cjs.map +1 -1
  13. package/dist/cjs/ScriptOnce.cjs.map +1 -1
  14. package/dist/cjs/Scripts.cjs +7 -11
  15. package/dist/cjs/Scripts.cjs.map +1 -1
  16. package/dist/cjs/ScrollRestoration.cjs +3 -4
  17. package/dist/cjs/ScrollRestoration.cjs.map +1 -1
  18. package/dist/cjs/Transitioner.cjs.map +1 -1
  19. package/dist/cjs/awaited.cjs.map +1 -1
  20. package/dist/cjs/fileRoute.cjs +8 -8
  21. package/dist/cjs/fileRoute.cjs.map +1 -1
  22. package/dist/cjs/index.cjs +0 -12
  23. package/dist/cjs/index.cjs.map +1 -1
  24. package/dist/cjs/index.d.cts +1 -4
  25. package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
  26. package/dist/cjs/link.cjs +6 -6
  27. package/dist/cjs/link.cjs.map +1 -1
  28. package/dist/cjs/matchContext.cjs.map +1 -1
  29. package/dist/cjs/not-found.cjs +2 -4
  30. package/dist/cjs/not-found.cjs.map +1 -1
  31. package/dist/cjs/renderRouteNotFound.cjs.map +1 -1
  32. package/dist/cjs/route.cjs +21 -21
  33. package/dist/cjs/route.cjs.map +1 -1
  34. package/dist/cjs/router.cjs.map +1 -1
  35. package/dist/cjs/routerContext.cjs.map +1 -1
  36. package/dist/cjs/scroll-restoration.cjs.map +1 -1
  37. package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
  38. package/dist/cjs/ssr/RouterServer.cjs.map +1 -1
  39. package/dist/cjs/ssr/defaultRenderHandler.cjs.map +1 -1
  40. package/dist/cjs/ssr/defaultStreamHandler.cjs.map +1 -1
  41. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
  42. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
  43. package/dist/cjs/typePrimitives.d.cts +6 -0
  44. package/dist/cjs/useBlocker.cjs +1 -1
  45. package/dist/cjs/useBlocker.cjs.map +1 -1
  46. package/dist/cjs/useCanGoBack.cjs.map +1 -1
  47. package/dist/cjs/useLoaderData.cjs.map +1 -1
  48. package/dist/cjs/useLoaderDeps.cjs.map +1 -1
  49. package/dist/cjs/useLocation.cjs +1 -1
  50. package/dist/cjs/useLocation.cjs.map +1 -1
  51. package/dist/cjs/useMatch.cjs.map +1 -1
  52. package/dist/cjs/useNavigate.cjs +2 -2
  53. package/dist/cjs/useNavigate.cjs.map +1 -1
  54. package/dist/cjs/useParams.cjs.map +1 -1
  55. package/dist/cjs/useRouter.cjs +1 -1
  56. package/dist/cjs/useRouter.cjs.map +1 -1
  57. package/dist/cjs/useRouterState.cjs +3 -3
  58. package/dist/cjs/useRouterState.cjs.map +1 -1
  59. package/dist/cjs/useSearch.cjs.map +1 -1
  60. package/dist/cjs/utils.cjs.map +1 -1
  61. package/dist/esm/Asset.js +2 -2
  62. package/dist/esm/Asset.js.map +1 -1
  63. package/dist/esm/CatchBoundary.js.map +1 -1
  64. package/dist/esm/ClientOnly.js.map +1 -1
  65. package/dist/esm/HeadContent.js +10 -17
  66. package/dist/esm/HeadContent.js.map +1 -1
  67. package/dist/esm/Match.js +38 -45
  68. package/dist/esm/Match.js.map +1 -1
  69. package/dist/esm/Matches.js +8 -12
  70. package/dist/esm/Matches.js.map +1 -1
  71. package/dist/esm/RouterProvider.js.map +1 -1
  72. package/dist/esm/SafeFragment.js.map +1 -1
  73. package/dist/esm/ScriptOnce.js.map +1 -1
  74. package/dist/esm/Scripts.js +7 -11
  75. package/dist/esm/Scripts.js.map +1 -1
  76. package/dist/esm/ScrollRestoration.js +3 -4
  77. package/dist/esm/ScrollRestoration.js.map +1 -1
  78. package/dist/esm/Transitioner.js.map +1 -1
  79. package/dist/esm/awaited.js.map +1 -1
  80. package/dist/esm/fileRoute.js +8 -8
  81. package/dist/esm/fileRoute.js.map +1 -1
  82. package/dist/esm/index.d.ts +1 -4
  83. package/dist/esm/index.js +2 -8
  84. package/dist/esm/index.js.map +1 -1
  85. package/dist/esm/lazyRouteComponent.js.map +1 -1
  86. package/dist/esm/link.js +6 -6
  87. package/dist/esm/link.js.map +1 -1
  88. package/dist/esm/matchContext.js.map +1 -1
  89. package/dist/esm/not-found.js +2 -4
  90. package/dist/esm/not-found.js.map +1 -1
  91. package/dist/esm/renderRouteNotFound.js.map +1 -1
  92. package/dist/esm/route.js +21 -21
  93. package/dist/esm/route.js.map +1 -1
  94. package/dist/esm/router.js.map +1 -1
  95. package/dist/esm/routerContext.js.map +1 -1
  96. package/dist/esm/scroll-restoration.js.map +1 -1
  97. package/dist/esm/ssr/RouterClient.js.map +1 -1
  98. package/dist/esm/ssr/RouterServer.js.map +1 -1
  99. package/dist/esm/ssr/defaultRenderHandler.js.map +1 -1
  100. package/dist/esm/ssr/defaultStreamHandler.js.map +1 -1
  101. package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
  102. package/dist/esm/ssr/renderRouterToString.js.map +1 -1
  103. package/dist/esm/typePrimitives.d.ts +6 -0
  104. package/dist/esm/useBlocker.js +1 -1
  105. package/dist/esm/useBlocker.js.map +1 -1
  106. package/dist/esm/useCanGoBack.js.map +1 -1
  107. package/dist/esm/useLoaderData.js.map +1 -1
  108. package/dist/esm/useLoaderDeps.js.map +1 -1
  109. package/dist/esm/useLocation.js +1 -1
  110. package/dist/esm/useLocation.js.map +1 -1
  111. package/dist/esm/useMatch.js.map +1 -1
  112. package/dist/esm/useNavigate.js +2 -2
  113. package/dist/esm/useNavigate.js.map +1 -1
  114. package/dist/esm/useParams.js.map +1 -1
  115. package/dist/esm/useRouter.js +1 -1
  116. package/dist/esm/useRouter.js.map +1 -1
  117. package/dist/esm/useRouterState.js +3 -3
  118. package/dist/esm/useRouterState.js.map +1 -1
  119. package/dist/esm/useSearch.js.map +1 -1
  120. package/dist/esm/utils.js.map +1 -1
  121. package/dist/llms/rules/api.d.ts +1 -1
  122. package/dist/llms/rules/api.js +1 -0
  123. package/package.json +3 -3
  124. package/src/Match.tsx +36 -33
  125. package/src/index.tsx +0 -5
  126. package/src/useBlocker.tsx +1 -1
@@ -808,6 +808,7 @@ interface RouteMatch {
808
808
  paramsError: unknown
809
809
  searchError: unknown
810
810
  updatedAt: number
811
+ loadPromise?: Promise<void>
811
812
  loaderData?: Route['loaderData']
812
813
  context: Route['allContext']
813
814
  search: Route['fullSearchSchema']
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/react-router",
3
- "version": "1.131.5",
3
+ "version": "1.132.0-alpha.0",
4
4
  "description": "Modern and scalable routing for React applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -79,8 +79,8 @@
79
79
  "isbot": "^5.1.22",
80
80
  "tiny-invariant": "^1.3.3",
81
81
  "tiny-warning": "^1.0.3",
82
- "@tanstack/history": "1.131.2",
83
- "@tanstack/router-core": "1.131.5"
82
+ "@tanstack/history": "1.132.0-alpha.0",
83
+ "@tanstack/router-core": "1.132.0-alpha.0"
84
84
  },
85
85
  "devDependencies": {
86
86
  "@testing-library/jest-dom": "^6.6.3",
package/src/Match.tsx CHANGED
@@ -6,6 +6,7 @@ import {
6
6
  getLocationChangeInfo,
7
7
  isNotFound,
8
8
  isRedirect,
9
+ pick,
9
10
  rootRouteId,
10
11
  } from '@tanstack/router-core'
11
12
  import { CatchBoundary, ErrorComponent } from './CatchBoundary'
@@ -36,11 +37,7 @@ export const Match = React.memo(function MatchImpl({
36
37
  match,
37
38
  `Could not find match for matchId "${matchId}". Please file an issue!`,
38
39
  )
39
- return {
40
- routeId: match.routeId,
41
- ssr: match.ssr,
42
- _displayPending: match._displayPending,
43
- }
40
+ return pick(match, ['routeId', 'ssr', '_displayPending'])
44
41
  },
45
42
  structuralSharing: true as any,
46
43
  })
@@ -189,7 +186,8 @@ export const MatchInner = React.memo(function MatchInnerImpl({
189
186
 
190
187
  const { match, key, routeId } = useRouterState({
191
188
  select: (s) => {
192
- const match = s.matches.find((d) => d.id === matchId)!
189
+ const matchIndex = s.matches.findIndex((d) => d.id === matchId)
190
+ const match = s.matches[matchIndex]!
193
191
  const routeId = match.routeId as string
194
192
 
195
193
  const remountFn =
@@ -206,13 +204,13 @@ export const MatchInner = React.memo(function MatchInnerImpl({
206
204
  return {
207
205
  key,
208
206
  routeId,
209
- match: {
210
- id: match.id,
211
- status: match.status,
212
- error: match.error,
213
- _forcePending: match._forcePending,
214
- _displayPending: match._displayPending,
215
- },
207
+ match: pick(match, [
208
+ 'id',
209
+ 'status',
210
+ 'error',
211
+ '_forcePending',
212
+ '_displayPending',
213
+ ]),
216
214
  }
217
215
  },
218
216
  structuralSharing: true as any,
@@ -229,11 +227,11 @@ export const MatchInner = React.memo(function MatchInnerImpl({
229
227
  }, [key, route.options.component, router.options.defaultComponent])
230
228
 
231
229
  if (match._displayPending) {
232
- throw router.getMatch(match.id)?._nonReactive.displayPendingPromise
230
+ throw router.getMatch(match.id)?.displayPendingPromise
233
231
  }
234
232
 
235
233
  if (match._forcePending) {
236
- throw router.getMatch(match.id)?._nonReactive.minPendingPromise
234
+ throw router.getMatch(match.id)?.minPendingPromise
237
235
  }
238
236
 
239
237
  // see also hydrate() in packages/router-core/src/ssr/ssr-client.ts
@@ -241,26 +239,31 @@ export const MatchInner = React.memo(function MatchInnerImpl({
241
239
  // We're pending, and if we have a minPendingMs, we need to wait for it
242
240
  const pendingMinMs =
243
241
  route.options.pendingMinMs ?? router.options.defaultPendingMinMs
244
- if (pendingMinMs) {
245
- const routerMatch = router.getMatch(match.id)
246
- if (routerMatch && !routerMatch._nonReactive.minPendingPromise) {
247
- // Create a promise that will resolve after the minPendingMs
248
- if (!router.isServer) {
249
- const minPendingPromise = createControlledPromise<void>()
250
-
251
- Promise.resolve().then(() => {
252
- routerMatch._nonReactive.minPendingPromise = minPendingPromise
253
- })
254
242
 
255
- setTimeout(() => {
256
- minPendingPromise.resolve()
257
- // We've handled the minPendingPromise, so we can delete it
258
- routerMatch._nonReactive.minPendingPromise = undefined
259
- }, pendingMinMs)
260
- }
243
+ if (pendingMinMs && !router.getMatch(match.id)?.minPendingPromise) {
244
+ // Create a promise that will resolve after the minPendingMs
245
+ if (!router.isServer) {
246
+ const minPendingPromise = createControlledPromise<void>()
247
+
248
+ Promise.resolve().then(() => {
249
+ router.updateMatch(match.id, (prev) => ({
250
+ ...prev,
251
+ minPendingPromise,
252
+ }))
253
+ })
254
+
255
+ setTimeout(() => {
256
+ minPendingPromise.resolve()
257
+
258
+ // We've handled the minPendingPromise, so we can delete it
259
+ router.updateMatch(match.id, (prev) => ({
260
+ ...prev,
261
+ minPendingPromise: undefined,
262
+ }))
263
+ }, pendingMinMs)
261
264
  }
262
265
  }
263
- throw router.getMatch(match.id)?._nonReactive.loadPromise
266
+ throw router.getMatch(match.id)?.loadPromise
264
267
  }
265
268
 
266
269
  if (match.status === 'notFound') {
@@ -277,7 +280,7 @@ export const MatchInner = React.memo(function MatchInnerImpl({
277
280
  // false,
278
281
  // 'Tried to render a redirected route match! This is a weird circumstance, please file an issue!',
279
282
  // )
280
- throw router.getMatch(match.id)?._nonReactive.loadPromise
283
+ throw router.getMatch(match.id)?.loadPromise
281
284
  }
282
285
 
283
286
  if (match.status === 'error') {
package/src/index.tsx CHANGED
@@ -1,6 +1,3 @@
1
- export { default as invariant } from 'tiny-invariant'
2
- export { default as warning } from 'tiny-warning'
3
-
4
1
  export {
5
2
  defer,
6
3
  TSR_DEFERRED_PROMISE,
@@ -24,14 +21,12 @@ export {
24
21
  defaultStringifySearch,
25
22
  parseSearchWith,
26
23
  stringifySearchWith,
27
- escapeJSON, // SSR
28
24
  pick,
29
25
  functionalUpdate,
30
26
  replaceEqualDeep,
31
27
  isPlainObject,
32
28
  isPlainArray,
33
29
  deepEqual,
34
- shallow,
35
30
  createControlledPromise,
36
31
  retainSearchParams,
37
32
  stripSearchParams,
@@ -176,7 +176,7 @@ export function useBlocker(
176
176
  function getLocation(
177
177
  location: HistoryLocation,
178
178
  ): AnyShouldBlockFnLocation {
179
- const parsedLocation = router.parseLocation(location)
179
+ const parsedLocation = router.parseLocation(undefined, location)
180
180
  const matchedRoutes = router.getMatchedRoutes(
181
181
  parsedLocation.pathname,
182
182
  undefined,