@tanstack/react-router 1.39.8 → 1.41.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 (142) hide show
  1. package/dist/cjs/CatchBoundary.d.cts +2 -2
  2. package/dist/cjs/Match.cjs +238 -0
  3. package/dist/cjs/Match.cjs.map +1 -0
  4. package/dist/cjs/Match.d.cts +5 -0
  5. package/dist/cjs/Matches.cjs +8 -253
  6. package/dist/cjs/Matches.cjs.map +1 -1
  7. package/dist/cjs/Matches.d.cts +2 -11
  8. package/dist/cjs/RouterProvider.cjs.map +1 -1
  9. package/dist/cjs/RouterProvider.d.cts +3 -2
  10. package/dist/cjs/SafeFragment.cjs +8 -0
  11. package/dist/cjs/SafeFragment.cjs.map +1 -0
  12. package/dist/cjs/SafeFragment.d.cts +1 -0
  13. package/dist/cjs/ScriptOnce.cjs +28 -0
  14. package/dist/cjs/ScriptOnce.cjs.map +1 -0
  15. package/dist/cjs/ScriptOnce.d.cts +5 -0
  16. package/dist/cjs/Transitioner.cjs +2 -1
  17. package/dist/cjs/Transitioner.cjs.map +1 -1
  18. package/dist/cjs/awaited.cjs +14 -71
  19. package/dist/cjs/awaited.cjs.map +1 -1
  20. package/dist/cjs/awaited.d.cts +3 -6
  21. package/dist/cjs/defer.cjs +7 -13
  22. package/dist/cjs/defer.cjs.map +1 -1
  23. package/dist/cjs/defer.d.cts +2 -6
  24. package/dist/cjs/index.cjs +11 -7
  25. package/dist/cjs/index.cjs.map +1 -1
  26. package/dist/cjs/index.d.cts +8 -3
  27. package/dist/cjs/isServerSideError.cjs +22 -0
  28. package/dist/cjs/isServerSideError.cjs.map +1 -0
  29. package/dist/cjs/isServerSideError.d.cts +5 -0
  30. package/dist/cjs/link.cjs +8 -9
  31. package/dist/cjs/link.cjs.map +1 -1
  32. package/dist/cjs/link.d.cts +1 -0
  33. package/dist/cjs/matchContext.cjs +23 -0
  34. package/dist/cjs/matchContext.cjs.map +1 -0
  35. package/dist/cjs/matchContext.d.cts +2 -0
  36. package/dist/cjs/not-found.cjs +1 -2
  37. package/dist/cjs/not-found.cjs.map +1 -1
  38. package/dist/cjs/not-found.d.cts +2 -2
  39. package/dist/cjs/path.cjs +3 -6
  40. package/dist/cjs/path.cjs.map +1 -1
  41. package/dist/cjs/qss.cjs +3 -6
  42. package/dist/cjs/qss.cjs.map +1 -1
  43. package/dist/cjs/qss.d.cts +1 -1
  44. package/dist/cjs/redirects.cjs.map +1 -1
  45. package/dist/cjs/renderRouteNotFound.cjs +22 -0
  46. package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
  47. package/dist/cjs/renderRouteNotFound.d.cts +4 -0
  48. package/dist/cjs/root.cjs.map +1 -1
  49. package/dist/cjs/root.d.cts +1 -1
  50. package/dist/cjs/route.cjs.map +1 -1
  51. package/dist/cjs/router.cjs +33 -26
  52. package/dist/cjs/router.cjs.map +1 -1
  53. package/dist/cjs/router.d.cts +16 -11
  54. package/dist/cjs/scroll-restoration.cjs +1 -2
  55. package/dist/cjs/scroll-restoration.cjs.map +1 -1
  56. package/dist/cjs/useMatch.cjs +2 -2
  57. package/dist/cjs/useMatch.cjs.map +1 -1
  58. package/dist/cjs/utils.cjs +4 -3
  59. package/dist/cjs/utils.cjs.map +1 -1
  60. package/dist/cjs/utils.d.cts +3 -2
  61. package/dist/esm/CatchBoundary.d.ts +2 -2
  62. package/dist/esm/Match.d.ts +5 -0
  63. package/dist/esm/Match.js +221 -0
  64. package/dist/esm/Match.js.map +1 -0
  65. package/dist/esm/Matches.d.ts +2 -11
  66. package/dist/esm/Matches.js +5 -250
  67. package/dist/esm/Matches.js.map +1 -1
  68. package/dist/esm/RouterProvider.d.ts +3 -2
  69. package/dist/esm/RouterProvider.js.map +1 -1
  70. package/dist/esm/SafeFragment.d.ts +1 -0
  71. package/dist/esm/SafeFragment.js +8 -0
  72. package/dist/esm/SafeFragment.js.map +1 -0
  73. package/dist/esm/ScriptOnce.d.ts +5 -0
  74. package/dist/esm/ScriptOnce.js +28 -0
  75. package/dist/esm/ScriptOnce.js.map +1 -0
  76. package/dist/esm/Transitioner.js +2 -1
  77. package/dist/esm/Transitioner.js.map +1 -1
  78. package/dist/esm/awaited.d.ts +3 -6
  79. package/dist/esm/awaited.js +16 -73
  80. package/dist/esm/awaited.js.map +1 -1
  81. package/dist/esm/defer.d.ts +2 -6
  82. package/dist/esm/defer.js +8 -14
  83. package/dist/esm/defer.js.map +1 -1
  84. package/dist/esm/index.d.ts +8 -3
  85. package/dist/esm/index.js +9 -5
  86. package/dist/esm/index.js.map +1 -1
  87. package/dist/esm/isServerSideError.d.ts +5 -0
  88. package/dist/esm/isServerSideError.js +22 -0
  89. package/dist/esm/isServerSideError.js.map +1 -0
  90. package/dist/esm/link.d.ts +1 -0
  91. package/dist/esm/link.js +8 -9
  92. package/dist/esm/link.js.map +1 -1
  93. package/dist/esm/matchContext.d.ts +2 -0
  94. package/dist/esm/matchContext.js +6 -0
  95. package/dist/esm/matchContext.js.map +1 -0
  96. package/dist/esm/not-found.d.ts +2 -2
  97. package/dist/esm/not-found.js +1 -2
  98. package/dist/esm/not-found.js.map +1 -1
  99. package/dist/esm/path.js +3 -6
  100. package/dist/esm/path.js.map +1 -1
  101. package/dist/esm/qss.d.ts +1 -1
  102. package/dist/esm/qss.js +3 -6
  103. package/dist/esm/qss.js.map +1 -1
  104. package/dist/esm/redirects.js.map +1 -1
  105. package/dist/esm/renderRouteNotFound.d.ts +4 -0
  106. package/dist/esm/renderRouteNotFound.js +22 -0
  107. package/dist/esm/renderRouteNotFound.js.map +1 -0
  108. package/dist/esm/root.d.ts +1 -1
  109. package/dist/esm/root.js.map +1 -1
  110. package/dist/esm/route.js.map +1 -1
  111. package/dist/esm/router.d.ts +16 -11
  112. package/dist/esm/router.js +33 -26
  113. package/dist/esm/router.js.map +1 -1
  114. package/dist/esm/scroll-restoration.js +1 -2
  115. package/dist/esm/scroll-restoration.js.map +1 -1
  116. package/dist/esm/useMatch.js +1 -1
  117. package/dist/esm/useMatch.js.map +1 -1
  118. package/dist/esm/utils.d.ts +3 -2
  119. package/dist/esm/utils.js +4 -3
  120. package/dist/esm/utils.js.map +1 -1
  121. package/package.json +6 -5
  122. package/src/Match.tsx +296 -0
  123. package/src/Matches.tsx +4 -333
  124. package/src/RouterProvider.tsx +2 -1
  125. package/src/SafeFragment.tsx +5 -0
  126. package/src/ScriptOnce.tsx +27 -0
  127. package/src/Transitioner.tsx +1 -1
  128. package/src/awaited.tsx +17 -89
  129. package/src/defer.ts +9 -26
  130. package/src/index.tsx +7 -13
  131. package/src/isServerSideError.tsx +23 -0
  132. package/src/link.tsx +5 -0
  133. package/src/matchContext.tsx +3 -0
  134. package/src/not-found.tsx +1 -1
  135. package/src/qss.ts +5 -6
  136. package/src/redirects.ts +0 -1
  137. package/src/renderRouteNotFound.tsx +28 -0
  138. package/src/root.ts +1 -1
  139. package/src/route.ts +1 -1
  140. package/src/router.ts +54 -39
  141. package/src/useMatch.tsx +1 -1
  142. package/src/utils.ts +11 -9
