@tanstack/solid-router 1.121.0-alpha.27 → 1.121.0-alpha.28

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 (265) hide show
  1. package/dist/cjs/Asset.cjs +65 -21
  2. package/dist/cjs/Asset.cjs.map +1 -1
  3. package/dist/cjs/Asset.d.cts +2 -1
  4. package/dist/cjs/CatchBoundary.cjs +14 -15
  5. package/dist/cjs/CatchBoundary.cjs.map +1 -1
  6. package/dist/cjs/ClientOnly.cjs +12 -14
  7. package/dist/cjs/ClientOnly.cjs.map +1 -1
  8. package/dist/cjs/ClientOnly.d.cts +0 -20
  9. package/dist/cjs/HeadContent.cjs +28 -23
  10. package/dist/cjs/HeadContent.cjs.map +1 -1
  11. package/dist/cjs/Match.cjs +167 -141
  12. package/dist/cjs/Match.cjs.map +1 -1
  13. package/dist/cjs/Matches.cjs +26 -24
  14. package/dist/cjs/Matches.cjs.map +1 -1
  15. package/dist/cjs/Matches.d.cts +1 -0
  16. package/dist/cjs/RouterProvider.cjs +5 -5
  17. package/dist/cjs/RouterProvider.cjs.map +1 -1
  18. package/dist/cjs/SafeFragment.cjs +2 -2
  19. package/dist/cjs/SafeFragment.cjs.map +1 -1
  20. package/dist/cjs/ScriptOnce.cjs +4 -9
  21. package/dist/cjs/ScriptOnce.cjs.map +1 -1
  22. package/dist/cjs/ScriptOnce.d.cts +1 -1
  23. package/dist/cjs/Scripts.cjs +9 -13
  24. package/dist/cjs/Scripts.cjs.map +1 -1
  25. package/dist/cjs/ScrollRestoration.cjs +3 -4
  26. package/dist/cjs/ScrollRestoration.cjs.map +1 -1
  27. package/dist/cjs/Transitioner.cjs +9 -8
  28. package/dist/cjs/Transitioner.cjs.map +1 -1
  29. package/dist/cjs/awaited.cjs +2 -2
  30. package/dist/cjs/awaited.cjs.map +1 -1
  31. package/dist/cjs/fileRoute.cjs +5 -5
  32. package/dist/cjs/fileRoute.cjs.map +1 -1
  33. package/dist/cjs/index.cjs +0 -12
  34. package/dist/cjs/index.cjs.map +1 -1
  35. package/dist/cjs/index.d.cts +3 -6
  36. package/dist/cjs/lazyRouteComponent.cjs +6 -26
  37. package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
  38. package/dist/cjs/lazyRouteComponent.d.cts +1 -1
  39. package/dist/cjs/link.cjs +37 -31
  40. package/dist/cjs/link.cjs.map +1 -1
  41. package/dist/cjs/not-found.cjs +5 -7
  42. package/dist/cjs/not-found.cjs.map +1 -1
  43. package/dist/cjs/renderRouteNotFound.cjs +4 -4
  44. package/dist/cjs/renderRouteNotFound.cjs.map +1 -1
  45. package/dist/cjs/route.cjs +16 -16
  46. package/dist/cjs/route.cjs.map +1 -1
  47. package/dist/cjs/route.d.cts +14 -5
  48. package/dist/cjs/router.cjs.map +1 -1
  49. package/dist/cjs/routerContext.cjs.map +1 -1
  50. package/dist/cjs/scroll-restoration.cjs +12 -6
  51. package/dist/cjs/scroll-restoration.cjs.map +1 -1
  52. package/dist/cjs/ssr/RouterClient.cjs +45 -0
  53. package/dist/cjs/ssr/RouterClient.cjs.map +1 -0
  54. package/dist/cjs/ssr/RouterClient.d.cts +4 -0
  55. package/dist/cjs/ssr/RouterServer.cjs +56 -0
  56. package/dist/cjs/ssr/RouterServer.cjs.map +1 -0
  57. package/dist/cjs/ssr/RouterServer.d.cts +5 -0
  58. package/dist/cjs/ssr/client.cjs +5 -0
  59. package/dist/cjs/ssr/client.cjs.map +1 -0
  60. package/dist/cjs/ssr/client.d.cts +1 -0
  61. package/dist/cjs/ssr/defaultRenderHandler.cjs +18 -0
  62. package/dist/cjs/ssr/defaultRenderHandler.cjs.map +1 -0
  63. package/dist/cjs/ssr/defaultRenderHandler.d.cts +1 -0
  64. package/dist/cjs/ssr/defaultStreamHandler.cjs +20 -0
  65. package/dist/cjs/ssr/defaultStreamHandler.cjs.map +1 -0
  66. package/dist/cjs/ssr/defaultStreamHandler.d.cts +1 -0
  67. package/dist/cjs/ssr/renderRouterToStream.cjs +45 -0
  68. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -0
  69. package/dist/cjs/ssr/renderRouterToStream.d.cts +8 -0
  70. package/dist/cjs/ssr/renderRouterToString.cjs +43 -0
  71. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -0
  72. package/dist/cjs/ssr/renderRouterToString.d.cts +7 -0
  73. package/dist/cjs/ssr/server.cjs +20 -0
  74. package/dist/cjs/ssr/server.cjs.map +1 -0
  75. package/dist/cjs/ssr/server.d.cts +6 -0
  76. package/dist/cjs/useBlocker.cjs +41 -35
  77. package/dist/cjs/useBlocker.cjs.map +1 -1
  78. package/dist/cjs/useCanGoBack.cjs.map +1 -1
  79. package/dist/cjs/useLoaderData.cjs.map +1 -1
  80. package/dist/cjs/useLoaderDeps.cjs.map +1 -1
  81. package/dist/cjs/useLocation.cjs +1 -1
  82. package/dist/cjs/useLocation.cjs.map +1 -1
  83. package/dist/cjs/useMatch.cjs.map +1 -1
  84. package/dist/cjs/useNavigate.cjs +9 -3
  85. package/dist/cjs/useNavigate.cjs.map +1 -1
  86. package/dist/cjs/useParams.cjs.map +1 -1
  87. package/dist/cjs/useRouter.cjs +1 -1
  88. package/dist/cjs/useRouter.cjs.map +1 -1
  89. package/dist/cjs/useRouterState.cjs +3 -3
  90. package/dist/cjs/useRouterState.cjs.map +1 -1
  91. package/dist/cjs/useSearch.cjs.map +1 -1
  92. package/dist/cjs/utils.cjs +1 -1
  93. package/dist/cjs/utils.cjs.map +1 -1
  94. package/dist/esm/Asset.d.ts +2 -1
  95. package/dist/esm/Asset.js +60 -16
  96. package/dist/esm/Asset.js.map +1 -1
  97. package/dist/esm/CatchBoundary.js +1 -2
  98. package/dist/esm/CatchBoundary.js.map +1 -1
  99. package/dist/esm/ClientOnly.d.ts +0 -20
  100. package/dist/esm/ClientOnly.js +11 -13
  101. package/dist/esm/ClientOnly.js.map +1 -1
  102. package/dist/esm/HeadContent.js +23 -18
  103. package/dist/esm/HeadContent.js.map +1 -1
  104. package/dist/esm/Match.js +148 -122
  105. package/dist/esm/Match.js.map +1 -1
  106. package/dist/esm/Matches.d.ts +1 -0
  107. package/dist/esm/Matches.js +18 -16
  108. package/dist/esm/Matches.js.map +1 -1
  109. package/dist/esm/RouterProvider.js.map +1 -1
  110. package/dist/esm/SafeFragment.js.map +1 -1
  111. package/dist/esm/ScriptOnce.d.ts +1 -1
  112. package/dist/esm/ScriptOnce.js +2 -7
  113. package/dist/esm/ScriptOnce.js.map +1 -1
  114. package/dist/esm/Scripts.js +7 -11
  115. package/dist/esm/Scripts.js.map +1 -1
  116. package/dist/esm/ScrollRestoration.js +3 -4
  117. package/dist/esm/ScrollRestoration.js.map +1 -1
  118. package/dist/esm/Transitioner.js +9 -8
  119. package/dist/esm/Transitioner.js.map +1 -1
  120. package/dist/esm/awaited.js.map +1 -1
  121. package/dist/esm/fileRoute.js +5 -5
  122. package/dist/esm/fileRoute.js.map +1 -1
  123. package/dist/esm/index.d.ts +3 -6
  124. package/dist/esm/index.js +2 -8
  125. package/dist/esm/index.js.map +1 -1
  126. package/dist/esm/lazyRouteComponent.d.ts +1 -1
  127. package/dist/esm/lazyRouteComponent.js +2 -22
  128. package/dist/esm/lazyRouteComponent.js.map +1 -1
  129. package/dist/esm/link.js +34 -28
  130. package/dist/esm/link.js.map +1 -1
  131. package/dist/esm/not-found.js +2 -4
  132. package/dist/esm/not-found.js.map +1 -1
  133. package/dist/esm/renderRouteNotFound.js.map +1 -1
  134. package/dist/esm/route.d.ts +14 -5
  135. package/dist/esm/route.js +12 -12
  136. package/dist/esm/route.js.map +1 -1
  137. package/dist/esm/router.js.map +1 -1
  138. package/dist/esm/routerContext.js.map +1 -1
  139. package/dist/esm/scroll-restoration.js +10 -4
  140. package/dist/esm/scroll-restoration.js.map +1 -1
  141. package/dist/esm/ssr/RouterClient.d.ts +4 -0
  142. package/dist/esm/ssr/RouterClient.js +45 -0
  143. package/dist/esm/ssr/RouterClient.js.map +1 -0
  144. package/dist/esm/ssr/RouterServer.d.ts +5 -0
  145. package/dist/esm/ssr/RouterServer.js +56 -0
  146. package/dist/esm/ssr/RouterServer.js.map +1 -0
  147. package/dist/esm/ssr/client.d.ts +1 -0
  148. package/dist/esm/ssr/client.js +5 -0
  149. package/dist/esm/ssr/client.js.map +1 -0
  150. package/dist/esm/ssr/defaultRenderHandler.d.ts +1 -0
  151. package/dist/esm/ssr/defaultRenderHandler.js +18 -0
  152. package/dist/esm/ssr/defaultRenderHandler.js.map +1 -0
  153. package/dist/esm/ssr/defaultStreamHandler.d.ts +1 -0
  154. package/dist/esm/ssr/defaultStreamHandler.js +20 -0
  155. package/dist/esm/ssr/defaultStreamHandler.js.map +1 -0
  156. package/dist/esm/ssr/renderRouterToStream.d.ts +8 -0
  157. package/dist/esm/ssr/renderRouterToStream.js +28 -0
  158. package/dist/esm/ssr/renderRouterToStream.js.map +1 -0
  159. package/dist/esm/ssr/renderRouterToString.d.ts +7 -0
  160. package/dist/esm/ssr/renderRouterToString.js +26 -0
  161. package/dist/esm/ssr/renderRouterToString.js.map +1 -0
  162. package/dist/esm/ssr/server.d.ts +6 -0
  163. package/dist/esm/ssr/server.js +14 -0
  164. package/dist/esm/ssr/server.js.map +1 -0
  165. package/dist/esm/useBlocker.js +41 -35
  166. package/dist/esm/useBlocker.js.map +1 -1
  167. package/dist/esm/useCanGoBack.js.map +1 -1
  168. package/dist/esm/useLoaderData.js.map +1 -1
  169. package/dist/esm/useLoaderDeps.js.map +1 -1
  170. package/dist/esm/useLocation.js +1 -1
  171. package/dist/esm/useLocation.js.map +1 -1
  172. package/dist/esm/useMatch.js.map +1 -1
  173. package/dist/esm/useNavigate.js +9 -3
  174. package/dist/esm/useNavigate.js.map +1 -1
  175. package/dist/esm/useParams.js.map +1 -1
  176. package/dist/esm/useRouter.js +1 -1
  177. package/dist/esm/useRouter.js.map +1 -1
  178. package/dist/esm/useRouterState.js +3 -3
  179. package/dist/esm/useRouterState.js.map +1 -1
  180. package/dist/esm/useSearch.js.map +1 -1
  181. package/dist/esm/utils.js +1 -1
  182. package/dist/esm/utils.js.map +1 -1
  183. package/dist/source/Asset.d.ts +2 -1
  184. package/dist/source/Asset.jsx +45 -7
  185. package/dist/source/Asset.jsx.map +1 -1
  186. package/dist/source/ClientOnly.d.ts +0 -20
  187. package/dist/source/ClientOnly.jsx +3 -29
  188. package/dist/source/ClientOnly.jsx.map +1 -1
  189. package/dist/source/HeadContent.jsx +13 -0
  190. package/dist/source/HeadContent.jsx.map +1 -1
  191. package/dist/source/Match.jsx +74 -61
  192. package/dist/source/Match.jsx.map +1 -1
  193. package/dist/source/Matches.d.ts +1 -0
  194. package/dist/source/Matches.jsx +14 -11
  195. package/dist/source/Matches.jsx.map +1 -1
  196. package/dist/source/ScriptOnce.d.ts +1 -1
  197. package/dist/source/ScriptOnce.jsx +2 -12
  198. package/dist/source/ScriptOnce.jsx.map +1 -1
  199. package/dist/source/Transitioner.jsx +8 -8
  200. package/dist/source/Transitioner.jsx.map +1 -1
  201. package/dist/source/index.d.ts +3 -6
  202. package/dist/source/index.jsx +1 -4
  203. package/dist/source/index.jsx.map +1 -1
  204. package/dist/source/lazyRouteComponent.d.ts +1 -1
  205. package/dist/source/lazyRouteComponent.jsx +7 -21
  206. package/dist/source/lazyRouteComponent.jsx.map +1 -1
  207. package/dist/source/link.jsx +22 -17
  208. package/dist/source/link.jsx.map +1 -1
  209. package/dist/source/not-found.jsx.map +1 -1
  210. package/dist/source/route.d.ts +14 -5
  211. package/dist/source/route.jsx.map +1 -1
  212. package/dist/source/scroll-restoration.jsx +9 -2
  213. package/dist/source/scroll-restoration.jsx.map +1 -1
  214. package/dist/source/ssr/RouterClient.d.ts +4 -0
  215. package/dist/source/ssr/RouterClient.jsx +28 -0
  216. package/dist/source/ssr/RouterClient.jsx.map +1 -0
  217. package/dist/source/ssr/RouterServer.d.ts +5 -0
  218. package/dist/source/ssr/RouterServer.jsx +38 -0
  219. package/dist/source/ssr/RouterServer.jsx.map +1 -0
  220. package/dist/source/ssr/client.d.ts +1 -0
  221. package/dist/source/ssr/client.js +2 -0
  222. package/dist/source/ssr/client.js.map +1 -0
  223. package/dist/source/ssr/defaultRenderHandler.d.ts +1 -0
  224. package/dist/source/ssr/defaultRenderHandler.jsx +9 -0
  225. package/dist/source/ssr/defaultRenderHandler.jsx.map +1 -0
  226. package/dist/source/ssr/defaultStreamHandler.d.ts +1 -0
  227. package/dist/source/ssr/defaultStreamHandler.jsx +10 -0
  228. package/dist/source/ssr/defaultStreamHandler.jsx.map +1 -0
  229. package/dist/source/ssr/renderRouterToStream.d.ts +8 -0
  230. package/dist/source/ssr/renderRouterToStream.jsx +17 -0
  231. package/dist/source/ssr/renderRouterToStream.jsx.map +1 -0
  232. package/dist/source/ssr/renderRouterToString.d.ts +7 -0
  233. package/dist/source/ssr/renderRouterToString.jsx +20 -0
  234. package/dist/source/ssr/renderRouterToString.jsx.map +1 -0
  235. package/dist/source/ssr/server.d.ts +6 -0
  236. package/dist/source/ssr/server.js +7 -0
  237. package/dist/source/ssr/server.js.map +1 -0
  238. package/dist/source/useBlocker.jsx +44 -27
  239. package/dist/source/useBlocker.jsx.map +1 -1
  240. package/dist/source/useNavigate.jsx +12 -2
  241. package/dist/source/useNavigate.jsx.map +1 -1
  242. package/package.json +34 -7
  243. package/src/Asset.tsx +76 -7
  244. package/src/ClientOnly.tsx +5 -32
  245. package/src/HeadContent.tsx +17 -0
  246. package/src/Match.tsx +103 -81
  247. package/src/Matches.tsx +28 -19
  248. package/src/ScriptOnce.tsx +1 -13
  249. package/src/Transitioner.tsx +7 -7
  250. package/src/index.tsx +1 -18
  251. package/src/lazyRouteComponent.tsx +6 -26
  252. package/src/link.tsx +29 -21
  253. package/src/not-found.tsx +1 -1
  254. package/src/route.tsx +16 -5
  255. package/src/scroll-restoration.tsx +10 -3
  256. package/src/ssr/RouterClient.tsx +43 -0
  257. package/src/ssr/RouterServer.tsx +60 -0
  258. package/src/ssr/client.ts +1 -0
  259. package/src/ssr/defaultRenderHandler.tsx +12 -0
  260. package/src/ssr/defaultStreamHandler.tsx +13 -0
  261. package/src/ssr/renderRouterToStream.tsx +36 -0
  262. package/src/ssr/renderRouterToString.tsx +31 -0
  263. package/src/ssr/server.ts +6 -0
  264. package/src/useBlocker.tsx +48 -32
  265. package/src/useNavigate.tsx +14 -2
