@tanstack/react-router 1.167.5 → 1.168.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 (89) hide show
  1. package/dist/cjs/Match.cjs +118 -52
  2. package/dist/cjs/Match.cjs.map +1 -1
  3. package/dist/cjs/Matches.cjs +20 -20
  4. package/dist/cjs/Matches.cjs.map +1 -1
  5. package/dist/cjs/Scripts.cjs +36 -32
  6. package/dist/cjs/Scripts.cjs.map +1 -1
  7. package/dist/cjs/Transitioner.cjs +10 -16
  8. package/dist/cjs/Transitioner.cjs.map +1 -1
  9. package/dist/cjs/headContentUtils.cjs +147 -59
  10. package/dist/cjs/headContentUtils.cjs.map +1 -1
  11. package/dist/cjs/index.cjs +1 -1
  12. package/dist/cjs/index.dev.cjs +1 -1
  13. package/dist/cjs/link.cjs +34 -29
  14. package/dist/cjs/link.cjs.map +1 -1
  15. package/dist/cjs/not-found.cjs +20 -2
  16. package/dist/cjs/not-found.cjs.map +1 -1
  17. package/dist/cjs/router.cjs +2 -1
  18. package/dist/cjs/router.cjs.map +1 -1
  19. package/dist/cjs/routerStores.cjs +21 -0
  20. package/dist/cjs/routerStores.cjs.map +1 -0
  21. package/dist/cjs/routerStores.d.cts +7 -0
  22. package/dist/cjs/ssr/RouterClient.cjs +1 -1
  23. package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
  24. package/dist/cjs/ssr/renderRouterToStream.cjs +2 -2
  25. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
  26. package/dist/cjs/ssr/renderRouterToString.cjs +1 -1
  27. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
  28. package/dist/cjs/useCanGoBack.cjs +7 -2
  29. package/dist/cjs/useCanGoBack.cjs.map +1 -1
  30. package/dist/cjs/useLocation.cjs +21 -2
  31. package/dist/cjs/useLocation.cjs.map +1 -1
  32. package/dist/cjs/useMatch.cjs +29 -9
  33. package/dist/cjs/useMatch.cjs.map +1 -1
  34. package/dist/cjs/useRouterState.cjs +2 -2
  35. package/dist/cjs/useRouterState.cjs.map +1 -1
  36. package/dist/esm/Match.js +118 -52
  37. package/dist/esm/Match.js.map +1 -1
  38. package/dist/esm/Matches.js +21 -21
  39. package/dist/esm/Matches.js.map +1 -1
  40. package/dist/esm/Scripts.js +36 -32
  41. package/dist/esm/Scripts.js.map +1 -1
  42. package/dist/esm/Transitioner.js +10 -16
  43. package/dist/esm/Transitioner.js.map +1 -1
  44. package/dist/esm/headContentUtils.js +148 -60
  45. package/dist/esm/headContentUtils.js.map +1 -1
  46. package/dist/esm/index.dev.js +1 -1
  47. package/dist/esm/index.js +1 -1
  48. package/dist/esm/link.js +34 -29
  49. package/dist/esm/link.js.map +1 -1
  50. package/dist/esm/not-found.js +20 -2
  51. package/dist/esm/not-found.js.map +1 -1
  52. package/dist/esm/router.js +2 -1
  53. package/dist/esm/router.js.map +1 -1
  54. package/dist/esm/routerStores.d.ts +7 -0
  55. package/dist/esm/routerStores.js +20 -0
  56. package/dist/esm/routerStores.js.map +1 -0
  57. package/dist/esm/ssr/RouterClient.js +1 -1
  58. package/dist/esm/ssr/RouterClient.js.map +1 -1
  59. package/dist/esm/ssr/renderRouterToStream.js +2 -2
  60. package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
  61. package/dist/esm/ssr/renderRouterToString.js +1 -1
  62. package/dist/esm/ssr/renderRouterToString.js.map +1 -1
  63. package/dist/esm/useCanGoBack.js +6 -2
  64. package/dist/esm/useCanGoBack.js.map +1 -1
  65. package/dist/esm/useLocation.js +20 -2
  66. package/dist/esm/useLocation.js.map +1 -1
  67. package/dist/esm/useMatch.js +29 -9
  68. package/dist/esm/useMatch.js.map +1 -1
  69. package/dist/esm/useRouterState.js +2 -2
  70. package/dist/esm/useRouterState.js.map +1 -1
  71. package/dist/llms/rules/api.d.ts +1 -1
  72. package/dist/llms/rules/api.js +3 -9
  73. package/package.json +3 -3
  74. package/src/Match.tsx +218 -78
  75. package/src/Matches.tsx +45 -25
  76. package/src/Scripts.tsx +72 -44
  77. package/src/Transitioner.tsx +24 -16
  78. package/src/headContentUtils.tsx +210 -27
  79. package/src/link.tsx +66 -71
  80. package/src/not-found.tsx +41 -4
  81. package/src/router.ts +2 -1
  82. package/src/routerStores.ts +26 -0
  83. package/src/ssr/RouterClient.tsx +1 -1
  84. package/src/ssr/renderRouterToStream.tsx +2 -2
  85. package/src/ssr/renderRouterToString.tsx +1 -1
  86. package/src/useCanGoBack.ts +14 -2
  87. package/src/useLocation.tsx +32 -5
  88. package/src/useMatch.tsx +61 -21
  89. package/src/useRouterState.tsx +4 -2
@@ -1,9 +1,8 @@
1
1
  const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
2
  const require_CatchBoundary = require("./CatchBoundary.cjs");
3
3
  const require_ClientOnly = require("./ClientOnly.cjs");
4
- const require_useRouter = require("./useRouter.cjs");
5
- const require_useRouterState = require("./useRouterState.cjs");
6
4
  const require_matchContext = require("./matchContext.cjs");
5
+ const require_useRouter = require("./useRouter.cjs");
7
6
  const require_not_found = require("./not-found.cjs");
8
7
  const require_SafeFragment = require("./SafeFragment.cjs");
9
8
  const require_renderRouteNotFound = require("./renderRouteNotFound.cjs");
@@ -14,27 +13,56 @@ react = require_runtime.__toESM(react);
14
13
  let react_jsx_runtime = require("react/jsx-runtime");
15
14
  let tiny_warning = require("tiny-warning");
16
15
  tiny_warning = require_runtime.__toESM(tiny_warning);
16
+ let _tanstack_react_store = require("@tanstack/react-store");
17
+ let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer");
17
18
  let tiny_invariant = require("tiny-invariant");
18
19
  tiny_invariant = require_runtime.__toESM(tiny_invariant);
19
- let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer");
20
20
  //#region src/Match.tsx
21
21
  var Match = react.memo(function MatchImpl({ matchId }) {
22
22
  const router = require_useRouter.useRouter();
23
- const matchState = require_useRouterState.useRouterState({
24
- select: (s) => {
25
- const matchIndex = s.matches.findIndex((d) => d.id === matchId);
26
- const match = s.matches[matchIndex];
27
- (0, tiny_invariant.default)(match, `Could not find match for matchId "${matchId}". Please file an issue!`);
23
+ if (_tanstack_router_core_isServer.isServer ?? router.isServer) {
24
+ const match = router.stores.activeMatchStoresById.get(matchId)?.state;
25
+ (0, tiny_invariant.default)(match, `Could not find match for matchId "${matchId}". Please file an issue!`);
26
+ const routeId = match.routeId;
27
+ const parentRouteId = router.routesById[routeId].parentRoute?.id;
28
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MatchView, {
29
+ router,
30
+ matchId,
31
+ resetKey: router.stores.loadedAt.state,
32
+ matchState: {
33
+ routeId,
34
+ ssr: match.ssr,
35
+ _displayPending: match._displayPending,
36
+ parentRouteId
37
+ }
38
+ });
39
+ }
40
+ const matchStore = router.stores.activeMatchStoresById.get(matchId);
41
+ (0, tiny_invariant.default)(matchStore, `Could not find match for matchId "${matchId}". Please file an issue!`);
42
+ const resetKey = (0, _tanstack_react_store.useStore)(router.stores.loadedAt, (loadedAt) => loadedAt);
43
+ const match = (0, _tanstack_react_store.useStore)(matchStore, (value) => value);
44
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MatchView, {
45
+ router,
46
+ matchId,
47
+ resetKey,
48
+ matchState: react.useMemo(() => {
49
+ const routeId = match.routeId;
50
+ const parentRouteId = router.routesById[routeId].parentRoute?.id;
28
51
  return {
29
- routeId: match.routeId,
52
+ routeId,
30
53
  ssr: match.ssr,
31
54
  _displayPending: match._displayPending,
32
- resetKey: s.loadedAt,
33
- parentRouteId: s.matches[matchIndex - 1]?.routeId
55
+ parentRouteId
34
56
  };
35
- },
36
- structuralSharing: true
57
+ }, [
58
+ match._displayPending,
59
+ match.routeId,
60
+ match.ssr,
61
+ router.routesById
62
+ ])
37
63
  });
64
+ });
65
+ function MatchView({ router, matchId, resetKey, matchState }) {
38
66
  const route = router.routesById[matchState.routeId];
39
67
  const PendingComponent = route.options.pendingComponent ?? router.options.defaultPendingComponent;
40
68
  const pendingElement = PendingComponent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PendingComponent, {}) : null;
@@ -50,7 +78,7 @@ var Match = react.memo(function MatchImpl({ matchId }) {
50
78
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ResolvedSuspenseBoundary, {
51
79
  fallback: pendingElement,
52
80
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ResolvedCatchBoundary, {
53
- getResetKey: () => matchState.resetKey,
81
+ getResetKey: () => resetKey,
54
82
  errorComponent: routeErrorComponent || require_CatchBoundary.ErrorComponent,
55
83
  onCatch: (error, errorInfo) => {
56
84
  if ((0, _tanstack_router_core.isNotFound)(error)) throw error;
@@ -70,7 +98,7 @@ var Match = react.memo(function MatchImpl({ matchId }) {
70
98
  })
71
99
  })
72
100
  }), matchState.parentRouteId === _tanstack_router_core.rootRouteId && router.options.scrollRestoration ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(OnRendered, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_scroll_restoration.ScrollRestoration, {})] }) : null] });
