@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
@@ -0,0 +1,42 @@
1
+ import { isNotFound } from '@tanstack/router-core'
2
+ import { CatchBoundary } from './CatchBoundary'
3
+ import { useRouterState } from './useRouterState'
4
+ import type * as Solid from 'solid-js'
5
+ import type { NotFoundError } from '@tanstack/router-core'
6
+
7
+ export function CatchNotFound(props: {
8
+ fallback?: (error: NotFoundError) => Solid.JSX.Element
9
+ onCatch?: (error: Error) => void
10
+ children: Solid.JSX.Element
11
+ }) {
12
+ // TODO: Some way for the user to programmatically reset the not-found boundary?
13
+ const resetKey = useRouterState({
14
+ select: (s) => `not-found-${s.location.pathname}-${s.status}`,
15
+ })
16
+
17
+ return (
18
+ <CatchBoundary
19
+ getResetKey={() => resetKey()}
20
+ onCatch={(error) => {
21
+ if (isNotFound(error)) {
22
+ props.onCatch?.(error)
23
+ } else {
24
+ throw error
25
+ }
26
+ }}
27
+ errorComponent={({ error }: { error: Error }) => {
28
+ if (isNotFound(error)) {
29
+ return props.fallback?.(error)
30
+ } else {
31
+ throw error
32
+ }
33
+ }}
34
+ >
35
+ {props.children}
36
+ </CatchBoundary>
37
+ )
38
+ }
39
+
40
+ export function DefaultGlobalNotFound() {
41
+ return <p>Not Found</p>
42
+ }
@@ -0,0 +1,26 @@
1
+ import warning from 'tiny-warning'
2
+ import { DefaultGlobalNotFound } from './not-found'
3
+ import type { AnyRoute, AnyRouter } from '@tanstack/router-core'
4
+
5
+ export function renderRouteNotFound(
6
+ router: AnyRouter,
7
+ route: AnyRoute,
8
+ data: any,
9
+ ) {
10
+ if (!route.options.notFoundComponent) {
11
+ if (router.options.defaultNotFoundComponent) {
12
+ return <router.options.defaultNotFoundComponent data={data} />
13
+ }
14
+
15
+ if (process.env.NODE_ENV === 'development') {
16
+ warning(
17
+ route.options.notFoundComponent,
18
+ `A notFoundError was encountered on the route with ID "${route.id}", but a notFoundComponent option was not configured, nor was a router level defaultNotFoundComponent configured. Consider configuring at least one of these to avoid TanStack Router's overly generic defaultNotFoundComponent (<div>Not Found<div>)`,
19
+ )
20
+ }
21
+
22
+ return <DefaultGlobalNotFound />
23
+ }
24
+
25
+ return <route.options.notFoundComponent data={data} />
26
+ }
package/src/route.tsx ADDED
@@ -0,0 +1,550 @@
1
+ import {
2
+ BaseRootRoute,
3
+ BaseRoute,
4
+ BaseRouteApi,
5
+ notFound,
6
+ } from '@tanstack/router-core'
7
+ import { Link } from './link'
8
+ import { useLoaderData } from './useLoaderData'
9
+ import { useLoaderDeps } from './useLoaderDeps'
10
+ import { useParams } from './useParams'
11
+ import { useSearch } from './useSearch'
12
+ import { useNavigate } from './useNavigate'
13
+ import { useMatch } from './useMatch'
14
+ import { useRouter } from './useRouter'
15
+ import type {
16
+ AnyContext,
17
+ AnyRoute,
18
+ AnyRouter,
19
+ ConstrainLiteral,
20
+ ErrorComponentProps,
21
+ NotFoundError,
22
+ NotFoundRouteProps,
23
+ RegisteredRouter,
24
+ ResolveFullPath,
25
+ ResolveId,
26
+ ResolveParams,
27
+ RootRouteId,
28
+ RootRouteOptions,
29
+ RouteConstraints,
30
+ RouteIds,
31
+ RouteMask,
32
+ RouteOptions,
33
+ RouteTypesById,
34
+ RouterCore,
35
+ ToMaskOptions,
36
+ UseNavigateResult,
37
+ } from '@tanstack/router-core'
38
+ import type { UseLoaderDataRoute } from './useLoaderData'
39
+ import type { UseMatchRoute } from './useMatch'
40
+ import type { UseLoaderDepsRoute } from './useLoaderDeps'
41
+ import type { UseParamsRoute } from './useParams'
42
+ import type { UseSearchRoute } from './useSearch'
43
+ import type * as Solid from 'solid-js'
44
+ import type { UseRouteContextRoute } from './useRouteContext'
45
+ import type { LinkComponentRoute } from './link'
46
+
47
+ declare module '@tanstack/router-core' {
48
+ export interface UpdatableRouteOptionsExtensions {
49
+ component?: RouteComponent
50
+ errorComponent?: false | null | ErrorRouteComponent
51
+ notFoundComponent?: NotFoundRouteComponent
52
+ pendingComponent?: RouteComponent
53
+ }
54
+
55
+ export interface RouteExtensions<
56
+ in out TId extends string,
57
+ in out TFullPath extends string,
58
+ > {
59
+ useMatch: UseMatchRoute<TId>
60
+ useRouteContext: UseRouteContextRoute<TId>
61
+ useSearch: UseSearchRoute<TId>
62
+ useParams: UseParamsRoute<TId>
63
+ useLoaderDeps: UseLoaderDepsRoute<TId>
64
+ useLoaderData: UseLoaderDataRoute<TId>
65
+ useNavigate: () => UseNavigateResult<TFullPath>
66
+ Link: LinkComponentRoute<TFullPath>
67
+ }
68
+ }
69
+
70
+ export function getRouteApi<
71
+ const TId,
72
+ TRouter extends AnyRouter = RegisteredRouter,
73
+ >(id: ConstrainLiteral<TId, RouteIds<TRouter['routeTree']>>) {
74
+ return new RouteApi<TId, TRouter>({ id })
75
+ }
76
+
77
+ export class RouteApi<
78
+ TId,
79
+ TRouter extends AnyRouter = RegisteredRouter,
80
+ > extends BaseRouteApi<TId, TRouter> {
81
+ /**
82
+ * @deprecated Use the `getRouteApi` function instead.
83
+ */
84
+ constructor({ id }: { id: TId }) {
85
+ super({ id })
86
+ }
87
+
88
+ useMatch: UseMatchRoute<TId> = (opts) => {
89
+ return useMatch({
90
+ select: opts?.select,
91
+ from: this.id,
92
+ } as any) as any
93
+ }
94
+
95
+ useRouteContext: UseRouteContextRoute<TId> = (opts) => {
96
+ return useMatch({
97
+ from: this.id as any,
98
+ select: (d) => (opts?.select ? opts.select(d.context) : d.context),
99
+ }) as any
100
+ }
101
+
102
+ useSearch: UseSearchRoute<TId> = (opts) => {
103
+ return useSearch({
104
+ select: opts?.select,
105
+ from: this.id,
106
+ } as any) as any
107
+ }
108
+
109
+ useParams: UseParamsRoute<TId> = (opts) => {
110
+ return useParams({
111
+ select: opts?.select,
112
+ from: this.id,
113
+ } as any) as any
114
+ }
115
+
116
+ useLoaderDeps: UseLoaderDepsRoute<TId> = (opts) => {
117
+ return useLoaderDeps({ ...opts, from: this.id, strict: false } as any)
118
+ }
119
+
120
+ useLoaderData: UseLoaderDataRoute<TId> = (opts) => {
121
+ return useLoaderData({ ...opts, from: this.id, strict: false } as any)
122
+ }
123
+
124
+ useNavigate = (): UseNavigateResult<
125
+ RouteTypesById<TRouter, TId>['fullPath']
126
+ > => {
127
+ const router = useRouter()
128
+ return useNavigate({ from: router.routesById[this.id as string].fullPath })
129
+ }
130
+
131
+ notFound = (opts?: NotFoundError) => {
132
+ return notFound({ routeId: this.id as string, ...opts })
133
+ }
134
+
135
+ Link: LinkComponentRoute<RouteTypesById<TRouter, TId>['fullPath']> = ((
136
+ props,
137
+ ) => {
138
+ const router = useRouter()
139
+ const fullPath = router.routesById[this.id as string].fullPath
140
+ return <Link from={fullPath as never} {...props} />
141
+ }) as LinkComponentRoute<RouteTypesById<TRouter, TId>['fullPath']>
142
+ }
143
+
144
+ export class Route<
145
+ in out TParentRoute extends RouteConstraints['TParentRoute'] = AnyRoute,
146
+ in out TPath extends RouteConstraints['TPath'] = '/',
147
+ in out TFullPath extends RouteConstraints['TFullPath'] = ResolveFullPath<
148
+ TParentRoute,
149
+ TPath
150
+ >,
151
+ in out TCustomId extends RouteConstraints['TCustomId'] = string,
152
+ in out TId extends RouteConstraints['TId'] = ResolveId<
153
+ TParentRoute,
154
+ TCustomId,
155
+ TPath
156
+ >,
157
+ in out TSearchValidator = undefined,
158
+ in out TParams = ResolveParams<TPath>,
159
+ in out TRouterContext = AnyContext,
160
+ in out TRouteContextFn = AnyContext,
161
+ in out TBeforeLoadFn = AnyContext,
162
+ in out TLoaderDeps extends Record<string, any> = {},
163
+ in out TLoaderFn = undefined,
164
+ in out TChildren = unknown,
165
+ in out TFileRouteTypes = unknown,
166
+ > extends BaseRoute<
167
+ TParentRoute,
168
+ TPath,
169
+ TFullPath,
170
+ TCustomId,
171
+ TId,
172
+ TSearchValidator,
173
+ TParams,
174
+ TRouterContext,
175
+ TRouteContextFn,
176
+ TBeforeLoadFn,
177
+ TLoaderDeps,
178
+ TLoaderFn,
179
+ TChildren,
180
+ TFileRouteTypes
181
+ > {
182
+ /**
183
+ * @deprecated Use the `createRoute` function instead.
184
+ */
185
+ constructor(
186
+ options?: RouteOptions<
187
+ TParentRoute,
188
+ TId,
189
+ TCustomId,
190
+ TFullPath,
191
+ TPath,
192
+ TSearchValidator,
193
+ TParams,
194
+ TLoaderDeps,
195
+ TLoaderFn,
196
+ TRouterContext,
197
+ TRouteContextFn,
198
+ TBeforeLoadFn
199
+ >,
200
+ ) {
201
+ super(options)
202
+ }
203
+
204
+ useMatch: UseMatchRoute<TId> = (opts) => {
205
+ return useMatch({
206
+ select: opts?.select,
207
+ from: this.id,
208
+ } as any) as any
209
+ }
210
+
211
+ useRouteContext: UseRouteContextRoute<TId> = (opts?) => {
212
+ return useMatch({
213
+ ...opts,
214
+ from: this.id,
215
+ select: (d) => (opts?.select ? opts.select(d.context) : d.context),
216
+ }) as any
217
+ }
218
+
219
+ useSearch: UseSearchRoute<TId> = (opts) => {
220
+ return useSearch({
221
+ select: opts?.select,
222
+ from: this.id,
223
+ } as any) as any
224
+ }
225
+
226
+ useParams: UseParamsRoute<TId> = (opts) => {
227
+ return useParams({
228
+ select: opts?.select,
229
+ from: this.id,
230
+ } as any) as any
231
+ }
232
+
233
+ useLoaderDeps: UseLoaderDepsRoute<TId> = (opts) => {
234
+ return useLoaderDeps({ ...opts, from: this.id } as any)
235
+ }
236
+
237
+ useLoaderData: UseLoaderDataRoute<TId> = (opts) => {
238
+ return useLoaderData({ ...opts, from: this.id } as any)
239
+ }
240
+
241
+ useNavigate = (): UseNavigateResult<TFullPath> => {
242
+ return useNavigate({ from: this.fullPath })
243
+ }
244
+
245
+ Link: LinkComponentRoute<TFullPath> = ((props) => {
246
+ return <Link from={this.fullPath} {...props} />
247
+ }) as LinkComponentRoute<TFullPath>
248
+ }
249
+
250
+ export function createRoute<
251
+ TParentRoute extends RouteConstraints['TParentRoute'] = AnyRoute,
252
+ TPath extends RouteConstraints['TPath'] = '/',
253
+ TFullPath extends RouteConstraints['TFullPath'] = ResolveFullPath<
254
+ TParentRoute,
255
+ TPath
256
+ >,
257
+ TCustomId extends RouteConstraints['TCustomId'] = string,
258
+ TId extends RouteConstraints['TId'] = ResolveId<
259
+ TParentRoute,
260
+ TCustomId,
261
+ TPath
262
+ >,
263
+ TSearchValidator = undefined,
264
+ TParams = ResolveParams<TPath>,
265
+ TRouteContextFn = AnyContext,
266
+ TBeforeLoadFn = AnyContext,
267
+ TLoaderDeps extends Record<string, any> = {},
268
+ TLoaderFn = undefined,
269
+ TChildren = unknown,
270
+ >(
271
+ options: RouteOptions<
272
+ TParentRoute,
273
+ TId,
274
+ TCustomId,
275
+ TFullPath,
276
+ TPath,
277
+ TSearchValidator,
278
+ TParams,
279
+ TLoaderDeps,
280
+ TLoaderFn,
281
+ AnyContext,
282
+ TRouteContextFn,
283
+ TBeforeLoadFn
284
+ >,
285
+ ): Route<
286
+ TParentRoute,
287
+ TPath,
288
+ TFullPath,
289
+ TCustomId,
290
+ TId,
291
+ TSearchValidator,
292
+ TParams,
293
+ AnyContext,
294
+ TRouteContextFn,
295
+ TBeforeLoadFn,
296
+ TLoaderDeps,
297
+ TLoaderFn,
298
+ TChildren,
299
+ unknown
300
+ > {
301
+ return new Route<
302
+ TParentRoute,
303
+ TPath,
304
+ TFullPath,
305
+ TCustomId,
306
+ TId,
307
+ TSearchValidator,
308
+ TParams,
309
+ AnyContext,
310
+ TRouteContextFn,
311
+ TBeforeLoadFn,
312
+ TLoaderDeps,
313
+ TLoaderFn,
314
+ TChildren,
315
+ unknown
316
+ >(options)
317
+ }
318
+
319
+ export type AnyRootRoute = RootRoute<any, any, any, any, any, any, any, any>
320
+
321
+ export function createRootRouteWithContext<TRouterContext extends {}>() {
322
+ return <
323
+ TRouteContextFn = AnyContext,
324
+ TBeforeLoadFn = AnyContext,
325
+ TSearchValidator = undefined,
326
+ TLoaderDeps extends Record<string, any> = {},
327
+ TLoaderFn = undefined,
328
+ >(
329
+ options?: RootRouteOptions<
330
+ TSearchValidator,
331
+ TRouterContext,
332
+ TRouteContextFn,
333
+ TBeforeLoadFn,
334
+ TLoaderDeps,
335
+ TLoaderFn
336
+ >,
337
+ ) => {
338
+ return createRootRoute<
339
+ TSearchValidator,
340
+ TRouterContext,
341
+ TRouteContextFn,
342
+ TBeforeLoadFn,
343
+ TLoaderDeps,
344
+ TLoaderFn
345
+ >(options as any)
346
+ }
347
+ }
348
+
349
+ /**
350
+ * @deprecated Use the `createRootRouteWithContext` function instead.
351
+ */
352
+ export const rootRouteWithContext = createRootRouteWithContext
353
+
354
+ export class RootRoute<
355
+ in out TSearchValidator = undefined,
356
+ in out TRouterContext = {},
357
+ in out TRouteContextFn = AnyContext,
358
+ in out TBeforeLoadFn = AnyContext,
359
+ in out TLoaderDeps extends Record<string, any> = {},
360
+ in out TLoaderFn = undefined,
361
+ in out TChildren = unknown,
362
+ in out TFileRouteTypes = unknown,
363
+ > extends BaseRootRoute<
364
+ TSearchValidator,
365
+ TRouterContext,
366
+ TRouteContextFn,
367
+ TBeforeLoadFn,
368
+ TLoaderDeps,
369
+ TLoaderFn,
370
+ TChildren,
371
+ TFileRouteTypes
372
+ > {
373
+ /**
374
+ * @deprecated `RootRoute` is now an internal implementation detail. Use `createRootRoute()` instead.
375
+ */
376
+ constructor(
377
+ options?: RootRouteOptions<
378
+ TSearchValidator,
379
+ TRouterContext,
380
+ TRouteContextFn,
381
+ TBeforeLoadFn,
382
+ TLoaderDeps,
383
+ TLoaderFn
384
+ >,
385
+ ) {
386
+ super(options)
387
+ }
388
+
389
+ useMatch: UseMatchRoute<RootRouteId> = (opts) => {
390
+ return useMatch({
391
+ select: opts?.select,
392
+ from: this.id,
393
+ } as any) as any
394
+ }
395
+
396
+ useRouteContext: UseRouteContextRoute<RootRouteId> = (opts) => {
397
+ return useMatch({
398
+ ...opts,
399
+ from: this.id,
400
+ select: (d) => (opts?.select ? opts.select(d.context) : d.context),
401
+ }) as any
402
+ }
403
+
404
+ useSearch: UseSearchRoute<RootRouteId> = (opts) => {
405
+ return useSearch({
406
+ select: opts?.select,
407
+ from: this.id,
408
+ } as any) as any
409
+ }
410
+
411
+ useParams: UseParamsRoute<RootRouteId> = (opts) => {
412
+ return useParams({
413
+ select: opts?.select,
414
+ from: this.id,
415
+ } as any) as any
416
+ }
417
+
418
+ useLoaderDeps: UseLoaderDepsRoute<RootRouteId> = (opts) => {
419
+ return useLoaderDeps({ ...opts, from: this.id } as any)
420
+ }
421
+
422
+ useLoaderData: UseLoaderDataRoute<RootRouteId> = (opts) => {
423
+ return useLoaderData({ ...opts, from: this.id } as any)
424
+ }
425
+
426
+ useNavigate = (): UseNavigateResult<'/'> => {
427
+ return useNavigate({ from: this.fullPath })
428
+ }
429
+
430
+ Link: LinkComponentRoute<'/'> = ((props) => {
431
+ return <Link from={this.fullPath} {...(props as any)} />
432
+ }) as LinkComponentRoute<'/'>
433
+ }
434
+
435
+ export function createRouteMask<
436
+ TRouteTree extends AnyRoute,
437
+ TFrom extends string,
438
+ TTo extends string,
439
+ >(
440
+ opts: {
441
+ routeTree: TRouteTree
442
+ } & ToMaskOptions<RouterCore<TRouteTree, 'never', false>, TFrom, TTo>,
443
+ ): RouteMask<TRouteTree> {
444
+ return opts as any
445
+ }
446
+
447
+ export type SolidNode = Solid.JSX.Element
448
+
449
+ export type SyncRouteComponent<TProps> = (props: TProps) => Solid.JSX.Element
450
+
451
+ export type AsyncRouteComponent<TProps> = SyncRouteComponent<TProps> & {
452
+ preload?: () => Promise<void>
453
+ }
454
+
455
+ export type RouteComponent<TProps = any> = AsyncRouteComponent<TProps>
456
+
457
+ export type ErrorRouteComponent = RouteComponent<ErrorComponentProps>
458
+
459
+ export type NotFoundRouteComponent = SyncRouteComponent<NotFoundRouteProps>
460
+
461
+ export class NotFoundRoute<
462
+ TParentRoute extends AnyRootRoute,
463
+ TRouterContext = AnyContext,
464
+ TRouteContextFn = AnyContext,
465
+ TBeforeLoadFn = AnyContext,
466
+ TSearchValidator = undefined,
467
+ TLoaderDeps extends Record<string, any> = {},
468
+ TLoaderFn = undefined,
469
+ TChildren = unknown,
470
+ > extends Route<
471
+ TParentRoute,
472
+ '/404',
473
+ '/404',
474
+ '404',
475
+ '404',
476
+ TSearchValidator,
477
+ {},
478
+ TRouterContext,
479
+ TRouteContextFn,
480
+ TBeforeLoadFn,
481
+ TLoaderDeps,
482
+ TLoaderFn,
483
+ TChildren
484
+ > {
485
+ constructor(
486
+ options: Omit<
487
+ RouteOptions<
488
+ TParentRoute,
489
+ string,
490
+ string,
491
+ string,
492
+ string,
493
+ TSearchValidator,
494
+ {},
495
+ TLoaderDeps,
496
+ TLoaderFn,
497
+ TRouterContext,
498
+ TRouteContextFn,
499
+ TBeforeLoadFn
500
+ >,
501
+ | 'caseSensitive'
502
+ | 'parseParams'
503
+ | 'stringifyParams'
504
+ | 'path'
505
+ | 'id'
506
+ | 'params'
507
+ >,
508
+ ) {
509
+ super({
510
+ ...(options as any),
511
+ id: '404',
512
+ })
513
+ }
514
+ }
515
+
516
+ export function createRootRoute<
517
+ TSearchValidator = undefined,
518
+ TRouterContext = {},
519
+ TRouteContextFn = AnyContext,
520
+ TBeforeLoadFn = AnyContext,
521
+ TLoaderDeps extends Record<string, any> = {},
522
+ TLoaderFn = undefined,
523
+ >(
524
+ options?: RootRouteOptions<
525
+ TSearchValidator,
526
+ TRouterContext,
527
+ TRouteContextFn,
528
+ TBeforeLoadFn,
529
+ TLoaderDeps,
530
+ TLoaderFn
531
+ >,
532
+ ): RootRoute<
533
+ TSearchValidator,
534
+ TRouterContext,
535
+ TRouteContextFn,
536
+ TBeforeLoadFn,
537
+ TLoaderDeps,
538
+ TLoaderFn,
539
+ unknown,
540
+ unknown
541
+ > {
542
+ return new RootRoute<
543
+ TSearchValidator,
544
+ TRouterContext,
545
+ TRouteContextFn,
546
+ TBeforeLoadFn,
547
+ TLoaderDeps,
548
+ TLoaderFn
549
+ >(options)
550
+ }