@@ -1 +1 @@
1
- {"version":3,"file":"useMatch.js","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport { useRouterState } from './useRouterState'\nimport { dummyMatchContext, matchContext } from './matchContext'\nimport type {\n AnyRouter,\n MakeRouteMatch,\n MakeRouteMatchUnion,\n RegisteredRouter,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? TStrict extends true\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : MakeRouteMatchUnion<TRouter>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Solid.Accessor<\n ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n const nearestMatchId = Solid.useContext(\n opts.from ? dummyMatchContext : matchContext,\n )\n\n const matchSelection = useRouterState({\n select: (state: any) => {\n const match = state.matches.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),\n )\n\n invariant(\n !((opts.shouldThrow ?? true) && !match),\n `Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n\n if (match === undefined) {\n return undefined\n }\n\n return opts.select ? opts.select(match) : match\n },\n } as any)\n\n return matchSelection as any\n}\n"],"names":["useMatch","opts","nearestMatchId","Solid","useContext","from","dummyMatchContext","matchContext","matchSelection","useRouterState","select","state","match","matches","find","d","routeId","id","invariant","shouldThrow","undefined"],"mappings":";;;;AAsDO,SAASA,SAOdC,MASA;AACA,QAAMC,iBAAiBC,MAAMC,WAC3BH,KAAKI,OAAOC,oBAAoBC,YAClC;AAEA,QAAMC,iBAAiBC,eAAe;AAAA,IACpCC,QAAQA,CAACC,UAAe;AACtB,YAAMC,QAAQD,MAAME,QAAQC,KAAK,CAACC,MAChCd,KAAKI,OAAOJ,KAAKI,SAASU,EAAEC,UAAUD,EAAEE,OAAOf,gBACjD;AAEAgB,gBACE,GAAGjB,KAAKkB,eAAe,SAAS,CAACP,QACjC,kBAAkBX,KAAKI,OAAO,yBAAyBJ,KAAKI,IAAI,MAAM,kBAAkB,EAC1F;AAEA,UAAIO,UAAUQ,QAAW;AAChBA,eAAAA;AAAAA,MAAAA;AAGT,aAAOnB,KAAKS,SAAST,KAAKS,OAAOE,KAAK,IAAIA;AAAAA,IAAAA;AAAAA,EAC5C,CACM;AAEDJ,SAAAA;AACT;"}
1
+ {"version":3,"file":"useMatch.js","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport { useRouterState } from './useRouterState'\nimport { dummyMatchContext, matchContext } from './matchContext'\nimport type {\n AnyRouter,\n MakeRouteMatch,\n MakeRouteMatchUnion,\n RegisteredRouter,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? TStrict extends true\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : MakeRouteMatchUnion<TRouter>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Solid.Accessor<\n ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n const nearestMatchId = Solid.useContext(\n opts.from ? dummyMatchContext : matchContext,\n )\n\n const matchSelection = useRouterState({\n select: (state: any) => {\n const match = state.matches.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),\n )\n\n invariant(\n !((opts.shouldThrow ?? true) && !match),\n `Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n\n if (match === undefined) {\n return undefined\n }\n\n return opts.select ? opts.select(match) : match\n },\n } as any)\n\n return matchSelection as any\n}\n"],"names":["useMatch","opts","nearestMatchId","Solid","useContext","from","dummyMatchContext","matchContext","matchSelection","useRouterState","select","state","match","matches","find","d","routeId","id","invariant","shouldThrow","undefined"],"mappings":";;;;AAsDO,SAASA,SAOdC,MASA;AACA,QAAMC,iBAAiBC,MAAMC,WAC3BH,KAAKI,OAAOC,oBAAoBC,YAClC;AAEA,QAAMC,iBAAiBC,eAAe;AAAA,IACpCC,QAAQA,CAACC,UAAe;AACtB,YAAMC,QAAQD,MAAME,QAAQC,KAAK,CAACC,MAChCd,KAAKI,OAAOJ,KAAKI,SAASU,EAAEC,UAAUD,EAAEE,OAAOf,gBACjD;AAEAgB,gBACE,GAAGjB,KAAKkB,eAAe,SAAS,CAACP,QACjC,kBAAkBX,KAAKI,OAAO,yBAAyBJ,KAAKI,IAAI,MAAM,kBAAkB,EAC1F;AAEA,UAAIO,UAAUQ,QAAW;AACvB,eAAOA;AAAAA,MACT;AAEA,aAAOnB,KAAKS,SAAST,KAAKS,OAAOE,KAAK,IAAIA;AAAAA,IAC5C;AAAA,EAAA,CACM;AAER,SAAOJ;AACT;"}
@@ -1,13 +1,19 @@
1
1
  import * as Solid from "solid-js";