@@ -50,7 +50,7 @@ class Router {
50
50
  }
51
51
  }
52
52
  if (
53
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
53
+ // eslint-disable-next-line ts/no-unnecessary-condition
54
54
  !this.history || this.options.history && this.options.history !== this.history
55
55
  ) {
56
56
  this.history = this.options.history ?? (typeof document !== "undefined" ? createBrowserHistory() : createMemoryHistory({
@@ -340,6 +340,7 @@ class Router {
340
340
  }
341
341
  match = {
342
342
  id: matchId,
343
+ index,
343
344
  routeId: route.id,
344
345
  params: routeParams,
345
346
  pathname: joinPaths([this.basepath, interpolatedPath]),
@@ -509,6 +510,7 @@ class Router {
509
510
  this.commitLocation = async ({
510
511
  startTransition,
511
512
  viewTransition,
513
+ ignoreBlocker,
512
514
  ...next
513
515
  }) => {
514
516
  const isSameState = () => {
@@ -547,7 +549,8 @@ class Router {
547
549
  this.shouldViewTransition = viewTransition;
548
550
  this.history[next.replace ? "replace" : "push"](
549
551
  nextHistory.href,
550
- nextHistory.state
552
+ nextHistory.state,
553
+ { ignoreBlocker }
551
554
  );
552
555
  }
553
556
  this.resetNextScroll = next.resetScroll ?? true;
@@ -558,6 +561,7 @@ class Router {
558
561
  resetScroll,
559
562
  startTransition,
560
563
  viewTransition,
564
+ ignoreBlocker,
561
565
  ...rest
562
566
  } = {}) => {
563
567
  const location = this.buildLocation(rest);
@@ -566,7 +570,8 @@ class Router {
566
570
  startTransition,
567
571
  viewTransition,
568
572
  replace,
569
- resetScroll
573
+ resetScroll,
574
+ ignoreBlocker
570
575
  });
571
576
  };
572
577
  this.navigate = ({ from, to, __isRedirect, ...rest }) => {
@@ -741,8 +746,7 @@ class Router {
741
746
  return updated;
742
747
  };
743
748
  const handleRedirectAndNotFound = (match, err) => {
744
- if (isResolvedRedirect(err))
745
- throw err;
749
+ if (isResolvedRedirect(err)) throw err;
746
750
  if (isRedirect(err) || isNotFound(err)) {
747
751
  updateMatch(match.id, (prev) => ({
748
752
  ...prev,
@@ -941,7 +945,13 @@ class Router {
941
945
  })
942
946
  );
943
947
  }
944
- const loaderData = await loaderPromise;
948
+ let loaderData = await loaderPromise;
949
+ if (this.serializeLoaderData) {
950
+ loaderData = this.serializeLoaderData(loaderData, {
951
+ router: this,
952
+ match
953
+ });
954
+ }
945
955
  checkLatest();
946
956
  handleRedirectAndNotFound(match, loaderData);
947
957
  await potentialPendingMinPromise();
@@ -1156,29 +1166,26 @@ class Router {
1156
1166
  }
1157
1167
  return match;
1158
1168
  };
1159
- this.registeredDeferredsIds = /* @__PURE__ */ new Map();
1160
- this.registeredDeferreds = /* @__PURE__ */ new WeakMap();
1161
- this.getDeferred = (uid) => {
1162
- const token = this.registeredDeferredsIds.get(uid);
1163
- if (!token) {
1164
- return void 0;
1165
- }
1166
- return this.registeredDeferreds.get(token);
1167
- };
1168
1169
  this.dehydrate = () => {
1169
1170
  var _a;
1170
1171
  const pickError = ((_a = this.options.errorSerializer) == null ? void 0 : _a.serialize) ?? defaultSerializeError;
1171
1172
  return {
1172
1173
  state: {
1173
- dehydratedMatches: this.state.matches.map((d) => ({
1174
- ...pick(d, ["id", "status", "updatedAt", "loaderData"]),
1175
- // If an error occurs server-side during SSRing,
1176
- // send a small subset of the error to the client
1177
- error: d.error ? {
1178
- data: pickError(d.error),
1179
- __isServerError: true
1180
- } : void 0
1181
- }))
1174
+ dehydratedMatches: this.state.matches.map((d) => {
1175
+ return {
1176
+ ...pick(d, ["id", "status", "updatedAt"]),
1177
+ // If an error occurs server-side during SSRing,
1178
+ // send a small subset of the error to the client
1179
+ error: d.error ? {
1180
+ data: pickError(d.error),
1181
+ __isServerError: true
1182
+ } : void 0
1183
+ // NOTE: We don't send the loader data here, because
1184
+ // there is a potential that it needs to be streamed.
1185
+ // Instead, we render it next to the route match in the HTML
1186
+ // which gives us the potential to stream it via suspense.
1187
+ };
1188
+ })
1182
1189
  },
1183
1190
  manifest: this.manifest
1184
1191
  };
@@ -1187,11 +1194,11 @@ class Router {
1187
1194
  var _a, _b, _c;
1188
1195
  let _ctx = __do_not_use_server_ctx;
1189
1196
  if (typeof document !== "undefined") {
1190
- _ctx = (_a = window.__TSR_DEHYDRATED__) == null ? void 0 : _a.data;
1197
+ _ctx = (_a = window.__TSR__) == null ? void 0 : _a.dehydrated;
1191
1198
  }
1192
1199
  invariant(
1193
1200
  _ctx,
1194
- "Expected to find a __TSR_DEHYDRATED__ property on window... but we did not. Please file an issue!"
1201
+ "Expected to find a dehydrated data on window.__TSR__.dehydrated... but we did not. Please file an issue!"
1195
1202
  );
1196
1203
  const ctx = this.options.transformer.parse(_ctx);
1197
1204
  this.dehydratedData = ctx.payload;