@tanstack/solid-router 1.20.3-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/cjs/Asset.cjs +49 -0
  4. package/dist/cjs/Asset.cjs.map +1 -0
  5. package/dist/cjs/Asset.d.cts +2 -0
  6. package/dist/cjs/CatchBoundary.cjs +92 -0
  7. package/dist/cjs/CatchBoundary.cjs.map +1 -0
  8. package/dist/cjs/CatchBoundary.d.cts +11 -0
  9. package/dist/cjs/ClientOnly.cjs +36 -0
  10. package/dist/cjs/ClientOnly.cjs.map +1 -0
  11. package/dist/cjs/ClientOnly.d.cts +49 -0
  12. package/dist/cjs/HeadContent.cjs +146 -0
  13. package/dist/cjs/HeadContent.cjs.map +1 -0
  14. package/dist/cjs/HeadContent.d.cts +8 -0
  15. package/dist/cjs/Match.cjs +339 -0
  16. package/dist/cjs/Match.cjs.map +1 -0
  17. package/dist/cjs/Match.d.cts +8 -0
  18. package/dist/cjs/Matches.cjs +151 -0
  19. package/dist/cjs/Matches.cjs.map +1 -0
  20. package/dist/cjs/Matches.d.cts +24 -0
  21. package/dist/cjs/RouterProvider.cjs +45 -0
  22. package/dist/cjs/RouterProvider.cjs.map +1 -0
  23. package/dist/cjs/RouterProvider.d.cts +10 -0
  24. package/dist/cjs/SafeFragment.cjs +8 -0
  25. package/dist/cjs/SafeFragment.cjs.map +1 -0
  26. package/dist/cjs/SafeFragment.d.cts +1 -0
  27. package/dist/cjs/ScriptOnce.cjs +23 -0
  28. package/dist/cjs/ScriptOnce.cjs.map +1 -0
  29. package/dist/cjs/ScriptOnce.d.cts +5 -0
  30. package/dist/cjs/Scripts.cjs +48 -0
  31. package/dist/cjs/Scripts.cjs.map +1 -0
  32. package/dist/cjs/Scripts.d.cts +1 -0
  33. package/dist/cjs/ScrollRestoration.cjs +37 -0
  34. package/dist/cjs/ScrollRestoration.cjs.map +1 -0
  35. package/dist/cjs/ScrollRestoration.d.cts +14 -0
  36. package/dist/cjs/Transitioner.cjs +124 -0
  37. package/dist/cjs/Transitioner.cjs.map +1 -0
  38. package/dist/cjs/Transitioner.d.cts +1 -0
  39. package/dist/cjs/awaited.cjs +49 -0
  40. package/dist/cjs/awaited.cjs.map +1 -0
  41. package/dist/cjs/awaited.d.cts +11 -0
  42. package/dist/cjs/fileRoute.cjs +103 -0
  43. package/dist/cjs/fileRoute.cjs.map +1 -0
  44. package/dist/cjs/fileRoute.d.cts +54 -0
  45. package/dist/cjs/history.d.cts +8 -0
  46. package/dist/cjs/index.cjs +289 -0
  47. package/dist/cjs/index.cjs.map +1 -0
  48. package/dist/cjs/index.d.cts +52 -0
  49. package/dist/cjs/lazyRouteComponent.cjs +73 -0
  50. package/dist/cjs/lazyRouteComponent.cjs.map +1 -0
  51. package/dist/cjs/lazyRouteComponent.d.cts +2 -0
  52. package/dist/cjs/link.cjs +278 -0
  53. package/dist/cjs/link.cjs.map +1 -0
  54. package/dist/cjs/link.d.cts +44 -0
  55. package/dist/cjs/matchContext.cjs +25 -0
  56. package/dist/cjs/matchContext.cjs.map +1 -0
  57. package/dist/cjs/matchContext.d.cts +3 -0
  58. package/dist/cjs/not-found.cjs +42 -0
  59. package/dist/cjs/not-found.cjs.map +1 -0
  60. package/dist/cjs/not-found.d.cts +8 -0
  61. package/dist/cjs/renderRouteNotFound.cjs +23 -0
  62. package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
  63. package/dist/cjs/renderRouteNotFound.d.cts +2 -0
  64. package/dist/cjs/route.cjs +236 -0
  65. package/dist/cjs/route.cjs.map +1 -0
  66. package/dist/cjs/route.d.cts +95 -0
  67. package/dist/cjs/router.cjs +22 -0
  68. package/dist/cjs/router.cjs.map +1 -0
  69. package/dist/cjs/router.d.cts +69 -0
  70. package/dist/cjs/routerContext.cjs +33 -0
  71. package/dist/cjs/routerContext.cjs.map +1 -0
  72. package/dist/cjs/routerContext.d.cts +8 -0
  73. package/dist/cjs/scroll-restoration.cjs +23 -0
  74. package/dist/cjs/scroll-restoration.cjs.map +1 -0
  75. package/dist/cjs/scroll-restoration.d.cts +1 -0
  76. package/dist/cjs/typePrimitives.d.cts +10 -0
  77. package/dist/cjs/useBlocker.cjs +165 -0
  78. package/dist/cjs/useBlocker.cjs.map +1 -0
  79. package/dist/cjs/useBlocker.d.cts +67 -0
  80. package/dist/cjs/useCanGoBack.cjs +8 -0
  81. package/dist/cjs/useCanGoBack.cjs.map +1 -0
  82. package/dist/cjs/useCanGoBack.d.cts +1 -0
  83. package/dist/cjs/useLoaderData.cjs +14 -0
  84. package/dist/cjs/useLoaderData.cjs.map +1 -0
  85. package/dist/cjs/useLoaderData.d.cts +8 -0
  86. package/dist/cjs/useLoaderDeps.cjs +17 -0
  87. package/dist/cjs/useLoaderDeps.cjs.map +1 -0
  88. package/dist/cjs/useLoaderDeps.d.cts +7 -0
  89. package/dist/cjs/useLocation.cjs +10 -0
  90. package/dist/cjs/useLocation.cjs.map +1 -0
  91. package/dist/cjs/useLocation.d.cts +7 -0
  92. package/dist/cjs/useMatch.cjs +39 -0
  93. package/dist/cjs/useMatch.cjs.map +1 -0
  94. package/dist/cjs/useMatch.d.cts +10 -0
  95. package/dist/cjs/useNavigate.cjs +46 -0
  96. package/dist/cjs/useNavigate.cjs.map +1 -0
  97. package/dist/cjs/useNavigate.d.cts +5 -0
  98. package/dist/cjs/useParams.cjs +15 -0
  99. package/dist/cjs/useParams.cjs.map +1 -0
  100. package/dist/cjs/useParams.d.cts +9 -0
  101. package/dist/cjs/useRouteContext.cjs +11 -0
  102. package/dist/cjs/useRouteContext.cjs.map +1 -0
  103. package/dist/cjs/useRouteContext.d.cts +4 -0
  104. package/dist/cjs/useRouter.cjs +29 -0
  105. package/dist/cjs/useRouter.cjs.map +1 -0
  106. package/dist/cjs/useRouter.d.cts +4 -0
  107. package/dist/cjs/useRouterState.cjs +16 -0
  108. package/dist/cjs/useRouterState.cjs.map +1 -0
  109. package/dist/cjs/useRouterState.d.cts +8 -0
  110. package/dist/cjs/useSearch.cjs +15 -0
  111. package/dist/cjs/useSearch.cjs.map +1 -0
  112. package/dist/cjs/useSearch.d.cts +9 -0
  113. package/dist/cjs/utils.cjs +58 -0
  114. package/dist/cjs/utils.cjs.map +1 -0
  115. package/dist/cjs/utils.d.cts +34 -0
  116. package/dist/esm/Asset.d.ts +2 -0
  117. package/dist/esm/Asset.js +49 -0
  118. package/dist/esm/Asset.js.map +1 -0
  119. package/dist/esm/CatchBoundary.d.ts +11 -0
  120. package/dist/esm/CatchBoundary.js +75 -0
  121. package/dist/esm/CatchBoundary.js.map +1 -0
  122. package/dist/esm/ClientOnly.d.ts +49 -0
  123. package/dist/esm/ClientOnly.js +19 -0
  124. package/dist/esm/ClientOnly.js.map +1 -0
  125. package/dist/esm/HeadContent.d.ts +8 -0
  126. package/dist/esm/HeadContent.js +129 -0
  127. package/dist/esm/HeadContent.js.map +1 -0
  128. package/dist/esm/Match.d.ts +8 -0
  129. package/dist/esm/Match.js +322 -0
  130. package/dist/esm/Match.js.map +1 -0
  131. package/dist/esm/Matches.d.ts +24 -0
  132. package/dist/esm/Matches.js +134 -0
  133. package/dist/esm/Matches.js.map +1 -0
  134. package/dist/esm/RouterProvider.d.ts +10 -0
  135. package/dist/esm/RouterProvider.js +45 -0
  136. package/dist/esm/RouterProvider.js.map +1 -0
  137. package/dist/esm/SafeFragment.d.ts +1 -0
  138. package/dist/esm/SafeFragment.js +8 -0
  139. package/dist/esm/SafeFragment.js.map +1 -0
  140. package/dist/esm/ScriptOnce.d.ts +5 -0
  141. package/dist/esm/ScriptOnce.js +23 -0
  142. package/dist/esm/ScriptOnce.js.map +1 -0
  143. package/dist/esm/Scripts.d.ts +1 -0
  144. package/dist/esm/Scripts.js +48 -0
  145. package/dist/esm/Scripts.js.map +1 -0
  146. package/dist/esm/ScrollRestoration.d.ts +14 -0
  147. package/dist/esm/ScrollRestoration.js +37 -0
  148. package/dist/esm/ScrollRestoration.js.map +1 -0
  149. package/dist/esm/Transitioner.d.ts +1 -0
  150. package/dist/esm/Transitioner.js +107 -0
  151. package/dist/esm/Transitioner.js.map +1 -0
  152. package/dist/esm/awaited.d.ts +11 -0
  153. package/dist/esm/awaited.js +32 -0
  154. package/dist/esm/awaited.js.map +1 -0
  155. package/dist/esm/fileRoute.d.ts +54 -0
  156. package/dist/esm/fileRoute.js +103 -0
  157. package/dist/esm/fileRoute.js.map +1 -0
  158. package/dist/esm/history.d.ts +8 -0
  159. package/dist/esm/index.d.ts +52 -0
  160. package/dist/esm/index.js +151 -0
  161. package/dist/esm/index.js.map +1 -0
  162. package/dist/esm/lazyRouteComponent.d.ts +2 -0
  163. package/dist/esm/lazyRouteComponent.js +73 -0
  164. package/dist/esm/lazyRouteComponent.js.map +1 -0
  165. package/dist/esm/link.d.ts +44 -0
  166. package/dist/esm/link.js +261 -0
  167. package/dist/esm/link.js.map +1 -0
  168. package/dist/esm/matchContext.d.ts +3 -0
  169. package/dist/esm/matchContext.js +8 -0
  170. package/dist/esm/matchContext.js.map +1 -0
  171. package/dist/esm/not-found.d.ts +8 -0
  172. package/dist/esm/not-found.js +42 -0
  173. package/dist/esm/not-found.js.map +1 -0
  174. package/dist/esm/renderRouteNotFound.d.ts +2 -0
  175. package/dist/esm/renderRouteNotFound.js +23 -0
  176. package/dist/esm/renderRouteNotFound.js.map +1 -0
  177. package/dist/esm/route.d.ts +95 -0
  178. package/dist/esm/route.js +236 -0
  179. package/dist/esm/route.js.map +1 -0
  180. package/dist/esm/router.d.ts +69 -0
  181. package/dist/esm/router.js +22 -0
  182. package/dist/esm/router.js.map +1 -0
  183. package/dist/esm/routerContext.d.ts +8 -0
  184. package/dist/esm/routerContext.js +16 -0
  185. package/dist/esm/routerContext.js.map +1 -0
  186. package/dist/esm/scroll-restoration.d.ts +1 -0
  187. package/dist/esm/scroll-restoration.js +23 -0
  188. package/dist/esm/scroll-restoration.js.map +1 -0
  189. package/dist/esm/typePrimitives.d.ts +10 -0
  190. package/dist/esm/useBlocker.d.ts +67 -0
  191. package/dist/esm/useBlocker.js +148 -0
  192. package/dist/esm/useBlocker.js.map +1 -0
  193. package/dist/esm/useCanGoBack.d.ts +1 -0
  194. package/dist/esm/useCanGoBack.js +8 -0
  195. package/dist/esm/useCanGoBack.js.map +1 -0
  196. package/dist/esm/useLoaderData.d.ts +8 -0
  197. package/dist/esm/useLoaderData.js +14 -0
  198. package/dist/esm/useLoaderData.js.map +1 -0
  199. package/dist/esm/useLoaderDeps.d.ts +7 -0
  200. package/dist/esm/useLoaderDeps.js +17 -0
  201. package/dist/esm/useLoaderDeps.js.map +1 -0
  202. package/dist/esm/useLocation.d.ts +7 -0
  203. package/dist/esm/useLocation.js +10 -0
  204. package/dist/esm/useLocation.js.map +1 -0
  205. package/dist/esm/useMatch.d.ts +10 -0
  206. package/dist/esm/useMatch.js +22 -0
  207. package/dist/esm/useMatch.js.map +1 -0
  208. package/dist/esm/useNavigate.d.ts +5 -0
  209. package/dist/esm/useNavigate.js +29 -0
  210. package/dist/esm/useNavigate.js.map +1 -0
  211. package/dist/esm/useParams.d.ts +9 -0
  212. package/dist/esm/useParams.js +15 -0
  213. package/dist/esm/useParams.js.map +1 -0
  214. package/dist/esm/useRouteContext.d.ts +4 -0
  215. package/dist/esm/useRouteContext.js +11 -0
  216. package/dist/esm/useRouteContext.js.map +1 -0
  217. package/dist/esm/useRouter.d.ts +4 -0
  218. package/dist/esm/useRouter.js +12 -0
  219. package/dist/esm/useRouter.js.map +1 -0
  220. package/dist/esm/useRouterState.d.ts +8 -0
  221. package/dist/esm/useRouterState.js +16 -0
  222. package/dist/esm/useRouterState.js.map +1 -0
  223. package/dist/esm/useSearch.d.ts +9 -0
  224. package/dist/esm/useSearch.js +15 -0
  225. package/dist/esm/useSearch.js.map +1 -0
  226. package/dist/esm/utils.d.ts +34 -0
  227. package/dist/esm/utils.js +41 -0
  228. package/dist/esm/utils.js.map +1 -0
  229. package/dist/source/Asset.d.ts +2 -0
  230. package/dist/source/Asset.jsx +23 -0
  231. package/dist/source/Asset.jsx.map +1 -0
  232. package/dist/source/CatchBoundary.d.ts +11 -0
  233. package/dist/source/CatchBoundary.jsx +43 -0
  234. package/dist/source/CatchBoundary.jsx.map +1 -0
  235. package/dist/source/ClientOnly.d.ts +49 -0
  236. package/dist/source/ClientOnly.jsx +51 -0
  237. package/dist/source/ClientOnly.jsx.map +1 -0
  238. package/dist/source/HeadContent.d.ts +8 -0
  239. package/dist/source/HeadContent.jsx +143 -0
  240. package/dist/source/HeadContent.jsx.map +1 -0
  241. package/dist/source/Match.d.ts +8 -0
  242. package/dist/source/Match.jsx +255 -0
  243. package/dist/source/Match.jsx.map +1 -0
  244. package/dist/source/Matches.d.ts +24 -0
  245. package/dist/source/Matches.jsx +103 -0
  246. package/dist/source/Matches.jsx.map +1 -0
  247. package/dist/source/RouterProvider.d.ts +10 -0
  248. package/dist/source/RouterProvider.jsx +27 -0
  249. package/dist/source/RouterProvider.jsx.map +1 -0
  250. package/dist/source/SafeFragment.d.ts +1 -0
  251. package/dist/source/SafeFragment.jsx +4 -0
  252. package/dist/source/SafeFragment.jsx.map +1 -0
  253. package/dist/source/ScriptOnce.d.ts +5 -0
  254. package/dist/source/ScriptOnce.jsx +17 -0
  255. package/dist/source/ScriptOnce.jsx.map +1 -0
  256. package/dist/source/Scripts.d.ts +1 -0
  257. package/dist/source/Scripts.jsx +49 -0
  258. package/dist/source/Scripts.jsx.map +1 -0
  259. package/dist/source/ScrollRestoration.d.ts +14 -0
  260. package/dist/source/ScrollRestoration.jsx +37 -0
  261. package/dist/source/ScrollRestoration.jsx.map +1 -0
  262. package/dist/source/Transitioner.d.ts +1 -0
  263. package/dist/source/Transitioner.jsx +102 -0
  264. package/dist/source/Transitioner.jsx.map +1 -0
  265. package/dist/source/awaited.d.ts +11 -0
  266. package/dist/source/awaited.jsx +19 -0
  267. package/dist/source/awaited.jsx.map +1 -0
  268. package/dist/source/fileRoute.d.ts +54 -0
  269. package/dist/source/fileRoute.js +98 -0
  270. package/dist/source/fileRoute.js.map +1 -0
  271. package/dist/source/history.d.ts +8 -0
  272. package/dist/source/history.js +2 -0
  273. package/dist/source/history.js.map +1 -0
  274. package/dist/source/index.d.ts +52 -0
  275. package/dist/source/index.jsx +43 -0
  276. package/dist/source/index.jsx.map +1 -0
  277. package/dist/source/lazyRouteComponent.d.ts +2 -0
  278. package/dist/source/lazyRouteComponent.jsx +83 -0
  279. package/dist/source/lazyRouteComponent.jsx.map +1 -0
  280. package/dist/source/link.d.ts +44 -0
  281. package/dist/source/link.jsx +335 -0
  282. package/dist/source/link.jsx.map +1 -0
  283. package/dist/source/matchContext.d.ts +3 -0
  284. package/dist/source/matchContext.jsx +5 -0
  285. package/dist/source/matchContext.jsx.map +1 -0
  286. package/dist/source/not-found.d.ts +8 -0
  287. package/dist/source/not-found.jsx +30 -0
  288. package/dist/source/not-found.jsx.map +1 -0
  289. package/dist/source/renderRouteNotFound.d.ts +2 -0
  290. package/dist/source/renderRouteNotFound.jsx +15 -0
  291. package/dist/source/renderRouteNotFound.jsx.map +1 -0
  292. package/dist/source/route.d.ts +96 -0
  293. package/dist/source/route.jsx +179 -0
  294. package/dist/source/route.jsx.map +1 -0
  295. package/dist/source/router.d.ts +70 -0
  296. package/dist/source/router.js +21 -0
  297. package/dist/source/router.js.map +1 -0
  298. package/dist/source/routerContext.d.ts +8 -0
  299. package/dist/source/routerContext.jsx +13 -0
  300. package/dist/source/routerContext.jsx.map +1 -0
  301. package/dist/source/scroll-restoration.d.ts +1 -0
  302. package/dist/source/scroll-restoration.jsx +16 -0
  303. package/dist/source/scroll-restoration.jsx.map +1 -0
  304. package/dist/source/typePrimitives.d.ts +10 -0
  305. package/dist/source/typePrimitives.js +2 -0
  306. package/dist/source/typePrimitives.js.map +1 -0
  307. package/dist/source/useBlocker.d.ts +67 -0
  308. package/dist/source/useBlocker.jsx +136 -0
  309. package/dist/source/useBlocker.jsx.map +1 -0
  310. package/dist/source/useCanGoBack.d.ts +1 -0
  311. package/dist/source/useCanGoBack.js +5 -0
  312. package/dist/source/useCanGoBack.js.map +1 -0
  313. package/dist/source/useLoaderData.d.ts +8 -0
  314. package/dist/source/useLoaderData.jsx +11 -0
  315. package/dist/source/useLoaderData.jsx.map +1 -0
  316. package/dist/source/useLoaderDeps.d.ts +7 -0
  317. package/dist/source/useLoaderDeps.jsx +11 -0
  318. package/dist/source/useLoaderDeps.jsx.map +1 -0
  319. package/dist/source/useLocation.d.ts +7 -0
  320. package/dist/source/useLocation.jsx +7 -0
  321. package/dist/source/useLocation.jsx.map +1 -0
  322. package/dist/source/useMatch.d.ts +10 -0
  323. package/dist/source/useMatch.jsx +19 -0
  324. package/dist/source/useMatch.jsx.map +1 -0
  325. package/dist/source/useNavigate.d.ts +5 -0
  326. package/dist/source/useNavigate.jsx +18 -0
  327. package/dist/source/useNavigate.jsx.map +1 -0
  328. package/dist/source/useParams.d.ts +9 -0
  329. package/dist/source/useParams.jsx +12 -0
  330. package/dist/source/useParams.jsx.map +1 -0
  331. package/dist/source/useRouteContext.d.ts +4 -0
  332. package/dist/source/useRouteContext.js +8 -0
  333. package/dist/source/useRouteContext.js.map +1 -0
  334. package/dist/source/useRouter.d.ts +4 -0
  335. package/dist/source/useRouter.jsx +9 -0
  336. package/dist/source/useRouter.jsx.map +1 -0
  337. package/dist/source/useRouterState.d.ts +8 -0
  338. package/dist/source/useRouterState.jsx +14 -0
  339. package/dist/source/useRouterState.jsx.map +1 -0
  340. package/dist/source/useSearch.d.ts +9 -0
  341. package/dist/source/useSearch.jsx +12 -0
  342. package/dist/source/useSearch.jsx.map +1 -0
  343. package/dist/source/utils.d.ts +34 -0
  344. package/dist/source/utils.js +59 -0
  345. package/dist/source/utils.js.map +1 -0
  346. package/package.json +80 -0
  347. package/src/Asset.tsx +24 -0
  348. package/src/CatchBoundary.tsx +78 -0
  349. package/src/ClientOnly.tsx +65 -0
  350. package/src/HeadContent.tsx +174 -0
  351. package/src/Match.tsx +357 -0
  352. package/src/Matches.tsx +243 -0
  353. package/src/RouterProvider.tsx +79 -0
  354. package/src/SafeFragment.tsx +3 -0
  355. package/src/ScriptOnce.tsx +30 -0
  356. package/src/Scripts.tsx +65 -0
  357. package/src/ScrollRestoration.tsx +69 -0
  358. package/src/Transitioner.tsx +140 -0
  359. package/src/awaited.tsx +40 -0
  360. package/src/fileRoute.ts +256 -0
  361. package/src/history.ts +9 -0
  362. package/src/index.tsx +374 -0
  363. package/src/lazyRouteComponent.tsx +110 -0
  364. package/src/link.tsx +597 -0
  365. package/src/matchContext.tsx +10 -0
  366. package/src/not-found.tsx +42 -0
  367. package/src/renderRouteNotFound.tsx +26 -0
  368. package/src/route.tsx +550 -0
  369. package/src/router.ts +112 -0
  370. package/src/routerContext.tsx +26 -0
  371. package/src/scroll-restoration.tsx +29 -0
  372. package/src/typePrimitives.ts +74 -0
  373. package/src/useBlocker.tsx +305 -0
  374. package/src/useCanGoBack.ts +5 -0
  375. package/src/useLoaderData.tsx +50 -0
  376. package/src/useLoaderDeps.tsx +46 -0
  377. package/src/useLocation.tsx +30 -0
  378. package/src/useMatch.tsx +96 -0
  379. package/src/useNavigate.tsx +40 -0
  380. package/src/useParams.tsx +71 -0
  381. package/src/useRouteContext.ts +31 -0
  382. package/src/useRouter.tsx +15 -0
  383. package/src/useRouterState.tsx +36 -0
  384. package/src/useSearch.tsx +71 -0
  385. package/src/utils.ts +79 -0