2
2
  import { useRouter } from "./useRouter.js";
3
+ import { useMatch } from "./useMatch.js";
3
4
  function useNavigate(_defaultOpts) {
4
5
  const {
5
- navigate
6
+ navigate,
7
+ state
6
8
  } = useRouter();
9
+ const matchIndex = useMatch({
10
+ strict: false,
11
+ select: (match) => match.index
12
+ });
7
13
  return (options) => {
8
14
  return navigate({
9
- from: _defaultOpts == null ? void 0 : _defaultOpts.from,
10
- ...options
15
+ ...options,
16
+ from: options.from ?? _defaultOpts?.from ?? state.matches[matchIndex()].fullPath
11
17
  });
12
18
  };
13
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useNavigate.js","sources":["../../src/useNavigate.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n FromPathOption,\n NavigateOptions,\n RegisteredRouter,\n UseNavigateResult,\n} from '@tanstack/router-core'\n\nexport function useNavigate<\n TRouter extends AnyRouter = RegisteredRouter,\n TDefaultFrom extends string = string,\n>(_defaultOpts?: {\n from?: FromPathOption<TRouter, TDefaultFrom>\n}): UseNavigateResult<TDefaultFrom> {\n const { navigate } = useRouter()\n\n return ((options: NavigateOptions) => {\n return navigate({ from: _defaultOpts?.from as any, ...options })\n }) as UseNavigateResult<TDefaultFrom>\n}\n\nexport function Navigate<\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: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {\n const { navigate } = useRouter()\n\n Solid.onMount(() => {\n navigate({\n ...props,\n })\n })\n\n return null\n}\n"],"names":["useNavigate","_defaultOpts","navigate","useRouter","options","from","Navigate","props","Solid","onMount"],"mappings":";;AAUO,SAASA,YAGdC,cAEkC;AAC5B,QAAA;AAAA,IAAEC;AAAAA,MAAaC,UAAU;AAE/B,SAAQ,CAACC,YAA6B;AACpC,WAAOF,SAAS;AAAA,MAAEG,MAAMJ,6CAAcI;AAAAA,MAAa,GAAGD;AAAAA,IAAAA,CAAS;AAAA,EACjE;AACF;AAEO,SAASE,SAMdC,OAAuE;AACjE,QAAA;AAAA,IAAEL;AAAAA,MAAaC,UAAU;AAE/BK,QAAMC,QAAQ,MAAM;AACT,aAAA;AAAA,MACP,GAAGF;AAAAA,IAAAA,CACJ;AAAA,EAAA,CACF;AAEM,SAAA;AACT;"}
1
+ {"version":3,"file":"useNavigate.js","sources":["../../src/useNavigate.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport { useMatch } from './useMatch'\nimport type {\n AnyRouter,\n FromPathOption,\n NavigateOptions,\n RegisteredRouter,\n UseNavigateResult,\n} from '@tanstack/router-core'\n\nexport function useNavigate<\n TRouter extends AnyRouter = RegisteredRouter,\n TDefaultFrom extends string = string,\n>(_defaultOpts?: {\n from?: FromPathOption<TRouter, TDefaultFrom>\n}): UseNavigateResult<TDefaultFrom> {\n const { navigate, state } = useRouter()\n\n const matchIndex = useMatch({\n strict: false,\n select: (match) => match.index,\n })\n\n return ((options: NavigateOptions) => {\n return navigate({\n ...options,\n from:\n options.from ??\n _defaultOpts?.from ??\n state.matches[matchIndex()]!.fullPath,\n })\n }) as UseNavigateResult<TDefaultFrom>\n}\n\nexport function Navigate<\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: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {\n const { navigate } = useRouter()\n\n Solid.onMount(() => {\n navigate({\n ...props,\n })\n })\n\n return null\n}\n"],"names":["useNavigate","_defaultOpts","navigate","state","useRouter","matchIndex","useMatch","strict","select","match","index","options","from","matches","fullPath","Navigate","props","Solid","onMount"],"mappings":";;;AAWO,SAASA,YAGdC,cAEkC;AAClC,QAAM;AAAA,IAAEC;AAAAA,IAAUC;AAAAA,EAAAA,IAAUC,UAAAA;AAE5B,QAAMC,aAAaC,SAAS;AAAA,IAC1BC,QAAQ;AAAA,IACRC,QAASC,WAAUA,MAAMC;AAAAA,EAAAA,CAC1B;AAED,SAAQ,CAACC,YAA6B;AACpC,WAAOT,SAAS;AAAA,MACd,GAAGS;AAAAA,MACHC,MACED,QAAQC,QACRX,cAAcW,QACdT,MAAMU,QAAQR,WAAAA,CAAY,EAAGS;AAAAA,IAAAA,CAChC;AAAA,EACH;AACF;AAEO,SAASC,SAMdC,OAAuE;AACvE,QAAM;AAAA,IAAEd;AAAAA,EAAAA,IAAaE,UAAAA;AAErBa,QAAMC,QAAQ,MAAM;AAClBhB,aAAS;AAAA,MACP,GAAGc;AAAAA,IAAAA,CACJ;AAAA,EACH,CAAC;AAED,SAAO;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useParams.js","sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseParams,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n UseParamsResult,\n} from '@tanstack/router-core'\n\nexport interface UseParamsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseParamsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseParamsRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseParamsBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Accessor<UseParamsResult<TRouter, TFrom, true, TSelected>>\n\nexport function useParams<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseParamsOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Accessor<\n ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.params) : match.params\n },\n } as any) as any\n}\n"],"names":["useParams","opts","useMatch","from","strict","shouldThrow","select","match","params"],"mappings":";AA6CO,SAASA,UAOdC,MASA;AACA,SAAOC,SAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IAAAA;AAAAA,EACzD,CACM;AACV;"}
1
+ {"version":3,"file":"useParams.js","sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseParams,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n UseParamsResult,\n} from '@tanstack/router-core'\n\nexport interface UseParamsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseParamsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseParamsRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseParamsBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Accessor<UseParamsResult<TRouter, TFrom, true, TSelected>>\n\nexport function useParams<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseParamsOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Accessor<\n ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.params) : match.params\n },\n } as any) as any\n}\n"],"names":["useParams","opts","useMatch","from","strict","shouldThrow","select","match","params"],"mappings":";AA6CO,SAASA,UAOdC,MASA;AACA,SAAOC,SAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IACzD;AAAA,EAAA,CACM;AACV;"}
@@ -3,7 +3,7 @@ import warning from "tiny-warning";
3
3
  import { getRouterContext } from "./routerContext.js";
