@tanstack/solid-router 1.166.6 → 2.0.0-alpha.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 (182) hide show
  1. package/dist/cjs/Asset.cjs +111 -68
  2. package/dist/cjs/Asset.cjs.map +1 -1
  3. package/dist/cjs/CatchBoundary.cjs +15 -15
  4. package/dist/cjs/CatchBoundary.cjs.map +1 -1
  5. package/dist/cjs/ClientOnly.cjs +2 -2
  6. package/dist/cjs/ClientOnly.cjs.map +1 -1
  7. package/dist/cjs/HeadContent.cjs +16 -8
  8. package/dist/cjs/HeadContent.cjs.map +1 -1
  9. package/dist/cjs/HeadContent.dev.cjs +18 -10
  10. package/dist/cjs/HeadContent.dev.cjs.map +1 -1
  11. package/dist/cjs/Match.cjs +125 -81
  12. package/dist/cjs/Match.cjs.map +1 -1
  13. package/dist/cjs/Matches.cjs +23 -16
  14. package/dist/cjs/Matches.cjs.map +1 -1
  15. package/dist/cjs/RouterProvider.cjs +3 -2
  16. package/dist/cjs/RouterProvider.cjs.map +1 -1
  17. package/dist/cjs/SafeFragment.cjs +1 -1
  18. package/dist/cjs/ScriptOnce.cjs +4 -2
  19. package/dist/cjs/ScriptOnce.cjs.map +1 -1
  20. package/dist/cjs/Scripts.cjs +6 -2
  21. package/dist/cjs/Scripts.cjs.map +1 -1
  22. package/dist/cjs/Transitioner.cjs +11 -16
  23. package/dist/cjs/Transitioner.cjs.map +1 -1
  24. package/dist/cjs/awaited.cjs +20 -16
  25. package/dist/cjs/awaited.cjs.map +1 -1
  26. package/dist/cjs/lazyRouteComponent.cjs +3 -3
  27. package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
  28. package/dist/cjs/link.cjs +40 -22
  29. package/dist/cjs/link.cjs.map +1 -1
  30. package/dist/cjs/not-found.cjs +1 -1
  31. package/dist/cjs/renderRouteNotFound.cjs +1 -1
  32. package/dist/cjs/route.cjs +1 -1
  33. package/dist/cjs/scroll-restoration.cjs +1 -1
  34. package/dist/cjs/ssr/RouterClient.cjs +4 -23
  35. package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
  36. package/dist/cjs/ssr/RouterServer.cjs +4 -47
  37. package/dist/cjs/ssr/RouterServer.cjs.map +1 -1
  38. package/dist/cjs/ssr/RouterServer.d.cts +0 -1
  39. package/dist/cjs/ssr/defaultRenderHandler.cjs +1 -1
  40. package/dist/cjs/ssr/defaultStreamHandler.cjs +1 -1
  41. package/dist/cjs/ssr/renderRouterToStream.cjs +2 -3
  42. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
  43. package/dist/cjs/ssr/renderRouterToString.cjs +2 -2
  44. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
  45. package/dist/cjs/ssr/renderRouterToString.d.cts +1 -1
  46. package/dist/cjs/useBlocker.cjs +9 -5
  47. package/dist/cjs/useBlocker.cjs.map +1 -1
  48. package/dist/cjs/useMatch.cjs +3 -6
  49. package/dist/cjs/useMatch.cjs.map +1 -1
  50. package/dist/cjs/useNavigate.cjs +1 -1
  51. package/dist/cjs/useNavigate.cjs.map +1 -1
  52. package/dist/cjs/useRouterState.cjs +15 -9
  53. package/dist/cjs/useRouterState.cjs.map +1 -1
  54. package/dist/cjs/utils.cjs +2 -4
  55. package/dist/cjs/utils.cjs.map +1 -1
  56. package/dist/cjs/utils.d.cts +1 -0
  57. package/dist/esm/Asset.js +111 -68
  58. package/dist/esm/Asset.js.map +1 -1
  59. package/dist/esm/CatchBoundary.js +15 -15
  60. package/dist/esm/CatchBoundary.js.map +1 -1
  61. package/dist/esm/ClientOnly.js +2 -2
  62. package/dist/esm/ClientOnly.js.map +1 -1
  63. package/dist/esm/HeadContent.dev.js +18 -10
  64. package/dist/esm/HeadContent.dev.js.map +1 -1
  65. package/dist/esm/HeadContent.js +16 -8
  66. package/dist/esm/HeadContent.js.map +1 -1
  67. package/dist/esm/Match.js +89 -45
  68. package/dist/esm/Match.js.map +1 -1
  69. package/dist/esm/Matches.js +23 -16
  70. package/dist/esm/Matches.js.map +1 -1
  71. package/dist/esm/RouterProvider.js +3 -2
  72. package/dist/esm/RouterProvider.js.map +1 -1
  73. package/dist/esm/SafeFragment.js +1 -1
  74. package/dist/esm/ScriptOnce.js +4 -2
  75. package/dist/esm/ScriptOnce.js.map +1 -1
  76. package/dist/esm/Scripts.js +6 -2
  77. package/dist/esm/Scripts.js.map +1 -1
  78. package/dist/esm/Transitioner.js +11 -16
  79. package/dist/esm/Transitioner.js.map +1 -1
  80. package/dist/esm/awaited.js +18 -14
  81. package/dist/esm/awaited.js.map +1 -1
  82. package/dist/esm/lazyRouteComponent.js +3 -3
  83. package/dist/esm/lazyRouteComponent.js.map +1 -1
  84. package/dist/esm/link.js +39 -21
  85. package/dist/esm/link.js.map +1 -1
  86. package/dist/esm/not-found.js +1 -1
  87. package/dist/esm/renderRouteNotFound.js +1 -1
  88. package/dist/esm/route.js +1 -1
  89. package/dist/esm/scroll-restoration.js +1 -1
  90. package/dist/esm/ssr/RouterClient.js +4 -23
  91. package/dist/esm/ssr/RouterClient.js.map +1 -1
  92. package/dist/esm/ssr/RouterServer.d.ts +0 -1
  93. package/dist/esm/ssr/RouterServer.js +5 -48
  94. package/dist/esm/ssr/RouterServer.js.map +1 -1
  95. package/dist/esm/ssr/defaultRenderHandler.js +1 -1
  96. package/dist/esm/ssr/defaultStreamHandler.js +1 -1
  97. package/dist/esm/ssr/renderRouterToStream.js +2 -4
  98. package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
  99. package/dist/esm/ssr/renderRouterToString.d.ts +1 -1
  100. package/dist/esm/ssr/renderRouterToString.js +2 -2
  101. package/dist/esm/ssr/renderRouterToString.js.map +1 -1
  102. package/dist/esm/useBlocker.js +9 -5
  103. package/dist/esm/useBlocker.js.map +1 -1
  104. package/dist/esm/useMatch.js +3 -6
  105. package/dist/esm/useMatch.js.map +1 -1
  106. package/dist/esm/useNavigate.js +1 -1
  107. package/dist/esm/useNavigate.js.map +1 -1
  108. package/dist/esm/useRouterState.js +15 -9
  109. package/dist/esm/useRouterState.js.map +1 -1
  110. package/dist/esm/utils.d.ts +1 -0
  111. package/dist/esm/utils.js +2 -4
  112. package/dist/esm/utils.js.map +1 -1
  113. package/dist/source/Asset.jsx +58 -35
  114. package/dist/source/Asset.jsx.map +1 -1
  115. package/dist/source/CatchBoundary.jsx +9 -5
  116. package/dist/source/CatchBoundary.jsx.map +1 -1
  117. package/dist/source/ClientOnly.jsx +1 -1
  118. package/dist/source/ClientOnly.jsx.map +1 -1
  119. package/dist/source/HeadContent.dev.jsx +8 -6
  120. package/dist/source/HeadContent.dev.jsx.map +1 -1
  121. package/dist/source/HeadContent.jsx +6 -4
  122. package/dist/source/HeadContent.jsx.map +1 -1
  123. package/dist/source/Match.jsx +76 -35
  124. package/dist/source/Match.jsx.map +1 -1
  125. package/dist/source/Matches.jsx +25 -17
  126. package/dist/source/Matches.jsx.map +1 -1
  127. package/dist/source/RouterProvider.jsx +2 -3
  128. package/dist/source/RouterProvider.jsx.map +1 -1
  129. package/dist/source/Scripts.jsx +4 -3
  130. package/dist/source/Scripts.jsx.map +1 -1
  131. package/dist/source/Transitioner.jsx +15 -16
  132. package/dist/source/Transitioner.jsx.map +1 -1
  133. package/dist/source/awaited.jsx +7 -8
  134. package/dist/source/awaited.jsx.map +1 -1
  135. package/dist/source/lazyRouteComponent.jsx +3 -3
  136. package/dist/source/lazyRouteComponent.jsx.map +1 -1
  137. package/dist/source/link.jsx +53 -48
  138. package/dist/source/link.jsx.map +1 -1
  139. package/dist/source/ssr/RouterClient.jsx +1 -13
  140. package/dist/source/ssr/RouterClient.jsx.map +1 -1
  141. package/dist/source/ssr/RouterServer.d.ts +0 -1
  142. package/dist/source/ssr/RouterServer.jsx +1 -34
  143. package/dist/source/ssr/RouterServer.jsx.map +1 -1
  144. package/dist/source/ssr/renderRouterToStream.jsx +2 -6
  145. package/dist/source/ssr/renderRouterToStream.jsx.map +1 -1
  146. package/dist/source/ssr/renderRouterToString.d.ts +1 -1
  147. package/dist/source/ssr/renderRouterToString.jsx +2 -2
  148. package/dist/source/ssr/renderRouterToString.jsx.map +1 -1
  149. package/dist/source/useBlocker.jsx +8 -4
  150. package/dist/source/useBlocker.jsx.map +1 -1
  151. package/dist/source/useMatch.jsx +3 -8
  152. package/dist/source/useMatch.jsx.map +1 -1
  153. package/dist/source/useNavigate.jsx +1 -1
  154. package/dist/source/useNavigate.jsx.map +1 -1
  155. package/dist/source/useRouterState.jsx +23 -10
  156. package/dist/source/useRouterState.jsx.map +1 -1
  157. package/dist/source/utils.d.ts +1 -0
  158. package/dist/source/utils.js +3 -4
  159. package/dist/source/utils.js.map +1 -1
  160. package/package.json +8 -7
  161. package/src/Asset.tsx +123 -95
  162. package/src/CatchBoundary.tsx +9 -7
  163. package/src/ClientOnly.tsx +8 -3
  164. package/src/HeadContent.dev.tsx +16 -11
  165. package/src/HeadContent.tsx +6 -4
  166. package/src/Match.tsx +112 -44
  167. package/src/Matches.tsx +39 -30
  168. package/src/RouterProvider.tsx +7 -4
  169. package/src/Scripts.tsx +4 -3
  170. package/src/Transitioner.tsx +51 -58
  171. package/src/awaited.tsx +11 -12
  172. package/src/lazyRouteComponent.tsx +3 -3
  173. package/src/link.tsx +68 -60
  174. package/src/ssr/RouterClient.tsx +1 -22
  175. package/src/ssr/RouterServer.tsx +1 -53
  176. package/src/ssr/renderRouterToStream.tsx +5 -15
  177. package/src/ssr/renderRouterToString.tsx +2 -2
  178. package/src/useBlocker.tsx +8 -4
  179. package/src/useMatch.tsx +6 -11
  180. package/src/useNavigate.tsx +1 -1
  181. package/src/useRouterState.tsx +34 -22
  182. package/src/utils.ts +5 -4