73
- });
101
+ }
74
102
  function OnRendered() {
75
103
  const router = require_useRouter.useRouter();
76
104
  const prevLocationRef = react.useRef(void 0);
@@ -80,7 +108,7 @@ function OnRendered() {
80
108
  if (el && (prevLocationRef.current === void 0 || prevLocationRef.current.href !== router.latestLocation.href)) {
81
109
  router.emit({
82
110
  type: "onRendered",
83
- ...(0, _tanstack_router_core.getLocationChangeInfo)(router.state)
111
+ ...(0, _tanstack_router_core.getLocationChangeInfo)(router.stores.location.state, router.stores.resolvedLocation.state)
84
112
  });
85
113
  prevLocationRef.current = router.latestLocation;
86
114
  }
@@ -89,31 +117,59 @@ function OnRendered() {
89
117
  }
90
118
  var MatchInner = react.memo(function MatchInnerImpl({ matchId }) {
91
119
  const router = require_useRouter.useRouter();
92
- const { match, key, routeId } = require_useRouterState.useRouterState({
93
- select: (s) => {
94
- const match = s.matches.find((d) => d.id === matchId);
95
- const routeId = match.routeId;
96
- const remountDeps = (router.routesById[routeId].options.remountDeps ?? router.options.defaultRemountDeps)?.({
97
- routeId,
98
- loaderDeps: match.loaderDeps,
99
- params: match._strictParams,
100
- search: match._strictSearch
101
- });
102
- return {
103
- key: remountDeps ? JSON.stringify(remountDeps) : void 0,
104
- routeId,
105
- match: {
106
- id: match.id,
107
- status: match.status,
108
- error: match.error,
109
- _forcePending: match._forcePending,
110
- _displayPending: match._displayPending
111
- }
112
- };
113
- },
114
- structuralSharing: true
115
- });
120
+ if (_tanstack_router_core_isServer.isServer ?? router.isServer) {
121
+ const match = router.stores.activeMatchStoresById.get(matchId)?.state;
122
+ (0, tiny_invariant.default)(match, `Could not find match for matchId "${matchId}". Please file an issue!`);
123
+ const routeId = match.routeId;
124
+ const route = router.routesById[routeId];
125
+ const remountDeps = (router.routesById[routeId].options.remountDeps ?? router.options.defaultRemountDeps)?.({
126
+ routeId,
127
+ loaderDeps: match.loaderDeps,
128
+ params: match._strictParams,
129
+ search: match._strictSearch
130
+ });
131
+ const key = remountDeps ? JSON.stringify(remountDeps) : void 0;
132
+ const Comp = route.options.component ?? router.options.defaultComponent;
133
+ const out = Comp ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Comp, {}, key) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Outlet, {});
134
+ if (match._displayPending) throw router.getMatch(match.id)?._nonReactive.displayPendingPromise;
135
+ if (match._forcePending) throw router.getMatch(match.id)?._nonReactive.minPendingPromise;
136
+ if (match.status === "pending") throw router.getMatch(match.id)?._nonReactive.loadPromise;
137
+ if (match.status === "notFound") {
138
+ (0, tiny_invariant.default)((0, _tanstack_router_core.isNotFound)(match.error), "Expected a notFound error");
139
+ return require_renderRouteNotFound.renderRouteNotFound(router, route, match.error);
140
+ }
141
+ if (match.status === "redirected") {
142
+ (0, tiny_invariant.default)((0, _tanstack_router_core.isRedirect)(match.error), "Expected a redirect error");
143
+ throw router.getMatch(match.id)?._nonReactive.loadPromise;
144
+ }
145
+ if (match.status === "error") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)((route.options.errorComponent ?? router.options.defaultErrorComponent) || require_CatchBoundary.ErrorComponent, {
146
+ error: match.error,
147
+ reset: void 0,
148
+ info: { componentStack: "" }
149
+ });
150
+ return out;
151
+ }
152
+ const matchStore = router.stores.activeMatchStoresById.get(matchId);
153
+ (0, tiny_invariant.default)(matchStore, `Could not find match for matchId "${matchId}". Please file an issue!`);
154
+ const match = (0, _tanstack_react_store.useStore)(matchStore, (value) => value);
155
+ const routeId = match.routeId;
116
156
  const route = router.routesById[routeId];
157
+ const key = react.useMemo(() => {
158
+ const remountDeps = (router.routesById[routeId].options.remountDeps ?? router.options.defaultRemountDeps)?.({
159
+ routeId,
160
+ loaderDeps: match.loaderDeps,
161
+ params: match._strictParams,
162
+ search: match._strictSearch
163
+ });
164
+ return remountDeps ? JSON.stringify(remountDeps) : void 0;
165
+ }, [
166
+ routeId,
167
+ match.loaderDeps,
168
+ match._strictParams,
169
+ match._strictSearch,
170
+ router.options.defaultRemountDeps,
171
+ router.routesById
172
+ ]);
117
173
  const out = react.useMemo(() => {
118
174
  const Comp = route.options.component ?? router.options.defaultComponent;
119
175
  if (Comp) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Comp, {}, key);
@@ -169,19 +225,29 @@ var MatchInner = react.memo(function MatchInnerImpl({ matchId }) {
169
225
  var Outlet = react.memo(function OutletImpl() {
170
226
  const router = require_useRouter.useRouter();
171
227
  const matchId = react.useContext(require_matchContext.matchContext);
172
- const routeId = require_useRouterState.useRouterState({ select: (s) => s.matches.find((d) => d.id === matchId)?.routeId });
173
- const route = router.routesById[routeId];
174
- const parentGlobalNotFound = require_useRouterState.useRouterState({ select: (s) => {
175
- const parentMatch = s.matches.find((d) => d.id === matchId);
176
- (0, tiny_invariant.default)(parentMatch, `Could not find parent match for matchId "${matchId}"`);
177
- return parentMatch.globalNotFound;
178
- } });
179
- const childMatchId = require_useRouterState.useRouterState({ select: (s) => {
180
- const matches = s.matches;
181
- return matches[matches.findIndex((d) => d.id === matchId) + 1]?.id;
182
- } });
228
+ let routeId;
229
+ let parentGlobalNotFound = false;
230
+ let childMatchId;
231
+ if (_tanstack_router_core_isServer.isServer ?? router.isServer) {
232
+ const matches = router.stores.activeMatchesSnapshot.state;
233
+ const parentIndex = matchId ? matches.findIndex((match) => match.id === matchId) : -1;
234
+ const parentMatch = parentIndex >= 0 ? matches[parentIndex] : void 0;
235
+ routeId = parentMatch?.routeId;
236
+ parentGlobalNotFound = parentMatch?.globalNotFound ?? false;
237
+ childMatchId = parentIndex >= 0 ? matches[parentIndex + 1]?.id : void 0;
238
+ } else {
239
+ const parentMatchStore = matchId ? router.stores.activeMatchStoresById.get(matchId) : void 0;
240
+ [routeId, parentGlobalNotFound] = (0, _tanstack_react_store.useStore)(parentMatchStore, (match) => [match?.routeId, match?.globalNotFound ?? false]);
241
+ childMatchId = (0, _tanstack_react_store.useStore)(router.stores.matchesId, (ids) => {
242
+ return ids[ids.findIndex((id) => id === matchId) + 1];
243
+ });
244
+ }
245
+ const route = routeId ? router.routesById[routeId] : void 0;
183
246
  const pendingElement = router.options.defaultPendingComponent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(router.options.defaultPendingComponent, {}) : null;
184
- if (parentGlobalNotFound) return require_renderRouteNotFound.renderRouteNotFound(router, route, void 0);
247
+ if (parentGlobalNotFound) {
248
+ (0, tiny_invariant.default)(route, "Could not resolve route for Outlet render");
249
+ return require_renderRouteNotFound.renderRouteNotFound(router, route, void 0);
250
+ }
185
251
  if (!childMatchId) return null;
186
252
  const nextMatch = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Match, { matchId: childMatchId });
187
253
  if (routeId === _tanstack_router_core.rootRouteId) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Suspense, {
@@ -1 +1 @@
1
- {"version":3,"file":"Match.cjs","names":[],"sources":["../../src/Match.tsx"],"sourcesContent":["import * as React from 'react'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n isNotFound,\n isRedirect,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound } from './not-found'\nimport { matchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { renderRouteNotFound } from './renderRouteNotFound'\nimport { ScrollRestoration } from './scroll-restoration'\nimport { ClientOnly } from './ClientOnly'\nimport type {\n AnyRoute,\n ParsedLocation,\n RootRouteOptions,\n} from '@tanstack/router-core'\n\nexport const Match = React.memo(function MatchImpl({\n matchId,\n}: {\n matchId: string\n}) {\n const router = useRouter()\n const matchState = useRouterState({\n select: (s) => {\n const matchIndex = s.matches.findIndex((d) => d.id === matchId)\n const match = s.matches[matchIndex]\n invariant(\n match,\n `Could not find match for matchId \"${matchId}\". Please file an issue!`,\n )\n return {\n routeId: match.routeId,\n ssr: match.ssr,\n _displayPending: match._displayPending,\n resetKey: s.loadedAt,\n parentRouteId: s.matches[matchIndex - 1]?.routeId as string,\n }\n },\n structuralSharing: true as any,\n })\n\n const route: AnyRoute = router.routesById[matchState.routeId]\n\n const PendingComponent =\n route.options.pendingComponent ?? router.options.defaultPendingComponent\n\n const pendingElement = PendingComponent ? <PendingComponent /> : null\n\n const routeErrorComponent =\n route.options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = route.options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = route.isRoot\n ? // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component\n (route.options.notFoundComponent ??\n router.options.notFoundRoute?.options.component)\n : route.options.notFoundComponent\n\n const resolvedNoSsr =\n matchState.ssr === false || matchState.ssr === 'data-only'\n const ResolvedSuspenseBoundary =\n // If we're on the root route, allow forcefully wrapping in suspense\n (!route.isRoot || route.options.wrapInSuspense || resolvedNoSsr) &&\n (route.options.wrapInSuspense ??\n PendingComponent ??\n ((route.options.errorComponent as any)?.preload || resolvedNoSsr))\n ? React.Suspense\n : SafeFragment\n\n const ResolvedCatchBoundary = routeErrorComponent\n ? CatchBoundary\n : SafeFragment\n\n const ResolvedNotFoundBoundary = routeNotFoundComponent\n ? CatchNotFound\n : SafeFragment\n\n const ShellComponent = route.isRoot\n ? ((route.options as RootRouteOptions).shellComponent ?? SafeFragment)\n : SafeFragment\n return (\n <ShellComponent>\n <matchContext.Provider value={matchId}>\n <ResolvedSuspenseBoundary fallback={pendingElement}>\n <ResolvedCatchBoundary\n getResetKey={() => matchState.resetKey}\n errorComponent={routeErrorComponent || ErrorComponent}\n onCatch={(error, errorInfo) => {\n // Forward not found errors (we don't want to show the error component for these)\n if (isNotFound(error)) throw error\n warning(false, `Error in route match: ${matchId}`)\n routeOnCatch?.(error, errorInfo)\n }}\n >\n <ResolvedNotFoundBoundary\n fallback={(error) => {\n // If the current not found handler doesn't exist or it has a\n // route ID which doesn't match the current route, rethrow the error\n if (\n !routeNotFoundComponent ||\n (error.routeId && error.routeId !== matchState.routeId) ||\n (!error.routeId && !route.isRoot)\n )\n throw error\n\n return React.createElement(routeNotFoundComponent, error as any)\n }}\n >\n {resolvedNoSsr || matchState._displayPending ? (\n <ClientOnly fallback={pendingElement}>\n <MatchInner matchId={matchId} />\n </ClientOnly>\n ) : (\n <MatchInner matchId={matchId} />\n )}\n </ResolvedNotFoundBoundary>\n </ResolvedCatchBoundary>\n </ResolvedSuspenseBoundary>\n </matchContext.Provider>\n {matchState.parentRouteId === rootRouteId &&\n router.options.scrollRestoration ? (\n <>\n <OnRendered />\n <ScrollRestoration />\n </>\n ) : null}\n </ShellComponent>\n )\n})\n\n// On Rendered can't happen above the root layout because it actually\n// renders a dummy dom element to track the rendered state of the app.\n// We render a script tag with a key that changes based on the current\n// location state.__TSR_key. Also, because it's below the root layout, it\n// allows us to fire onRendered events even after a hydration mismatch\n// error that occurred above the root layout (like bad head/link tags,\n// which is common).\nfunction OnRendered() {\n const router = useRouter()\n\n const prevLocationRef = React.useRef<undefined | ParsedLocation<{}>>(\n undefined,\n )\n\n return (\n <script\n key={router.latestLocation.state.__TSR_key}\n suppressHydrationWarning\n ref={(el) => {\n if (\n el &&\n (prevLocationRef.current === undefined ||\n prevLocationRef.current.href !== router.latestLocation.href)\n ) {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(router.state),\n })\n prevLocationRef.current = router.latestLocation\n }\n }}\n />\n )\n}\n\nexport const MatchInner = React.memo(function MatchInnerImpl({\n matchId,\n}: {\n matchId: string\n}): any {\n const router = useRouter()\n\n const { match, key, routeId } = useRouterState({\n select: (s) => {\n const match = s.matches.find((d) => d.id === matchId)!\n const routeId = match.routeId as string\n\n const remountFn =\n (router.routesById[routeId] as AnyRoute).options.remountDeps ??\n router.options.defaultRemountDeps\n const remountDeps = remountFn?.({\n routeId,\n loaderDeps: match.loaderDeps,\n params: match._strictParams,\n search: match._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n\n return {\n key,\n routeId,\n match: {\n id: match.id,\n status: match.status,\n error: match.error,\n _forcePending: match._forcePending,\n _displayPending: match._displayPending,\n },\n }\n },\n structuralSharing: true as any,\n })\n\n const route = router.routesById[routeId] as AnyRoute\n\n const out = React.useMemo(() => {\n const Comp = route.options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp key={key} />\n }\n return <Outlet />\n }, [key, route.options.component, router.options.defaultComponent])\n\n if (match._displayPending) {\n throw router.getMatch(match.id)?._nonReactive.displayPendingPromise\n }\n\n if (match._forcePending) {\n throw router.getMatch(match.id)?._nonReactive.minPendingPromise\n }\n\n // see also hydrate() in packages/router-core/src/ssr/ssr-client.ts\n if (match.status === 'pending') {\n // We're pending, and if we have a minPendingMs, we need to wait for it\n const pendingMinMs =\n route.options.pendingMinMs ?? router.options.defaultPendingMinMs\n if (pendingMinMs) {\n const routerMatch = router.getMatch(match.id)\n if (routerMatch && !routerMatch._nonReactive.minPendingPromise) {\n // Create a promise that will resolve after the minPendingMs\n if (!(isServer ?? router.isServer)) {\n const minPendingPromise = createControlledPromise<void>()\n\n routerMatch._nonReactive.minPendingPromise = minPendingPromise\n\n setTimeout(() => {\n minPendingPromise.resolve()\n // We've handled the minPendingPromise, so we can delete it\n routerMatch._nonReactive.minPendingPromise = undefined\n }, pendingMinMs)\n }\n }\n }\n throw router.getMatch(match.id)?._nonReactive.loadPromise\n }\n\n if (match.status === 'notFound') {\n invariant(isNotFound(match.error), 'Expected a notFound error')\n return renderRouteNotFound(router, route, match.error)\n }\n\n if (match.status === 'redirected') {\n // Redirects should be handled by the router transition. If we happen to\n // encounter a redirect here, it's a bug. Let's warn, but render nothing.\n invariant(isRedirect(match.error), 'Expected a redirect error')\n\n // warning(\n // false,\n // 'Tried to render a redirected route match! This is a weird circumstance, please file an issue!',\n // )\n throw router.getMatch(match.id)?._nonReactive.loadPromise\n }\n\n if (match.status === 'error') {\n // If we're on the server, we need to use React's new and super\n // wonky api for throwing errors from a server side render inside\n // of a suspense boundary. This is the only way to get\n // renderToPipeableStream to not hang indefinitely.\n // We'll serialize the error and rethrow it on the client.\n if (isServer ?? router.isServer) {\n const RouteErrorComponent =\n (route.options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n return (\n <RouteErrorComponent\n error={match.error as any}\n reset={undefined as any}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw match.error\n }\n\n return out\n})\n\n/**\n * Render the next child match in the route tree. Typically used inside\n * a route component to render nested routes.\n *\n * @link https://tanstack.com/router/latest/docs/framework/react/api/router/outletComponent\n */\nexport const Outlet = React.memo(function OutletImpl() {\n const router = useRouter()\n const matchId = React.useContext(matchContext)\n const routeId = useRouterState({\n select: (s) => s.matches.find((d) => d.id === matchId)?.routeId as string,\n })\n\n const route = router.routesById[routeId]!\n\n const parentGlobalNotFound = useRouterState({\n select: (s) => {\n const matches = s.matches\n const parentMatch = matches.find((d) => d.id === matchId)\n invariant(\n parentMatch,\n `Could not find parent match for matchId \"${matchId}\"`,\n )\n return parentMatch.globalNotFound\n },\n })\n\n const childMatchId = useRouterState({\n select: (s) => {\n const matches = s.matches\n const index = matches.findIndex((d) => d.id === matchId)\n return matches[index + 1]?.id\n },\n })\n\n const pendingElement = router.options.defaultPendingComponent ? (\n <router.options.defaultPendingComponent />\n ) : null\n\n if (parentGlobalNotFound) {\n return renderRouteNotFound(router, route, undefined)\n }\n\n if (!childMatchId) {\n return null\n }\n\n const nextMatch = <Match matchId={childMatchId} />\n\n if (routeId === rootRouteId) {\n return (\n <React.Suspense fallback={pendingElement}>{nextMatch}</React.Suspense>\n )\n }\n\n return nextMatch\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"Match.cjs","names":[],"sources":["../../src/Match.tsx"],"sourcesContent":["import * as React from 'react'\nimport { useStore } from '@tanstack/react-store'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n isNotFound,\n isRedirect,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound } from './not-found'\nimport { matchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { renderRouteNotFound } from './renderRouteNotFound'\nimport { ScrollRestoration } from './scroll-restoration'\nimport { ClientOnly } from './ClientOnly'\nimport type {\n AnyRoute,\n ParsedLocation,\n RootRouteOptions,\n} from '@tanstack/router-core'\n\nexport const Match = React.memo(function MatchImpl({\n matchId,\n}: {\n matchId: string\n}) {\n const router = useRouter()\n\n if (isServer ?? router.isServer) {\n const match = router.stores.activeMatchStoresById.get(matchId)?.state\n invariant(\n match,\n `Could not find match for matchId \"${matchId}\". Please file an issue!`,\n )\n\n const routeId = match.routeId as string\n const parentRouteId = (router.routesById[routeId] as AnyRoute).parentRoute\n ?.id\n\n return (\n <MatchView\n router={router}\n matchId={matchId}\n resetKey={router.stores.loadedAt.state}\n matchState={{\n routeId,\n ssr: match.ssr,\n _displayPending: match._displayPending,\n parentRouteId,\n }}\n />\n )\n }\n\n // Subscribe directly to the match store from the pool.\n // The matchId prop is stable for this component's lifetime (set by Outlet),\n // and reconcileMatchPool reuses stores for the same matchId.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const matchStore = router.stores.activeMatchStoresById.get(matchId)\n invariant(\n matchStore,\n `Could not find match for matchId \"${matchId}\". Please file an issue!`,\n )\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const resetKey = useStore(router.stores.loadedAt, (loadedAt) => loadedAt)\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const match = useStore(matchStore, (value) => value)\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const matchState = React.useMemo(() => {\n const routeId = match.routeId as string\n const parentRouteId = (router.routesById[routeId] as AnyRoute).parentRoute\n ?.id\n\n return {\n routeId,\n ssr: match.ssr,\n _displayPending: match._displayPending,\n parentRouteId: parentRouteId as string | undefined,\n } satisfies MatchViewState\n }, [match._displayPending, match.routeId, match.ssr, router.routesById])\n\n return (\n <MatchView\n router={router}\n matchId={matchId}\n resetKey={resetKey}\n matchState={matchState}\n />\n )\n})\n\ntype MatchViewState = {\n routeId: string\n ssr: boolean | 'data-only' | undefined\n _displayPending: boolean | undefined\n parentRouteId: string | undefined\n}\n\nfunction MatchView({\n router,\n matchId,\n resetKey,\n matchState,\n}: {\n router: ReturnType<typeof useRouter>\n matchId: string\n resetKey: number\n matchState: MatchViewState\n}) {\n const route: AnyRoute = router.routesById[matchState.routeId]\n\n const PendingComponent =\n route.options.pendingComponent ?? router.options.defaultPendingComponent\n\n const pendingElement = PendingComponent ? <PendingComponent /> : null\n\n const routeErrorComponent =\n route.options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = route.options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = route.isRoot\n ? // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component\n (route.options.notFoundComponent ??\n router.options.notFoundRoute?.options.component)\n : route.options.notFoundComponent\n\n const resolvedNoSsr =\n matchState.ssr === false || matchState.ssr === 'data-only'\n const ResolvedSuspenseBoundary =\n // If we're on the root route, allow forcefully wrapping in suspense\n (!route.isRoot || route.options.wrapInSuspense || resolvedNoSsr) &&\n (route.options.wrapInSuspense ??\n PendingComponent ??\n ((route.options.errorComponent as any)?.preload || resolvedNoSsr))\n ? React.Suspense\n : SafeFragment\n\n const ResolvedCatchBoundary = routeErrorComponent\n ? CatchBoundary\n : SafeFragment\n\n const ResolvedNotFoundBoundary = routeNotFoundComponent\n ? CatchNotFound\n : SafeFragment\n\n const ShellComponent = route.isRoot\n ? ((route.options as RootRouteOptions).shellComponent ?? SafeFragment)\n : SafeFragment\n return (\n <ShellComponent>\n <matchContext.Provider value={matchId}>\n <ResolvedSuspenseBoundary fallback={pendingElement}>\n <ResolvedCatchBoundary\n getResetKey={() => resetKey}\n errorComponent={routeErrorComponent || ErrorComponent}\n onCatch={(error, errorInfo) => {\n // Forward not found errors (we don't want to show the error component for these)\n if (isNotFound(error)) throw error\n warning(false, `Error in route match: ${matchId}`)\n routeOnCatch?.(error, errorInfo)\n }}\n >\n <ResolvedNotFoundBoundary\n fallback={(error) => {\n // If the current not found handler doesn't exist or it has a\n // route ID which doesn't match the current route, rethrow the error\n if (\n !routeNotFoundComponent ||\n (error.routeId && error.routeId !== matchState.routeId) ||\n (!error.routeId && !route.isRoot)\n )\n throw error\n\n return React.createElement(routeNotFoundComponent, error as any)\n }}\n >\n {resolvedNoSsr || matchState._displayPending ? (\n <ClientOnly fallback={pendingElement}>\n <MatchInner matchId={matchId} />\n </ClientOnly>\n ) : (\n <MatchInner matchId={matchId} />\n )}\n </ResolvedNotFoundBoundary>\n </ResolvedCatchBoundary>\n </ResolvedSuspenseBoundary>\n </matchContext.Provider>\n {matchState.parentRouteId === rootRouteId &&\n router.options.scrollRestoration ? (\n <>\n <OnRendered />\n <ScrollRestoration />\n </>\n ) : null}\n </ShellComponent>\n )\n}\n\n// On Rendered can't happen above the root layout because it actually\n// renders a dummy dom element to track the rendered state of the app.\n// We render a script tag with a key that changes based on the current\n// location state.__TSR_key. Also, because it's below the root layout, it\n// allows us to fire onRendered events even after a hydration mismatch\n// error that occurred above the root layout (like bad head/link tags,\n// which is common).\nfunction OnRendered() {\n const router = useRouter()\n\n const prevLocationRef = React.useRef<undefined | ParsedLocation<{}>>(\n undefined,\n )\n\n return (\n <script\n key={router.latestLocation.state.__TSR_key}\n suppressHydrationWarning\n ref={(el) => {\n if (\n el &&\n (prevLocationRef.current === undefined ||\n prevLocationRef.current.href !== router.latestLocation.href)\n ) {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(\n router.stores.location.state,\n router.stores.resolvedLocation.state,\n ),\n })\n prevLocationRef.current = router.latestLocation\n }\n }}\n />\n )\n}\n\nexport const MatchInner = React.memo(function MatchInnerImpl({\n matchId,\n}: {\n matchId: string\n}): any {\n const router = useRouter()\n\n if (isServer ?? router.isServer) {\n const match = router.stores.activeMatchStoresById.get(matchId)?.state\n invariant(\n match,\n `Could not find match for matchId \"${matchId}\". Please file an issue!`,\n )\n\n const routeId = match.routeId as string\n const route = router.routesById[routeId] as AnyRoute\n const remountFn =\n (router.routesById[routeId] as AnyRoute).options.remountDeps ??\n router.options.defaultRemountDeps\n const remountDeps = remountFn?.({\n routeId,\n loaderDeps: match.loaderDeps,\n params: match._strictParams,\n search: match._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n const Comp = route.options.component ?? router.options.defaultComponent\n const out = Comp ? <Comp key={key} /> : <Outlet />\n\n if (match._displayPending) {\n throw router.getMatch(match.id)?._nonReactive.displayPendingPromise\n }\n\n if (match._forcePending) {\n throw router.getMatch(match.id)?._nonReactive.minPendingPromise\n }\n\n if (match.status === 'pending') {\n throw router.getMatch(match.id)?._nonReactive.loadPromise\n }\n\n if (match.status === 'notFound') {\n invariant(isNotFound(match.error), 'Expected a notFound error')\n return renderRouteNotFound(router, route, match.error)\n }\n\n if (match.status === 'redirected') {\n invariant(isRedirect(match.error), 'Expected a redirect error')\n throw router.getMatch(match.id)?._nonReactive.loadPromise\n }\n\n if (match.status === 'error') {\n const RouteErrorComponent =\n (route.options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n return (\n <RouteErrorComponent\n error={match.error as any}\n reset={undefined as any}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n return out\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const matchStore = router.stores.activeMatchStoresById.get(matchId)\n invariant(\n matchStore,\n `Could not find match for matchId \"${matchId}\". Please file an issue!`,\n )\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const match = useStore(matchStore, (value) => value)\n const routeId = match.routeId as string\n const route = router.routesById[routeId] as AnyRoute\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const key = React.useMemo(() => {\n const remountFn =\n (router.routesById[routeId] as AnyRoute).options.remountDeps ??\n router.options.defaultRemountDeps\n const remountDeps = remountFn?.({\n routeId,\n loaderDeps: match.loaderDeps,\n params: match._strictParams,\n search: match._strictSearch,\n })\n return remountDeps ? JSON.stringify(remountDeps) : undefined\n }, [\n routeId,\n match.loaderDeps,\n match._strictParams,\n match._strictSearch,\n router.options.defaultRemountDeps,\n router.routesById,\n ])\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const out = React.useMemo(() => {\n const Comp = route.options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp key={key} />\n }\n return <Outlet />\n }, [key, route.options.component, router.options.defaultComponent])\n\n if (match._displayPending) {\n throw router.getMatch(match.id)?._nonReactive.displayPendingPromise\n }\n\n if (match._forcePending) {\n throw router.getMatch(match.id)?._nonReactive.minPendingPromise\n }\n\n // see also hydrate() in packages/router-core/src/ssr/ssr-client.ts\n if (match.status === 'pending') {\n // We're pending, and if we have a minPendingMs, we need to wait for it\n const pendingMinMs =\n route.options.pendingMinMs ?? router.options.defaultPendingMinMs\n if (pendingMinMs) {\n const routerMatch = router.getMatch(match.id)\n if (routerMatch && !routerMatch._nonReactive.minPendingPromise) {\n // Create a promise that will resolve after the minPendingMs\n if (!(isServer ?? router.isServer)) {\n const minPendingPromise = createControlledPromise<void>()\n\n routerMatch._nonReactive.minPendingPromise = minPendingPromise\n\n setTimeout(() => {\n minPendingPromise.resolve()\n // We've handled the minPendingPromise, so we can delete it\n routerMatch._nonReactive.minPendingPromise = undefined\n }, pendingMinMs)\n }\n }\n }\n throw router.getMatch(match.id)?._nonReactive.loadPromise\n }\n\n if (match.status === 'notFound') {\n invariant(isNotFound(match.error), 'Expected a notFound error')\n return renderRouteNotFound(router, route, match.error)\n }\n\n if (match.status === 'redirected') {\n // Redirects should be handled by the router transition. If we happen to\n // encounter a redirect here, it's a bug. Let's warn, but render nothing.\n invariant(isRedirect(match.error), 'Expected a redirect error')\n\n // warning(\n // false,\n // 'Tried to render a redirected route match! This is a weird circumstance, please file an issue!',\n // )\n throw router.getMatch(match.id)?._nonReactive.loadPromise\n }\n\n if (match.status === 'error') {\n // If we're on the server, we need to use React's new and super\n // wonky api for throwing errors from a server side render inside\n // of a suspense boundary. This is the only way to get\n // renderToPipeableStream to not hang indefinitely.\n // We'll serialize the error and rethrow it on the client.\n if (isServer ?? router.isServer) {\n const RouteErrorComponent =\n (route.options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n return (\n <RouteErrorComponent\n error={match.error as any}\n reset={undefined as any}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw match.error\n }\n\n return out\n})\n\n/**\n * Render the next child match in the route tree. Typically used inside\n * a route component to render nested routes.\n *\n * @link https://tanstack.com/router/latest/docs/framework/react/api/router/outletComponent\n */\nexport const Outlet = React.memo(function OutletImpl() {\n const router = useRouter()\n const matchId = React.useContext(matchContext)\n\n let routeId: string | undefined\n let parentGlobalNotFound = false\n let childMatchId: string | undefined\n\n if (isServer ?? router.isServer) {\n const matches = router.stores.activeMatchesSnapshot.state\n const parentIndex = matchId\n ? matches.findIndex((match) => match.id === matchId)\n : -1\n const parentMatch = parentIndex >= 0 ? matches[parentIndex] : undefined\n routeId = parentMatch?.routeId as string | undefined\n parentGlobalNotFound = parentMatch?.globalNotFound ?? false\n childMatchId =\n parentIndex >= 0 ? (matches[parentIndex + 1]?.id as string) : undefined\n } else {\n // Subscribe directly to the match store from the pool instead of\n // the two-level byId → matchStore pattern.\n const parentMatchStore = matchId\n ? router.stores.activeMatchStoresById.get(matchId)\n : undefined\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n ;[routeId, parentGlobalNotFound] = useStore(parentMatchStore, (match) => [\n match?.routeId as string | undefined,\n match?.globalNotFound ?? false,\n ])\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n childMatchId = useStore(router.stores.matchesId, (ids) => {\n const index = ids.findIndex((id) => id === matchId)\n return ids[index + 1]\n })\n }\n\n const route = routeId ? router.routesById[routeId] : undefined\n\n const pendingElement = router.options.defaultPendingComponent ? (\n <router.options.defaultPendingComponent />\n ) : null\n\n if (parentGlobalNotFound) {\n invariant(route, 'Could not resolve route for Outlet render')\n return renderRouteNotFound(router, route, undefined)\n }\n\n if (!childMatchId) {\n return null\n }\n\n const nextMatch = <Match matchId={childMatchId} />\n\n if (routeId === rootRouteId) {\n return (\n <React.Suspense fallback={pendingElement}>{nextMatch}</React.Suspense>\n )\n }\n\n return nextMatch\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0BA,IAAa,QAAQ,MAAM,KAAK,SAAS,UAAU,EACjD,WAGC;CACD,MAAM,SAAS,kBAAA,WAAW;AAE1B,KAAI,+BAAA,YAAY,OAAO,UAAU;EAC/B,MAAM,QAAQ,OAAO,OAAO,sBAAsB,IAAI,QAAQ,EAAE;AAChE,GAAA,GAAA,eAAA,SACE,OACA,qCAAqC,QAAQ,0BAC9C;EAED,MAAM,UAAU,MAAM;EACtB,MAAM,gBAAiB,OAAO,WAAW,SAAsB,aAC3D;AAEJ,SACE,iBAAA,GAAA,kBAAA,KAAC,WAAD;GACU;GACC;GACT,UAAU,OAAO,OAAO,SAAS;GACjC,YAAY;IACV;IACA,KAAK,MAAM;IACX,iBAAiB,MAAM;IACvB;IACD;GACD,CAAA;;CAQN,MAAM,aAAa,OAAO,OAAO,sBAAsB,IAAI,QAAQ;AACnE,EAAA,GAAA,eAAA,SACE,YACA,qCAAqC,QAAQ,0BAC9C;CAED,MAAM,YAAA,GAAA,sBAAA,UAAoB,OAAO,OAAO,WAAW,aAAa,SAAS;CAEzE,MAAM,SAAA,GAAA,sBAAA,UAAiB,aAAa,UAAU,MAAM;AAepD,QACE,iBAAA,GAAA,kBAAA,KAAC,WAAD;EACU;EACC;EACC;EACE,YAlBG,MAAM,cAAc;GACrC,MAAM,UAAU,MAAM;GACtB,MAAM,gBAAiB,OAAO,WAAW,SAAsB,aAC3D;AAEJ,UAAO;IACL;IACA,KAAK,MAAM;IACX,iBAAiB,MAAM;IACR;IAChB;KACA;GAAC,MAAM;GAAiB,MAAM;GAAS,MAAM;GAAK,OAAO;GAAW,CAAC;EAQpE,CAAA;EAEJ;AASF,SAAS,UAAU,EACjB,QACA,SACA,UACA,cAMC;CACD,MAAM,QAAkB,OAAO,WAAW,WAAW;CAErD,MAAM,mBACJ,MAAM,QAAQ,oBAAoB,OAAO,QAAQ;CAEnD,MAAM,iBAAiB,mBAAmB,iBAAA,GAAA,kBAAA,KAAC,kBAAD,EAAoB,CAAA,GAAG;CAEjE,MAAM,sBACJ,MAAM,QAAQ,kBAAkB,OAAO,QAAQ;CAEjD,MAAM,eAAe,MAAM,QAAQ,WAAW,OAAO,QAAQ;CAE7D,MAAM,yBAAyB,MAAM,SAEhC,MAAM,QAAQ,qBACf,OAAO,QAAQ,eAAe,QAAQ,YACtC,MAAM,QAAQ;CAElB,MAAM,gBACJ,WAAW,QAAQ,SAAS,WAAW,QAAQ;CACjD,MAAM,4BAEH,CAAC,MAAM,UAAU,MAAM,QAAQ,kBAAkB,mBACjD,MAAM,QAAQ,kBACb,qBACE,MAAM,QAAQ,gBAAwB,WAAW,kBACjD,MAAM,WACN,qBAAA;CAEN,MAAM,wBAAwB,sBAC1B,sBAAA,gBACA,qBAAA;CAEJ,MAAM,2BAA2B,yBAC7B,kBAAA,gBACA,qBAAA;AAKJ,QACE,iBAAA,GAAA,kBAAA,MAJqB,MAAM,SACvB,MAAM,QAA6B,kBAAkB,qBAAA,eACvD,qBAAA,cAEF,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,qBAAA,aAAa,UAAd;EAAuB,OAAO;YAC5B,iBAAA,GAAA,kBAAA,KAAC,0BAAD;GAA0B,UAAU;aAClC,iBAAA,GAAA,kBAAA,KAAC,uBAAD;IACE,mBAAmB;IACnB,gBAAgB,uBAAuB,sBAAA;IACvC,UAAU,OAAO,cAAc;AAE7B,UAAA,GAAA,sBAAA,YAAe,MAAM,CAAE,OAAM;AAC7B,MAAA,GAAA,aAAA,SAAQ,OAAO,yBAAyB,UAAU;AAClD,oBAAe,OAAO,UAAU;;cAGlC,iBAAA,GAAA,kBAAA,KAAC,0BAAD;KACE,WAAW,UAAU;AAGnB,UACE,CAAC,0BACA,MAAM,WAAW,MAAM,YAAY,WAAW,WAC9C,CAAC,MAAM,WAAW,CAAC,MAAM,OAE1B,OAAM;AAER,aAAO,MAAM,cAAc,wBAAwB,MAAa;;eAGjE,iBAAiB,WAAW,kBAC3B,iBAAA,GAAA,kBAAA,KAAC,mBAAA,YAAD;MAAY,UAAU;gBACpB,iBAAA,GAAA,kBAAA,KAAC,YAAD,EAAqB,SAAW,CAAA;MACrB,CAAA,GAEb,iBAAA,GAAA,kBAAA,KAAC,YAAD,EAAqB,SAAW,CAAA;KAET,CAAA;IACL,CAAA;GACC,CAAA;EACL,CAAA,EACvB,WAAW,kBAAkB,sBAAA,eAC9B,OAAO,QAAQ,oBACb,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,YAAD,EAAc,CAAA,EACd,iBAAA,GAAA,kBAAA,KAAC,2BAAA,mBAAD,EAAqB,CAAA,CACpB,EAAA,CAAA,GACD,KACW,EAAA,CAAA;;AAWrB,SAAS,aAAa;CACpB,MAAM,SAAS,kBAAA,WAAW;CAE1B,MAAM,kBAAkB,MAAM,OAC5B,KAAA,EACD;AAED,QACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;EAEE,0BAAA;EACA,MAAM,OAAO;AACX,OACE,OACC,gBAAgB,YAAY,KAAA,KAC3B,gBAAgB,QAAQ,SAAS,OAAO,eAAe,OACzD;AACA,WAAO,KAAK;KACV,MAAM;KACN,IAAA,GAAA,sBAAA,uBACE,OAAO,OAAO,SAAS,OACvB,OAAO,OAAO,iBAAiB,MAChC;KACF,CAAC;AACF,oBAAgB,UAAU,OAAO;;;EAGrC,EAlBK,OAAO,eAAe,MAAM,UAkBjC;;AAIN,IAAa,aAAa,MAAM,KAAK,SAAS,eAAe,EAC3D,WAGM;CACN,MAAM,SAAS,kBAAA,WAAW;AAE1B,KAAI,+BAAA,YAAY,OAAO,UAAU;EAC/B,MAAM,QAAQ,OAAO,OAAO,sBAAsB,IAAI,QAAQ,EAAE;AAChE,GAAA,GAAA,eAAA,SACE,OACA,qCAAqC,QAAQ,0BAC9C;EAED,MAAM,UAAU,MAAM;EACtB,MAAM,QAAQ,OAAO,WAAW;EAIhC,MAAM,eAFH,OAAO,WAAW,SAAsB,QAAQ,eACjD,OAAO,QAAQ,sBACe;GAC9B;GACA,YAAY,MAAM;GAClB,QAAQ,MAAM;GACd,QAAQ,MAAM;GACf,CAAC;EACF,MAAM,MAAM,cAAc,KAAK,UAAU,YAAY,GAAG,KAAA;EACxD,MAAM,OAAO,MAAM,QAAQ,aAAa,OAAO,QAAQ;EACvD,MAAM,MAAM,OAAO,iBAAA,GAAA,kBAAA,KAAC,MAAD,EAAkB,EAAP,IAAO,GAAG,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAU,CAAA;AAElD,MAAI,MAAM,gBACR,OAAM,OAAO,SAAS,MAAM,GAAG,EAAE,aAAa;AAGhD,MAAI,MAAM,cACR,OAAM,OAAO,SAAS,MAAM,GAAG,EAAE,aAAa;AAGhD,MAAI,MAAM,WAAW,UACnB,OAAM,OAAO,SAAS,MAAM,GAAG,EAAE,aAAa;AAGhD,MAAI,MAAM,WAAW,YAAY;AAC/B,IAAA,GAAA,eAAA,UAAA,GAAA,sBAAA,YAAqB,MAAM,MAAM,EAAE,4BAA4B;AAC/D,UAAO,4BAAA,oBAAoB,QAAQ,OAAO,MAAM,MAAM;;AAGxD,MAAI,MAAM,WAAW,cAAc;AACjC,IAAA,GAAA,eAAA,UAAA,GAAA,sBAAA,YAAqB,MAAM,MAAM,EAAE,4BAA4B;AAC/D,SAAM,OAAO,SAAS,MAAM,GAAG,EAAE,aAAa;;AAGhD,MAAI,MAAM,WAAW,QAKnB,QACE,iBAAA,GAAA,kBAAA,MAJC,MAAM,QAAQ,kBACb,OAAO,QAAQ,0BACjB,sBAAA,gBAEA;GACE,OAAO,MAAM;GACb,OAAO,KAAA;GACP,MAAM,EACJ,gBAAgB,IACjB;GACD,CAAA;AAIN,SAAO;;CAIT,MAAM,aAAa,OAAO,OAAO,sBAAsB,IAAI,QAAQ;AACnE,EAAA,GAAA,eAAA,SACE,YACA,qCAAqC,QAAQ,0BAC9C;CAED,MAAM,SAAA,GAAA,sBAAA,UAAiB,aAAa,UAAU,MAAM;CACpD,MAAM,UAAU,MAAM;CACtB,MAAM,QAAQ,OAAO,WAAW;CAEhC,MAAM,MAAM,MAAM,cAAc;EAI9B,MAAM,eAFH,OAAO,WAAW,SAAsB,QAAQ,eACjD,OAAO,QAAQ,sBACe;GAC9B;GACA,YAAY,MAAM;GAClB,QAAQ,MAAM;GACd,QAAQ,MAAM;GACf,CAAC;AACF,SAAO,cAAc,KAAK,UAAU,YAAY,GAAG,KAAA;IAClD;EACD;EACA,MAAM;EACN,MAAM;EACN,MAAM;EACN,OAAO,QAAQ;EACf,OAAO;EACR,CAAC;CAGF,MAAM,MAAM,MAAM,cAAc;EAC9B,MAAM,OAAO,MAAM,QAAQ,aAAa,OAAO,QAAQ;AACvD,MAAI,KACF,QAAO,iBAAA,GAAA,kBAAA,KAAC,MAAD,EAAkB,EAAP,IAAO;AAE3B,SAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAU,CAAA;IAChB;EAAC;EAAK,MAAM,QAAQ;EAAW,OAAO,QAAQ;EAAiB,CAAC;AAEnE,KAAI,MAAM,gBACR,OAAM,OAAO,SAAS,MAAM,GAAG,EAAE,aAAa;AAGhD,KAAI,MAAM,cACR,OAAM,OAAO,SAAS,MAAM,GAAG,EAAE,aAAa;AAIhD,KAAI,MAAM,WAAW,WAAW;EAE9B,MAAM,eACJ,MAAM,QAAQ,gBAAgB,OAAO,QAAQ;AAC/C,MAAI,cAAc;GAChB,MAAM,cAAc,OAAO,SAAS,MAAM,GAAG;AAC7C,OAAI,eAAe,CAAC,YAAY,aAAa;QAEvC,EAAE,+BAAA,YAAY,OAAO,WAAW;KAClC,MAAM,qBAAA,GAAA,sBAAA,0BAAmD;AAEzD,iBAAY,aAAa,oBAAoB;AAE7C,sBAAiB;AACf,wBAAkB,SAAS;AAE3B,kBAAY,aAAa,oBAAoB,KAAA;QAC5C,aAAa;;;;AAItB,QAAM,OAAO,SAAS,MAAM,GAAG,EAAE,aAAa;;AAGhD,KAAI,MAAM,WAAW,YAAY;AAC/B,GAAA,GAAA,eAAA,UAAA,GAAA,sBAAA,YAAqB,MAAM,MAAM,EAAE,4BAA4B;AAC/D,SAAO,4BAAA,oBAAoB,QAAQ,OAAO,MAAM,MAAM;;AAGxD,KAAI,MAAM,WAAW,cAAc;AAGjC,GAAA,GAAA,eAAA,UAAA,GAAA,sBAAA,YAAqB,MAAM,MAAM,EAAE,4BAA4B;AAM/D,QAAM,OAAO,SAAS,MAAM,GAAG,EAAE,aAAa;;AAGhD,KAAI,MAAM,WAAW,SAAS;AAM5B,MAAI,+BAAA,YAAY,OAAO,SAKrB,QACE,iBAAA,GAAA,kBAAA,MAJC,MAAM,QAAQ,kBACb,OAAO,QAAQ,0BACjB,sBAAA,gBAEA;GACE,OAAO,MAAM;GACb,OAAO,KAAA;GACP,MAAM,EACJ,gBAAgB,IACjB;GACD,CAAA;AAIN,QAAM,MAAM;;AAGd,QAAO;EACP;;;;;;;AAQF,IAAa,SAAS,MAAM,KAAK,SAAS,aAAa;CACrD,MAAM,SAAS,kBAAA,WAAW;CAC1B,MAAM,UAAU,MAAM,WAAW,qBAAA,aAAa;CAE9C,IAAI;CACJ,IAAI,uBAAuB;CAC3B,IAAI;AAEJ,KAAI,+BAAA,YAAY,OAAO,UAAU;EAC/B,MAAM,UAAU,OAAO,OAAO,sBAAsB;EACpD,MAAM,cAAc,UAChB,QAAQ,WAAW,UAAU,MAAM,OAAO,QAAQ,GAClD;EACJ,MAAM,cAAc,eAAe,IAAI,QAAQ,eAAe,KAAA;AAC9D,YAAU,aAAa;AACvB,yBAAuB,aAAa,kBAAkB;AACtD,iBACE,eAAe,IAAK,QAAQ,cAAc,IAAI,KAAgB,KAAA;QAC3D;EAGL,MAAM,mBAAmB,UACrB,OAAO,OAAO,sBAAsB,IAAI,QAAQ,GAChD,KAAA;AAGH,GAAC,SAAS,yBAAA,GAAA,sBAAA,UAAiC,mBAAmB,UAAU,CACvE,OAAO,SACP,OAAO,kBAAkB,MAC1B,CAAC;AAGF,kBAAA,GAAA,sBAAA,UAAwB,OAAO,OAAO,YAAY,QAAQ;AAExD,UAAO,IADO,IAAI,WAAW,OAAO,OAAO,QAAQ,GAChC;IACnB;;CAGJ,MAAM,QAAQ,UAAU,OAAO,WAAW,WAAW,KAAA;CAErD,MAAM,iBAAiB,OAAO,QAAQ,0BACpC,iBAAA,GAAA,kBAAA,KAAC,OAAO,QAAQ,yBAAhB,EAA0C,CAAA,GACxC;AAEJ,KAAI,sBAAsB;AACxB,GAAA,GAAA,eAAA,SAAU,OAAO,4CAA4C;AAC7D,SAAO,4BAAA,oBAAoB,QAAQ,OAAO,KAAA,EAAU;;AAGtD,KAAI,CAAC,aACH,QAAO;CAGT,MAAM,YAAY,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAO,SAAS,cAAgB,CAAA;AAElD,KAAI,YAAY,sBAAA,YACd,QACE,iBAAA,GAAA,kBAAA,KAAC,MAAM,UAAP;EAAgB,UAAU;YAAiB;EAA2B,CAAA;AAI1E,QAAO;EACP"}
@@ -1,8 +1,7 @@
1
1
  const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
2
  const require_CatchBoundary = require("./CatchBoundary.cjs");
3
- const require_useRouter = require("./useRouter.cjs");
4
- const require_useRouterState = require("./useRouterState.cjs");
5
3
  const require_matchContext = require("./matchContext.cjs");
4
+ const require_useRouter = require("./useRouter.cjs");
6
5
  const require_Transitioner = require("./Transitioner.cjs");
7
6
  const require_SafeFragment = require("./SafeFragment.cjs");
8
7
  const require_Match = require("./Match.cjs");
@@ -12,6 +11,7 @@ react = require_runtime.__toESM(react);
12
11
  let react_jsx_runtime = require("react/jsx-runtime");
13
12
  let tiny_warning = require("tiny-warning");
14
13
  tiny_warning = require_runtime.__toESM(tiny_warning);
14
+ let _tanstack_react_store = require("@tanstack/react-store");
15
15
  let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer");
16
16
  //#region src/Matches.tsx
17
17
  /**
@@ -30,10 +30,9 @@ function Matches() {
30
30
  }
31
31
  function MatchesInner() {
32
32
  const router = require_useRouter.useRouter();
33
- const matchId = require_useRouterState.useRouterState({ select: (s) => {
34
- return s.matches[0]?.id;
35
- } });
36
- const resetKey = require_useRouterState.useRouterState({ select: (s) => s.loadedAt });
33
+ const _isServer = _tanstack_router_core_isServer.isServer ?? router.isServer;
34
+ const matchId = _isServer ? router.stores.firstMatchId.state : (0, _tanstack_react_store.useStore)(router.stores.firstMatchId, (id) => id);
35
+ const resetKey = _isServer ? router.stores.loadedAt.state : (0, _tanstack_react_store.useStore)(router.stores.loadedAt, (loadedAt) => loadedAt);
37
36
  const matchComponent = matchId ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Match.Match, { matchId }) : null;
38
37
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_matchContext.matchContext.Provider, {
39
38
  value: matchId,
@@ -62,14 +61,7 @@ function MatchesInner() {
62
61
  */
63
62
  function useMatchRoute() {
64
63
  const router = require_useRouter.useRouter();
65
- require_useRouterState.useRouterState({
66
- select: (s) => [
67
- s.location.href,
68
- s.resolvedLocation?.href,
69
- s.status
70
- ],
71
- structuralSharing: true
72
- });
64
+ if (!(_tanstack_router_core_isServer.isServer ?? router.isServer)) (0, _tanstack_react_store.useStore)(router.stores.matchRouteReactivity, (d) => d);
73
65
  return react.useCallback((opts) => {
74
66
  const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts;
75
67
  return router.matchRoute(rest, {
@@ -93,12 +85,20 @@ function MatchRoute(props) {
93
85
  return params ? props.children : null;
94
86
  }
95
87
  function useMatches(opts) {
96
- return require_useRouterState.useRouterState({
97
- select: (state) => {
98
- const matches = state.matches;
99
- return opts?.select ? opts.select(matches) : matches;
100
- },
101
- structuralSharing: opts?.structuralSharing
88
+ const router = require_useRouter.useRouter();
89
+ const previousResult = react.useRef(void 0);
90
+ if (_tanstack_router_core_isServer.isServer ?? router.isServer) {
91
+ const matches = router.stores.activeMatchesSnapshot.state;
92
+ return opts?.select ? opts.select(matches) : matches;
93
+ }
94
+ return (0, _tanstack_react_store.useStore)(router.stores.activeMatchesSnapshot, (matches) => {
95
+ const selected = opts?.select ? opts.select(matches) : matches;
96
+ if (opts?.structuralSharing ?? router.options.defaultStructuralSharing) {
97
+ const shared = (0, _tanstack_router_core.replaceEqualDeep)(previousResult.current, selected);
98
+ previousResult.current = shared;
99
+ return shared;
100
+ }
101
+ return selected;
102
102
  });
103
103
  }
104
104
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Matches.cjs","names":[],"sources":["../../src/Matches.tsx"],"sourcesContent":["import * as React from 'react'\nimport warning from 'tiny-warning'\nimport { rootRouteId } from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { Transitioner } from './Transitioner'\nimport { matchContext } from './matchContext'\nimport { Match } from './Match'\nimport { SafeFragment } from './SafeFragment'\nimport type {\n StructuralSharingOption,\n ValidateSelected,\n} from './structuralSharing'\nimport type {\n AnyRoute,\n AnyRouter,\n DeepPartial,\n Expand,\n MakeOptionalPathParams,\n MakeOptionalSearchParams,\n MakeRouteMatchUnion,\n MaskOptions,\n MatchRouteOptions,\n NoInfer,\n RegisteredRouter,\n ResolveRelativePath,\n ResolveRoute,\n RouteByPath,\n RouterState,\n ToSubOptionsProps,\n} from '@tanstack/router-core'\n\ndeclare module '@tanstack/router-core' {\n export interface RouteMatchExtensions {\n meta?: Array<React.JSX.IntrinsicElements['meta'] | undefined>\n links?: Array<React.JSX.IntrinsicElements['link'] | undefined>\n scripts?: Array<React.JSX.IntrinsicElements['script'] | undefined>\n styles?: Array<React.JSX.IntrinsicElements['style'] | undefined>\n headScripts?: Array<React.JSX.IntrinsicElements['script'] | undefined>\n }\n}\n\n/**\n * Internal component that renders the router's active match tree with\n * suspense, error, and not-found boundaries. Rendered by `RouterProvider`.\n */\nexport function Matches() {\n const router = useRouter()\n const rootRoute: AnyRoute = router.routesById[rootRouteId]\n\n const PendingComponent =\n rootRoute.options.pendingComponent ?? router.options.defaultPendingComponent\n\n const pendingElement = PendingComponent ? <PendingComponent /> : null\n\n // Do not render a root Suspense during SSR or hydrating from SSR\n const ResolvedSuspense =\n (isServer ?? router.isServer) ||\n (typeof document !== 'undefined' && router.ssr)\n ? SafeFragment\n : React.Suspense\n\n const inner = (\n <ResolvedSuspense fallback={pendingElement}>\n {!(isServer ?? router.isServer) && <Transitioner />}\n <MatchesInner />\n </ResolvedSuspense>\n )\n\n return router.options.InnerWrap ? (\n <router.options.InnerWrap>{inner}</router.options.InnerWrap>\n ) : (\n inner\n )\n}\n\nfunction MatchesInner() {\n const router = useRouter()\n const matchId = useRouterState({\n select: (s) => {\n return s.matches[0]?.id\n },\n })\n\n const resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n const matchComponent = matchId ? <Match matchId={matchId} /> : null\n\n return (\n <matchContext.Provider value={matchId}>\n {router.options.disableGlobalCatchBoundary ? (\n matchComponent\n ) : (\n <CatchBoundary\n getResetKey={() => resetKey}\n errorComponent={ErrorComponent}\n onCatch={\n process.env.NODE_ENV !== 'production'\n ? (error) => {\n warning(\n false,\n `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,\n )\n warning(false, error.message || error.toString())\n }\n : undefined\n }\n >\n {matchComponent}\n </CatchBoundary>\n )}\n </matchContext.Provider>\n )\n}\n\nexport type UseMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptionsProps<TRouter, TFrom, TTo> &\n DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> &\n DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> &\n MaskOptions<TRouter, TMaskFrom, TMaskTo> &\n MatchRouteOptions\n\n/**\n * Create a matcher function for testing locations against route definitions.\n *\n * The returned function accepts standard navigation options (`to`, `params`,\n * `search`, etc.) and returns either `false` (no match) or the matched params\n * object when the route matches the current or pending location.\n *\n * Useful for conditional rendering and active UI states.\n *\n * @returns A `matchRoute(options)` function that returns `false` or params.\n * @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchRouteHook\n */\nexport function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {\n const router = useRouter()\n\n useRouterState({\n select: (s) => [s.location.href, s.resolvedLocation?.href, s.status],\n structuralSharing: true as any,\n })\n\n return React.useCallback(\n <\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n >(\n opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n ):\n | false\n | Expand<ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']> => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n return router.matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n },\n [router],\n )\n}\n\nexport type MakeMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // 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\n children?:\n | ((\n params?: RouteByPath<\n TRouter['routeTree'],\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => React.ReactNode)\n | React.ReactNode\n}\n\n/**\n * Component that conditionally renders its children based on whether a route\n * matches the provided `from`/`to` options. If `children` is a function, it\n * receives the matched params object.\n *\n * @link https://tanstack.com/router/latest/docs/framework/react/api/router/matchRouteComponent\n */\nexport function MatchRoute<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any) as boolean\n\n if (typeof props.children === 'function') {\n return (props.children as any)(params)\n }\n\n return params ? props.children : null\n}\n\nexport interface UseMatchesBaseOptions<\n TRouter extends AnyRouter,\n TSelected,\n TStructuralSharing,\n> {\n select?: (\n matches: Array<MakeRouteMatchUnion<TRouter>>,\n ) => ValidateSelected<TRouter, TSelected, TStructuralSharing>\n}\n\nexport type UseMatchesResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected\n\nexport function useMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n): UseMatchesResult<TRouter, TSelected> {\n return useRouterState({\n select: (state: RouterState<TRouter['routeTree']>) => {\n const matches = state.matches\n return opts?.select\n ? opts.select(matches as Array<MakeRouteMatchUnion<TRouter>>)\n : matches\n },\n structuralSharing: opts?.structuralSharing,\n } as any) as UseMatchesResult<TRouter, TSelected>\n}\n\n/**\n * Read the full array of active route matches or select a derived subset.\n *\n * Useful for debugging, breadcrumbs, or aggregating metadata across matches.\n *\n * @returns The array of matches (or the selected value).\n * @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchesHook\n */\n\n/**\n * Read the full array of active route matches or select a derived subset.\n *\n * Useful for debugging, breadcrumbs, or aggregating metadata across matches.\n *\n * @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchesHook\n */\nexport function useParentMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n): UseMatchesResult<TRouter, TSelected> {\n const contextMatchId = React.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n 0,\n matches.findIndex((d) => d.id === contextMatchId),\n )\n return opts?.select ? opts.select(matches) : matches\n },\n structuralSharing: opts?.structuralSharing,\n } as any)\n}\n\n/**\n * Read the array of active route matches that are children of the current\n * match (or selected parent) in the match tree.\n */\nexport function useChildMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n): UseMatchesResult<TRouter, TSelected> {\n const contextMatchId = React.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n matches.findIndex((d) => d.id === contextMatchId) + 1,\n )\n return opts?.select ? opts.select(matches) : matches\n },\n structuralSharing: opts?.structuralSharing,\n } as any)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Matches.cjs","names":[],"sources":["../../src/Matches.tsx"],"sourcesContent":["import * as React from 'react'\nimport warning from 'tiny-warning'\nimport { useStore } from '@tanstack/react-store'\nimport { replaceEqualDeep, rootRouteId } from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouter } from './useRouter'\nimport { Transitioner } from './Transitioner'\nimport { matchContext } from './matchContext'\nimport { Match } from './Match'\nimport { SafeFragment } from './SafeFragment'\nimport type {\n StructuralSharingOption,\n ValidateSelected,\n} from './structuralSharing'\nimport type {\n AnyRoute,\n AnyRouter,\n DeepPartial,\n Expand,\n MakeOptionalPathParams,\n MakeOptionalSearchParams,\n MakeRouteMatchUnion,\n MaskOptions,\n MatchRouteOptions,\n NoInfer,\n RegisteredRouter,\n ResolveRelativePath,\n ResolveRoute,\n RouteByPath,\n ToSubOptionsProps,\n} from '@tanstack/router-core'\n\ndeclare module '@tanstack/router-core' {\n export interface RouteMatchExtensions {\n meta?: Array<React.JSX.IntrinsicElements['meta'] | undefined>\n links?: Array<React.JSX.IntrinsicElements['link'] | undefined>\n scripts?: Array<React.JSX.IntrinsicElements['script'] | undefined>\n styles?: Array<React.JSX.IntrinsicElements['style'] | undefined>\n headScripts?: Array<React.JSX.IntrinsicElements['script'] | undefined>\n }\n}\n\n/**\n * Internal component that renders the router's active match tree with\n * suspense, error, and not-found boundaries. Rendered by `RouterProvider`.\n */\nexport function Matches() {\n const router = useRouter()\n const rootRoute: AnyRoute = router.routesById[rootRouteId]\n\n const PendingComponent =\n rootRoute.options.pendingComponent ?? router.options.defaultPendingComponent\n\n const pendingElement = PendingComponent ? <PendingComponent /> : null\n\n // Do not render a root Suspense during SSR or hydrating from SSR\n const ResolvedSuspense =\n (isServer ?? router.isServer) ||\n (typeof document !== 'undefined' && router.ssr)\n ? SafeFragment\n : React.Suspense\n\n const inner = (\n <ResolvedSuspense fallback={pendingElement}>\n {!(isServer ?? router.isServer) && <Transitioner />}\n <MatchesInner />\n </ResolvedSuspense>\n )\n\n return router.options.InnerWrap ? (\n <router.options.InnerWrap>{inner}</router.options.InnerWrap>\n ) : (\n inner\n )\n}\n\nfunction MatchesInner() {\n const router = useRouter()\n const _isServer = isServer ?? router.isServer\n const matchId = _isServer\n ? router.stores.firstMatchId.state\n : // eslint-disable-next-line react-hooks/rules-of-hooks\n useStore(router.stores.firstMatchId, (id) => id)\n const resetKey = _isServer\n ? router.stores.loadedAt.state\n : // eslint-disable-next-line react-hooks/rules-of-hooks\n useStore(router.stores.loadedAt, (loadedAt) => loadedAt)\n\n const matchComponent = matchId ? <Match matchId={matchId} /> : null\n\n return (\n <matchContext.Provider value={matchId}>\n {router.options.disableGlobalCatchBoundary ? (\n matchComponent\n ) : (\n <CatchBoundary\n getResetKey={() => resetKey}\n errorComponent={ErrorComponent}\n onCatch={\n process.env.NODE_ENV !== 'production'\n ? (error) => {\n warning(\n false,\n `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,\n )\n warning(false, error.message || error.toString())\n }\n : undefined\n }\n >\n {matchComponent}\n </CatchBoundary>\n )}\n </matchContext.Provider>\n )\n}\n\nexport type UseMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptionsProps<TRouter, TFrom, TTo> &\n DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> &\n DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> &\n MaskOptions<TRouter, TMaskFrom, TMaskTo> &\n MatchRouteOptions\n\n/**\n * Create a matcher function for testing locations against route definitions.\n *\n * The returned function accepts standard navigation options (`to`, `params`,\n * `search`, etc.) and returns either `false` (no match) or the matched params\n * object when the route matches the current or pending location.\n *\n * Useful for conditional rendering and active UI states.\n *\n * @returns A `matchRoute(options)` function that returns `false` or params.\n * @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchRouteHook\n */\nexport function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {\n const router = useRouter()\n\n if (!(isServer ?? router.isServer)) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useStore(router.stores.matchRouteReactivity, (d) => d)\n }\n\n return React.useCallback(\n <\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n >(\n opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n ):\n | false\n | Expand<ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']> => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n return router.matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n },\n [router],\n )\n}\n\nexport type MakeMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // 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\n children?:\n | ((\n params?: RouteByPath<\n TRouter['routeTree'],\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => React.ReactNode)\n | React.ReactNode\n}\n\n/**\n * Component that conditionally renders its children based on whether a route\n * matches the provided `from`/`to` options. If `children` is a function, it\n * receives the matched params object.\n *\n * @link https://tanstack.com/router/latest/docs/framework/react/api/router/matchRouteComponent\n */\nexport function MatchRoute<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any) as boolean\n\n if (typeof props.children === 'function') {\n return (props.children as any)(params)\n }\n\n return params ? props.children : null\n}\n\nexport interface UseMatchesBaseOptions<\n TRouter extends AnyRouter,\n TSelected,\n TStructuralSharing,\n> {\n select?: (\n matches: Array<MakeRouteMatchUnion<TRouter>>,\n ) => ValidateSelected<TRouter, TSelected, TStructuralSharing>\n}\n\nexport type UseMatchesResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected\n\nexport function useMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n): UseMatchesResult<TRouter, TSelected> {\n const router = useRouter<TRouter>()\n const previousResult =\n React.useRef<ValidateSelected<TRouter, TSelected, TStructuralSharing>>(\n undefined,\n )\n\n if (isServer ?? router.isServer) {\n const matches = router.stores.activeMatchesSnapshot.state as Array<\n MakeRouteMatchUnion<TRouter>\n >\n return (opts?.select ? opts.select(matches) : matches) as UseMatchesResult<\n TRouter,\n TSelected\n >\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStore(router.stores.activeMatchesSnapshot, (matches) => {\n const selected = opts?.select\n ? opts.select(matches as Array<MakeRouteMatchUnion<TRouter>>)\n : (matches as any)\n\n if (opts?.structuralSharing ?? router.options.defaultStructuralSharing) {\n const shared = replaceEqualDeep(previousResult.current, selected)\n previousResult.current = shared\n return shared\n }\n\n return selected\n }) as UseMatchesResult<TRouter, TSelected>\n}\n\n/**\n * Read the full array of active route matches or select a derived subset.\n *\n * Useful for debugging, breadcrumbs, or aggregating metadata across matches.\n *\n * @returns The array of matches (or the selected value).\n * @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchesHook\n */\n\n/**\n * Read the full array of active route matches or select a derived subset.\n *\n * Useful for debugging, breadcrumbs, or aggregating metadata across matches.\n *\n * @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchesHook\n */\nexport function useParentMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n): UseMatchesResult<TRouter, TSelected> {\n const contextMatchId = React.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n 0,\n matches.findIndex((d) => d.id === contextMatchId),\n )\n return opts?.select ? opts.select(matches) : matches\n },\n structuralSharing: opts?.structuralSharing,\n } as any)\n}\n\n/**\n * Read the array of active route matches that are children of the current\n * match (or selected parent) in the match tree.\n */\nexport function useChildMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n): UseMatchesResult<TRouter, TSelected> {\n const contextMatchId = React.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n matches.findIndex((d) => d.id === contextMatchId) + 1,\n )\n return opts?.select ? opts.select(matches) : matches\n },\n structuralSharing: opts?.structuralSharing,\n } as any)\n}\n"],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  require("./_virtual/_rolldown/runtime.cjs");
2
2
  const require_useRouter = require("./useRouter.cjs");
3
- const require_useRouterState = require("./useRouterState.cjs");
4
3
  const require_Asset = require("./Asset.cjs");
4
+ let _tanstack_router_core = require("@tanstack/router-core");
5
5
  let react = require("react");
6
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
+ let _tanstack_react_store = require("@tanstack/react-store");
8
+ let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer");
7
9
  //#region src/Scripts.tsx
8
10
  /**
9
11
  * Render body script tags collected from route matches and SSR manifests.
@@ -12,37 +14,39 @@ let react_jsx_runtime = require("react/jsx-runtime");
12
14
  var Scripts = () => {
13
15
  const router = require_useRouter.useRouter();
14
16
  const nonce = router.options.ssr?.nonce;
15
- const assetScripts = require_useRouterState.useRouterState({
16
- select: (state) => {
17
- const assetScripts = [];
18
- const manifest = router.ssr?.manifest;
19
- if (!manifest) return [];
20
- state.matches.map((match) => router.looseRoutesById[match.routeId]).forEach((route) => manifest.routes[route.id]?.assets?.filter((d) => d.tag === "script").forEach((asset) => {
21
- assetScripts.push({
22
- tag: "script",
23
- attrs: {
24
- ...asset.attrs,
25
- nonce
26
- },
27
- children: asset.children
28
- });
29
- }));
30
- return assetScripts;
17
+ const getAssetScripts = (matches) => {
18
+ const assetScripts = [];
19
+ const manifest = router.ssr?.manifest;
20
+ if (!manifest) return [];
21
+ matches.map((match) => router.looseRoutesById[match.routeId]).forEach((route) => manifest.routes[route.id]?.assets?.filter((d) => d.tag === "script").forEach((asset) => {
22
+ assetScripts.push({
23
+ tag: "script",
24
+ attrs: {
25
+ ...asset.attrs,
26
+ nonce
27
+ },
28
+ children: asset.children
29
+ });
30
+ }));
31
+ return assetScripts;
32
+ };
33
+ const getScripts = (matches) => matches.map((match) => match.scripts).flat(1).filter(Boolean).map(({ children, ...script }) => ({
34
+ tag: "script",
35
+ attrs: {
36
+ ...script,
37
+ suppressHydrationWarning: true,
38
+ nonce
31
39
  },
32
- structuralSharing: true
33
- });
34
- const { scripts } = require_useRouterState.useRouterState({
35
- select: (state) => ({ scripts: state.matches.map((match) => match.scripts).flat(1).filter(Boolean).map(({ children, ...script }) => ({
36
- tag: "script",
37
- attrs: {
38
- ...script,
39
- suppressHydrationWarning: true,
40
- nonce
41
- },
42
- children
43
- })) }),
44
- structuralSharing: true
45
- });
40
+ children
41
+ }));
42
+ if (_tanstack_router_core_isServer.isServer ?? router.isServer) {
43
+ const assetScripts = getAssetScripts(router.stores.activeMatchesSnapshot.state);
44
+ return renderScripts(router, getScripts(router.stores.activeMatchesSnapshot.state), assetScripts);
45
+ }
46
+ const assetScripts = (0, _tanstack_react_store.useStore)(router.stores.activeMatchesSnapshot, getAssetScripts, _tanstack_router_core.deepEqual);
47
+ return renderScripts(router, (0, _tanstack_react_store.useStore)(router.stores.activeMatchesSnapshot, getScripts, _tanstack_router_core.deepEqual), assetScripts);
48
+ };
49
+ function renderScripts(router, scripts, assetScripts) {
46
50
  let serverBufferedScript = void 0;
47
51
  if (router.serverSsr) serverBufferedScript = router.serverSsr.takeBufferedScripts();
48
52
  const allScripts = [...scripts, ...assetScripts];
@@ -51,7 +55,7 @@ var Scripts = () => {
51
55
  ...asset,
52
56
  key: `tsr-scripts-${asset.tag}-${i}`
53
57
  })) });
54
- };
58
+ }
55
59
  //#endregion
56
60
  exports.Scripts = Scripts;
57
61
 
@@ -1 +1 @@
1
- {"version":3,"file":"Scripts.cjs","names":[],"sources":["../../src/Scripts.tsx"],"sourcesContent":["import { Asset } from './Asset'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\n/**\n * Render body script tags collected from route matches and SSR manifests.\n * Should be placed near the end of the document body.\n */\nexport const Scripts = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const assetScripts = useRouterState({\n select: (state) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: { ...asset.attrs, nonce },\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n },\n structuralSharing: true as any,\n })\n\n const { scripts } = useRouterState({\n select: (state) => ({\n scripts: (\n state.matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n suppressHydrationWarning: true,\n nonce,\n },\n children,\n })),\n }),\n structuralSharing: true as any,\n })\n\n let serverBufferedScript: RouterManagedTag | undefined = undefined\n\n if (router.serverSsr) {\n serverBufferedScript = router.serverSsr.takeBufferedScripts()\n }\n\n const allScripts = [...scripts, ...assetScripts] as Array<RouterManagedTag>\n\n if (serverBufferedScript) {\n allScripts.unshift(serverBufferedScript)\n }\n\n return (\n <>\n {allScripts.map((asset, i) => (\n <Asset {...asset} key={`tsr-scripts-${asset.tag}-${i}`} />\n ))}\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;AASA,IAAa,gBAAgB;CAC3B,MAAM,SAAS,kBAAA,WAAW;CAC1B,MAAM,QAAQ,OAAO,QAAQ,KAAK;CAClC,MAAM,eAAe,uBAAA,eAAe;EAClC,SAAS,UAAU;GACjB,MAAM,eAAwC,EAAE;GAChD,MAAM,WAAW,OAAO,KAAK;AAE7B,OAAI,CAAC,SACH,QAAO,EAAE;AAGX,SAAM,QACH,KAAK,UAAU,OAAO,gBAAgB,MAAM,SAAU,CACtD,SAAS,UACR,SAAS,OAAO,MAAM,KAAK,QACvB,QAAQ,MAAM,EAAE,QAAQ,SAAS,CAClC,SAAS,UAAU;AAClB,iBAAa,KAAK;KAChB,KAAK;KACL,OAAO;MAAE,GAAG,MAAM;MAAO;MAAO;KAChC,UAAU,MAAM;KACjB,CAAQ;KACT,CACL;AAEH,UAAO;;EAET,mBAAmB;EACpB,CAAC;CAEF,MAAM,EAAE,YAAY,uBAAA,eAAe;EACjC,SAAS,WAAW,EAClB,SACE,MAAM,QACH,KAAK,UAAU,MAAM,QAAS,CAC9B,KAAK,EAAE,CACP,OAAO,QAAQ,CAClB,KAAK,EAAE,UAAU,GAAG,cAAc;GAClC,KAAK;GACL,OAAO;IACL,GAAG;IACH,0BAA0B;IAC1B;IACD;GACD;GACD,EAAE,EACJ;EACD,mBAAmB;EACpB,CAAC;CAEF,IAAI,uBAAqD,KAAA;AAEzD,KAAI,OAAO,UACT,wBAAuB,OAAO,UAAU,qBAAqB;CAG/D,MAAM,aAAa,CAAC,GAAG,SAAS,GAAG,aAAa;AAEhD,KAAI,qBACF,YAAW,QAAQ,qBAAqB;AAG1C,QACE,iBAAA,GAAA,kBAAA,KAAA,kBAAA,UAAA,EAAA,UACG,WAAW,KAAK,OAAO,MACtB,iBAAA,GAAA,MAAA,eAAC,cAAA,OAAD;EAAO,GAAI;EAAO,KAAK,eAAe,MAAM,IAAI,GAAG;EAAO,CAAA,CAC1D,EACD,CAAA"}
1
+ {"version":3,"file":"Scripts.cjs","names":[],"sources":["../../src/Scripts.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport { deepEqual } from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\n/**\n * Render body script tags collected from route matches and SSR manifests.\n * Should be placed near the end of the document body.\n */\nexport const Scripts = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n\n const getAssetScripts = (matches: Array<any>) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: { ...asset.attrs, nonce },\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n }\n\n const getScripts = (matches: Array<any>): Array<RouterManagedTag> =>\n (\n matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(\n ({ children, ...script }) =>\n ({\n tag: 'script',\n attrs: {\n ...script,\n suppressHydrationWarning: true,\n nonce,\n },\n children,\n }) satisfies RouterManagedTag,\n )\n\n if (isServer ?? router.isServer) {\n const assetScripts = getAssetScripts(\n router.stores.activeMatchesSnapshot.state,\n )\n const scripts = getScripts(router.stores.activeMatchesSnapshot.state)\n return renderScripts(router, scripts, assetScripts)\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks -- condition is static\n const assetScripts = useStore(\n router.stores.activeMatchesSnapshot,\n getAssetScripts,\n deepEqual,\n )\n // eslint-disable-next-line react-hooks/rules-of-hooks -- condition is static\n const scripts = useStore(\n router.stores.activeMatchesSnapshot,\n getScripts,\n deepEqual,\n )\n\n return renderScripts(router, scripts, assetScripts)\n}\n\nfunction renderScripts(\n router: ReturnType<typeof useRouter>,\n scripts: Array<RouterManagedTag>,\n assetScripts: Array<RouterManagedTag>,\n) {\n let serverBufferedScript: RouterManagedTag | undefined = undefined\n\n if (router.serverSsr) {\n serverBufferedScript = router.serverSsr.takeBufferedScripts()\n }\n\n const allScripts = [...scripts, ...assetScripts] as Array<RouterManagedTag>\n\n if (serverBufferedScript) {\n allScripts.unshift(serverBufferedScript)\n }\n\n return (\n <>\n {allScripts.map((asset, i) => (\n <Asset {...asset} key={`tsr-scripts-${asset.tag}-${i}`} />\n ))}\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAWA,IAAa,gBAAgB;CAC3B,MAAM,SAAS,kBAAA,WAAW;CAC1B,MAAM,QAAQ,OAAO,QAAQ,KAAK;CAElC,MAAM,mBAAmB,YAAwB;EAC/C,MAAM,eAAwC,EAAE;EAChD,MAAM,WAAW,OAAO,KAAK;AAE7B,MAAI,CAAC,SACH,QAAO,EAAE;AAGX,UACG,KAAK,UAAU,OAAO,gBAAgB,MAAM,SAAU,CACtD,SAAS,UACR,SAAS,OAAO,MAAM,KAAK,QACvB,QAAQ,MAAM,EAAE,QAAQ,SAAS,CAClC,SAAS,UAAU;AAClB,gBAAa,KAAK;IAChB,KAAK;IACL,OAAO;KAAE,GAAG,MAAM;KAAO;KAAO;IAChC,UAAU,MAAM;IACjB,CAAQ;IACT,CACL;AAEH,SAAO;;CAGT,MAAM,cAAc,YAEhB,QACG,KAAK,UAAU,MAAM,QAAS,CAC9B,KAAK,EAAE,CACP,OAAO,QAAQ,CAClB,KACC,EAAE,UAAU,GAAG,cACb;EACC,KAAK;EACL,OAAO;GACL,GAAG;GACH,0BAA0B;GAC1B;GACD;EACD;EACD,EACJ;AAEH,KAAI,+BAAA,YAAY,OAAO,UAAU;EAC/B,MAAM,eAAe,gBACnB,OAAO,OAAO,sBAAsB,MACrC;AAED,SAAO,cAAc,QADL,WAAW,OAAO,OAAO,sBAAsB,MAAM,EAC/B,aAAa;;CAIrD,MAAM,gBAAA,GAAA,sBAAA,UACJ,OAAO,OAAO,uBACd,iBACA,sBAAA,UACD;AAQD,QAAO,cAAc,SAAA,GAAA,sBAAA,UALnB,OAAO,OAAO,uBACd,YACA,sBAAA,UACD,EAEqC,aAAa;;AAGrD,SAAS,cACP,QACA,SACA,cACA;CACA,IAAI,uBAAqD,KAAA;AAEzD,KAAI,OAAO,UACT,wBAAuB,OAAO,UAAU,qBAAqB;CAG/D,MAAM,aAAa,CAAC,GAAG,SAAS,GAAG,aAAa;AAEhD,KAAI,qBACF,YAAW,QAAQ,qBAAqB;AAG1C,QACE,iBAAA,GAAA,kBAAA,KAAA,kBAAA,UAAA,EAAA,UACG,WAAW,KAAK,OAAO,MACtB,iBAAA,GAAA,MAAA,eAAC,cAAA,OAAD;EAAO,GAAI;EAAO,KAAK,eAAe,MAAM,IAAI,GAAG;EAAO,CAAA,CAC1D,EACD,CAAA"}