4
4
  function useRouter(opts) {
5
5
  const value = Solid.useContext(getRouterContext());
6
- warning(!(((opts == null ? void 0 : opts.warn) ?? true) && !value), "useRouter must be used inside a <RouterProvider> component!");
6
+ warning(!((opts?.warn ?? true) && !value), "useRouter must be used inside a <RouterProvider> component!");
7
7
  return value;
8
8
  }
9
9
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"useRouter.js","sources":["../../src/useRouter.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport warning from 'tiny-warning'\nimport { getRouterContext } from './routerContext'\nimport type { AnyRouter, RegisteredRouter } from '@tanstack/router-core'\n\nexport function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {\n warn?: boolean\n}): TRouter {\n const value = Solid.useContext(getRouterContext() as any)\n warning(\n !((opts?.warn ?? true) && !value),\n 'useRouter must be used inside a <RouterProvider> component!',\n )\n return value as any\n}\n"],"names":["useRouter","opts","value","Solid","useContext","getRouterContext","warning","warn"],"mappings":";;;AAKO,SAASA,UAAwDC,MAE5D;AACV,QAAMC,QAAQC,MAAMC,WAAWC,iBAAAA,CAAyB;AACxDC,UACE,IAAGL,6BAAMM,SAAQ,SAAS,CAACL,QAC3B,6DACF;AACOA,SAAAA;AACT;"}
1
+ {"version":3,"file":"useRouter.js","sources":["../../src/useRouter.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport warning from 'tiny-warning'\nimport { getRouterContext } from './routerContext'\nimport type { AnyRouter, RegisteredRouter } from '@tanstack/router-core'\n\nexport function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {\n warn?: boolean\n}): TRouter {\n const value = Solid.useContext(getRouterContext() as any)\n warning(\n !((opts?.warn ?? true) && !value),\n 'useRouter must be used inside a <RouterProvider> component!',\n )\n return value as any\n}\n"],"names":["useRouter","opts","value","Solid","useContext","getRouterContext","warning","warn"],"mappings":";;;AAKO,SAASA,UAAwDC,MAE5D;AACV,QAAMC,QAAQC,MAAMC,WAAWC,iBAAAA,CAAyB;AACxDC,UACE,GAAGL,MAAMM,QAAQ,SAAS,CAACL,QAC3B,6DACF;AACA,SAAOA;AACT;"}
@@ -2,11 +2,11 @@ import { useStore } from "@tanstack/solid-store";
2
2
  import { useRouter } from "./useRouter.js";