package/src/router.ts ADDED
@@ -0,0 +1,112 @@
1
+ import { RouterCore } from '@tanstack/router-core'
2
+ import { createFileRoute, createLazyFileRoute } from './fileRoute'
3
+ import type { RouterHistory } from '@tanstack/history'
4
+ import type {
5
+ AnyRoute,
6
+ CreateRouterFn,
7
+ RouterConstructorOptions,
8
+ TrailingSlashOption,
9
+ } from '@tanstack/router-core'
10
+ import type {
11
+ ErrorRouteComponent,
12
+ NotFoundRouteComponent,
13
+ RouteComponent,
14
+ } from './route'
15
+ import type { JSX } from 'solid-js'
16
+
17
+ declare module '@tanstack/router-core' {
18
+ export interface RouterOptionsExtensions {
19
+ /**
20
+ * The default `component` a route should use if no component is provided.
21
+ *
22
+ * @default Outlet
23
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultcomponent-property)
24
+ */
25
+ defaultComponent?: RouteComponent
26
+ /**
27
+ * The default `errorComponent` a route should use if no error component is provided.
28
+ *
29
+ * @default ErrorComponent
30
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaulterrorcomponent-property)
31
+ * @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/data-loading#handling-errors-with-routeoptionserrorcomponent)
32
+ */
33
+ defaultErrorComponent?: ErrorRouteComponent
34
+ /**
35
+ * The default `pendingComponent` a route should use if no pending component is provided.
36
+ *
37
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultpendingcomponent-property)
38
+ * @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/data-loading#showing-a-pending-component)
39
+ */
40
+ defaultPendingComponent?: RouteComponent
41
+ /**
42
+ * The default `notFoundComponent` a route should use if no notFound component is provided.
43
+ *
44
+ * @default NotFound
45
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultnotfoundcomponent-property)
46
+ * @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/not-found-errors#default-router-wide-not-found-handling)
47
+ */
48
+ defaultNotFoundComponent?: NotFoundRouteComponent
49
+ /**
50
+ * A component that will be used to wrap the entire router.
51
+ *
52
+ * This is useful for providing a context to the entire router.
53
+ *
54
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#wrap-property)
55
+ */
56
+ Wrap?: (props: { children: any }) => JSX.Element
57
+ /**
58
+ * A component that will be used to wrap the inner contents of the router.
59
+ *
60
+ * This is useful for providing a context to the inner contents of the router where you also need access to the router context and hooks.
61
+ *
62
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#innerwrap-property)
63
+ */
64
+ InnerWrap?: (props: { children: any }) => JSX.Element
65
+
66
+ /**
67
+ * The default `onCatch` handler for errors caught by the Router ErrorBoundary
68
+ *
69
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RouterOptionsType#defaultoncatch-property)
70
+ * @link [Guide](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#handling-errors-with-routeoptionsoncatch)
71
+ */
72
+ defaultOnCatch?: (error: Error) => void
73
+ }
74
+ }
75
+
76
+ export const createRouter: CreateRouterFn = (options) => {
77
+ return new Router(options)
78
+ }
79
+
80
+ export class Router<
81
+ in out TRouteTree extends AnyRoute,
82
+ in out TTrailingSlashOption extends TrailingSlashOption = 'never',
83
+ in out TDefaultStructuralSharingOption extends boolean = false,
84
+ in out TRouterHistory extends RouterHistory = RouterHistory,
85
+ in out TDehydrated extends Record<string, any> = Record<string, any>,
86
+ > extends RouterCore<
87
+ TRouteTree,
88
+ TTrailingSlashOption,
89
+ TDefaultStructuralSharingOption,
90
+ TRouterHistory,
91
+ TDehydrated
92
+ > {
93
+ constructor(
94
+ options: RouterConstructorOptions<
95
+ TRouteTree,
96
+ TTrailingSlashOption,
97
+ TDefaultStructuralSharingOption,
98
+ TRouterHistory,
99
+ TDehydrated
100
+ >,
101
+ ) {
102
+ super(options)
103
+ }
104
+ }
105
+
106
+ if (typeof globalThis !== 'undefined') {
107
+ ;(globalThis as any).createFileRoute = createFileRoute
108
+ ;(globalThis as any).createLazyFileRoute = createLazyFileRoute
109
+ } else if (typeof window !== 'undefined') {
110
+ ;(window as any).createFileRoute = createFileRoute
111
+ ;(window as any).createFileRoute = createLazyFileRoute
112
+ }
@@ -0,0 +1,26 @@
1
+ import * as Solid from 'solid-js'
2
+ import type { AnyRouter } from '@tanstack/router-core'
3
+
4
+ declare global {
5
+ interface Window {
6
+ __TSR_ROUTER_CONTEXT__?: Solid.Context<AnyRouter>
7
+ }
8
+ }
9
+
10
+ const routerContext = Solid.createContext<AnyRouter>(
11
+ null as unknown as AnyRouter,
12
+ )
13
+
14
+ export function getRouterContext() {
15
+ if (typeof document === 'undefined') {
16
+ return routerContext
17
+ }
18
+
19
+ if (window.__TSR_ROUTER_CONTEXT__) {
20
+ return window.__TSR_ROUTER_CONTEXT__
21
+ }
22
+
23
+ window.__TSR_ROUTER_CONTEXT__ = routerContext as any
24
+
25
+ return routerContext
26
+ }
@@ -0,0 +1,29 @@
1
+ import {
2
+ defaultGetScrollRestorationKey,
3
+ restoreScroll,
4
+ storageKey,
5
+ } from '@tanstack/router-core'
6
+ import { useRouter } from './useRouter'
7
+ import { ScriptOnce } from './ScriptOnce'
8
+
9
+ export function ScrollRestoration() {
10
+ const router = useRouter()
11
+ const getKey =
12
+ router.options.getScrollRestorationKey || defaultGetScrollRestorationKey
13
+ const userKey = getKey(router.latestLocation)
14
+ const resolvedKey =
15
+ userKey !== defaultGetScrollRestorationKey(router.latestLocation)
16
+ ? userKey
17
+ : null
18
+
19
+ if (!router.isScrollRestoring || !router.isServer) {
20
+ return null
21
+ }
22
+
23
+ return (
24
+ <ScriptOnce
25
+ children={`(${restoreScroll.toString()})(${JSON.stringify(storageKey)},${JSON.stringify(resolvedKey)}, undefined, true)`}
26
+ log={false}
27
+ />
28
+ )
29
+ }
@@ -0,0 +1,74 @@
1
+ import type { LinkComponentProps } from './link'
2
+ import type { UseParamsOptions } from './useParams'
3
+ import type { UseSearchOptions } from './useSearch'
4
+ import type {
5
+ AnyRouter,
6
+ Constrain,
7
+ InferFrom,
8
+ InferMaskFrom,
9
+ InferMaskTo,
10
+ InferSelected,
11
+ InferShouldThrow,
12
+ InferStrict,
13
+ InferTo,
14
+ RegisteredRouter,
15
+ } from '@tanstack/router-core'
16
+
17
+ export type ValidateLinkOptions<
18
+ TRouter extends AnyRouter = RegisteredRouter,
19
+ TOptions = unknown,
20
+ TDefaultFrom extends string = string,
21
+ TComp = 'a',
22
+ > = Constrain<
23
+ TOptions,
24
+ LinkComponentProps<
25
+ TComp,
26
+ TRouter,
27
+ InferFrom<TOptions, TDefaultFrom>,
28
+ InferTo<TOptions>,
29
+ InferMaskFrom<TOptions>,
30
+ InferMaskTo<TOptions>
31
+ >
32
+ >
33
+
34
+ export type ValidateLinkOptionsArray<
35
+ TRouter extends AnyRouter = RegisteredRouter,
36
+ TOptions extends ReadonlyArray<any> = ReadonlyArray<unknown>,
37
+ TDefaultFrom extends string = string,
38
+ TComp = 'a',
39
+ > = {
40
+ [K in keyof TOptions]: ValidateLinkOptions<
41
+ TRouter,
42
+ TOptions[K],
43
+ TDefaultFrom,
44
+ TComp
45
+ >
46
+ }
47
+
48
+ export type ValidateUseSearchOptions<
49
+ TOptions,
50
+ TRouter extends AnyRouter = RegisteredRouter,
51
+ > = Constrain<
52
+ TOptions,
53
+ UseSearchOptions<
54
+ TRouter,
55
+ InferFrom<TOptions>,
56
+ InferStrict<TOptions>,
57
+ InferShouldThrow<TOptions>,
58
+ InferSelected<TOptions>
59
+ >
60
+ >
61
+
62
+ export type ValidateUseParamsOptions<
63
+ TOptions,
64
+ TRouter extends AnyRouter = RegisteredRouter,
65
+ > = Constrain<
66
+ TOptions,
67
+ UseParamsOptions<
68
+ TRouter,
69
+ InferFrom<TOptions>,
70
+ InferStrict<TOptions>,
71
+ InferShouldThrow<TOptions>,
72
+ InferSelected<TOptions>
73
+ >
74
+ >
@@ -0,0 +1,305 @@
1
+ import * as Solid from 'solid-js'
2
+ import { useRouter } from './useRouter'
3
+ import type {
4
+ BlockerFnArgs,
5
+ HistoryAction,
6
+ HistoryLocation,
7
+ } from '@tanstack/history'
8
+ import type { SolidNode } from './route'
9
+ import type {
10
+ AnyRoute,
11
+ AnyRouter,
12
+ ParseRoute,
13
+ RegisteredRouter,
14
+ } from '@tanstack/router-core'
15
+
16
+ interface ShouldBlockFnLocation<
17
+ out TRouteId,
18
+ out TFullPath,
19
+ out TAllParams,
20
+ out TFullSearchSchema,
21
+ > {
22
+ routeId: TRouteId
23
+ fullPath: TFullPath
24
+ pathname: string
25
+ params: TAllParams
26
+ search: TFullSearchSchema
27
+ }
28
+
29
+ type AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>
30
+ type MakeShouldBlockFnLocationUnion<
31
+ TRouter extends AnyRouter = RegisteredRouter,
32
+ TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,
33
+ > = TRoute extends any
34
+ ? ShouldBlockFnLocation<
35
+ TRoute['id'],
36
+ TRoute['fullPath'],
37
+ TRoute['types']['allParams'],
38
+ TRoute['types']['fullSearchSchema']
39
+ >
40
+ : never
41
+
42
+ type BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =
43
+ | {
44
+ status: 'blocked'
45
+ current: MakeShouldBlockFnLocationUnion<TRouter>
46
+ next: MakeShouldBlockFnLocationUnion<TRouter>
47
+ action: HistoryAction
48
+ proceed: () => void
49
+ reset: () => void
50
+ }
51
+ | {
52
+ status: 'idle'
53
+ current: undefined
54
+ next: undefined
55
+ action: undefined
56
+ proceed: undefined
57
+ reset: undefined
58
+ }
59
+
60
+ type ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {
61
+ current: MakeShouldBlockFnLocationUnion<TRouter>
62
+ next: MakeShouldBlockFnLocationUnion<TRouter>
63
+ action: HistoryAction
64
+ }
65
+
66
+ export type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (
67
+ args: ShouldBlockFnArgs<TRouter>,
68
+ ) => boolean | Promise<boolean>
69
+ export type UseBlockerOpts<
70
+ TRouter extends AnyRouter = RegisteredRouter,
71
+ TWithResolver extends boolean = boolean,
72
+ > = {
73
+ shouldBlockFn: ShouldBlockFn<TRouter>
74
+ enableBeforeUnload?: boolean | (() => boolean)
75
+ disabled?: boolean
76
+ withResolver?: TWithResolver
77
+ }
78
+
79
+ type LegacyBlockerFn = () => Promise<any> | any
80
+ type LegacyBlockerOpts = {
81
+ blockerFn?: LegacyBlockerFn
82
+ condition?: boolean | any
83
+ }
84
+
85
+ function _resolveBlockerOpts(
86
+ opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,
87
+ condition?: boolean | any,
88
+ ): UseBlockerOpts {
89
+ if (opts === undefined) {
90
+ return {
91
+ shouldBlockFn: () => true,
92
+ withResolver: false,
93
+ }
94
+ }
95
+
96
+ if ('shouldBlockFn' in opts) {
97
+ return opts
98
+ }
99
+
100
+ if (typeof opts === 'function') {
101
+ const shouldBlock = Boolean(condition ?? true)
102
+
103
+ const _customBlockerFn = async () => {
104
+ if (shouldBlock) return await opts()
105
+ return false
106
+ }
107
+
108
+ return {
109
+ shouldBlockFn: _customBlockerFn,
110
+ enableBeforeUnload: shouldBlock,
111
+ withResolver: false,
112
+ }
113
+ }
114
+
115
+ const shouldBlock = Boolean(opts.condition ?? true)
116
+ const fn = opts.blockerFn
117
+
118
+ const _customBlockerFn = async () => {
119
+ if (shouldBlock && fn !== undefined) {
120
+ return await fn()
121
+ }
122
+ return shouldBlock
123
+ }
124
+
125
+ return {
126
+ shouldBlockFn: _customBlockerFn,
127
+ enableBeforeUnload: shouldBlock,
128
+ withResolver: fn === undefined,
129
+ }
130
+ }
131
+
132
+ export function useBlocker<
133
+ TRouter extends AnyRouter = RegisteredRouter,
134
+ TWithResolver extends boolean = false,
135
+ >(
136
+ opts: UseBlockerOpts<TRouter, TWithResolver>,
137
+ ): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void
138
+
139
+ /**
140
+ * @deprecated Use the shouldBlockFn property instead
141
+ */
142
+ export function useBlocker(
143
+ blockerFnOrOpts?: LegacyBlockerOpts,
144
+ ): Solid.Accessor<BlockerResolver>
145
+
146
+ /**
147
+ * @deprecated Use the UseBlockerOpts object syntax instead
148
+ */
149
+ export function useBlocker(
150
+ blockerFn?: LegacyBlockerFn,
151
+ condition?: boolean | any,
152
+ ): Solid.Accessor<BlockerResolver>
153
+
154
+ export function useBlocker(
155
+ opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,
156
+ condition?: boolean | any,
157
+ ): Solid.Accessor<BlockerResolver> | void {
158
+ const {
159
+ shouldBlockFn,
160
+ enableBeforeUnload = true,
161
+ disabled = false,
162
+ withResolver = false,
163
+ } = _resolveBlockerOpts(opts, condition)
164
+
165
+ const router = useRouter()
166
+ const { history } = router
167
+
168
+ const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({
169
+ status: 'idle',
170
+ current: undefined,
171
+ next: undefined,
172
+ action: undefined,
173
+ proceed: undefined,
174
+ reset: undefined,
175
+ })
176
+
177
+ Solid.createEffect(() => {
178
+ const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {
179
+ function getLocation(
180
+ location: HistoryLocation,
181
+ ): AnyShouldBlockFnLocation {
182
+ const parsedLocation = router.parseLocation(undefined, location)
183
+ const matchedRoutes = router.getMatchedRoutes(
184
+ parsedLocation.pathname,
185
+ undefined,
186
+ )
187
+ if (matchedRoutes.foundRoute === undefined) {
188
+ throw new Error(`No route found for location ${location.href}`)
189
+ }
190
+ return {
191
+ routeId: matchedRoutes.foundRoute.id,
192
+ fullPath: matchedRoutes.foundRoute.fullPath,
193
+ pathname: parsedLocation.pathname,
194
+ params: matchedRoutes.routeParams,
195
+ search: parsedLocation.search,
196
+ }
197
+ }
198
+
199
+ const current = getLocation(blockerFnArgs.currentLocation)
200
+ const next = getLocation(blockerFnArgs.nextLocation)
201
+
202
+ const shouldBlock = await shouldBlockFn({
203
+ action: blockerFnArgs.action,
204
+ current,
205
+ next,
206
+ })
207
+ if (!withResolver) {
208
+ return shouldBlock
209
+ }
210
+
211
+ if (!shouldBlock) {
212
+ return false
213
+ }
214
+
215
+ const promise = new Promise<boolean>((resolve) => {
216
+ setResolver({
217
+ status: 'blocked',
218
+ current,
219
+ next,
220
+ action: blockerFnArgs.action,
221
+ proceed: () => resolve(false),
222
+ reset: () => resolve(true),
223
+ })
224
+ })
225
+
226
+ const canNavigateAsync = await promise
227
+ setResolver({
228
+ status: 'idle',
229
+ current: undefined,
230
+ next: undefined,
231
+ action: undefined,
232
+ proceed: undefined,
233
+ reset: undefined,
234
+ })
235
+
236
+ return canNavigateAsync
237
+ }
238
+
239
+ return disabled
240
+ ? undefined
241
+ : history.block({ blockerFn: blockerFnComposed, enableBeforeUnload })
242
+ })
243
+
244
+ return resolver
245
+ }
246
+
247
+ const _resolvePromptBlockerArgs = (
248
+ props: PromptProps | LegacyPromptProps,
249
+ ): UseBlockerOpts => {
250
+ if ('shouldBlockFn' in props) {
251
+ return { ...props }
252
+ }
253
+
254
+ const shouldBlock = Boolean(props.condition ?? true)
255
+ const fn = props.blockerFn
256
+
257
+ const _customBlockerFn = async () => {
258
+ if (shouldBlock && fn !== undefined) {
259
+ return await fn()
260
+ }
261
+ return shouldBlock
262
+ }
263
+
264
+ return {
265
+ shouldBlockFn: _customBlockerFn,
266
+ enableBeforeUnload: shouldBlock,
267
+ withResolver: fn === undefined,
268
+ }
269
+ }
270
+
271
+ export function Block<
272
+ TRouter extends AnyRouter = RegisteredRouter,
273
+ TWithResolver extends boolean = boolean,
274
+ >(opts: PromptProps<TRouter, TWithResolver>): SolidNode
275
+
276
+ /**
277
+ * @deprecated Use the UseBlockerOpts property instead
278
+ */
279
+ export function Block(opts: LegacyPromptProps): SolidNode
280
+
281
+ export function Block(opts: PromptProps | LegacyPromptProps): SolidNode {
282
+ const { children, ...rest } = opts
283
+ const args = _resolvePromptBlockerArgs(rest)
284
+
285
+ const resolver = useBlocker(args)
286
+ return children
287
+ ? typeof children === 'function'
288
+ ? children(resolver as any)
289
+ : children
290
+ : null
291
+ }
292
+
293
+ type LegacyPromptProps = {
294
+ blockerFn?: LegacyBlockerFn
295
+ condition?: boolean | any
296
+ children?: SolidNode | ((params: BlockerResolver) => SolidNode)
297
+ }
298
+
299
+ type PromptProps<
300
+ TRouter extends AnyRouter = RegisteredRouter,
301
+ TWithResolver extends boolean = boolean,
302
+ TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,
303
+ > = UseBlockerOpts<TRouter, TWithResolver> & {
304
+ children?: SolidNode | ((params: TParams) => SolidNode)
305
+ }
@@ -0,0 +1,5 @@
1
+ import { useRouterState } from './useRouterState'
2
+
3
+ export function useCanGoBack() {
4
+ return useRouterState({ select: (s) => s.location.state.__TSR_index !== 0 })
5
+ }
@@ -0,0 +1,50 @@
1
+ import { useMatch } from './useMatch'
2
+ import type { Accessor } from 'solid-js'
3
+ import type {
4
+ AnyRouter,
5
+ RegisteredRouter,
6
+ ResolveUseLoaderData,
7
+ StrictOrFrom,
8
+ UseLoaderDataResult,
9
+ } from '@tanstack/router-core'
10
+
11
+ export interface UseLoaderDataBaseOptions<
12
+ TRouter extends AnyRouter,
13
+ TFrom,
14
+ TStrict extends boolean,
15
+ TSelected,
16
+ > {
17
+ select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected
18
+ }
19
+
20
+ export type UseLoaderDataOptions<
21
+ TRouter extends AnyRouter,
22
+ TFrom extends string | undefined,
23
+ TStrict extends boolean,
24
+ TSelected,
25
+ > = StrictOrFrom<TRouter, TFrom, TStrict> &
26
+ UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>
27
+
28
+ export type UseLoaderDataRoute<out TId> = <
29
+ TRouter extends AnyRouter = RegisteredRouter,
30
+ TSelected = unknown,
31
+ >(
32
+ opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>,
33
+ ) => Accessor<UseLoaderDataResult<TRouter, TId, true, TSelected>>
34
+
35
+ export function useLoaderData<
36
+ TRouter extends AnyRouter = RegisteredRouter,
37
+ const TFrom extends string | undefined = undefined,
38
+ TStrict extends boolean = true,
39
+ TSelected = unknown,
40
+ >(
41
+ opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>,
42
+ ): Accessor<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>> {
43
+ return useMatch({
44
+ from: opts.from!,
45
+ strict: opts.strict,
46
+ select: (s: any) => {
47
+ return opts.select ? opts.select(s.loaderData) : s.loaderData
48
+ },
49
+ } as any) as any
50
+ }
@@ -0,0 +1,46 @@
1
+ import { useMatch } from './useMatch'
2
+ import type {
3
+ AnyRouter,
4
+ RegisteredRouter,
5
+ ResolveUseLoaderDeps,
6
+ StrictOrFrom,
7
+ UseLoaderDepsResult,
8
+ } from '@tanstack/router-core'
9
+
10
+ export interface UseLoaderDepsBaseOptions<
11
+ TRouter extends AnyRouter,
12
+ TFrom,
13
+ TSelected,
14
+ > {
15
+ select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected
16
+ }
17
+
18
+ export type UseLoaderDepsOptions<
19
+ TRouter extends AnyRouter,
20
+ TFrom extends string | undefined,
21
+ TSelected,
22
+ > = StrictOrFrom<TRouter, TFrom> &
23
+ UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>
24
+
25
+ export type UseLoaderDepsRoute<out TId> = <
26
+ TRouter extends AnyRouter = RegisteredRouter,
27
+ TSelected = unknown,
28
+ >(
29
+ opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>,
30
+ ) => UseLoaderDepsResult<TRouter, TId, TSelected>
31
+
32
+ export function useLoaderDeps<
33
+ TRouter extends AnyRouter = RegisteredRouter,
34
+ const TFrom extends string | undefined = undefined,
35
+ TSelected = unknown,
36
+ >(
37
+ opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>,
38
+ ): UseLoaderDepsResult<TRouter, TFrom, TSelected> {
39
+ const { select, ...rest } = opts
40
+ return useMatch({
41
+ ...rest,
42
+ select: (s) => {
43
+ return select ? select(s.loaderDeps) : s.loaderDeps
44
+ },
45
+ }) as UseLoaderDepsResult<TRouter, TFrom, TSelected>
46
+ }
@@ -0,0 +1,30 @@
1
+ import { useRouterState } from './useRouterState'
2
+ import type {
3
+ AnyRouter,
4
+ RegisteredRouter,
5
+ RouterState,
6
+ } from '@tanstack/router-core'
7
+ import type { Accessor } from 'solid-js'
8
+
9
+ export interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {
10
+ select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected
11
+ }
12
+
13
+ export type UseLocationResult<
14
+ TRouter extends AnyRouter,
15
+ TSelected,
16
+ > = unknown extends TSelected
17
+ ? RouterState<TRouter['routeTree']>['location']
18
+ : TSelected
19
+
20
+ export function useLocation<
21
+ TRouter extends AnyRouter = RegisteredRouter,
22
+ TSelected = unknown,
23
+ >(
24
+ opts?: UseLocationBaseOptions<TRouter, TSelected>,
25
+ ): Accessor<UseLocationResult<TRouter, TSelected>> {
26
+ return useRouterState({
27
+ select: (state: any) =>
28
+ opts?.select ? opts.select(state.location) : state.location,
29
+ } as any) as Accessor<UseLocationResult<TRouter, TSelected>>
30
+ }