@@ -1,17 +1,25 @@
1
- import { createComponent } from "solid-js/web";
2
- import { MetaProvider } from "@solidjs/meta";
1
+ import { createComponent } from "@solidjs/web";
3
2
  import { For } from "solid-js";
4
3
  import { Asset } from "./Asset.js";
5
4
  import { useTags } from "./headContentUtils.js";
6
5
  function HeadContent() {
7
6
  const tags = useTags();
8
- return createComponent(MetaProvider, {
9
- get children() {
10
- return createComponent(For, {
11
- get each() {
12
- return tags();
7
+ return createComponent(For, {
8
+ get each() {
9
+ return tags();
10
+ },
11
+ children: (tag) => {
12
+ const t = tag();
13
+ return createComponent(Asset, {
14
+ get tag() {
15
+ return t.tag;
13
16
  },
14
- children: (tag) => createComponent(Asset, tag)
17
+ get attrs() {
18
+ return t.attrs;
19
+ },
20
+ get children() {
21
+ return t.children;
22
+ }
15
23
  });
16
24
  }
17
25
  });
@@ -1 +1 @@
1
- {"version":3,"file":"HeadContent.js","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import { MetaProvider } from '@solidjs/meta'\nimport { For } from 'solid-js'\nimport { Asset } from './Asset'\nimport { useTags } from './headContentUtils'\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * When using full document hydration (hydrating from `<html>`), this component should be rendered in the `<body>`\n * to ensure it's part of the reactive tree and updates correctly during client-side navigation.\n * The component uses portals internally to render content into the `<head>` element.\n */\nexport function HeadContent() {\n const tags = useTags()\n\n return (\n <MetaProvider>\n <For each={tags()}>{(tag) => <Asset {...tag} />}</For>\n </MetaProvider>\n )\n}\n"],"names":["HeadContent","tags","useTags","_$createComponent","MetaProvider","children","For","each","tag","Asset"],"mappings":";;;;;AAWO,SAASA,cAAc;AAC5B,QAAMC,OAAOC,QAAAA;AAEb,SAAAC,gBACGC,cAAY;AAAA,IAAA,IAAAC,WAAA;AAAA,aAAAF,gBACVG,KAAG;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEN,KAAAA;AAAAA,QAAM;AAAA,QAAAI,UAAIG,CAAAA,QAAGL,gBAAMM,OAAUD,GAAG;AAAA,MAAA,CAAI;AAAA,IAAA;AAAA,EAAA,CAAA;AAGrD;"}
1
+ {"version":3,"file":"HeadContent.js","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import { For } from 'solid-js'\nimport { Asset } from './Asset'\nimport { useTags } from './headContentUtils'\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * When using full document hydration (hydrating from `<html>`), this component should be rendered in the `<body>`\n * to ensure it's part of the reactive tree and updates correctly during client-side navigation.\n * The component uses portals internally to render content into the `<head>` element.\n */\nexport function HeadContent() {\n const tags = useTags()\n\n return (\n <For each={tags()}>\n {(tag) => {\n const t = tag() as any\n return <Asset tag={t.tag} attrs={t.attrs} children={t.children} />\n }}\n </For>\n )\n}\n"],"names":["HeadContent","tags","useTags","_$createComponent","For","each","children","tag","t","Asset","attrs"],"mappings":";;;;AAUO,SAASA,cAAc;AAC5B,QAAMC,OAAOC,QAAAA;AAEb,SAAAC,gBACGC,KAAG;AAAA,IAAA,IAACC,OAAI;AAAA,aAAEJ,KAAAA;AAAAA,IAAM;AAAA,IAAAK,UACbC,CAAAA,QAAQ;AACR,YAAMC,IAAID,IAAAA;AACV,aAAAJ,gBAAQM,OAAK;AAAA,QAAA,IAACF,MAAG;AAAA,iBAAEC,EAAED;AAAAA,QAAG;AAAA,QAAA,IAAEG,QAAK;AAAA,iBAAEF,EAAEE;AAAAA,QAAK;AAAA,QAAA,IAAEJ,WAAQ;AAAA,iBAAEE,EAAEF;AAAAA,QAAQ;AAAA,MAAA,CAAA;AAAA,IAChE;AAAA,EAAA,CAAC;AAGP;"}
package/dist/esm/Match.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createComponent, memo, Dynamic, mergeProps } from "solid-js/web";
1
+ import { createComponent, Dynamic, memo, mergeProps } from "@solidjs/web";
2
2
  import * as Solid from "solid-js";
3
3
  import invariant from "tiny-invariant";
4
4
  import warning from "tiny-warning";
@@ -12,6 +12,7 @@ import { matchContext } from "./matchContext.js";
12
12
  import { SafeFragment } from "./SafeFragment.js";
13
13
  import { renderRouteNotFound } from "./renderRouteNotFound.js";
14
14
  import { ScrollRestoration } from "./scroll-restoration.js";
15
+ const MatchContext = matchContext;
15
16
  const Match = (props) => {
16
17
  const router = useRouter();
17
18
  const matchState = useRouterState({
@@ -27,7 +28,7 @@ const Match = (props) => {
27
28
  };
28
29
  }
29
30
  });
30
- if (!matchState()) return null;
31
+ if (!Solid.untrack(matchState)) return null;
31
32
  const route = () => router.routesById[matchState().routeId];
32
33
  const resolvePendingComponent = () => route().options.pendingComponent ?? router.options.defaultPendingComponent;
33
34
  const routeErrorComponent = () => route().options.errorComponent ?? router.options.defaultErrorComponent;
@@ -36,8 +37,8 @@ const Match = (props) => {
36
37
  // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component
37
38
  route().options.notFoundComponent ?? router.options.notFoundRoute?.options.component
38
39
  ) : route().options.notFoundComponent;
39
- const resolvedNoSsr = matchState().ssr === false || matchState().ssr === "data-only";
40
- const ResolvedSuspenseBoundary = () => Solid.Suspense;
40
+ const resolvedNoSsr = Solid.createMemo(() => matchState().ssr === false || matchState().ssr === "data-only");
41
+ const ResolvedSuspenseBoundary = () => resolvedNoSsr() ? SafeFragment : Solid.Loading;
41
42
  const ResolvedCatchBoundary = () => routeErrorComponent() ? CatchBoundary : SafeFragment;
42
43
  const ResolvedNotFoundBoundary = () => routeNotFoundComponent() ? CatchNotFound : SafeFragment;
43
44
  const resetKey = useRouterState({
@@ -49,10 +50,13 @@ const Match = (props) => {
49
50
  return s.matches[index - 1]?.routeId;
50
51
  }
51
52
  });
52
- const ShellComponent = route().isRoot ? route().options.shellComponent ?? SafeFragment : SafeFragment;
53
- return createComponent(ShellComponent, {
53
+ const ShellComponent = Solid.createMemo(() => route().isRoot ? route().options.shellComponent ?? SafeFragment : SafeFragment);
54
+ return createComponent(Dynamic, {
55
+ get component() {
56
+ return ShellComponent();
57
+ },
54
58
  get children() {
55
- return [createComponent(matchContext.Provider, {
59
+ return [createComponent(MatchContext, {
56
60
  value: () => props.matchId,
57
61
  get children() {
58
62
  return createComponent(Dynamic, {
@@ -62,7 +66,7 @@ const Match = (props) => {
62
66
  get fallback() {
63
67
  return (
64
68
  // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch
65
- memo(() => !!((isServer ?? router.isServer) || resolvedNoSsr))() ? void 0 : createComponent(Dynamic, {
69
+ memo(() => !!((isServer ?? router.isServer) || resolvedNoSsr()))() ? void 0 : createComponent(Dynamic, {
66
70
  get component() {
67
71
  return resolvePendingComponent();
68
72
  }
@@ -80,7 +84,7 @@ const Match = (props) => {
80
84
  },
81
85
  onCatch: (error) => {
82
86
  if (isNotFound(error)) throw error;
83
- warning(false, `Error in route match: ${matchState().routeId}`);
87
+ warning(false, `Error in route match: ${Solid.untrack(matchState).routeId}`);
84
88
  routeOnCatch()?.(error);
85
89
  },
86
90
  get children() {
@@ -100,7 +104,9 @@ const Match = (props) => {
100
104
  return createComponent(Solid.Switch, {
101
105
  get children() {
102
106
  return [createComponent(Solid.Match, {
103
- when: resolvedNoSsr,
107
+ get when() {
108
+ return resolvedNoSsr();
109
+ },
104
110
  get children() {
105
111
  return createComponent(Solid.Show, {
106
112
  get when() {
@@ -123,7 +129,9 @@ const Match = (props) => {
123
129
  });
124
130
  }
125
131
  }), createComponent(Solid.Match, {
126
- when: !resolvedNoSsr,
132
+ get when() {
133
+ return !resolvedNoSsr();
134
+ },
127
135
  get children() {
128
136
  return createComponent(MatchInner, {
129
137
  get matchId() {
@@ -145,6 +153,7 @@ const Match = (props) => {
145
153
  }
146
154
  });
147
155
  };
156
+ const lastOnRenderedKey = /* @__PURE__ */ new WeakMap();
148
157
  function OnRendered() {
149
158
  const router = useRouter();
150
159
  const location = useRouterState({
@@ -152,12 +161,15 @@ function OnRendered() {
152
161
  return s.resolvedLocation?.state.__TSR_key;
153
162
  }
154
163
  });
155
- Solid.createEffect(Solid.on([location], () => {
164
+ Solid.createEffect(() => [location()], ([location2]) => {
165
+ if (!location2) return;
166
+ if (lastOnRenderedKey.get(router) === location2) return;
167
+ lastOnRenderedKey.set(router, location2);
156
168
  router.emit({
157
169
  type: "onRendered",
158
170
  ...getLocationChangeInfo(router.state)
159
171
  });
160
- }));
172
+ });
161
173
  return null;
162
174
  }
163
175
  const MatchInner = (props) => {
@@ -190,12 +202,13 @@ const MatchInner = (props) => {
190
202
  };
191
203
  }
192
204
  });
193
- if (!matchState()) return null;
205
+ if (!Solid.untrack(matchState)) return null;
194
206
  const route = () => router.routesById[matchState().routeId];
195
207
  const match = () => matchState().match;
196
208
  const componentKey = () => matchState().key ?? matchState().match.id;
197
209
  const out = () => {
198
- const Comp = route().options.component ?? router.options.defaultComponent;
210
+ const currentRoute = Solid.untrack(route);
211
+ const Comp = currentRoute.options.component ?? router.options.defaultComponent;
199
212
  if (Comp) {
200
213
  return createComponent(Comp, {});
201
214
  }
@@ -215,7 +228,8 @@ const MatchInner = (props) => {
215
228
  return match()._displayPending;
216
229
  },
217
230
  children: (_) => {
218
- const [displayPendingResult] = Solid.createResource(() => router.getMatch(match().id)?._nonReactive.displayPendingPromise);
231
+ const matchId = Solid.untrack(() => match().id);
232
+ const displayPendingResult = Solid.createMemo(() => router.getMatch(matchId)?._nonReactive.displayPendingPromise);
219
233
  return memo(displayPendingResult);
220
234
  }
221
235
  }), createComponent(Solid.Match, {
@@ -223,7 +237,8 @@ const MatchInner = (props) => {
223
237
  return match()._forcePending;
224
238
  },
225
239
  children: (_) => {
226
- const [minPendingResult] = Solid.createResource(() => router.getMatch(match().id)?._nonReactive.minPendingPromise);
240
+ const matchId = Solid.untrack(() => match().id);
241
+ const minPendingResult = Solid.createMemo(() => router.getMatch(matchId)?._nonReactive.minPendingPromise);
227
242
  return memo(minPendingResult);
228
243
  }
229
244
  }), createComponent(Solid.Match, {
@@ -231,9 +246,11 @@ const MatchInner = (props) => {
231
246
  return match().status === "pending";
232
247
  },
233
248
  children: (_) => {
234
- const pendingMinMs = route().options.pendingMinMs ?? router.options.defaultPendingMinMs;
249
+ const currentMatch = Solid.untrack(match);
250
+ const currentRoute = Solid.untrack(route);
251
+ const pendingMinMs = currentRoute.options.pendingMinMs ?? router.options.defaultPendingMinMs;
235
252
  if (pendingMinMs) {
236
- const routerMatch = router.getMatch(match().id);
253
+ const routerMatch = router.getMatch(currentMatch.id);
237
254
  if (routerMatch && !routerMatch._nonReactive.minPendingPromise) {
238
255
  if (!(isServer ?? router.isServer)) {
239
256
  const minPendingPromise = createControlledPromise();
@@ -245,11 +262,11 @@ const MatchInner = (props) => {
245
262
  }
246
263
  }
247
264
  }
248
- const [loaderResult] = Solid.createResource(async () => {
265
+ const loaderResult = Solid.createMemo(async () => {
249
266
  await new Promise((r) => setTimeout(r, 0));
250
- return router.getMatch(match().id)?._nonReactive.loadPromise;
267
+ return router.getMatch(currentMatch.id)?._nonReactive.loadPromise;
251
268
  });
252
- const FallbackComponent = route().options.pendingComponent ?? router.options.defaultPendingComponent;
269
+ const FallbackComponent = currentRoute.options.pendingComponent ?? router.options.defaultPendingComponent;
253
270
  return [FallbackComponent && pendingMinMs > 0 ? createComponent(Dynamic, {
254
271
  component: FallbackComponent
255
272
  }) : null, memo(loaderResult)];
@@ -259,13 +276,14 @@ const MatchInner = (props) => {
259
276
  return match().status === "notFound";
260
277
  },
261
278
  children: (_) => {
262
- invariant(isNotFound(match().error), "Expected a notFound error");
279
+ const currentMatch = Solid.untrack(match);
280
+ const currentRoute = Solid.untrack(route);
281
+ const currentRouteId = Solid.untrack(() => matchState().routeId);
282
+ invariant(isNotFound(currentMatch.error), "Expected a notFound error");
263
283
  return createComponent(Solid.Show, {
264
- get when() {
265
- return matchState().routeId;
266
- },
284
+ when: currentRouteId,
267
285
  keyed: true,
268
- children: (_routeId) => renderRouteNotFound(router, route(), match().error)
286
+ children: (_routeId) => renderRouteNotFound(router, currentRoute, currentMatch.error)
269
287
  });
270
288
  }
271
289
  }), createComponent(Solid.Match, {
@@ -273,10 +291,11 @@ const MatchInner = (props) => {
273
291
  return match().status === "redirected";
274
292
  },
275
293
  children: (_) => {
276
- invariant(isRedirect(match().error), "Expected a redirect error");
277
- const [loaderResult] = Solid.createResource(async () => {
294
+ const matchId = Solid.untrack(() => match().id);
295
+ invariant(isRedirect(Solid.untrack(match).error), "Expected a redirect error");
296
+ const loaderResult = Solid.createMemo(async () => {
278
297
  await new Promise((r) => setTimeout(r, 0));
279
- return router.getMatch(match().id)?._nonReactive.loadPromise;
298
+ return router.getMatch(matchId)?._nonReactive.loadPromise;
280
299
  });
281
300
  return memo(loaderResult);
282
301
  }
@@ -285,7 +304,19 @@ const MatchInner = (props) => {
285
304
  return match().status === "error";
286
305
  },
287
306
  children: (_) => {
288
- throw match().error;
307
+ if (isServer ?? router.isServer) {
308
+ const currentMatch = Solid.untrack(match);
309
+ const RouteErrorComponent = (Solid.untrack(route).options.errorComponent ?? router.options.defaultErrorComponent) || ErrorComponent;
310
+ return createComponent(RouteErrorComponent, {
311
+ get error() {
312
+ return currentMatch.error;
313
+ },
314
+ info: {
315
+ componentStack: ""
316
+ }
317
+ });
318
+ }
319
+ throw Solid.untrack(match).error;
289
320
  }
290
321
  }), createComponent(Solid.Match, {
291
322
  get when() {
@@ -323,6 +354,13 @@ const Outlet = () => {
323
354
  return v;
324
355
  }
325
356
  });
357
+ const childRouteId = useRouterState({
358
+ select: (s) => {
359
+ const matches = s.matches;
360
+ const index = matches.findIndex((d) => d.id === matchId());
361
+ return matches[index + 1]?.routeId;
362
+ }
363
+ });
326
364
  const childMatchStatus = useRouterState({
327
365
  select: (s) => {
328
366
  const matches = s.matches;
@@ -359,21 +397,27 @@ const Outlet = () => {
359
397
  });
360
398
  },
361
399
  get children() {
362
- return createComponent(Solid.Suspense, {
363
- get fallback() {
364
- return createComponent(Dynamic, {
365
- get component() {
366
- return router.options.defaultPendingComponent;
367
- }
368
- });
400
+ return createComponent(Solid.Show, {
401
+ get when() {
402
+ return childRouteId();
369
403
  },
370
- get children() {
371
- return createComponent(Match, {
372
- get matchId() {
373
- return currentMatchId();
374
- }
375
- });
376
- }
404
+ keyed: true,
405
+ children: (_routeId) => createComponent(Solid.Loading, {
406
+ get fallback() {
407
+ return createComponent(Dynamic, {
408
+ get component() {
409
+ return router.options.defaultPendingComponent;
410
+ }
411
+ });
412
+ },
413
+ get children() {
414
+ return createComponent(Match, {
415
+ get matchId() {
416
+ return currentMatchId();
417
+ }
418
+ });
419
+ }
420
+ })
377
421
  });
378
422
  }
379
423
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Match.js","sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\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 { Dynamic } from 'solid-js/web'\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 type { AnyRoute, RootRouteOptions } from '@tanstack/router-core'\n\nexport const Match = (props: { matchId: string }) => {\n const router = useRouter()\n const matchState = useRouterState({\n select: (s) => {\n const match = s.matches.find((d) => d.id === props.matchId)\n\n // During navigation transitions, matches can be temporarily removed\n // Return null to avoid errors - the component will handle this gracefully\n if (!match) {\n return null\n }\n\n return {\n routeId: match.routeId,\n ssr: match.ssr,\n _displayPending: match._displayPending,\n }\n },\n })\n\n // If match doesn't exist yet, return null (component is being unmounted or not ready)\n if (!matchState()) return null\n\n const route: () => AnyRoute = () => router.routesById[matchState()!.routeId]\n\n const resolvePendingComponent = () =>\n route().options.pendingComponent ?? router.options.defaultPendingComponent\n\n const routeErrorComponent = () =>\n route().options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = () =>\n route().options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = () =>\n 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\n const ResolvedSuspenseBoundary = () => Solid.Suspense\n\n const ResolvedCatchBoundary = () =>\n routeErrorComponent() ? CatchBoundary : SafeFragment\n\n const ResolvedNotFoundBoundary = () =>\n routeNotFoundComponent() ? CatchNotFound : SafeFragment\n\n const resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n const parentRouteId = useRouterState({\n select: (s) => {\n const index = s.matches.findIndex((d) => d.id === props.matchId)\n return s.matches[index - 1]?.routeId as string\n },\n })\n\n const ShellComponent = route().isRoot\n ? ((route().options as RootRouteOptions).shellComponent ?? SafeFragment)\n : SafeFragment\n\n return (\n <ShellComponent>\n <matchContext.Provider value={() => props.matchId}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={\n // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch\n (isServer ?? router.isServer) || resolvedNoSsr ? undefined : (\n <Dynamic component={resolvePendingComponent()} />\n )\n }\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => resetKey()}\n errorComponent={routeErrorComponent() || ErrorComponent}\n onCatch={(error: Error) => {\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: ${matchState()!.routeId}`)\n routeOnCatch()?.(error)\n }}\n >\n <Dynamic\n component={ResolvedNotFoundBoundary()}\n fallback={(error: any) => {\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 (\n <Dynamic component={routeNotFoundComponent()} {...error} />\n )\n }}\n >\n <Solid.Switch>\n <Solid.Match when={resolvedNoSsr}>\n <Solid.Show\n when={!(isServer ?? router.isServer)}\n fallback={<Dynamic component={resolvePendingComponent()} />}\n >\n <MatchInner matchId={props.matchId} />\n </Solid.Show>\n </Solid.Match>\n <Solid.Match when={!resolvedNoSsr}>\n <MatchInner matchId={props.matchId} />\n </Solid.Match>\n </Solid.Switch>\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </matchContext.Provider>\n\n {parentRouteId() === rootRouteId ? (\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 location = useRouterState({\n select: (s) => {\n return s.resolvedLocation?.state.__TSR_key\n },\n })\n Solid.createEffect(\n Solid.on([location], () => {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(router.state),\n })\n }),\n )\n return null\n}\n\nexport const MatchInner = (props: { matchId: string }): any => {\n const router = useRouter()\n\n const matchState = useRouterState({\n select: (s) => {\n const match = s.matches.find((d) => d.id === props.matchId)\n\n // During navigation transitions, matches can be temporarily removed\n if (!match) {\n return null\n }\n\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 })\n\n if (!matchState()) return null\n\n const route = () => router.routesById[matchState()!.routeId]!\n\n const match = () => matchState()!.match\n\n const componentKey = () => matchState()!.key ?? matchState()!.match.id\n\n const out = () => {\n const Comp = route().options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp />\n }\n return <Outlet />\n }\n\n const keyedOut = () => (\n <Solid.Show when={componentKey()} keyed>\n {(_key) => out()}\n </Solid.Show>\n )\n\n return (\n <Solid.Switch>\n <Solid.Match when={match()._displayPending}>\n {(_) => {\n const [displayPendingResult] = Solid.createResource(\n () =>\n router.getMatch(match().id)?._nonReactive.displayPendingPromise,\n )\n\n return <>{displayPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match()._forcePending}>\n {(_) => {\n const [minPendingResult] = Solid.createResource(\n () => router.getMatch(match().id)?._nonReactive.minPendingPromise,\n )\n\n return <>{minPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'pending'}>\n {(_) => {\n const pendingMinMs =\n route().options.pendingMinMs ?? router.options.defaultPendingMinMs\n\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\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(match().id)?._nonReactive.loadPromise\n })\n\n const FallbackComponent =\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n return (\n <>\n {FallbackComponent && pendingMinMs > 0 ? (\n <Dynamic component={FallbackComponent} />\n ) : null}\n {loaderResult()}\n </>\n )\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'notFound'}>\n {(_) => {\n invariant(isNotFound(match().error), 'Expected a notFound error')\n\n // Use Show with keyed to ensure re-render when routeId changes\n return (\n <Solid.Show when={matchState()!.routeId} keyed>\n {(_routeId) =>\n renderRouteNotFound(router, route(), match().error)\n }\n </Solid.Show>\n )\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'redirected'}>\n {(_) => {\n invariant(isRedirect(match().error), 'Expected a redirect error')\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(match().id)?._nonReactive.loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'error'}>\n {(_) => {\n throw match().error\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'success'}>\n {keyedOut()}\n </Solid.Match>\n </Solid.Switch>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const matchId = Solid.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\n // During navigation transitions, parent match can be temporarily removed\n // Return false to avoid errors - the component will handle this gracefully\n if (!parentMatch) {\n return false\n }\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 const v = matches[index + 1]?.id\n return v\n },\n })\n\n const childMatchStatus = useRouterState({\n select: (s) => {\n const matches = s.matches\n const index = matches.findIndex((d) => d.id === matchId())\n return matches[index + 1]?.status\n },\n })\n\n // Only show not-found if we're not in a redirected state\n const shouldShowNotFound = () =>\n childMatchStatus() !== 'redirected' && parentGlobalNotFound()\n\n return (\n <Solid.Show\n when={!shouldShowNotFound() && childMatchId()}\n fallback={\n <Solid.Show when={shouldShowNotFound()}>\n {renderRouteNotFound(router, route(), undefined)}\n </Solid.Show>\n }\n >\n {(matchIdAccessor) => {\n // Use a memo to avoid stale accessor errors while keeping reactivity\n const currentMatchId = Solid.createMemo(() => matchIdAccessor())\n\n return (\n <Solid.Show\n when={routeId() === rootRouteId}\n fallback={<Match matchId={currentMatchId()} />}\n >\n <Solid.Suspense\n fallback={\n <Dynamic component={router.options.defaultPendingComponent} />\n }\n >\n <Match matchId={currentMatchId()} />\n </Solid.Suspense>\n </Solid.Show>\n )\n }}\n </Solid.Show>\n )\n}\n"],"names":["Match","props","router","useRouter","matchState","useRouterState","select","s","match","matches","find","d","id","matchId","routeId","ssr","_displayPending","route","routesById","resolvePendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","ResolvedSuspenseBoundary","Solid","Suspense","ResolvedCatchBoundary","CatchBoundary","SafeFragment","ResolvedNotFoundBoundary","CatchNotFound","resetKey","loadedAt","parentRouteId","index","findIndex","ShellComponent","shellComponent","_$createComponent","children","matchContext","Provider","value","Dynamic","fallback","_$memo","isServer","undefined","getResetKey","ErrorComponent","error","isNotFound","warning","_$mergeProps","Switch","when","Show","MatchInner","rootRouteId","OnRendered","ScrollRestoration","location","resolvedLocation","state","__TSR_key","createEffect","on","emit","type","getLocationChangeInfo","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","status","_forcePending","componentKey","out","Comp","defaultComponent","Outlet","keyedOut","keyed","_key","_","displayPendingResult","createResource","getMatch","_nonReactive","displayPendingPromise","minPendingResult","minPendingPromise","pendingMinMs","defaultPendingMinMs","routerMatch","createControlledPromise","setTimeout","resolve","loaderResult","Promise","r","loadPromise","FallbackComponent","invariant","_routeId","renderRouteNotFound","isRedirect","useContext","parentGlobalNotFound","parentMatch","globalNotFound","childMatchId","v","childMatchStatus","shouldShowNotFound","matchIdAccessor","currentMatchId","createMemo"],"mappings":";;;;;;;;;;;;;;AAsBO,MAAMA,QAAQA,CAACC,UAA+B;AACnD,QAAMC,SAASC,UAAAA;AACf,QAAMC,aAAaC,eAAe;AAAA,IAChCC,QAASC,CAAAA,MAAM;AACb,YAAMC,QAAQD,EAAEE,QAAQC,KAAMC,OAAMA,EAAEC,OAAOX,MAAMY,OAAO;AAI1D,UAAI,CAACL,OAAO;AACV,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACLM,SAASN,MAAMM;AAAAA,QACfC,KAAKP,MAAMO;AAAAA,QACXC,iBAAiBR,MAAMQ;AAAAA,MAAAA;AAAAA,IAE3B;AAAA,EAAA,CACD;AAGD,MAAI,CAACZ,WAAAA,EAAc,QAAO;AAE1B,QAAMa,QAAwBA,MAAMf,OAAOgB,WAAWd,WAAAA,EAAcU,OAAO;AAE3E,QAAMK,0BAA0BA,MAC9BF,MAAAA,EAAQG,QAAQC,oBAAoBnB,OAAOkB,QAAQE;AAErD,QAAMC,sBAAsBA,MAC1BN,MAAAA,EAAQG,QAAQI,kBAAkBtB,OAAOkB,QAAQK;AAEnD,QAAMC,eAAeA,MACnBT,MAAAA,EAAQG,QAAQO,WAAWzB,OAAOkB,QAAQQ;AAE5C,QAAMC,yBAAyBA,MAC7BZ,MAAAA,EAAQa;AAAAA;AAAAA,IAEHb,QAAQG,QAAQW,qBACjB7B,OAAOkB,QAAQY,eAAeZ,QAAQa;AAAAA,MACtChB,MAAAA,EAAQG,QAAQW;AAEtB,QAAMG,gBACJ9B,aAAcW,QAAQ,SAASX,WAAAA,EAAcW,QAAQ;AAEvD,QAAMoB,2BAA2BA,MAAMC,MAAMC;AAE7C,QAAMC,wBAAwBA,MAC5Bf,oBAAAA,IAAwBgB,gBAAgBC;AAE1C,QAAMC,2BAA2BA,MAC/BZ,uBAAAA,IAA2Ba,gBAAgBF;AAE7C,QAAMG,WAAWtC,eAAe;AAAA,IAC9BC,QAASC,OAAMA,EAAEqC;AAAAA,EAAAA,CAClB;AAED,QAAMC,gBAAgBxC,eAAe;AAAA,IACnCC,QAASC,CAAAA,MAAM;AACb,YAAMuC,QAAQvC,EAAEE,QAAQsC,UAAWpC,OAAMA,EAAEC,OAAOX,MAAMY,OAAO;AAC/D,aAAON,EAAEE,QAAQqC,QAAQ,CAAC,GAAGhC;AAAAA,IAC/B;AAAA,EAAA,CACD;AAED,QAAMkC,iBAAiB/B,QAAQa,SACzBb,QAAQG,QAA6B6B,kBAAkBT,eACzDA;AAEJ,SAAAU,gBACGF,gBAAc;AAAA,IAAA,IAAAG,WAAA;AAAA,aAAA,CAAAD,gBACZE,aAAaC,UAAQ;AAAA,QAACC,OAAOA,MAAMrD,MAAMY;AAAAA,QAAO,IAAAsC,WAAA;AAAA,iBAAAD,gBAC9CK,SAAO;AAAA,YAAA,IACNtB,YAAS;AAAA,qBAAEE,yBAAAA;AAAAA,YAA0B;AAAA,YAAA,IACrCqB,WAAQ;AAAA;AAAA;AAAA,gBAENC,KAAA,MAAA,CAAA,GAACC,YAAYxD,OAAOwD,aAAaxB,cAAa,EAAA,IAAGyB,SAAST,gBACvDK,SAAO;AAAA,kBAAA,IAACtB,YAAS;AAAA,2BAAEd,wBAAAA;AAAAA,kBAAyB;AAAA,gBAAA,CAAA;AAAA;AAAA,YAC9C;AAAA,YAAA,IAAAgC,WAAA;AAAA,qBAAAD,gBAGFK,SAAO;AAAA,gBAAA,IACNtB,YAAS;AAAA,yBAAEK,sBAAAA;AAAAA,gBAAuB;AAAA,gBAClCsB,aAAaA,MAAMjB,SAAAA;AAAAA,gBAAU,IAC7BnB,iBAAc;AAAA,yBAAED,yBAAyBsC;AAAAA,gBAAc;AAAA,gBACvDlC,SAASA,CAACmC,UAAiB;AAEzB,sBAAIC,WAAWD,KAAK,EAAG,OAAMA;AAC7BE,0BAAQ,OAAO,yBAAyB5D,WAAAA,EAAcU,OAAO,EAAE;AAC/DY,+BAAAA,IAAiBoC,KAAK;AAAA,gBACxB;AAAA,gBAAC,IAAAX,WAAA;AAAA,yBAAAD,gBAEAK,SAAO;AAAA,oBAAA,IACNtB,YAAS;AAAA,6BAAEQ,yBAAAA;AAAAA,oBAA0B;AAAA,oBACrCe,UAAUA,CAACM,UAAe;AAGxB,0BACE,CAACjC,uBAAAA,KACAiC,MAAMhD,WAAWgD,MAAMhD,YAAYV,WAAAA,EAAcU,WACjD,CAACgD,MAAMhD,WAAW,CAACG,MAAAA,EAAQa,OAE5B,OAAMgC;AAER,6BAAAZ,gBACGK,SAAOU,WAAA;AAAA,wBAAA,IAAChC,YAAS;AAAA,iCAAEJ,uBAAAA;AAAAA,wBAAwB;AAAA,sBAAA,GAAMiC,KAAK,CAAA;AAAA,oBAE3D;AAAA,oBAAC,IAAAX,WAAA;AAAA,6BAAAD,gBAEAd,MAAM8B,QAAM;AAAA,wBAAA,IAAAf,WAAA;AAAA,iCAAA,CAAAD,gBACVd,MAAMpC,OAAK;AAAA,4BAACmE,MAAMjC;AAAAA,4BAAa,IAAAiB,WAAA;AAAA,qCAAAD,gBAC7Bd,MAAMgC,MAAI;AAAA,gCAAA,IACTD,OAAI;AAAA,yCAAE,EAAET,YAAYxD,OAAOwD;AAAAA,gCAAS;AAAA,gCAAA,IACpCF,WAAQ;AAAA,yCAAAN,gBAAGK,SAAO;AAAA,oCAAA,IAACtB,YAAS;AAAA,6CAAEd,wBAAAA;AAAAA,oCAAyB;AAAA,kCAAA,CAAA;AAAA,gCAAA;AAAA,gCAAA,IAAAgC,WAAA;AAAA,yCAAAD,gBAEtDmB,YAAU;AAAA,oCAAA,IAACxD,UAAO;AAAA,6CAAEZ,MAAMY;AAAAA,oCAAO;AAAA,kCAAA,CAAA;AAAA,gCAAA;AAAA,8BAAA,CAAA;AAAA,4BAAA;AAAA,0BAAA,CAAA,GAAAqC,gBAGrCd,MAAMpC,OAAK;AAAA,4BAACmE,MAAM,CAACjC;AAAAA,4BAAa,IAAAiB,WAAA;AAAA,qCAAAD,gBAC9BmB,YAAU;AAAA,gCAAA,IAACxD,UAAO;AAAA,yCAAEZ,MAAMY;AAAAA,gCAAO;AAAA,8BAAA,CAAA;AAAA,4BAAA;AAAA,0BAAA,CAAA,CAAA;AAAA,wBAAA;AAAA,sBAAA,CAAA;AAAA,oBAAA;AAAA,kBAAA,CAAA;AAAA,gBAAA;AAAA,cAAA,CAAA;AAAA,YAAA;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA4C,KAAA,MAQ7CA,WAAAZ,cAAAA,MAAoByB,WAAW,MAAA,CAAApB,gBAE3BqB,YAAU,CAAA,CAAA,GAAArB,gBACVsB,0BAED,IAAI,CAAA;AAAA,IAAA;AAAA,EAAA,CAAA;AAGd;AASA,SAASD,aAAa;AACpB,QAAMrE,SAASC,UAAAA;AAEf,QAAMsE,WAAWpE,eAAe;AAAA,IAC9BC,QAASC,CAAAA,MAAM;AACb,aAAOA,EAAEmE,kBAAkBC,MAAMC;AAAAA,IACnC;AAAA,EAAA,CACD;AACDxC,QAAMyC,aACJzC,MAAM0C,GAAG,CAACL,QAAQ,GAAG,MAAM;AACzBvE,WAAO6E,KAAK;AAAA,MACVC,MAAM;AAAA,MACN,GAAGC,sBAAsB/E,OAAOyE,KAAK;AAAA,IAAA,CACtC;AAAA,EACH,CAAC,CACH;AACA,SAAO;AACT;AAEO,MAAMN,aAAaA,CAACpE,UAAoC;AAC7D,QAAMC,SAASC,UAAAA;AAEf,QAAMC,aAAaC,eAAe;AAAA,IAChCC,QAASC,CAAAA,MAAM;AACb,YAAMC,SAAQD,EAAEE,QAAQC,KAAMC,OAAMA,EAAEC,OAAOX,MAAMY,OAAO;AAG1D,UAAI,CAACL,QAAO;AACV,eAAO;AAAA,MACT;AAEA,YAAMM,UAAUN,OAAMM;AAEtB,YAAMoE,YACHhF,OAAOgB,WAAWJ,OAAO,EAAeM,QAAQ+D,eACjDjF,OAAOkB,QAAQgE;AACjB,YAAMD,cAAcD,YAAY;AAAA,QAC9BpE;AAAAA,QACAuE,YAAY7E,OAAM6E;AAAAA,QAClBC,QAAQ9E,OAAM+E;AAAAA,QACdC,QAAQhF,OAAMiF;AAAAA,MAAAA,CACf;AACD,YAAMC,MAAMP,cAAcQ,KAAKC,UAAUT,WAAW,IAAIxB;AAExD,aAAO;AAAA,QACL+B;AAAAA,QACA5E;AAAAA,QACAN,OAAO;AAAA,UACLI,IAAIJ,OAAMI;AAAAA,UACViF,QAAQrF,OAAMqF;AAAAA,UACd/B,OAAOtD,OAAMsD;AAAAA,UACbgC,eAAetF,OAAMsF;AAAAA,UACrB9E,iBAAiBR,OAAMQ;AAAAA,QAAAA;AAAAA,MACzB;AAAA,IAEJ;AAAA,EAAA,CACD;AAED,MAAI,CAACZ,WAAAA,EAAc,QAAO;AAE1B,QAAMa,QAAQA,MAAMf,OAAOgB,WAAWd,WAAAA,EAAcU,OAAO;AAE3D,QAAMN,QAAQA,MAAMJ,WAAAA,EAAcI;AAElC,QAAMuF,eAAeA,MAAM3F,WAAAA,EAAcsF,OAAOtF,WAAAA,EAAcI,MAAMI;AAEpE,QAAMoF,MAAMA,MAAM;AAChB,UAAMC,OAAOhF,QAAQG,QAAQa,aAAa/B,OAAOkB,QAAQ8E;AACzD,QAAID,MAAM;AACR,aAAA/C,gBAAQ+C,MAAI,EAAA;AAAA,IACd;AACA,WAAA/C,gBAAQiD,QAAM,EAAA;AAAA,EAChB;AAEA,QAAMC,WAAWA,MAAAlD,gBACdd,MAAMgC,MAAI;AAAA,IAAA,IAACD,OAAI;AAAA,aAAE4B,aAAAA;AAAAA,IAAc;AAAA,IAAEM,OAAK;AAAA,IAAAlD,UACnCmD,UAASN,IAAAA;AAAAA,EAAI,CAAC;AAIpB,SAAA9C,gBACGd,MAAM8B,QAAM;AAAA,IAAA,IAAAf,WAAA;AAAA,aAAA,CAAAD,gBACVd,MAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,QAAQQ;AAAAA,QAAe;AAAA,QAAAmC,UACtCoD,CAAAA,MAAM;AACN,gBAAM,CAACC,oBAAoB,IAAIpE,MAAMqE,eACnC,MACEvG,OAAOwG,SAASlG,MAAAA,EAAQI,EAAE,GAAG+F,aAAaC,qBAC9C;AAEA,iBAAAnD,KAAU+C,oBAAoB;AAAA,QAChC;AAAA,MAAA,CAAC,GAAAtD,gBAEFd,MAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,QAAQsF;AAAAA,QAAa;AAAA,QAAA3C,UACpCoD,CAAAA,MAAM;AACN,gBAAM,CAACM,gBAAgB,IAAIzE,MAAMqE,eAC/B,MAAMvG,OAAOwG,SAASlG,MAAAA,EAAQI,EAAE,GAAG+F,aAAaG,iBAClD;AAEA,iBAAArD,KAAUoD,gBAAgB;AAAA,QAC5B;AAAA,MAAA,CAAC,GAAA3D,gBAEFd,MAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,MAAAA,EAAQqF,WAAW;AAAA,QAAS;AAAA,QAAA1C,UAC3CoD,CAAAA,MAAM;AACN,gBAAMQ,eACJ9F,QAAQG,QAAQ2F,gBAAgB7G,OAAOkB,QAAQ4F;AAEjD,cAAID,cAAc;AAChB,kBAAME,cAAc/G,OAAOwG,SAASlG,MAAAA,EAAQI,EAAE;AAC9C,gBAAIqG,eAAe,CAACA,YAAYN,aAAaG,mBAAmB;AAE9D,kBAAI,EAAEpD,YAAYxD,OAAOwD,WAAW;AAClC,sBAAMoD,oBAAoBI,wBAAAA;AAE1BD,4BAAYN,aAAaG,oBAAoBA;AAE7CK,2BAAW,MAAM;AACfL,oCAAkBM,QAAAA;AAElBH,8BAAYN,aAAaG,oBAAoBnD;AAAAA,gBAC/C,GAAGoD,YAAY;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,CAACM,YAAY,IAAIjF,MAAMqE,eAAe,YAAY;AACtD,kBAAM,IAAIa,QAASC,CAAAA,MAAMJ,WAAWI,GAAG,CAAC,CAAC;AACzC,mBAAOrH,OAAOwG,SAASlG,MAAAA,EAAQI,EAAE,GAAG+F,aAAaa;AAAAA,UACnD,CAAC;AAED,gBAAMC,oBACJxG,QAAQG,QAAQC,oBAChBnB,OAAOkB,QAAQE;AAEjB,iBAAA,CAEKmG,qBAAqBV,eAAe,IAAC7D,gBACnCK,SAAO;AAAA,YAACtB,WAAWwF;AAAAA,UAAAA,CAAiB,IACnC,MAAIhE,KACP4D,YAAY,CAAA;AAAA,QAGnB;AAAA,MAAA,CAAC,GAAAnE,gBAEFd,MAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,MAAAA,EAAQqF,WAAW;AAAA,QAAU;AAAA,QAAA1C,UAC5CoD,CAAAA,MAAM;AACNmB,oBAAU3D,WAAWvD,MAAAA,EAAQsD,KAAK,GAAG,2BAA2B;AAGhE,iBAAAZ,gBACGd,MAAMgC,MAAI;AAAA,YAAA,IAACD,OAAI;AAAA,qBAAE/D,aAAcU;AAAAA,YAAO;AAAA,YAAEuF,OAAK;AAAA,YAAAlD,UAC1CwE,cACAC,oBAAoB1H,QAAQe,SAAST,MAAAA,EAAQsD,KAAK;AAAA,UAAA,CAAC;AAAA,QAI3D;AAAA,MAAA,CAAC,GAAAZ,gBAEFd,MAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,MAAAA,EAAQqF,WAAW;AAAA,QAAY;AAAA,QAAA1C,UAC9CoD,CAAAA,MAAM;AACNmB,oBAAUG,WAAWrH,MAAAA,EAAQsD,KAAK,GAAG,2BAA2B;AAEhE,gBAAM,CAACuD,YAAY,IAAIjF,MAAMqE,eAAe,YAAY;AACtD,kBAAM,IAAIa,QAASC,CAAAA,MAAMJ,WAAWI,GAAG,CAAC,CAAC;AACzC,mBAAOrH,OAAOwG,SAASlG,MAAAA,EAAQI,EAAE,GAAG+F,aAAaa;AAAAA,UACnD,CAAC;AAED,iBAAA/D,KAAU4D,YAAY;AAAA,QACxB;AAAA,MAAA,CAAC,GAAAnE,gBAEFd,MAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,MAAAA,EAAQqF,WAAW;AAAA,QAAO;AAAA,QAAA1C,UACzCoD,CAAAA,MAAM;AACN,gBAAM/F,QAAQsD;AAAAA,QAChB;AAAA,MAAA,CAAC,GAAAZ,gBAEFd,MAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,MAAAA,EAAQqF,WAAW;AAAA,QAAS;AAAA,QAAA,IAAA1C,WAAA;AAAA,iBAC5CiD,SAAAA;AAAAA,QAAU;AAAA,MAAA,CAAA,CAAA;AAAA,IAAA;AAAA,EAAA,CAAA;AAInB;AAEO,MAAMD,SAASA,MAAM;AAC1B,QAAMjG,SAASC,UAAAA;AACf,QAAMU,UAAUuB,MAAM0F,WAAW1E,YAAY;AAC7C,QAAMtC,UAAUT,eAAe;AAAA,IAC7BC,QAASC,CAAAA,MAAMA,EAAEE,QAAQC,KAAMC,OAAMA,EAAEC,OAAOC,QAAAA,CAAS,GAAGC;AAAAA,EAAAA,CAC3D;AAED,QAAMG,QAAQA,MAAMf,OAAOgB,WAAWJ,SAAS;AAE/C,QAAMiH,uBAAuB1H,eAAe;AAAA,IAC1CC,QAASC,CAAAA,MAAM;AACb,YAAME,UAAUF,EAAEE;AAClB,YAAMuH,cAAcvH,QAAQC,KAAMC,OAAMA,EAAEC,OAAOC,SAAS;AAI1D,UAAI,CAACmH,aAAa;AAChB,eAAO;AAAA,MACT;AAEA,aAAOA,YAAYC;AAAAA,IACrB;AAAA,EAAA,CACD;AAED,QAAMC,eAAe7H,eAAe;AAAA,IAClCC,QAASC,CAAAA,MAAM;AACb,YAAME,UAAUF,EAAEE;AAClB,YAAMqC,QAAQrC,QAAQsC,UAAWpC,OAAMA,EAAEC,OAAOC,SAAS;AACzD,YAAMsH,IAAI1H,QAAQqC,QAAQ,CAAC,GAAGlC;AAC9B,aAAOuH;AAAAA,IACT;AAAA,EAAA,CACD;AAED,QAAMC,mBAAmB/H,eAAe;AAAA,IACtCC,QAASC,CAAAA,MAAM;AACb,YAAME,UAAUF,EAAEE;AAClB,YAAMqC,QAAQrC,QAAQsC,UAAWpC,OAAMA,EAAEC,OAAOC,SAAS;AACzD,aAAOJ,QAAQqC,QAAQ,CAAC,GAAG+C;AAAAA,IAC7B;AAAA,EAAA,CACD;AAGD,QAAMwC,qBAAqBA,MACzBD,uBAAuB,gBAAgBL,qBAAAA;AAEzC,SAAA7E,gBACGd,MAAMgC,MAAI;AAAA,IAAA,IACTD,OAAI;AAAA,aAAEV,cAAC4E,mBAAAA,CAAoB,EAAA,KAAIH,aAAAA;AAAAA,IAAc;AAAA,IAAA,IAC7C1E,WAAQ;AAAA,aAAAN,gBACLd,MAAMgC,MAAI;AAAA,QAAA,IAACD,OAAI;AAAA,iBAAEkE,mBAAAA;AAAAA,QAAoB;AAAA,QAAA,IAAAlF,WAAA;AAAA,iBACnCyE,oBAAoB1H,QAAQe,MAAAA,GAAS0C,MAAS;AAAA,QAAC;AAAA,MAAA,CAAA;AAAA,IAAA;AAAA,IAAAR,UAIlDmF,CAAAA,oBAAoB;AAEpB,YAAMC,iBAAiBnG,MAAMoG,WAAW,MAAMF,iBAAiB;AAE/D,aAAApF,gBACGd,MAAMgC,MAAI;AAAA,QAAA,IACTD,OAAI;AAAA,iBAAErD,cAAcwD;AAAAA,QAAW;AAAA,QAAA,IAC/Bd,WAAQ;AAAA,iBAAAN,gBAAGlD,OAAK;AAAA,YAAA,IAACa,UAAO;AAAA,qBAAE0H,eAAAA;AAAAA,YAAgB;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,QAAA,IAAApF,WAAA;AAAA,iBAAAD,gBAEzCd,MAAMC,UAAQ;AAAA,YAAA,IACbmB,WAAQ;AAAA,qBAAAN,gBACLK,SAAO;AAAA,gBAAA,IAACtB,YAAS;AAAA,yBAAE/B,OAAOkB,QAAQE;AAAAA,gBAAuB;AAAA,cAAA,CAAA;AAAA,YAAA;AAAA,YAAA,IAAA6B,WAAA;AAAA,qBAAAD,gBAG3DlD,OAAK;AAAA,gBAAA,IAACa,UAAO;AAAA,yBAAE0H,eAAAA;AAAAA,gBAAgB;AAAA,cAAA,CAAA;AAAA,YAAA;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA;AAAA,IAIxC;AAAA,EAAA,CAAC;AAGP;"}
1
+ {"version":3,"file":"Match.js","sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\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 { Dynamic } from '@solidjs/web'\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 type { AnyRoute, RootRouteOptions } from '@tanstack/router-core'\n\nconst MatchContext = matchContext as unknown as Solid.Component<{\n value: any\n children?: any\n}>\n\nexport const Match = (props: { matchId: string }) => {\n const router = useRouter()\n const matchState = useRouterState({\n select: (s) => {\n const match = s.matches.find((d) => d.id === props.matchId)\n\n // During navigation transitions, matches can be temporarily removed\n // Return null to avoid errors - the component will handle this gracefully\n if (!match) {\n return null\n }\n\n return {\n routeId: match.routeId,\n ssr: match.ssr,\n _displayPending: match._displayPending,\n }\n },\n })\n\n // If match doesn't exist yet, return null (component is being unmounted or not ready)\n if (!Solid.untrack(matchState)) return null\n\n const route: () => AnyRoute = () => router.routesById[matchState()!.routeId]\n\n const resolvePendingComponent = () =>\n route().options.pendingComponent ?? router.options.defaultPendingComponent\n\n const routeErrorComponent = () =>\n route().options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = () =>\n route().options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = () =>\n 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 = Solid.createMemo(\n () => matchState()!.ssr === false || matchState()!.ssr === 'data-only',\n )\n\n const ResolvedSuspenseBoundary = () =>\n resolvedNoSsr() ? SafeFragment : Solid.Loading\n\n const ResolvedCatchBoundary = () =>\n routeErrorComponent() ? CatchBoundary : SafeFragment\n\n const ResolvedNotFoundBoundary = () =>\n routeNotFoundComponent() ? CatchNotFound : SafeFragment\n\n const resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n const parentRouteId = useRouterState({\n select: (s) => {\n const index = s.matches.findIndex((d) => d.id === props.matchId)\n return s.matches[index - 1]?.routeId as string\n },\n })\n\n const ShellComponent = Solid.createMemo(() =>\n route().isRoot\n ? ((route().options as RootRouteOptions).shellComponent ?? SafeFragment)\n : SafeFragment,\n )\n\n return (\n <Dynamic component={ShellComponent()}>\n <MatchContext value={() => props.matchId}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={\n // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch\n (isServer ?? router.isServer) || resolvedNoSsr() ? undefined : (\n <Dynamic component={resolvePendingComponent()} />\n )\n }\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => resetKey()}\n errorComponent={routeErrorComponent() || ErrorComponent}\n onCatch={(error: Error) => {\n // Forward not found errors (we don't want to show the error component for these)\n if (isNotFound(error)) throw error\n warning(\n false,\n `Error in route match: ${Solid.untrack(matchState)!.routeId}`,\n )\n routeOnCatch()?.(error)\n }}\n >\n <Dynamic\n component={ResolvedNotFoundBoundary()}\n fallback={(error: any) => {\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 (\n <Dynamic component={routeNotFoundComponent()} {...error} />\n )\n }}\n >\n <Solid.Switch>\n <Solid.Match when={resolvedNoSsr()}>\n <Solid.Show\n when={!(isServer ?? router.isServer)}\n fallback={<Dynamic component={resolvePendingComponent()} />}\n >\n <MatchInner matchId={props.matchId} />\n </Solid.Show>\n </Solid.Match>\n <Solid.Match when={!resolvedNoSsr()}>\n <MatchInner matchId={props.matchId} />\n </Solid.Match>\n </Solid.Switch>\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </MatchContext>\n\n {parentRouteId() === rootRouteId ? (\n <>\n <OnRendered />\n <ScrollRestoration />\n </>\n ) : null}\n </Dynamic>\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).\n//\n// In Solid, createEffect(source, fn) fires on initial mount as well as on\n// reactive changes. OnRendered can also remount when the first child route\n// changes (e.g. navigating from / to /posts). We deduplicate by tracking\n// the last emitted resolvedLocation key per router so each unique resolved\n// location only triggers one onRendered event regardless of remounts.\nconst lastOnRenderedKey = new WeakMap<object, string>()\n\nfunction OnRendered() {\n const router = useRouter()\n\n const location = useRouterState({\n select: (s) => {\n return s.resolvedLocation?.state.__TSR_key\n },\n })\n Solid.createEffect(\n () => [location()] as const,\n ([location]) => {\n if (!location) return\n if (lastOnRenderedKey.get(router) === location) return\n lastOnRenderedKey.set(router, location)\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(router.state),\n })\n },\n )\n return null\n}\n\nexport const MatchInner = (props: { matchId: string }): any => {\n const router = useRouter()\n\n const matchState = useRouterState({\n select: (s) => {\n const match = s.matches.find((d) => d.id === props.matchId)\n\n // During navigation transitions, matches can be temporarily removed\n if (!match) {\n return null\n }\n\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 })\n\n if (!Solid.untrack(matchState)) return null\n\n const route = () => router.routesById[matchState()!.routeId]!\n\n const match = () => matchState()!.match\n\n const componentKey = () => matchState()!.key ?? matchState()!.match.id\n\n const out = () => {\n const currentRoute = Solid.untrack(route)\n const Comp =\n currentRoute.options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp />\n }\n return <Outlet />\n }\n\n const keyedOut = () => (\n <Solid.Show when={componentKey()} keyed>\n {(_key) => out()}\n </Solid.Show>\n )\n\n return (\n <Solid.Switch>\n <Solid.Match when={match()._displayPending}>\n {(_) => {\n const matchId = Solid.untrack(() => match().id)\n const displayPendingResult = Solid.createMemo(\n () => router.getMatch(matchId)?._nonReactive.displayPendingPromise,\n )\n\n return <>{displayPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match()._forcePending}>\n {(_) => {\n const matchId = Solid.untrack(() => match().id)\n const minPendingResult = Solid.createMemo(\n () => router.getMatch(matchId)?._nonReactive.minPendingPromise,\n )\n\n return <>{minPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'pending'}>\n {(_) => {\n const currentMatch = Solid.untrack(match)\n const currentRoute = Solid.untrack(route)\n const pendingMinMs =\n currentRoute.options.pendingMinMs ??\n router.options.defaultPendingMinMs\n\n if (pendingMinMs) {\n const routerMatch = router.getMatch(currentMatch.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\n const loaderResult = Solid.createMemo(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch.id)?._nonReactive.loadPromise\n })\n\n const FallbackComponent =\n currentRoute.options.pendingComponent ??\n router.options.defaultPendingComponent\n\n return (\n <>\n {FallbackComponent && pendingMinMs > 0 ? (\n <Dynamic component={FallbackComponent} />\n ) : null}\n {loaderResult()}\n </>\n )\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'notFound'}>\n {(_) => {\n const currentMatch = Solid.untrack(match)\n const currentRoute = Solid.untrack(route)\n const currentRouteId = Solid.untrack(() => matchState()!.routeId)\n invariant(isNotFound(currentMatch.error), 'Expected a notFound error')\n\n // Use Show with keyed to ensure re-render when routeId changes\n return (\n <Solid.Show when={currentRouteId} keyed>\n {(_routeId) =>\n renderRouteNotFound(router, currentRoute, currentMatch.error)\n }\n </Solid.Show>\n )\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'redirected'}>\n {(_) => {\n const matchId = Solid.untrack(() => match().id)\n invariant(\n isRedirect(Solid.untrack(match).error),\n 'Expected a redirect error',\n )\n\n const loaderResult = Solid.createMemo(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(matchId)?._nonReactive.loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'error'}>\n {(_) => {\n if (isServer ?? router.isServer) {\n const currentMatch = Solid.untrack(match)\n const RouteErrorComponent =\n (Solid.untrack(route).options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n\n return (\n <RouteErrorComponent\n error={currentMatch.error}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw Solid.untrack(match).error\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'success'}>\n {keyedOut()}\n </Solid.Match>\n </Solid.Switch>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const matchId = Solid.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\n // During navigation transitions, parent match can be temporarily removed\n // Return false to avoid errors - the component will handle this gracefully\n if (!parentMatch) {\n return false\n }\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 const v = matches[index + 1]?.id\n return v\n },\n })\n\n const childRouteId = useRouterState({\n select: (s) => {\n const matches = s.matches\n const index = matches.findIndex((d) => d.id === matchId())\n return matches[index + 1]?.routeId\n },\n })\n\n const childMatchStatus = useRouterState({\n select: (s) => {\n const matches = s.matches\n const index = matches.findIndex((d) => d.id === matchId())\n return matches[index + 1]?.status\n },\n })\n\n // Only show not-found if we're not in a redirected state\n const shouldShowNotFound = () =>\n childMatchStatus() !== 'redirected' && parentGlobalNotFound()\n\n return (\n <Solid.Show\n when={!shouldShowNotFound() && childMatchId()}\n fallback={\n <Solid.Show when={shouldShowNotFound()}>\n {renderRouteNotFound(router, route(), undefined)}\n </Solid.Show>\n }\n >\n {(matchIdAccessor) => {\n // Use a memo to avoid stale accessor errors while keeping reactivity\n const currentMatchId = Solid.createMemo(() => matchIdAccessor())\n\n return (\n <Solid.Show\n when={routeId() === rootRouteId}\n fallback={<Match matchId={currentMatchId()} />}\n >\n <Solid.Show when={childRouteId()} keyed>\n {(_routeId) => (\n <Solid.Loading\n fallback={\n <Dynamic\n component={router.options.defaultPendingComponent}\n />\n }\n >\n <Match matchId={currentMatchId()} />\n </Solid.Loading>\n )}\n </Solid.Show>\n </Solid.Show>\n )\n }}\n </Solid.Show>\n )\n}\n"],"names":["MatchContext","matchContext","Match","props","router","useRouter","matchState","useRouterState","select","s","match","matches","find","d","id","matchId","routeId","ssr","_displayPending","Solid","untrack","route","routesById","resolvePendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","createMemo","ResolvedSuspenseBoundary","SafeFragment","Loading","ResolvedCatchBoundary","CatchBoundary","ResolvedNotFoundBoundary","CatchNotFound","resetKey","loadedAt","parentRouteId","index","findIndex","ShellComponent","shellComponent","_$createComponent","Dynamic","children","value","fallback","_$memo","isServer","undefined","getResetKey","ErrorComponent","error","isNotFound","warning","_$mergeProps","Switch","when","Show","MatchInner","rootRouteId","OnRendered","ScrollRestoration","lastOnRenderedKey","WeakMap","location","resolvedLocation","state","__TSR_key","createEffect","get","set","emit","type","getLocationChangeInfo","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","status","_forcePending","componentKey","out","currentRoute","Comp","defaultComponent","Outlet","keyedOut","keyed","_key","_","displayPendingResult","getMatch","_nonReactive","displayPendingPromise","minPendingResult","minPendingPromise","currentMatch","pendingMinMs","defaultPendingMinMs","routerMatch","createControlledPromise","setTimeout","resolve","loaderResult","Promise","r","loadPromise","FallbackComponent","currentRouteId","invariant","_routeId","renderRouteNotFound","isRedirect","RouteErrorComponent","info","componentStack","useContext","parentGlobalNotFound","parentMatch","globalNotFound","childMatchId","v","childRouteId","childMatchStatus","shouldShowNotFound","matchIdAccessor","currentMatchId"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { createComponent, memo } from "solid-js/web";
1
+ import { createComponent } from "@solidjs/web";
2
2
  import * as Solid from "solid-js";
3
3
  import warning from "tiny-warning";
4
4
  import { rootRouteId } from "@tanstack/router-core";
@@ -10,9 +10,10 @@ import { Transitioner } from "./Transitioner.js";
10
10
  import { matchContext } from "./matchContext.js";
11
11
  import { SafeFragment } from "./SafeFragment.js";
12
12
  import { Match } from "./Match.js";
13
+ const MatchContext = matchContext;
13
14
  function Matches() {
14
15
  const router = useRouter();
15
- const ResolvedSuspense = (isServer ?? router.isServer) || typeof document !== "undefined" && router.ssr ? SafeFragment : Solid.Suspense;
16
+ const ResolvedSuspense = router.options.disableGlobalCatchBoundary || (isServer ?? router.isServer) || typeof document !== "undefined" && router.ssr ? SafeFragment : Solid.Loading;
16
17
  const rootRoute = () => router.routesById[rootRouteId];
17
18
  const PendingComponent = rootRoute().options.pendingComponent ?? router.options.defaultPendingComponent;
18
19
  const OptionalWrapper = router.options.InnerWrap || SafeFragment;
@@ -39,24 +40,30 @@ function MatchesInner() {
39
40
  const resetKey = useRouterState({
40
41
  select: (s) => s.loadedAt
41
42
  });
42
- const matchComponent = () => {
43
- return createComponent(Solid.Show, {
44
- get when() {
45
- return matchId();
46
- },
43
+ const matchContent = () => createComponent(Solid.Show, {
44
+ get when() {
45
+ return matchId();
46
+ },
47
+ get children() {
48
+ return createComponent(Match, {
49
+ get matchId() {
50
+ return matchId();
51
+ }
52
+ });
53
+ }
54
+ });
55
+ if (router.options.disableGlobalCatchBoundary) {
56
+ return createComponent(MatchContext, {
57
+ value: matchId,
47
58
  get children() {
48
- return createComponent(Match, {
49
- get matchId() {
50
- return matchId();
51
- }
52
- });
59
+ return matchContent();
53
60
  }
54
61
  });
55
- };
56
- return createComponent(matchContext.Provider, {
62
+ }
63
+ return createComponent(MatchContext, {
57
64
  value: matchId,
58
65
  get children() {
59
- return memo(() => !!router.options.disableGlobalCatchBoundary)() ? matchComponent() : createComponent(CatchBoundary, {
66
+ return createComponent(CatchBoundary, {
60
67
  getResetKey: () => resetKey(),
61
68
  errorComponent: ErrorComponent,
62
69
  get onCatch() {
@@ -67,7 +74,7 @@ function MatchesInner() {
67
74
  } : void 0;
68
75
  },
69
76
  get children() {
70
- return matchComponent();
77
+ return matchContent();
71
78
  }
72
79
  });
73
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Matches.js","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\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 { SafeFragment } from './SafeFragment'\nimport { Match } from './Match'\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<Solid.JSX.IntrinsicElements['meta'] | undefined>\n links?: Array<Solid.JSX.IntrinsicElements['link'] | undefined>\n scripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n styles?: Array<Solid.JSX.IntrinsicElements['style'] | undefined>\n headScripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n }\n}\n\nexport function Matches() {\n const router = useRouter()\n\n const ResolvedSuspense =\n (isServer ?? router.isServer) ||\n (typeof document !== 'undefined' && router.ssr)\n ? SafeFragment\n : Solid.Suspense\n\n const rootRoute: () => AnyRoute = () => router.routesById[rootRouteId]\n const PendingComponent =\n rootRoute().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const OptionalWrapper = router.options.InnerWrap || SafeFragment\n\n return (\n <OptionalWrapper>\n <ResolvedSuspense\n fallback={PendingComponent ? <PendingComponent /> : null}\n >\n <Transitioner />\n <MatchesInner />\n </ResolvedSuspense>\n </OptionalWrapper>\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 = () => {\n return (\n <Solid.Show when={matchId()}>\n <Match matchId={matchId()!} />\n </Solid.Show>\n )\n }\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 leas\n t, 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\nexport function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {\n const router = useRouter()\n\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return <\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 ): Solid.Accessor<\n false | Expand<ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']>\n > => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n const matchRoute = Solid.createMemo(() => {\n status()\n return router.matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n })\n\n return matchRoute\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 ) => Solid.JSX.Element)\n | Solid.JSX.Element\n}\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 status = useRouterState({\n select: (s) => s.status,\n })\n\n return (\n <Solid.Show when={status()} keyed>\n {(_) => {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)() as boolean\n const child = props.children\n if (typeof child === 'function') {\n return (child as any)(params)\n }\n\n return params ? child : null\n }}\n </Solid.Show>\n )\n}\n\nexport interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected\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>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<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 } as any) as Solid.Accessor<UseMatchesResult<TRouter, TSelected>>\n}\n\nexport function useParentMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.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 } as any)\n}\n\nexport function useChildMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.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 } as any)\n}\n"],"names":["Matches","router","useRouter","ResolvedSuspense","isServer","document","ssr","SafeFragment","Solid","Suspense","rootRoute","routesById","rootRouteId","PendingComponent","options","pendingComponent","defaultPendingComponent","OptionalWrapper","InnerWrap","_$createComponent","children","fallback","Transitioner","MatchesInner","matchId","useRouterState","select","s","matches","id","resetKey","loadedAt","matchComponent","Show","when","Match","matchContext","Provider","value","_$memo","disableGlobalCatchBoundary","CatchBoundary","getResetKey","errorComponent","ErrorComponent","onCatch","process","env","NODE_ENV","error","warning","message","toString","undefined","useMatchRoute","status","opts","pending","caseSensitive","fuzzy","includeSearch","rest","matchRoute","createMemo","MatchRoute","props","keyed","_","params","child","useMatches","state","useParentMatches","contextMatchId","useContext","slice","findIndex","d","useChildMatches"],"mappings":"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"}
1
+ {"version":3,"file":"Matches.js","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\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 { SafeFragment } from './SafeFragment'\nimport { Match } from './Match'\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\nconst MatchContext = matchContext as unknown as Solid.Component<{\n value: any\n children: any\n}>\n\ndeclare module '@tanstack/router-core' {\n export interface RouteMatchExtensions {\n meta?: Array<Solid.JSX.IntrinsicElements['meta'] | undefined>\n links?: Array<Solid.JSX.IntrinsicElements['link'] | undefined>\n scripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n styles?: Array<Solid.JSX.IntrinsicElements['style'] | undefined>\n headScripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n }\n}\n\nexport function Matches() {\n const router = useRouter()\n\n // When disableGlobalCatchBoundary is true, we must NOT wrap with Solid.Loading\n // because Solid.Loading transforms STATUS_ERROR into STATUS_PENDING, which\n // prevents errors from propagating to an external Errored boundary.\n const ResolvedSuspense =\n router.options.disableGlobalCatchBoundary ||\n (isServer ?? router.isServer) ||\n (typeof document !== 'undefined' && router.ssr)\n ? SafeFragment\n : Solid.Loading\n\n const rootRoute: () => AnyRoute = () => router.routesById[rootRouteId]\n const PendingComponent =\n rootRoute().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const OptionalWrapper = router.options.InnerWrap || SafeFragment\n\n return (\n <OptionalWrapper>\n <ResolvedSuspense\n fallback={PendingComponent ? <PendingComponent /> : null}\n >\n <Transitioner />\n <MatchesInner />\n </ResolvedSuspense>\n </OptionalWrapper>\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 matchContent = () => (\n <Solid.Show when={matchId()}>\n <Match matchId={matchId()!} />\n </Solid.Show>\n )\n\n if (router.options.disableGlobalCatchBoundary) {\n // When disableGlobalCatchBoundary is true, render without any internal\n // error boundary so errors bubble up freely to an external Errored boundary.\n return <MatchContext value={matchId}>{matchContent()}</MatchContext>\n }\n\n return (\n <MatchContext value={matchId}>\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 leas\n t, consider setting an 'errorComponent' in your RootRoute!`,\n )\n warning(false, error.message || error.toString())\n }\n : undefined\n }\n >\n {matchContent()}\n </CatchBoundary>\n </MatchContext>\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\nexport function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {\n const router = useRouter()\n\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return <\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 ): Solid.Accessor<\n false | Expand<ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']>\n > => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n const matchRoute = Solid.createMemo(() => {\n status()\n return router.matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n })\n\n return matchRoute\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 ) => Solid.JSX.Element)\n | Solid.JSX.Element\n}\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 status = useRouterState({\n select: (s) => s.status,\n })\n\n return (\n <Solid.Show when={status()} keyed>\n {(_) => {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)() as boolean\n const child = props.children\n if (typeof child === 'function') {\n return (child as any)(params)\n }\n\n return params ? child : null\n }}\n </Solid.Show>\n )\n}\n\nexport interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected\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>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<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 } as any) as Solid.Accessor<UseMatchesResult<TRouter, TSelected>>\n}\n\nexport function useParentMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.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 } as any)\n}\n\nexport function useChildMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.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 } as any)\n}\n"],"names":["MatchContext","matchContext","Matches","router","useRouter","ResolvedSuspense","options","disableGlobalCatchBoundary","isServer","document","ssr","SafeFragment","Solid","Loading","rootRoute","routesById","rootRouteId","PendingComponent","pendingComponent","defaultPendingComponent","OptionalWrapper","InnerWrap","_$createComponent","children","fallback","Transitioner","MatchesInner","matchId","useRouterState","select","s","matches","id","resetKey","loadedAt","matchContent","Show","when","Match","value","CatchBoundary","getResetKey","errorComponent","ErrorComponent","onCatch","process","env","NODE_ENV","error","warning","message","toString","undefined","useMatchRoute","status","opts","pending","caseSensitive","fuzzy","includeSearch","rest","matchRoute","createMemo","MatchRoute","props","keyed","_","params","child","useMatches","state","useParentMatches","contextMatchId","useContext","slice","findIndex","d","useChildMatches"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { createComponent, mergeProps } from "solid-js/web";
1
+ import { createComponent, mergeProps } from "@solidjs/web";
2
2
  import { routerContext } from "./routerContext.js";
3
3
  import { SafeFragment } from "./SafeFragment.js";
4
4
  import { Matches } from "./Matches.js";
5
+ const RouterContext = routerContext;
5
6
  function RouterContextProvider({
6
7
  router,
7
8
  children,
@@ -18,7 +19,7 @@ function RouterContextProvider({
18
19
  const OptionalWrapper = router.options.Wrap || SafeFragment;
19
20
  return createComponent(OptionalWrapper, {
20
21
  get children() {
21
- return createComponent(routerContext.Provider, {
22
+ return createComponent(RouterContext, {
22
23
  value: router,
23
24
  get children() {
24
25
  return children();