3
3
  function useRouterState(opts) {
4
4
  const contextRouter = useRouter({
5
- warn: (opts == null ? void 0 : opts.router) === void 0
5
+ warn: opts?.router === void 0
6
6
  });
7
- const router = (opts == null ? void 0 : opts.router) || contextRouter;
7
+ const router = opts?.router || contextRouter;
8
8
  return useStore(router.__store, (state) => {
9
- if (opts == null ? void 0 : opts.select) return opts.select(state);
9
+ if (opts?.select) return opts.select(state);
10
10
  return state;
11
11
  });
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useRouterState.js","sources":["../../src/useRouterState.tsx"],"sourcesContent":["import { useStore } from '@tanstack/solid-store'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nexport type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {\n router?: TRouter\n select?: (state: RouterState<TRouter['routeTree']>) => TSelected\n}\n\nexport type UseRouterStateResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouterStateOptions<TRouter, TSelected>,\n): Accessor<UseRouterStateResult<TRouter, TSelected>> {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n const router = opts?.router || contextRouter\n\n return useStore(router.__store, (state) => {\n if (opts?.select) return opts.select(state)\n\n return state\n }) as Accessor<UseRouterStateResult<TRouter, TSelected>>\n}\n"],"names":["useRouterState","opts","contextRouter","useRouter","warn","router","undefined","useStore","__store","state","select"],"mappings":";;AAmBO,SAASA,eAIdC,MACoD;AACpD,QAAMC,gBAAgBC,UAAmB;AAAA,IACvCC,OAAMH,6BAAMI,YAAWC;AAAAA,EAAAA,CACxB;AACKD,QAAAA,UAASJ,6BAAMI,WAAUH;AAExBK,SAAAA,SAASF,OAAOG,SAAUC,CAAU,UAAA;AACzC,QAAIR,6BAAMS,OAAeT,QAAAA,KAAKS,OAAOD,KAAK;AAEnCA,WAAAA;AAAAA,EAAAA,CACR;AACH;"}
1
+ {"version":3,"file":"useRouterState.js","sources":["../../src/useRouterState.tsx"],"sourcesContent":["import { useStore } from '@tanstack/solid-store'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nexport type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {\n router?: TRouter\n select?: (state: RouterState<TRouter['routeTree']>) => TSelected\n}\n\nexport type UseRouterStateResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouterStateOptions<TRouter, TSelected>,\n): Accessor<UseRouterStateResult<TRouter, TSelected>> {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n const router = opts?.router || contextRouter\n\n return useStore(router.__store, (state) => {\n if (opts?.select) return opts.select(state)\n\n return state\n }) as Accessor<UseRouterStateResult<TRouter, TSelected>>\n}\n"],"names":["useRouterState","opts","contextRouter","useRouter","warn","router","undefined","useStore","__store","state","select"],"mappings":";;AAmBO,SAASA,eAIdC,MACoD;AACpD,QAAMC,gBAAgBC,UAAmB;AAAA,IACvCC,MAAMH,MAAMI,WAAWC;AAAAA,EAAAA,CACxB;AACD,QAAMD,SAASJ,MAAMI,UAAUH;AAE/B,SAAOK,SAASF,OAAOG,SAAUC,CAAAA,UAAU;AACzC,QAAIR,MAAMS,OAAQ,QAAOT,KAAKS,OAAOD,KAAK;AAE1C,WAAOA;AAAAA,EACT,CAAC;AACH;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSearch.js","sources":["../../src/useSearch.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseSearch,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n UseSearchResult,\n} from '@tanstack/router-core'\n\nexport interface UseSearchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (state: ResolveUseSearch<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseSearchOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseSearchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseSearchBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Accessor<UseSearchResult<TRouter, TFrom, true, TSelected>>\n\nexport function useSearch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseSearchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Accessor<\n ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.search) : match.search\n },\n }) as any\n}\n"],"names":["useSearch","opts","useMatch","from","strict","shouldThrow","select","match","search"],"mappings":";AA6CO,SAASA,UAOdC,MASA;AACA,SAAOC,SAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IAAAA;AAAAA,EACzD,CACD;AACH;"}
1
+ {"version":3,"file":"useSearch.js","sources":["../../src/useSearch.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseSearch,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n UseSearchResult,\n} from '@tanstack/router-core'\n\nexport interface UseSearchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (state: ResolveUseSearch<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseSearchOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseSearchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseSearchBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Accessor<UseSearchResult<TRouter, TFrom, true, TSelected>>\n\nexport function useSearch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseSearchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Accessor<\n ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.search) : match.search\n },\n }) as any\n}\n"],"names":["useSearch","opts","useMatch","from","strict","shouldThrow","select","match","search"],"mappings":";AA6CO,SAASA,UAOdC,MASA;AACA,SAAOC,SAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IACzD;AAAA,EAAA,CACD;AACH;"}
package/dist/esm/utils.js CHANGED
@@ -28,7 +28,7 @@ function useIntersectionObserver(ref, callback, intersectionObserverOptions = {}
28
28
  }, intersectionObserverOptions);
29
29
  observerRef.observe(r);
30
30
  Solid.onCleanup(() => {
31
- observerRef == null ? void 0 : observerRef.disconnect();
31
+ observerRef?.disconnect();
32
32
  });
33
33
  });
34
34
  return () => observerRef;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import * as Solid from 'solid-js'\n\nexport const useLayoutEffect =\n typeof window !== 'undefined' ? Solid.createRenderEffect : Solid.createEffect\n\nexport const usePrevious = (fn: () => boolean) => {\n return Solid.createMemo(\n (\n prev: { current: boolean | null; previous: boolean | null } = {\n current: null,\n previous: null,\n },\n ) => {\n const current = fn()\n\n if (prev.current !== current) {\n prev.previous = prev.current\n prev.current = current\n }\n\n return prev\n },\n )\n}\n\n/**\n * React hook to wrap `IntersectionObserver`.\n *\n * This hook will create an `IntersectionObserver` and observe the ref passed to it.\n *\n * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.\n *\n * @param ref - The ref to observe\n * @param intersectionObserverOptions - The options to pass to the IntersectionObserver\n * @param options - The options to pass to the hook\n * @param callback - The callback to call when the intersection changes\n * @returns The IntersectionObserver instance\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const ref = React.useRef<HTMLDivElement>(null)\n * useIntersectionObserver(\n * ref,\n * (entry) => { doSomething(entry) },\n * { rootMargin: '10px' },\n * { disabled: false }\n * )\n * return <div ref={ref} />\n * ```\n */\nexport function useIntersectionObserver<T extends Element>(\n ref: Solid.Accessor<T | null>,\n callback: (entry: IntersectionObserverEntry | undefined) => void,\n intersectionObserverOptions: IntersectionObserverInit = {},\n options: { disabled?: boolean } = {},\n): Solid.Accessor<IntersectionObserver | null> {\n const isIntersectionObserverAvailable =\n typeof IntersectionObserver === 'function'\n let observerRef: IntersectionObserver | null = null\n\n Solid.createEffect(() => {\n const r = ref()\n if (!r || !isIntersectionObserverAvailable || options.disabled) {\n return\n }\n\n observerRef = new IntersectionObserver(([entry]) => {\n callback(entry)\n }, intersectionObserverOptions)\n\n observerRef.observe(r)\n\n Solid.onCleanup(() => {\n observerRef?.disconnect()\n })\n })\n\n return () => observerRef\n}\n"],"names":[],"mappings":";AAEO,MAAM,kBACX,OAAO,WAAW,cAAc,MAAM,qBAAqB,MAAM;AAEtD,MAAA,cAAc,CAAC,OAAsB;AAChD,SAAO,MAAM;AAAA,IACX,CACE,OAA8D;AAAA,MAC5D,SAAS;AAAA,MACT,UAAU;AAAA,IAAA,MAET;AACH,YAAM,UAAU,GAAG;AAEf,UAAA,KAAK,YAAY,SAAS;AAC5B,aAAK,WAAW,KAAK;AACrB,aAAK,UAAU;AAAA,MAAA;AAGV,aAAA;AAAA,IAAA;AAAA,EAEX;AACF;AA2BgB,SAAA,wBACd,KACA,UACA,8BAAwD,CACxD,GAAA,UAAkC,IACW;AACvC,QAAA,kCACJ,OAAO,yBAAyB;AAClC,MAAI,cAA2C;AAE/C,QAAM,aAAa,MAAM;AACvB,UAAM,IAAI,IAAI;AACd,QAAI,CAAC,KAAK,CAAC,mCAAmC,QAAQ,UAAU;AAC9D;AAAA,IAAA;AAGF,kBAAc,IAAI,qBAAqB,CAAC,CAAC,KAAK,MAAM;AAClD,eAAS,KAAK;AAAA,OACb,2BAA2B;AAE9B,gBAAY,QAAQ,CAAC;AAErB,UAAM,UAAU,MAAM;AACpB,iDAAa;AAAA,IAAW,CACzB;AAAA,EAAA,CACF;AAED,SAAO,MAAM;AACf;"}
