@bleedingdev/modern-js-renderer-solid 0.0.0-stage → 3.9.3-ultramodern.10

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 (301) hide show
  1. package/dist/esm/actions.js +282 -0
  2. package/dist/esm/application-router.js +30 -0
  3. package/dist/esm/client.js +49 -0
  4. package/dist/esm/entry-application.js +60 -0
  5. package/dist/esm/entry-client.js +24 -0
  6. package/dist/esm/federation-context.js +25 -0
  7. package/dist/esm/federation-ssr.js +92 -0
  8. package/dist/esm/federation.js +87 -0
  9. package/dist/esm/i18n/I18nProvider.js +33 -0
  10. package/dist/esm/i18n/LocalizedLink.js +52 -0
  11. package/dist/esm/i18n/context.js +3 -0
  12. package/dist/esm/i18n/index.js +8 -0
  13. package/dist/esm/i18n/languageSync.js +50 -0
  14. package/dist/esm/i18n/types.js +0 -0
  15. package/dist/esm/i18n/useI18n.js +74 -0
  16. package/dist/esm/index.js +58 -0
  17. package/dist/esm/manifest.js +150 -0
  18. package/dist/esm/route-completion.js +151 -0
  19. package/dist/esm/route-data-error.js +108 -0
  20. package/dist/esm/router-binding/Asset.js +202 -0
  21. package/dist/esm/router-binding/CatchBoundary.js +94 -0
  22. package/dist/esm/router-binding/ClientOnly.js +26 -0
  23. package/dist/esm/router-binding/HeadContent.js +8 -0
  24. package/dist/esm/router-binding/LICENSE +21 -0
  25. package/dist/esm/router-binding/Match.js +319 -0
  26. package/dist/esm/router-binding/Matches.js +124 -0
  27. package/dist/esm/router-binding/PROVENANCE.json +94 -0
  28. package/dist/esm/router-binding/RouterProvider.js +52 -0
  29. package/dist/esm/router-binding/SafeFragment.js +5 -0
  30. package/dist/esm/router-binding/ScriptOnce.js +15 -0
  31. package/dist/esm/router-binding/Scripts.js +30 -0
  32. package/dist/esm/router-binding/ScrollRestoration.js +16 -0
  33. package/dist/esm/router-binding/Transitioner.js +109 -0
  34. package/dist/esm/router-binding/awaited.js +48 -0
  35. package/dist/esm/router-binding/fileRoute.js +83 -0
  36. package/dist/esm/router-binding/flightData.js +23 -0
  37. package/dist/esm/router-binding/headContentUtils.js +168 -0
  38. package/dist/esm/router-binding/history.js +0 -0
  39. package/dist/esm/router-binding/index.js +35 -0
  40. package/dist/esm/router-binding/lazyRouteComponent.js +30 -0
  41. package/dist/esm/router-binding/link.js +387 -0
  42. package/dist/esm/router-binding/matchContext.js +7 -0
  43. package/dist/esm/router-binding/nonRouteComponentContext.js +13 -0
  44. package/dist/esm/router-binding/not-found.js +35 -0
  45. package/dist/esm/router-binding/publicMatchData.js +447 -0
  46. package/dist/esm/router-binding/registryTransfer.js +223 -0
  47. package/dist/esm/router-binding/renderRouteNotFound.js +23 -0
  48. package/dist/esm/router-binding/route.js +143 -0
  49. package/dist/esm/router-binding/router.js +14 -0
  50. package/dist/esm/router-binding/routerContext.js +3 -0
  51. package/dist/esm/router-binding/routerOptions.js +0 -0
  52. package/dist/esm/router-binding/routerStores.js +50 -0
  53. package/dist/esm/router-binding/scroll-restoration.js +13 -0
  54. package/dist/esm/router-binding/typePrimitives.js +0 -0
  55. package/dist/esm/router-binding/useBlocker.js +152 -0
  56. package/dist/esm/router-binding/useCanGoBack.js +7 -0
  57. package/dist/esm/router-binding/useLoaderData.js +8 -0
  58. package/dist/esm/router-binding/useLoaderDeps.js +8 -0
  59. package/dist/esm/router-binding/useLocation.js +14 -0
  60. package/dist/esm/router-binding/useMatch.js +28 -0
  61. package/dist/esm/router-binding/useNavigate.js +25 -0
  62. package/dist/esm/router-binding/useParams.js +11 -0
  63. package/dist/esm/router-binding/useRouteContext.js +8 -0
  64. package/dist/esm/router-binding/useRouter.js +10 -0
  65. package/dist/esm/router-binding/useRouterState.js +19 -0
  66. package/dist/esm/router-binding/useSearch.js +11 -0
  67. package/dist/esm/router-binding/utils.js +23 -0
  68. package/dist/esm/router.js +187 -0
  69. package/dist/esm-node/actions.js +263 -0
  70. package/dist/esm-node/application-router.js +30 -0
  71. package/dist/esm-node/client.js +49 -0
  72. package/dist/esm-node/entry-application.js +110 -0
  73. package/dist/esm-node/entry-client.js +24 -0
  74. package/dist/esm-node/entry-server.js +47 -0
  75. package/dist/esm-node/federation-context.js +25 -0
  76. package/dist/esm-node/federation-ssr.js +92 -0
  77. package/dist/esm-node/federation.js +87 -0
  78. package/dist/esm-node/i18n/I18nProvider.js +42 -0
  79. package/dist/esm-node/i18n/LocalizedLink.js +88 -0
  80. package/dist/esm-node/i18n/context.js +3 -0
  81. package/dist/esm-node/i18n/index.js +8 -0
  82. package/dist/esm-node/i18n/languageSync.js +50 -0
  83. package/dist/esm-node/i18n/types.js +1 -0
  84. package/dist/esm-node/i18n/useI18n.js +74 -0
  85. package/dist/esm-node/index.js +58 -0
  86. package/dist/esm-node/manifest.js +150 -0
  87. package/dist/esm-node/native-promise-serialization.js +113 -0
  88. package/dist/esm-node/plugin/compiler.js +209 -0
  89. package/dist/esm-node/plugin/create.js +236 -0
  90. package/dist/esm-node/plugin/index.js +70 -0
  91. package/dist/esm-node/plugin/profile.js +51 -0
  92. package/dist/esm-node/route-completion.js +161 -0
  93. package/dist/esm-node/route-data-error.js +108 -0
  94. package/dist/esm-node/router-binding/Asset.js +172 -0
  95. package/dist/esm-node/router-binding/CatchBoundary.js +136 -0
  96. package/dist/esm-node/router-binding/ClientOnly.js +46 -0
  97. package/dist/esm-node/router-binding/HeadContent.js +8 -0
  98. package/dist/esm-node/router-binding/LICENSE +21 -0
  99. package/dist/esm-node/router-binding/Match.js +660 -0
  100. package/dist/esm-node/router-binding/Matches.js +161 -0
  101. package/dist/esm-node/router-binding/PROVENANCE.json +94 -0
  102. package/dist/esm-node/router-binding/RouterProvider.js +88 -0
  103. package/dist/esm-node/router-binding/SafeFragment.js +5 -0
  104. package/dist/esm-node/router-binding/ScriptOnce.js +16 -0
  105. package/dist/esm-node/router-binding/Scripts.js +49 -0
  106. package/dist/esm-node/router-binding/ScrollRestoration.js +16 -0
  107. package/dist/esm-node/router-binding/Transitioner.js +109 -0
  108. package/dist/esm-node/router-binding/awaited.js +75 -0
  109. package/dist/esm-node/router-binding/fileRoute.js +83 -0
  110. package/dist/esm-node/router-binding/flightData.js +23 -0
  111. package/dist/esm-node/router-binding/headContentUtils.js +168 -0
  112. package/dist/esm-node/router-binding/history.js +1 -0
  113. package/dist/esm-node/router-binding/index.js +35 -0
  114. package/dist/esm-node/router-binding/lazyRouteComponent.js +30 -0
  115. package/dist/esm-node/router-binding/link.js +399 -0
  116. package/dist/esm-node/router-binding/matchContext.js +7 -0
  117. package/dist/esm-node/router-binding/nonRouteComponentContext.js +22 -0
  118. package/dist/esm-node/router-binding/not-found.js +49 -0
  119. package/dist/esm-node/router-binding/publicMatchData.js +447 -0
  120. package/dist/esm-node/router-binding/registryTransfer.js +223 -0
  121. package/dist/esm-node/router-binding/renderRouteNotFound.js +22 -0
  122. package/dist/esm-node/router-binding/route.js +162 -0
  123. package/dist/esm-node/router-binding/router.js +14 -0
  124. package/dist/esm-node/router-binding/routerContext.js +3 -0
  125. package/dist/esm-node/router-binding/routerOptions.js +1 -0
  126. package/dist/esm-node/router-binding/routerStores.js +50 -0
  127. package/dist/esm-node/router-binding/scroll-restoration.js +12 -0
  128. package/dist/esm-node/router-binding/typePrimitives.js +1 -0
  129. package/dist/esm-node/router-binding/useBlocker.js +152 -0
  130. package/dist/esm-node/router-binding/useCanGoBack.js +7 -0
  131. package/dist/esm-node/router-binding/useLoaderData.js +8 -0
  132. package/dist/esm-node/router-binding/useLoaderDeps.js +8 -0
  133. package/dist/esm-node/router-binding/useLocation.js +14 -0
  134. package/dist/esm-node/router-binding/useMatch.js +28 -0
  135. package/dist/esm-node/router-binding/useNavigate.js +25 -0
  136. package/dist/esm-node/router-binding/useParams.js +11 -0
  137. package/dist/esm-node/router-binding/useRouteContext.js +8 -0
  138. package/dist/esm-node/router-binding/useRouter.js +10 -0
  139. package/dist/esm-node/router-binding/useRouterState.js +19 -0
  140. package/dist/esm-node/router-binding/useSearch.js +11 -0
  141. package/dist/esm-node/router-binding/utils.js +23 -0
  142. package/dist/esm-node/router.js +187 -0
  143. package/dist/esm-node/server.js +396 -0
  144. package/dist/types/actions.d.ts +45 -0
  145. package/dist/types/application-router.d.ts +5 -0
  146. package/dist/types/client.d.ts +23 -0
  147. package/dist/types/entry-application.d.ts +10 -0
  148. package/dist/types/entry-client.d.ts +5 -0
  149. package/dist/types/entry-server.d.ts +5 -0
  150. package/dist/types/federation-context.d.ts +16 -0
  151. package/dist/types/federation-ssr.d.ts +19 -0
  152. package/dist/types/federation.d.ts +30 -0
  153. package/dist/types/i18n/I18nProvider.d.ts +21 -0
  154. package/dist/types/i18n/LocalizedLink.d.ts +15 -0
  155. package/dist/types/i18n/context.d.ts +11 -0
  156. package/dist/types/i18n/index.d.ts +9 -0
  157. package/dist/types/i18n/languageSync.d.ts +31 -0
  158. package/dist/types/i18n/types.d.ts +33 -0
  159. package/dist/types/i18n/useI18n.d.ts +24 -0
  160. package/dist/types/index.d.ts +41 -0
  161. package/dist/types/manifest.d.ts +55 -0
  162. package/dist/types/native-promise-serialization.d.ts +9 -0
  163. package/dist/types/plugin/compiler.d.ts +6 -0
  164. package/dist/types/plugin/create.d.ts +21 -0
  165. package/dist/types/plugin/index.d.ts +3 -0
  166. package/dist/types/plugin/lazy-modules.d.cts +15 -0
  167. package/dist/types/plugin/preserve-import-loader.d.cts +3 -0
  168. package/dist/types/plugin/profile.d.ts +2 -0
  169. package/dist/types/plugin/solid-loader.d.cts +2 -0
  170. package/dist/types/plugin/svg-component-template.d.cts +6 -0
  171. package/dist/types/route-completion.d.ts +21 -0
  172. package/dist/types/route-data-error.d.ts +17 -0
  173. package/dist/types/router-binding/Asset.d.ts +3 -0
  174. package/dist/types/router-binding/CatchBoundary.d.ts +13 -0
  175. package/dist/types/router-binding/ClientOnly.d.ts +31 -0
  176. package/dist/types/router-binding/HeadContent.d.ts +13 -0
  177. package/dist/types/router-binding/Match.d.ts +6 -0
  178. package/dist/types/router-binding/Matches.d.ts +26 -0
  179. package/dist/types/router-binding/RouterProvider.d.ts +11 -0
  180. package/dist/types/router-binding/SafeFragment.d.ts +2 -0
  181. package/dist/types/router-binding/ScriptOnce.d.ts +6 -0
  182. package/dist/types/router-binding/Scripts.d.ts +2 -0
  183. package/dist/types/router-binding/ScrollRestoration.d.ts +14 -0
  184. package/dist/types/router-binding/Transitioner.d.ts +2 -0
  185. package/dist/types/router-binding/awaited.d.ts +11 -0
  186. package/dist/types/router-binding/fileRoute.d.ts +54 -0
  187. package/dist/types/router-binding/flightData.d.ts +38 -0
  188. package/dist/types/router-binding/headContentUtils.d.ts +15 -0
  189. package/dist/types/router-binding/history.d.ts +8 -0
  190. package/dist/types/router-binding/index.d.ts +46 -0
  191. package/dist/types/router-binding/lazyRouteComponent.d.ts +2 -0
  192. package/dist/types/router-binding/link.d.ts +43 -0
  193. package/dist/types/router-binding/matchContext.d.ts +7 -0
  194. package/dist/types/router-binding/nonRouteComponentContext.d.ts +5 -0
  195. package/dist/types/router-binding/not-found.d.ts +11 -0
  196. package/dist/types/router-binding/publicMatchData.d.ts +19 -0
  197. package/dist/types/router-binding/registryTransfer.d.ts +49 -0
  198. package/dist/types/router-binding/renderRouteNotFound.d.ts +11 -0
  199. package/dist/types/router-binding/route.d.ts +105 -0
  200. package/dist/types/router-binding/router.d.ts +70 -0
  201. package/dist/types/router-binding/routerContext.d.ts +3 -0
  202. package/dist/types/router-binding/routerOptions.d.ts +6 -0
  203. package/dist/types/router-binding/routerStores.d.ts +2 -0
  204. package/dist/types/router-binding/scroll-restoration.d.ts +2 -0
  205. package/dist/types/router-binding/typePrimitives.d.ts +10 -0
  206. package/dist/types/router-binding/useBlocker.d.ts +70 -0
  207. package/dist/types/router-binding/useCanGoBack.d.ts +2 -0
  208. package/dist/types/router-binding/useLoaderData.d.ts +8 -0
  209. package/dist/types/router-binding/useLoaderDeps.d.ts +8 -0
  210. package/dist/types/router-binding/useLocation.d.ts +7 -0
  211. package/dist/types/router-binding/useMatch.d.ts +10 -0
  212. package/dist/types/router-binding/useNavigate.d.ts +5 -0
  213. package/dist/types/router-binding/useParams.d.ts +9 -0
  214. package/dist/types/router-binding/useRouteContext.d.ts +4 -0
  215. package/dist/types/router-binding/useRouter.d.ts +4 -0
  216. package/dist/types/router-binding/useRouterState.d.ts +8 -0
  217. package/dist/types/router-binding/useSearch.d.ts +9 -0
  218. package/dist/types/router-binding/utils.d.ts +25 -0
  219. package/dist/types/router.d.ts +31 -0
  220. package/dist/types/server.d.ts +47 -0
  221. package/package.json +130 -4
  222. package/src/actions.tsx +441 -0
  223. package/src/application-router.tsx +47 -0
  224. package/src/client.ts +106 -0
  225. package/src/entry-application.tsx +73 -0
  226. package/src/entry-client.tsx +49 -0
  227. package/src/entry-server.tsx +85 -0
  228. package/src/federation-context.ts +47 -0
  229. package/src/federation-ssr.ts +136 -0
  230. package/src/federation.tsx +197 -0
  231. package/src/i18n/I18nProvider.tsx +54 -0
  232. package/src/i18n/LocalizedLink.tsx +83 -0
  233. package/src/i18n/context.ts +13 -0
  234. package/src/i18n/index.ts +31 -0
  235. package/src/i18n/languageSync.ts +113 -0
  236. package/src/i18n/types.ts +35 -0
  237. package/src/i18n/useI18n.ts +121 -0
  238. package/src/index.ts +41 -0
  239. package/src/manifest.ts +337 -0
  240. package/src/native-promise-serialization.ts +167 -0
  241. package/src/plugin/compiler.ts +320 -0
  242. package/src/plugin/create.ts +271 -0
  243. package/src/plugin/index.ts +69 -0
  244. package/src/plugin/lazy-modules.cjs +146 -0
  245. package/src/plugin/preserve-import-loader.cjs +46 -0
  246. package/src/plugin/profile.ts +42 -0
  247. package/src/plugin/solid-loader.cjs +83 -0
  248. package/src/plugin/svg-component-template.cjs +19 -0
  249. package/src/route-completion.tsx +226 -0
  250. package/src/route-data-error.ts +175 -0
  251. package/src/router-binding/Asset.tsx +284 -0
  252. package/src/router-binding/CatchBoundary.tsx +130 -0
  253. package/src/router-binding/ClientOnly.tsx +76 -0
  254. package/src/router-binding/HeadContent.tsx +23 -0
  255. package/src/router-binding/LICENSE +21 -0
  256. package/src/router-binding/Match.tsx +397 -0
  257. package/src/router-binding/Matches.tsx +242 -0
  258. package/src/router-binding/PROVENANCE.json +94 -0
  259. package/src/router-binding/RouterProvider.tsx +128 -0
  260. package/src/router-binding/SafeFragment.tsx +5 -0
  261. package/src/router-binding/ScriptOnce.tsx +23 -0
  262. package/src/router-binding/Scripts.tsx +44 -0
  263. package/src/router-binding/ScrollRestoration.tsx +49 -0
  264. package/src/router-binding/Transitioner.tsx +177 -0
  265. package/src/router-binding/awaited.tsx +71 -0
  266. package/src/router-binding/fileRoute.ts +268 -0
  267. package/src/router-binding/flightData.ts +90 -0
  268. package/src/router-binding/headContentUtils.tsx +292 -0
  269. package/src/router-binding/history.ts +9 -0
  270. package/src/router-binding/index.tsx +315 -0
  271. package/src/router-binding/lazyRouteComponent.tsx +70 -0
  272. package/src/router-binding/link.tsx +865 -0
  273. package/src/router-binding/matchContext.tsx +15 -0
  274. package/src/router-binding/nonRouteComponentContext.tsx +23 -0
  275. package/src/router-binding/not-found.tsx +65 -0
  276. package/src/router-binding/publicMatchData.ts +674 -0
  277. package/src/router-binding/registryTransfer.ts +400 -0
  278. package/src/router-binding/renderRouteNotFound.tsx +53 -0
  279. package/src/router-binding/route.tsx +665 -0
  280. package/src/router-binding/router.ts +123 -0
  281. package/src/router-binding/routerContext.tsx +6 -0
  282. package/src/router-binding/routerOptions.ts +26 -0
  283. package/src/router-binding/routerStores.ts +85 -0
  284. package/src/router-binding/scroll-restoration.tsx +15 -0
  285. package/src/router-binding/typePrimitives.ts +74 -0
  286. package/src/router-binding/useBlocker.tsx +359 -0
  287. package/src/router-binding/useCanGoBack.ts +9 -0
  288. package/src/router-binding/useLoaderData.tsx +51 -0
  289. package/src/router-binding/useLoaderDeps.tsx +46 -0
  290. package/src/router-binding/useLocation.tsx +43 -0
  291. package/src/router-binding/useMatch.tsx +111 -0
  292. package/src/router-binding/useNavigate.tsx +45 -0
  293. package/src/router-binding/useParams.tsx +70 -0
  294. package/src/router-binding/useRouteContext.ts +30 -0
  295. package/src/router-binding/useRouter.tsx +17 -0
  296. package/src/router-binding/useRouterState.tsx +50 -0
  297. package/src/router-binding/useSearch.tsx +70 -0
  298. package/src/router-binding/utils.ts +59 -0
  299. package/src/router.ts +376 -0
  300. package/src/server.ts +645 -0
  301. package/README.md +0 -3