1
+ {"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import * as Solid from 'solid-js'\n\nexport const useLayoutEffect =\n typeof window !== 'undefined' ? Solid.createRenderEffect : Solid.createEffect\n\nexport const usePrevious = (fn: () => boolean) => {\n return Solid.createMemo(\n (\n prev: { current: boolean | null; previous: boolean | null } = {\n current: null,\n previous: null,\n },\n ) => {\n const current = fn()\n\n if (prev.current !== current) {\n prev.previous = prev.current\n prev.current = current\n }\n\n return prev\n },\n )\n}\n\n/**\n * React hook to wrap `IntersectionObserver`.\n *\n * This hook will create an `IntersectionObserver` and observe the ref passed to it.\n *\n * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.\n *\n * @param ref - The ref to observe\n * @param intersectionObserverOptions - The options to pass to the IntersectionObserver\n * @param options - The options to pass to the hook\n * @param callback - The callback to call when the intersection changes\n * @returns The IntersectionObserver instance\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const ref = React.useRef<HTMLDivElement>(null)\n * useIntersectionObserver(\n * ref,\n * (entry) => { doSomething(entry) },\n * { rootMargin: '10px' },\n * { disabled: false }\n * )\n * return <div ref={ref} />\n * ```\n */\nexport function useIntersectionObserver<T extends Element>(\n ref: Solid.Accessor<T | null>,\n callback: (entry: IntersectionObserverEntry | undefined) => void,\n intersectionObserverOptions: IntersectionObserverInit = {},\n options: { disabled?: boolean } = {},\n): Solid.Accessor<IntersectionObserver | null> {\n const isIntersectionObserverAvailable =\n typeof IntersectionObserver === 'function'\n let observerRef: IntersectionObserver | null = null\n\n Solid.createEffect(() => {\n const r = ref()\n if (!r || !isIntersectionObserverAvailable || options.disabled) {\n return\n }\n\n observerRef = new IntersectionObserver(([entry]) => {\n callback(entry)\n }, intersectionObserverOptions)\n\n observerRef.observe(r)\n\n Solid.onCleanup(() => {\n observerRef?.disconnect()\n })\n })\n\n return () => observerRef\n}\n"],"names":[],"mappings":";AAEO,MAAM,kBACX,OAAO,WAAW,cAAc,MAAM,qBAAqB,MAAM;AAE5D,MAAM,cAAc,CAAC,OAAsB;AAChD,SAAO,MAAM;AAAA,IACX,CACE,OAA8D;AAAA,MAC5D,SAAS;AAAA,MACT,UAAU;AAAA,IAAA,MAET;AACH,YAAM,UAAU,GAAA;AAEhB,UAAI,KAAK,YAAY,SAAS;AAC5B,aAAK,WAAW,KAAK;AACrB,aAAK,UAAU;AAAA,MACjB;AAEA,aAAO;AAAA,IACT;AAAA,EAAA;AAEJ;AA2BO,SAAS,wBACd,KACA,UACA,8BAAwD,CAAA,GACxD,UAAkC,IACW;AAC7C,QAAM,kCACJ,OAAO,yBAAyB;AAClC,MAAI,cAA2C;AAE/C,QAAM,aAAa,MAAM;AACvB,UAAM,IAAI,IAAA;AACV,QAAI,CAAC,KAAK,CAAC,mCAAmC,QAAQ,UAAU;AAC9D;AAAA,IACF;AAEA,kBAAc,IAAI,qBAAqB,CAAC,CAAC,KAAK,MAAM;AAClD,eAAS,KAAK;AAAA,IAChB,GAAG,2BAA2B;AAE9B,gBAAY,QAAQ,CAAC;AAErB,UAAM,UAAU,MAAM;AACpB,mBAAa,WAAA;AAAA,IACf,CAAC;AAAA,EACH,CAAC;AAED,SAAO,MAAM;AACf;"}
@@ -1,2 +1,3 @@
1
1
  import type { RouterManagedTag } from '@tanstack/router-core';
2
- export declare function Asset({ tag, attrs, children }: RouterManagedTag): any;
2
+ import type { JSX } from 'solid-js';
3
+ export declare function Asset({ tag, attrs, children, }: RouterManagedTag): JSX.Element | null;
@@ -1,5 +1,6 @@
1
1
  import { Meta, Style, Title } from '@solidjs/meta';