@@ -0,0 +1,242 @@
1
+ import type { JSX } from '@solidjs/web';
2
+ import type {
3
+ AnyRouter,
4
+ DeepPartial,
5
+ Expand,
6
+ MakeOptionalPathParams,
7
+ MakeOptionalSearchParams,
8
+ MakeRouteMatchUnion,
9
+ MaskOptions,
10
+ MatchRouteOptions,
11
+ RegisteredRouter,
12
+ ResolveRoute,
13
+ ToSubOptionsProps,
14
+ } from '@tanstack/router-core';
15
+ import { replaceEqualDeep } from '@tanstack/router-core';
16
+ import * as Solid from 'solid-js';
17
+ import { CatchBoundary, ErrorComponent } from './CatchBoundary';
18
+ import { Match } from './Match';
19
+ import { nearestMatchContext } from './matchContext';
20
+ import { SafeFragment } from './SafeFragment';
21
+ import { Rendered, Transitioner } from './Transitioner';
22
+ import { useRouter } from './useRouter';
23
+
24
+ const NearestMatchContext = nearestMatchContext as unknown as Solid.Component<{
25
+ value: any;
26
+ children: any;
27
+ }>;
28
+
29
+ declare module '@tanstack/router-core' {
30
+ export interface RouteMatchExtensions {
31
+ meta?: Array<JSX.IntrinsicElements['meta'] | undefined>;
32
+ links?: Array<JSX.IntrinsicElements['link'] | undefined>;
33
+ scripts?: Array<JSX.IntrinsicElements['script'] | undefined>;
34
+ styles?: Array<JSX.IntrinsicElements['style'] | undefined>;
35
+ headScripts?: Array<JSX.IntrinsicElements['script'] | undefined>;
36
+ }
37
+ }
38
+
39
+ export function Matches() {
40
+ const router = useRouter();
41
+
42
+ const OptionalWrapper = router.options.InnerWrap || SafeFragment;
43
+
44
+ return (
45
+ <OptionalWrapper>
46
+ <Transitioner />
47
+ <MatchesInner />
48
+ <Rendered />
49
+ </OptionalWrapper>
50
+ );
51
+ }
52
+
53
+ function MatchesInner() {
54
+ const router = useRouter();
55
+ const routeId = () => router.stores.ids.get()[0];
56
+ const match = () =>
57
+ routeId() ? router.stores.byRoute.get(routeId()!)?.get() : undefined;
58
+ const nearestMatch = [routeId, match] as const;
59
+
60
+ const matchContent = () => (
61
+ <Solid.Show when={routeId()} keyed>
62
+ {currentRouteId => <Match routeId={currentRouteId} />}
63
+ </Solid.Show>
64
+ );
65
+
66
+ if (router.options.disableGlobalCatchBoundary) {
67
+ // When disableGlobalCatchBoundary is true, render without any internal
68
+ // error boundary so errors bubble up freely to an external Errored boundary.
69
+ return (
70
+ <NearestMatchContext value={nearestMatch}>
71
+ {matchContent()}
72
+ </NearestMatchContext>
73
+ );
74
+ }
75
+
76
+ return (
77
+ <NearestMatchContext value={nearestMatch}>
78
+ <CatchBoundary
79
+ getResetKey={() => router.stores.matches.get()}
80
+ render={matchContent}
81
+ errorComponent={ErrorComponent}
82
+ {...(process.env.NODE_ENV !== 'production'
83
+ ? {
84
+ onCatch: (error: Error) => {
85
+ console.warn(
86
+ `Warning: The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,
87
+ );
88
+ console.warn(`Warning: ${error.message || error.toString()}`);
89
+ },
90
+ }
91
+ : {})}
92
+ />
93
+ </NearestMatchContext>
94
+ );
95
+ }
96
+
97
+ export type UseMatchRouteOptions<
98
+ TRouter extends AnyRouter = RegisteredRouter,
99
+ TFrom extends string = string,
100
+ TTo extends string | undefined = undefined,
101
+ TMaskFrom extends string = TFrom,
102
+ TMaskTo extends string = '',
103
+ > = ToSubOptionsProps<TRouter, TFrom, TTo> &
104
+ DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> &
105
+ DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> &
106
+ MaskOptions<TRouter, TMaskFrom, TMaskTo> &
107
+ MatchRouteOptions;
108
+
109
+ export function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {
110
+ const router = useRouter();
111
+
112
+ return <
113
+ const TFrom extends string = string,
114
+ const TTo extends string | undefined = undefined,
115
+ const TMaskFrom extends string = TFrom,
116
+ const TMaskTo extends string = '',
117
+ >(
118
+ opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
119
+ ): Solid.Accessor<
120
+ false | Expand<ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']>
121
+ > => {
122
+ return Solid.createMemo(() => {
123
+ const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts;
124
+
125
+ router.stores.location.get();
126
+ router.stores.resolvedLocation.get();
127
+ router.stores.status.get();
128
+ return router.matchRoute(rest as any, {
129
+ ...(pending !== undefined ? { pending } : {}),
130
+ ...(caseSensitive !== undefined ? { caseSensitive } : {}),
131
+ ...(fuzzy !== undefined ? { fuzzy } : {}),
132
+ ...(includeSearch !== undefined ? { includeSearch } : {}),
133
+ });
134
+ });
135
+ };
136
+ }
137
+
138
+ export type MakeMatchRouteOptions<
139
+ TRouter extends AnyRouter = RegisteredRouter,
140
+ TFrom extends string = string,
141
+ TTo extends string | undefined = undefined,
142
+ TMaskFrom extends string = TFrom,
143
+ TMaskTo extends string = '',
144
+ > = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {
145
+ // 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
146
+ children?:
147
+ | ((
148
+ params?: Expand<
149
+ ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']
150
+ >,
151
+ ) => JSX.Element)
152
+ | JSX.Element;
153
+ };
154
+
155
+ export function MatchRoute<
156
+ TRouter extends AnyRouter = RegisteredRouter,
157
+ const TFrom extends string = string,
158
+ const TTo extends string | undefined = undefined,
159
+ const TMaskFrom extends string = TFrom,
160
+ const TMaskTo extends string = '',
161
+ >(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any {
162
+ const matchRoute = useMatchRoute();
163
+ const params = matchRoute(props as any);
164
+
165
+ const renderedChild = Solid.createMemo(() => {
166
+ const matchedParams = params();
167
+ const child = props.children;
168
+
169
+ if (typeof child === 'function') {
170
+ return (child as any)(matchedParams);
171
+ }
172
+
173
+ return matchedParams ? child : null;
174
+ });
175
+
176
+ return <>{renderedChild()}</>;
177
+ }
178
+
179
+ export interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {
180
+ select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected;
181
+ }
182
+
183
+ export type UseMatchesResult<
184
+ TRouter extends AnyRouter,
185
+ TSelected,
186
+ > = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected;
187
+
188
+ export function useMatches<
189
+ TRouter extends AnyRouter = RegisteredRouter,
190
+ TSelected = unknown,
191
+ >(
192
+ opts?: UseMatchesBaseOptions<TRouter, TSelected>,
193
+ ): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {
194
+ const router = useRouter<TRouter>();
195
+ return Solid.createMemo((prev: TSelected | undefined) => {
196
+ const matches = router.stores.matches.get() as Array<
197
+ MakeRouteMatchUnion<TRouter>
198
+ >;
199
+ const res = opts?.select ? opts.select(matches) : matches;
200
+ if (prev === undefined) return res;
201
+ return replaceEqualDeep(prev, res) as any;
202
+ }) as Solid.Accessor<UseMatchesResult<TRouter, TSelected>>;
203
+ }
204
+
205
+ export function useParentMatches<
206
+ TRouter extends AnyRouter = RegisteredRouter,
207
+ TSelected = unknown,
208
+ >(
209
+ opts?: UseMatchesBaseOptions<TRouter, TSelected>,
210
+ ): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {
211
+ const contextRouteId =
212
+ Solid.useContext(nearestMatchContext)[0 /* route id */];
213
+
214
+ return useMatches({
215
+ select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {
216
+ matches = matches.slice(
217
+ 0,
218
+ matches.findIndex(d => d.routeId === contextRouteId()),
219
+ );
220
+ return opts?.select ? opts.select(matches) : matches;
221
+ },
222
+ } as any);
223
+ }
224
+
225
+ export function useChildMatches<
226
+ TRouter extends AnyRouter = RegisteredRouter,
227
+ TSelected = unknown,
228
+ >(
229
+ opts?: UseMatchesBaseOptions<TRouter, TSelected>,
230
+ ): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {
231
+ const contextRouteId =
232
+ Solid.useContext(nearestMatchContext)[0 /* route id */];
233
+
234
+ return useMatches({
235
+ select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {
236
+ matches = matches.slice(
237
+ matches.findIndex(d => d.routeId === contextRouteId()) + 1,
238
+ );
239
+ return opts?.select ? opts.select(matches) : matches;
240
+ },
241
+ } as any);
242
+ }
@@ -0,0 +1,94 @@
1
+ {
2
+ "repository": "https://github.com/TanStack/router",
3
+ "commit": "4fbd65c5c3b40be87a6248867c22021c1c19bba8",
4
+ "sourcePath": "packages/solid-router/src",
5
+ "upstreamPackage": "@tanstack/solid-router",
6
+ "upstreamVersion": "2.0.0-rc.8",
7
+ "license": "MIT",
8
+ "licenseSourcePath": "LICENSE",
9
+ "ownedBy": "@modern-js/renderer-solid",
10
+ "upstreamPorts": [
11
+ {
12
+ "repository": "https://github.com/TanStack/router",
13
+ "commit": "84bde660a12d82e8c74859b3240157af7566f843",
14
+ "sourcePath": "packages/solid-router/src",
15
+ "upstreamPackage": "@tanstack/solid-router",
16
+ "upstreamVersion": "1.170.36",
17
+ "routerCoreVersion": "1.171.37",
18
+ "files": ["Scripts.tsx", "link.tsx"],
19
+ "adaptation": "Native body-script composition and positional search equality are ported from the matching router-core release. The owned binding retains Solid 2 RC.13 JSX, NoHydration, keyed public match transfer and its module-keyed client-assets resolver."
20
+ }
21
+ ],
22
+ "upstreamFileSha256": {
23
+ "Asset.tsx": "78dbaa6e5ab3fabc49dc28cba20e923d7b9f7b9dcaf3729dd5479e2e5d88da56",
24
+ "CatchBoundary.tsx": "c79c2944e7735c76058c196693ca2ddb4bddb142fcd7a586b0672f81772486eb",
25
+ "ClientOnly.tsx": "e6c1ca9b4f2657696bd29d0221bd5e5f60c130f64cc694e426a7b65aaa66df74",
26
+ "HeadContent.tsx": "86537f4ed1ab45282444d7badfb618ba74ad19bbe547c35f3d6e8d12397c8e73",
27
+ "LICENSE": "a405ee70c632bb938acb7ac5f210e814409b3760ea9d2329d8ed8ffcfd11a0e7",
28
+ "Match.tsx": "9f83c3ab36d9eb3480b2f3b8ec10b7b77a2ff5e4ea75d79104fe628c40056af0",
29
+ "Matches.tsx": "5ec59438b48b7dc9bc3add8703080ee46d6dfd7b76ccaff61fe65f5ddcf02579",
30
+ "RouterProvider.tsx": "e5d2459328927a470e5821c7f1f68eeca51915ef885bfc45aedb2e5ee8fa4928",
31
+ "SafeFragment.tsx": "31a1e3445f0893abdccb3f431e97ad4e81562f09db8e0731fca37d3383641bd3",
32
+ "ScriptOnce.tsx": "d499a0a5cc9aa5069f9dcb38adc5de62d50db11e844f5b2bc3789589c859df51",
33
+ "Scripts.tsx": "c47516d07012106ebd069957970336f794ea01644c154828e7c231ac428679e1",
34
+ "ScrollRestoration.tsx": "947f793e1a7b1f889389fbeb24067166e65dddf19185cdc57f725d9064ca7a28",
35
+ "Transitioner.tsx": "ee166b4668d839fc70ccde13cb3236bfe1ec2fd6c84beab6444f312200d28046",
36
+ "awaited.tsx": "68185231c442451c9f97ff47b7de39803272d33e96805778231dac95fc7d1741",
37
+ "fileRoute.ts": "3ed7a45ea9f18566ac71bb63b0c8881b411d28bc2abe486703fe305c9fdbd01e",
38
+ "flightData.ts": "e19f75891f80fd220227fcc03ee17c83c7c7fb804fa0c53785daa24ebe062a4e",
39
+ "headContentUtils.tsx": "9dcbd62e325e7d249a79b6afff77f51388c985ac91b0f329f9ec5140bc16205c",
40
+ "history.ts": "1bd12c2f8ca1b44e860a17f92582596b0125c92bb577db6f07e8c3994b7a582c",
41
+ "index.tsx": "34248dc9c06f4e16a3a42b1256782ffe8d87bcbdbdafb1c2bffb9aef8abdbe47",
42
+ "lazyRouteComponent.tsx": "7bd78423c8ebac18157bacdac1c38b2fe91b98af734a2cd16b67b109e5a9fca6",
43
+ "link.tsx": "66ef79dcde50418e8e4b9cf5fbc15a97179283fc64b3f39a6632ebc38c11ef82",
44
+ "matchContext.tsx": "12bc0fabd0e9ffbab124c7270528bae8efeaf8473fd81f1e88163038d8f12e71",
45
+ "nonRouteComponentContext.tsx": "0c83d583a7852f76f779f7733f4e48c27148295b1f8e831cd27b26ce3ac4e5e2",
46
+ "not-found.tsx": "c408fce8f430c3692332dfae451b713fd17dc484809c39e6b4c9e300fedd25c8",
47
+ "registryTransfer.ts": "c0c989413589a384c0ad714f52d2fa622715bb15a487af1f1158ef96943c2192",
48
+ "renderRouteNotFound.tsx": "b504eb5b9fa6fe9998a90a0d5769ad9d5655d42b3d421e2c0dceebb8bc1831a5",
49
+ "route.tsx": "248922d87014821272e236cd5775c96c32d87060994db5b5f25478ffb20d86e6",
50
+ "router.ts": "0d8dd86241f611561d6588af0e31d194301269efe75525259eead54f95617f68",
51
+ "routerContext.tsx": "42f4c1179d5983224df798d2ca395b6246765cb6ec77eda2b627c8c464b5aa78",
52
+ "routerStores.ts": "46fb1e5d24e3d06ad798ad63b7e1ed9ec5e1f1f42e5ac1f60a9502db72da5f2f",
53
+ "scroll-restoration.tsx": "f029fc78c834c7271827da586b21a719d4ceebecf77f11eda75454c79608e879",
54
+ "typePrimitives.ts": "78d4527fe249ac871bd1696fd71f856a79cf93ccb85cedd57cf44630622d69fb",
55
+ "useBlocker.tsx": "ad5f4865501d628b430d15ea48dc5fabda0235b13075c688a364254183af5c95",
56
+ "useCanGoBack.ts": "d70495b51c4915f33158929b79352044f647d126fc5f44de08f04e219899b95b",
57
+ "useLoaderData.tsx": "2ffacb8e6c4bc2713f7da4db01dad0f34c9c4c9b75af66716e48ec38accf3397",
58
+ "useLoaderDeps.tsx": "066c52b466a0815e5f3e912e5909c8193ac039c3410ca5bb382b8d18ab1008bb",
59
+ "useLocation.tsx": "f65197d00b1bccd2cd7e9834a7273889706a86cf65db7636bafa41cdebb39de8",
60
+ "useMatch.tsx": "26c4a4c2e3d6b8b8a10b028409fca7711441b118c868a73be56209d7c38c2051",
61
+ "useNavigate.tsx": "83a6ec04e886b661bb38d95b12772778f79d573abd2f0c294b95d7080ef97968",
62
+ "useParams.tsx": "0a2a45dee679cf9df90fb1fb88e53a0d7afcfd6005c2d6cc848c350f3d33aefd",
63
+ "useRouteContext.ts": "2f248aeaa2fd4550dbc25b4fd78688c0aaf0d488f440546e5aeee2f055944294",
64
+ "useRouter.tsx": "0fe4a6a60ade5da19db72253898256486e08466a9fafd59aea3263ee5203e21d",
65
+ "useRouterState.tsx": "be1f97cfb4ee845cc8e7175aff5ede190e8a75c7f892faa7c914ac89c4af25f1",
66
+ "useSearch.tsx": "585add65de5a8633d09fa36be38666e601bfd01076e01fccef25f832792c1e1d",
67
+ "utils.ts": "a398c76ac378efe6f8b9aa859a5335d4f07cc692a31754fa93c8bf3e5df0b6ff"
68
+ },
69
+ "localChanges": [
70
+ "The public router surface omits InjectedHtmlEntry, isPlainArray and isPlainObject, which router-core 1.171.37 no longer exports. Managed SSR uses immutable public route data and native Solid 2 promise serialization. Custom serializationAdapters are unsupported and rejected before router construction or document commitment; the local public option types do not admit them.",
71
+ "Authored JSX types import @solidjs/web and have explicit return annotations for Solid 2 declaration generation.",
72
+ "Hydration state and keyed match transfer use Solid 2 RC.13 public isHydrating, isHydratable, getHydrationWriter and takeHydrationValue APIs.",
73
+ "Explicit public beforeLoad results transfer after canonical validation; private request context stays in owner closures. Initial hydration inherits checked server beforeLoad contributions, invokes the native client route-context callback and preserves client options context without rerunning initial beforeLoad callbacks or loaders.",
74
+ "Public native route/view data is projected into deeply frozen canonical plain or null-prototype records, arrays and scalars. Date, RegExp, Map and Set are unsupported at this immutable native UI boundary; the shared HTTP data codec retains its rich-data contract. Authored originals remain untouched.",
75
+ "Owner-scoped alias caches preserve shared critical objects and checked flat deferred transports. Promise fulfillments and rejections are freshly validated, cloned and frozen; unsupported values fail their owning scope. Request preflight captures stable public match snapshots before response commit, excluding known private request identities.",
76
+ "Fresh checked Promise handles are sealed with controlled nonenumerable s/v accessors matching the audited Solid RC.13 state protocol. Status accepts undefined, 0, 1 or 2; assigned values receive the same descriptor-safe immutable public/error projection and private-reference checks. Unsupported AsyncIterable state and unsafe annotations fail the owning scope. Authored Promise handles remain unchanged.",
77
+ "Only the native keyed hydration receiver admits decoded Promise metadata: exact native prototypes, own s/v data descriptors and documented states 0, 1 or 2. Settled states require a checked public value; symbols, accessors, extra fields and AsyncIterable metadata reject before atomic publication. A detached controlled transport adopts valid settled metadata synchronously before native views consume it. General authored Promise validation remains metadata-free and decoded originals remain untouched.",
78
+ "Managed route-tree owners apply the same public projection before native client hydration commits. The owning native store publisher validates the complete offered chain, rewrites composed-context fields to checked public references and freezes the same native context root before publication. Registry claiming consumes the complete matched chain and owns pending rejections before choosing atomic fallback.",
79
+ "Inside UltraModern request-owned SSR, the native provider and match serializer reject unregistered custom native routers before rendering or transfer; managed filesystem/application factories own the immutable public boundary and route-tree owner registration remains internal. Bare native rendering without an UltraModern request remains an ABI probe and does not claim framework privacy qualification.",
80
+ "Match errors use a descriptor-safe public diagnostic projection; exact DataProtocolError diagnostics remain actionable, and the exact fork-owned RouteDataError class has a fixed checked snapshot and native registry restoration.",
81
+ "The upstream ssr/ server-entry adapters are omitted; @modern-js/renderer-solid/server owns document rendering and the router transfer.",
82
+ "Source formatting follows the owning repository's Biome configuration."
83
+ ],
84
+ "nativeProtocolLimitations": [
85
+ {
86
+ "runtime": "@solidjs/web@2.0.0-rc.15 with Seroval 1.6.8",
87
+ "trigger": "Direct native writer injection of a rejected whole-match Promise before the client binding loads",
88
+ "observed": "Native inline resolver scripts reject registry Promises without a rejection handler; browser page errors occur before router construction. Binding claims cannot retroactively handle those errors.",
89
+ "supportedProducer": "The maintained match producer writes only settled synchronous records and excludes pending matches. Critical public-data failures are rejected before headers; unsupported deferred values fail the owning session and abort native serialization.",
90
+ "diagnostic": "ULTRAMODERN_SOLID_RAW_PROTOCOL_DIAGNOSTIC=1 node tests/ultramodern-renderers/solid-admission/run.mjs",
91
+ "qualification": "The raw injection is an opt-in unsupported native-protocol diagnostic, excluded from the maintained producer qualification; its failure remains visible and unsuppressed."
92
+ }
93
+ ]
94
+ }
@@ -0,0 +1,128 @@
1
+ import type { JSX } from '@solidjs/web';
2
+ import type { AnyRouter, RegisteredRouter } from '@tanstack/router-core';
3
+ import { isServer } from '@tanstack/router-core/isServer';
4
+ import * as Solid from 'solid-js';
5
+ import { setupFlightDataConsumer } from './flightData';
6
+ import { Matches } from './Matches';
7
+ import {
8
+ assertNativeSerializationOptions,
9
+ requireManagedPublicRouter,
10
+ serializeMatchTransfer,
11
+ } from './registryTransfer';
12
+ import { routerContext } from './routerContext';
13
+ import type { RouterOptions } from './routerOptions';
14
+ import { SafeFragment } from './SafeFragment';
15
+
16
+ const RouterContext = routerContext as unknown as Solid.Component<{
17
+ value: any;
18
+ children: any;
19
+ }>;
20
+
21
+ export function RouterContextProvider<
22
+ TRouter extends AnyRouter = RegisteredRouter,
23
+ TDehydrated extends Record<string, any> = Record<string, any>,
24
+ >({
25
+ router,
26
+ children,
27
+ ...rest
28
+ }: RouterProps<TRouter, TDehydrated> & {
29
+ children: () => JSX.Element;
30
+ }) {
31
+ assertNativeSerializationOptions(rest);
32
+ requireManagedPublicRouter(router);
33
+ if (Object.keys(rest).length > 0) {
34
+ Solid.runWithOwner(null, () => {
35
+ router.update({
36
+ ...router.options,
37
+ ...rest,
38
+ context: {
39
+ ...router.options.context,
40
+ ...rest.context,
41
+ },
42
+ } as any);
43
+ });
44
+ }
45
+
46
+ // Server-side, the provider owns the load dispatch: if the app (or a host
47
+ // framework like Start) hasn't already loaded the router, kick `load()`
48
+ // and park the render on it. Solid's SSR awaits parked reads natively, so
49
+ // blocking-loader semantics are preserved without a top-level
50
+ // `await router.load()` in the server entry. The memo exists on both
51
+ // environments so the component tree (and hydration keys) stay identical;
52
+ // on the client it resolves immediately and the boot is handled by the
53
+ // registry priming in the Router constructor plus Transitioner's
54
+ // settled-time load.
55
+ const ready = Solid.createMemo(() =>
56
+ (isServer ?? router.isServer) && !router._serverResult
57
+ ? router.load().then(() => true)
58
+ : true,
59
+ );
60
+
61
+ // Client-side, the provider is where the router meets Solid's
62
+ // server-function transport: it consumes the response metadata mutations
63
+ // return (`redirect()`, `reload()`, `respond(value, { revalidate })`) so
64
+ // a mutation's navigation and reload happen without the caller wrapping
65
+ // the call. Never on the server — a render has no mutations to answer.
66
+ if (!(isServer ?? router.isServer)) {
67
+ Solid.onCleanup(setupFlightDataConsumer(router));
68
+ }
69
+
70
+ const OptionalWrapper = router.options.Wrap || SafeFragment;
71
+
72
+ return (
73
+ <OptionalWrapper>
74
+ <RouterContext value={router as AnyRouter}>
75
+ <Solid.Show when={ready()}>
76
+ {_ => {
77
+ // Native SSR transfer for the bare pairing (no-op under Start —
78
+ // see registryTransfer): serialize settled match state into the
79
+ // hydration registry while the render's serialization context is
80
+ // live. Runs after the load gate so matches are committed. The
81
+ // client half — the hydration-claiming boot — runs at router
82
+ // creation, outside the render.
83
+ if (isServer ?? router.isServer) {
84
+ serializeMatchTransfer(router);
85
+ }
86
+ return children();
87
+ }}
88
+ </Solid.Show>
89
+ </RouterContext>
90
+ </OptionalWrapper>
91
+ );
92
+ }
93
+
94
+ export function RouterProvider<
95
+ TRouter extends AnyRouter = RegisteredRouter,
96
+ TDehydrated extends Record<string, any> = Record<string, any>,
97
+ >({ router, ...rest }: RouterProps<TRouter, TDehydrated>) {
98
+ return (
99
+ <RouterContextProvider router={router} {...rest}>
100
+ {() => <Matches />}
101
+ </RouterContextProvider>
102
+ );
103
+ }
104
+
105
+ export type RouterProps<
106
+ TRouter extends AnyRouter = RegisteredRouter,
107
+ TDehydrated extends Record<string, any> = Record<string, any>,
108
+ > = Omit<
109
+ RouterOptions<
110
+ TRouter['routeTree'],
111
+ NonNullable<TRouter['options']['trailingSlash']>,
112
+ false,
113
+ TRouter['history'],
114
+ TDehydrated
115
+ >,
116
+ 'context'
117
+ > & {
118
+ router: TRouter;
119
+ context?: Partial<
120
+ RouterOptions<
121
+ TRouter['routeTree'],
122
+ NonNullable<TRouter['options']['trailingSlash']>,
123
+ false,
124
+ TRouter['history'],
125
+ TDehydrated
126
+ >['context']
127
+ >;
128
+ };
@@ -0,0 +1,5 @@
1
+ import type { JSX } from '@solidjs/web';
2
+
3
+ export function SafeFragment(props: any): JSX.Element {
4
+ return <>{props.children}</>;
5
+ }
@@ -0,0 +1,23 @@
1
+ import type { JSX } from '@solidjs/web';
2
+ import { isServer } from '@tanstack/router-core/isServer';
3
+ import { useRouter } from './useRouter';
4
+
5
+ export function ScriptOnce({
6
+ children,
7
+ }: {
8
+ children: string;
9
+ log?: boolean;
10
+ sync?: boolean;
11
+ }): JSX.Element {
12
+ const router = useRouter();
13
+ if (!(isServer ?? router.isServer)) {
14
+ return null;
15
+ }
16
+ return (
17
+ <script
18
+ nonce={router.options.ssr?.nonce}
19
+ class="$tsr"
20
+ innerHTML={children + ';document.currentScript.remove()'}
21
+ />
22
+ );
23
+ }
@@ -0,0 +1,44 @@
1
+ import type { JSX } from '@solidjs/web';
2
+ import { NoHydration } from '@solidjs/web';
3
+ import type { RouterManagedTag } from '@tanstack/router-core';
4
+ import {
5
+ composeSsrBodyScripts,
6
+ getSsrBodyScriptParts,
7
+ replaceEqualDeep,
8
+ } from '@tanstack/router-core';
9
+ import { isServer } from '@tanstack/router-core/isServer';
10
+ import * as Solid from 'solid-js';
11
+ import { Asset } from './Asset';
12
+ import { useRouter } from './useRouter';
13
+
14
+ export const Scripts = (): JSX.Element => {
15
+ const router = useRouter();
16
+ const nonce = router.options.ssr?.nonce;
17
+
18
+ const scripts = Solid.createMemo(
19
+ (previous: Array<RouterManagedTag> | undefined) => {
20
+ const next = composeSsrBodyScripts(
21
+ getSsrBodyScriptParts(
22
+ router.stores.matches.get(),
23
+ router.ssr?.manifest,
24
+ nonce,
25
+ ),
26
+ );
27
+ return previous ? replaceEqualDeep(previous, next) : next;
28
+ },
29
+ );
30
+ const initialHydrationScripts =
31
+ (isServer ?? router.isServer) && router.serverSsr
32
+ ? router.serverSsr.takeInitialHydrationScriptTags()
33
+ : undefined;
34
+ const tags = () =>
35
+ initialHydrationScripts
36
+ ? composeSsrBodyScripts([scripts(), []], initialHydrationScripts)
37
+ : scripts();
38
+
39
+ return (
40
+ <NoHydration>
41
+ <Solid.For each={tags()}>{asset => <Asset {...asset} />}</Solid.For>
42
+ </NoHydration>
43
+ );
44
+ };
@@ -0,0 +1,49 @@
1
+ import type {
2
+ ParsedLocation,
3
+ ScrollRestorationEntry,
4
+ ScrollRestorationOptions,
5
+ } from '@tanstack/router-core';
6
+ import {
7
+ getElementScrollRestorationEntry,
8
+ setupScrollRestoration,
9
+ } from '@tanstack/router-core';
10
+ import { useRouter } from './useRouter';
11
+
12
+ function useScrollRestoration() {
13
+ const router = useRouter();
14
+ setupScrollRestoration(router, true);
15
+ }
16
+
17
+ /**
18
+ * @deprecated use createRouter's `scrollRestoration` option instead
19
+ */
20
+ export function ScrollRestoration(_props: ScrollRestorationOptions) {
21
+ useScrollRestoration();
22
+
23
+ if (process.env.NODE_ENV === 'development') {
24
+ console.warn(
25
+ "The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.",
26
+ );
27
+ }
28
+
29
+ return null;
30
+ }
31
+
32
+ export function useElementScrollRestoration(
33
+ options: (
34
+ | {
35
+ id: string;
36
+ getElement?: () => Window | Element | undefined | null;
37
+ }
38
+ | {
39
+ id?: string;
40
+ getElement: () => Window | Element | undefined | null;
41
+ }
42
+ ) & {
43
+ getKey?: (location: ParsedLocation) => string;
44
+ },
45
+ ): ScrollRestorationEntry | undefined {
46
+ useScrollRestoration();
47
+
48
+ return getElementScrollRestorationEntry(useRouter(), options);
49
+ }