2
- export function Asset({ tag, attrs, children }) {
2
+ import { onCleanup, onMount } from 'solid-js';
3
+ export function Asset({ tag, attrs, children, }) {
3
4
  switch (tag) {
4
5
  case 'title':
5
6
  return <Title {...attrs}>{children}</Title>;
@@ -10,14 +11,51 @@ export function Asset({ tag, attrs, children }) {
10
11
  case 'style':
11
12
  return <Style {...attrs} innerHTML={children}/>;
12
13
  case 'script':
13
- if (attrs && attrs.src) {
14
- return <script {...attrs}/>;
15
- }
16
- if (typeof children === 'string')
17
- return <script {...attrs} innerHTML={children}/>;
18
- return null;
14
+ return <Script attrs={attrs}>{children}</Script>;
19
15
  default:
20
16
  return null;
21
17
  }
22
18
  }
19
+ function Script({ attrs, children, }) {
20
+ onMount(() => {
21
+ if (attrs?.src) {
22
+ const script = document.createElement('script');
23
+ for (const [key, value] of Object.entries(attrs)) {
24
+ if (value !== undefined && value !== false) {
25
+ script.setAttribute(key, typeof value === 'boolean' ? '' : String(value));
26
+ }
27
+ }
28
+ document.head.appendChild(script);
29
+ onCleanup(() => {
30
+ if (script.parentNode) {
31
+ script.parentNode.removeChild(script);
32
+ }
33
+ });
34
+ }
35
+ else if (typeof children === 'string') {
36
+ const script = document.createElement('script');
37
+ script.textContent = children;
38
+ if (attrs) {
39
+ for (const [key, value] of Object.entries(attrs)) {
40
+ if (value !== undefined && value !== false) {
41
+ script.setAttribute(key, typeof value === 'boolean' ? '' : String(value));
42
+ }
43
+ }
44
+ }
45
+ document.head.appendChild(script);
46
+ onCleanup(() => {
47
+ if (script.parentNode) {
48
+ script.parentNode.removeChild(script);
49
+ }
50
+ });
51
+ }
52
+ });
53
+ if (attrs?.src && typeof attrs.src === 'string') {
54
+ return <script {...attrs}/>;
55
+ }
56
+ if (typeof children === 'string') {
57
+ return <script {...attrs} innerHTML={children}/>;
58
+ }
59
+ return null;
60
+ }
23
61
  //# sourceMappingURL=Asset.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAGlD,MAAM,UAAU,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAoB;IAC9D,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;QAC7C,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;QAC5B,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;QAC5B,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAG,CAAA;QAClD,KAAK,QAAQ;YACX,IAAK,KAAa,IAAK,KAAa,CAAC,GAAG,EAAE,CAAC;gBACzC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;YAC9B,CAAC;YACD,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAC9B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAG,CAAA;YACnD,OAAO,IAAI,CAAA;QACb;YACE,OAAO,IAAI,CAAA;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"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"}
@@ -27,23 +27,3 @@ export interface ClientOnlyProps {
27
27
  * ```
28
28
  */
29
29
  export declare function ClientOnly(props: ClientOnlyProps): Solid.JSX.Element;
30
- /**
31
- * Return a boolean indicating if the JS has been hydrated already.
32
- * When doing Server-Side Rendering, the result will always be false.
33
- * When doing Client-Side Rendering, the result will always be false on the
34
- * first render and true from then on. Even if a new component renders it will
35
- * always start with true.
36
- *
37
- * @example
38
- * ```tsx
39
- * // Disable a button that needs JS to work.
40
- * let hydrated = useHydrated()
41
- * return (
42
- * <button type="button" disabled={!hydrated()} onClick={doSomethingCustom}>
43
- * Click me
44
- * </button>
45
- * )
46
- * ```
47
- * @returns A signal accessor function that returns true if the JS has been hydrated already, false otherwise.
48
- */
49
- export declare function useHydrated(): Solid.Accessor<boolean>;
@@ -18,34 +18,8 @@ import { isServer } from 'solid-js/web';
18
18
  * ```
19
19
  */
20
20
  export function ClientOnly(props) {
21
- return useHydrated() ? <>{props.children}</> : <>{props.fallback}</>;
22
- }
23
- /**
24
- * Return a boolean indicating if the JS has been hydrated already.
25
- * When doing Server-Side Rendering, the result will always be false.
26
- * When doing Client-Side Rendering, the result will always be false on the
27
- * first render and true from then on. Even if a new component renders it will
28
- * always start with true.
29
- *
30
- * @example
31
- * ```tsx
32
- * // Disable a button that needs JS to work.
33
- * let hydrated = useHydrated()
34
- * return (
35
- * <button type="button" disabled={!hydrated()} onClick={doSomethingCustom}>
36
- * Click me
37
- * </button>
38
- * )
39
- * ```
40
- * @returns A signal accessor function that returns true if the JS has been hydrated already, false otherwise.
41
- */
42
- export function useHydrated() {
43
- const [hydrated, setHydrated] = Solid.createSignal(!isServer);
44
- if (!isServer) {
45
- Solid.createEffect(() => {
46
- setHydrated(true);
47
- });
48
- }
49
- return hydrated;
21
+ return (<Solid.Show when={!isServer} fallback={props.fallback}>
22
+ <>{props.children}</>
23
+ </Solid.Show>);
50
24
  }
51
25
  //# sourceMappingURL=ClientOnly.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClientOnly.jsx","sourceRoot":"","sources":["../../src/ClientOnly.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAavC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAA;AACtE,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAA;IAE7D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YACtB,WAAW,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC"}
1
+ {"version":3,"file":"ClientOnly.jsx","sourceRoot":"","sources":["../../src/ClientOnly.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAavC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,OAAO,CACL,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CACpD;MAAA,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GACpB;IAAA,EAAE,KAAK,CAAC,IAAI,CAAC,CACd,CAAA;AACH,CAAC"}
@@ -98,6 +98,18 @@ export const useTags = () => {
98
98
  return preloadMeta;
99
99
  },
100
100
  });
101
+ const styles = useRouterState({
102
+ select: (state) => state.matches
103
+ .map((match) => match.styles)
104
+ .flat(1)
105
+ .filter(Boolean).map(({ children, ...style }) => ({
106
+ tag: 'style',
107
+ attrs: {
108
+ ...style,
109
+ },
110
+ children,
111
+ })),
112
+ });
101
113
  const headScripts = useRouterState({
102
114
  select: (state) => state.matches
103
115
  .map((match) => match.headScripts)
@@ -114,6 +126,7 @@ export const useTags = () => {
114
126
  ...meta(),
115
127
  ...preloadMeta(),
116
128
  ...links(),
129
+ ...styles(),
117
130
  ...headScripts(),
118
131
  ], (d) => {
119
132
  return JSON.stringify(d);
@@ -1 +1 @@
1
- {"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"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"}
@@ -13,13 +13,14 @@ import { renderRouteNotFound } from './renderRouteNotFound';
13
13
  import { ScrollRestoration } from './scroll-restoration';
14
14
  export const Match = (props) => {
15
15
  const router = useRouter();
16
- const routeId = useRouterState({
16
+ const matchState = useRouterState({
17
17
  select: (s) => {
18
- return s.matches.find((d) => d.id === props.matchId)?.routeId;
18
+ const match = s.matches.find((d) => d.id === props.matchId);
19
+ invariant(match, `Could not find match for matchId "${props.matchId}". Please file an issue!`);
20
+ return pick(match, ['routeId', 'ssr', '_displayPending']);
19
21
  },
20
22
  });
21
- invariant(routeId, `Could not find routeId for matchId "${props.matchId}". Please file an issue!`);
22
- const route = () => router.routesById[routeId()];
23
+ const route = () => router.routesById[matchState().routeId];
23
24
  const PendingComponent = () => route().options.pendingComponent ?? router.options.defaultPendingComponent;
24
25
  const routeErrorComponent = () => route().options.errorComponent ?? router.options.defaultErrorComponent;
25
26
  const routeOnCatch = () => route().options.onCatch ?? router.options.defaultOnCatch;
@@ -28,12 +29,16 @@ export const Match = (props) => {
28
29
  (route().options.notFoundComponent ??
29
30
  router.options.notFoundRoute?.options.component)
30
31
  : route().options.notFoundComponent;
32
+ const resolvedNoSsr = matchState().ssr === false || matchState().ssr === 'data-only';
31
33
  const ResolvedSuspenseBoundary = () =>
32
34
  // If we're on the root route, allow forcefully wrapping in suspense
33
- (!route().isRoot || route().options.wrapInSuspense) &&
35
+ (!route().isRoot ||
36
+ route().options.wrapInSuspense ||
37
+ resolvedNoSsr ||
38
+ matchState()._displayPending) &&
34
39
  (route().options.wrapInSuspense ??
35
40
  PendingComponent() ??
36
- route().options.errorComponent?.preload)
41
+ (route().options.errorComponent?.preload || resolvedNoSsr))
37
42
  ? Solid.Suspense
38
43
  : SafeFragment;
39
44
  const ResolvedCatchBoundary = () => routeErrorComponent() ? CatchBoundary : SafeFragment;
@@ -47,7 +52,10 @@ export const Match = (props) => {
47
52
  return s.matches[index - 1]?.routeId;
48
53
  },
49
54
  });
50
- return (<>
55
+ const ShellComponent = route().isRoot
56
+ ? (route().options.shellComponent ?? SafeFragment)
57
+ : SafeFragment;
58
+ return (<ShellComponent>
51
59
  <matchContext.Provider value={() => props.matchId}>
52
60
  <Dynamic component={ResolvedSuspenseBoundary()} fallback={<Dynamic component={PendingComponent()}/>}>
53
61
  <Dynamic component={ResolvedCatchBoundary()} getResetKey={() => resetKey()} errorComponent={routeErrorComponent() || ErrorComponent} onCatch={(error) => {
@@ -61,12 +69,21 @@ export const Match = (props) => {
61
69
  // If the current not found handler doesn't exist or it has a
62
70
  // route ID which doesn't match the current route, rethrow the error
63
71
  if (!routeNotFoundComponent() ||
64
- (error.routeId && error.routeId !== routeId) ||
72
+ (error.routeId && error.routeId !== matchState().routeId) ||
65
73
  (!error.routeId && !route().isRoot))
66
74
  throw error;
67
75
  return (<Dynamic component={routeNotFoundComponent()} {...error}/>);
68
76
  }}>
69
- <MatchInner matchId={props.matchId}/>
77
+ <Solid.Switch>
78
+ <Solid.Match when={resolvedNoSsr}>
79
+ <Solid.Show when={!router.isServer} fallback={<Dynamic component={PendingComponent()}/>}>
80
+ <MatchInner matchId={props.matchId}/>
81
+ </Solid.Show>
82
+ </Solid.Match>
83
+ <Solid.Match when={!resolvedNoSsr}>
84
+ <MatchInner matchId={props.matchId}/>
85
+ </Solid.Match>
86
+ </Solid.Switch>
70
87
  </Dynamic>
71
88
  </Dynamic>
72
89
  </Dynamic>
@@ -76,12 +93,12 @@ export const Match = (props) => {
76
93
  <OnRendered />
77
94
  <ScrollRestoration />
78
95
  </>) : null}
79
- </>);
96
+ </ShellComponent>);
80
97
  };
81
98
  // On Rendered can't happen above the root layout because it actually
82
99
  // renders a dummy dom element to track the rendered state of the app.
83
100
  // We render a script tag with a key that changes based on the current
84
- // location state.key. Also, because it's below the root layout, it
101
+ // location state.__TSR_key. Also, because it's below the root layout, it
85
102
  // allows us to fire onRendered events even after a hydration mismatch
86
103
  // error that occurred above the root layout (like bad head/link tags,
87
104
  // which is common).
@@ -89,7 +106,7 @@ function OnRendered() {
89
106
  const router = useRouter();
90
107
  const location = useRouterState({
91
108
  select: (s) => {
92
- return s.resolvedLocation?.state.key;
109
+ return s.resolvedLocation?.state.__TSR_key;
93
110
  },
94
111
  });
95
112
  Solid.createEffect(Solid.on([location], () => {
@@ -102,7 +119,6 @@ function OnRendered() {
102
119
  }
103
120
  export const MatchInner = (props) => {
104
121
  const router = useRouter();
105
- // { match, key, routeId } =
106
122
  const matchState = useRouterState({
107
123
  select: (s) => {
108
124
  const matchIndex = s.matches.findIndex((d) => d.id === props.matchId);
@@ -120,64 +136,38 @@ export const MatchInner = (props) => {
120
136
  return {
121
137
  key,
122
138
  routeId,
123
- match: pick(match, ['id', 'status', 'error']),
139
+ match: pick(match, [
140
+ 'id',
141
+ 'status',
142
+ 'error',
143
+ '_forcePending',
144
+ '_displayPending',
145
+ ]),
124
146
  };
125
147
  },
126
148
  });
127
149
  const route = () => router.routesById[matchState().routeId];
128
- // function useChangedDiff(value: any) {
129
- // const ref = Solid.useRef(value)
130
- // const changed = ref.current !== value
131
- // if (changed) {
132
- // console.log(
133
- // 'Changed:',
134
- // value,
135
- // Object.fromEntries(
136
- // Object.entries(value).filter(
137
- // ([key, val]) => val !== ref.current[key],
138
- // ),
139
- // ),
140
- // )
141
- // }
142
- // ref.current = value
143
- // }
144
- // useChangedDiff(match)
145
150
  const match = () => matchState().match;
146
151
  const out = () => {
147
152
  const Comp = route().options.component ?? router.options.defaultComponent;
148
153
  if (Comp) {
149
- return <Comp />;
154
+ return (<Solid.Show when={matchState().match.id} keyed>
155
+ <Comp />
156
+ </Solid.Show>);
150
157
  }
151
158
  return <Outlet />;
152
159
  };
153
160
  return (<Solid.Switch>
154
- <Solid.Match when={match().status === 'notFound'}>
161
+ <Solid.Match when={match()._displayPending}>
155
162
  {(_) => {
156
- invariant(isNotFound(match().error), 'Expected a notFound error');
157
- return renderRouteNotFound(router, route(), match().error);
158
- }}
159
- </Solid.Match>
160
- <Solid.Match when={match().status === 'redirected'}>
161
- {(_) => {
162
- invariant(isRedirect(match().error), 'Expected a redirect error');
163
- const [loaderResult] = Solid.createResource(async () => {
164
- await new Promise((r) => setTimeout(r, 0));
165
- return router.getMatch(match().id)?.loadPromise;
166
- });
167
- return <>{loaderResult()}</>;
163
+ const [displayPendingResult] = Solid.createResource(() => router.getMatch(match().id)?.displayPendingPromise);
164
+ return <>{displayPendingResult()}</>;
168
165
  }}
169
166
  </Solid.Match>
170
- <Solid.Match when={match().status === 'error'}>
167
+ <Solid.Match when={match()._forcePending}>
171
168
  {(_) => {
172
- if (router.isServer) {
173
- const RouteErrorComponent = (route().options.errorComponent ??
174
- router.options.defaultErrorComponent) ||
175
- ErrorComponent;
176
- return (<RouteErrorComponent error={match().error} info={{
177
- componentStack: '',
178
- }}/>);
179
- }
180
- throw match().error;
169
+ const [minPendingResult] = Solid.createResource(() => router.getMatch(match().id)?.minPendingPromise);
170
+ return <>{minPendingResult()}</>;
181
171
  }}
182
172
  </Solid.Match>
183
173
  <Solid.Match when={match().status === 'pending'}>
@@ -210,6 +200,35 @@ export const MatchInner = (props) => {
210
200
  return <>{loaderResult()}</>;
211
201
  }}
212
202
  </Solid.Match>
203
+ <Solid.Match when={match().status === 'notFound'}>
204
+ {(_) => {
205
+ invariant(isNotFound(match().error), 'Expected a notFound error');
206
+ return renderRouteNotFound(router, route(), match().error);
207
+ }}
208
+ </Solid.Match>
209
+ <Solid.Match when={match().status === 'redirected'}>
210
+ {(_) => {
211
+ invariant(isRedirect(match().error), 'Expected a redirect error');
212
+ const [loaderResult] = Solid.createResource(async () => {
213
+ await new Promise((r) => setTimeout(r, 0));
214
+ return router.getMatch(match().id)?.loadPromise;
215
+ });
216
+ return <>{loaderResult()}</>;
217
+ }}
218
+ </Solid.Match>
219
+ <Solid.Match when={match().status === 'error'}>
220
+ {(_) => {
221
+ if (router.isServer) {
222
+ const RouteErrorComponent = (route().options.errorComponent ??
223
+ router.options.defaultErrorComponent) ||
224
+ ErrorComponent;
225
+ return (<RouteErrorComponent error={match().error} info={{
226
+ componentStack: '',
227
+ }}/>);
228
+ }
229
+ throw match().error;
230
+ }}
231
+ </Solid.Match>
213
232
  <Solid.Match when={match().status === 'success'}>{out()}</Solid.Match>
214
233
  </Solid.Switch>);
215
234
  };
@@ -237,12 +256,6 @@ export const Outlet = () => {
237
256
  },
238
257
  });
239
258
  return (<Solid.Switch>
240
- <Solid.Match when={router.isShell}>
241
- <Solid.Suspense fallback={<Dynamic component={router.options.defaultPendingComponent}/>}>
242
- <ErrorComponent error={new Error('ShellBoundaryError')}/>
243
- </Solid.Suspense>
244
- </Solid.Match>
245
-
246
259
  <Solid.Match when={parentGlobalNotFound()}>
247
260
  {renderRouteNotFound(router, route(), undefined)}
248
261
  </Solid.Match>