@benjavicente/router-core 1.168.9

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 (380) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/bin/intent.js +25 -0
  4. package/dist/cjs/Matches.cjs +17 -0
  5. package/dist/cjs/Matches.cjs.map +1 -0
  6. package/dist/cjs/Matches.d.cts +139 -0
  7. package/dist/cjs/RouterProvider.d.cts +27 -0
  8. package/dist/cjs/config.cjs +11 -0
  9. package/dist/cjs/config.cjs.map +1 -0
  10. package/dist/cjs/config.d.cts +17 -0
  11. package/dist/cjs/defer.cjs +41 -0
  12. package/dist/cjs/defer.cjs.map +1 -0
  13. package/dist/cjs/defer.d.cts +37 -0
  14. package/dist/cjs/fileRoute.d.cts +24 -0
  15. package/dist/cjs/global.d.cts +7 -0
  16. package/dist/cjs/hash-scroll.cjs +20 -0
  17. package/dist/cjs/hash-scroll.cjs.map +1 -0
  18. package/dist/cjs/hash-scroll.d.cts +7 -0
  19. package/dist/cjs/history.d.cts +8 -0
  20. package/dist/cjs/index.cjs +96 -0
  21. package/dist/cjs/index.d.cts +53 -0
  22. package/dist/cjs/invariant.cjs +8 -0
  23. package/dist/cjs/invariant.cjs.map +1 -0
  24. package/dist/cjs/invariant.d.cts +1 -0
  25. package/dist/cjs/isServer/client.cjs +7 -0
  26. package/dist/cjs/isServer/client.cjs.map +1 -0
  27. package/dist/cjs/isServer/client.d.cts +1 -0
  28. package/dist/cjs/isServer/development.cjs +7 -0
  29. package/dist/cjs/isServer/development.cjs.map +1 -0
  30. package/dist/cjs/isServer/development.d.cts +1 -0
  31. package/dist/cjs/isServer/server.cjs +7 -0
  32. package/dist/cjs/isServer/server.cjs.map +1 -0
  33. package/dist/cjs/isServer/server.d.cts +1 -0
  34. package/dist/cjs/link.cjs +6 -0
  35. package/dist/cjs/link.cjs.map +1 -0
  36. package/dist/cjs/link.d.cts +221 -0
  37. package/dist/cjs/load-matches.cjs +659 -0
  38. package/dist/cjs/load-matches.cjs.map +1 -0
  39. package/dist/cjs/load-matches.d.cts +18 -0
  40. package/dist/cjs/location.d.cts +50 -0
  41. package/dist/cjs/lru-cache.cjs +70 -0
  42. package/dist/cjs/lru-cache.cjs.map +1 -0
  43. package/dist/cjs/lru-cache.d.cts +6 -0
  44. package/dist/cjs/manifest.cjs +18 -0
  45. package/dist/cjs/manifest.cjs.map +1 -0
  46. package/dist/cjs/manifest.d.cts +35 -0
  47. package/dist/cjs/new-process-route-tree.cjs +754 -0
  48. package/dist/cjs/new-process-route-tree.cjs.map +1 -0
  49. package/dist/cjs/new-process-route-tree.d.cts +236 -0
  50. package/dist/cjs/not-found.cjs +26 -0
  51. package/dist/cjs/not-found.cjs.map +1 -0
  52. package/dist/cjs/not-found.d.cts +32 -0
  53. package/dist/cjs/path.cjs +252 -0
  54. package/dist/cjs/path.cjs.map +1 -0
  55. package/dist/cjs/path.d.cts +56 -0
  56. package/dist/cjs/qss.cjs +70 -0
  57. package/dist/cjs/qss.cjs.map +1 -0
  58. package/dist/cjs/qss.d.cts +33 -0
  59. package/dist/cjs/redirect.cjs +56 -0
  60. package/dist/cjs/redirect.cjs.map +1 -0
  61. package/dist/cjs/redirect.d.cts +77 -0
  62. package/dist/cjs/rewrite.cjs +68 -0
  63. package/dist/cjs/rewrite.cjs.map +1 -0
  64. package/dist/cjs/rewrite.d.cts +30 -0
  65. package/dist/cjs/root.cjs +7 -0
  66. package/dist/cjs/root.cjs.map +1 -0
  67. package/dist/cjs/root.d.cts +3 -0
  68. package/dist/cjs/route.cjs +100 -0
  69. package/dist/cjs/route.cjs.map +1 -0
  70. package/dist/cjs/route.d.cts +552 -0
  71. package/dist/cjs/routeInfo.d.cts +54 -0
  72. package/dist/cjs/router.cjs +1173 -0
  73. package/dist/cjs/router.cjs.map +1 -0
  74. package/dist/cjs/router.d.cts +734 -0
  75. package/dist/cjs/scroll-restoration-inline.cjs +6 -0
  76. package/dist/cjs/scroll-restoration-inline.cjs.map +1 -0
  77. package/dist/cjs/scroll-restoration-inline.d.cts +6 -0
  78. package/dist/cjs/scroll-restoration-script/client.cjs +9 -0
  79. package/dist/cjs/scroll-restoration-script/client.cjs.map +1 -0
  80. package/dist/cjs/scroll-restoration-script/client.d.cts +2 -0
  81. package/dist/cjs/scroll-restoration-script/server.cjs +30 -0
  82. package/dist/cjs/scroll-restoration-script/server.cjs.map +1 -0
  83. package/dist/cjs/scroll-restoration-script/server.d.cts +2 -0
  84. package/dist/cjs/scroll-restoration.cjs +191 -0
  85. package/dist/cjs/scroll-restoration.cjs.map +1 -0
  86. package/dist/cjs/scroll-restoration.d.cts +38 -0
  87. package/dist/cjs/searchMiddleware.cjs +55 -0
  88. package/dist/cjs/searchMiddleware.cjs.map +1 -0
  89. package/dist/cjs/searchMiddleware.d.cts +25 -0
  90. package/dist/cjs/searchParams.cjs +65 -0
  91. package/dist/cjs/searchParams.cjs.map +1 -0
  92. package/dist/cjs/searchParams.d.cts +31 -0
  93. package/dist/cjs/ssr/client.cjs +7 -0
  94. package/dist/cjs/ssr/client.d.cts +6 -0
  95. package/dist/cjs/ssr/constants.cjs +8 -0
  96. package/dist/cjs/ssr/constants.cjs.map +1 -0
  97. package/dist/cjs/ssr/constants.d.cts +3 -0
  98. package/dist/cjs/ssr/createRequestHandler.cjs +44 -0
  99. package/dist/cjs/ssr/createRequestHandler.cjs.map +1 -0
  100. package/dist/cjs/ssr/createRequestHandler.d.cts +9 -0
  101. package/dist/cjs/ssr/handlerCallback.cjs +8 -0
  102. package/dist/cjs/ssr/handlerCallback.cjs.map +1 -0
  103. package/dist/cjs/ssr/handlerCallback.d.cts +9 -0
  104. package/dist/cjs/ssr/headers.cjs +21 -0
  105. package/dist/cjs/ssr/headers.cjs.map +1 -0
  106. package/dist/cjs/ssr/headers.d.cts +3 -0
  107. package/dist/cjs/ssr/json.cjs +11 -0
  108. package/dist/cjs/ssr/json.cjs.map +1 -0
  109. package/dist/cjs/ssr/json.d.cts +10 -0
  110. package/dist/cjs/ssr/serializer/RawStream.cjs +287 -0
  111. package/dist/cjs/ssr/serializer/RawStream.cjs.map +1 -0
  112. package/dist/cjs/ssr/serializer/RawStream.d.cts +64 -0
  113. package/dist/cjs/ssr/serializer/ShallowErrorPlugin.cjs +32 -0
  114. package/dist/cjs/ssr/serializer/ShallowErrorPlugin.cjs.map +1 -0
  115. package/dist/cjs/ssr/serializer/ShallowErrorPlugin.d.cts +9 -0
  116. package/dist/cjs/ssr/serializer/seroval-plugins.cjs +13 -0
  117. package/dist/cjs/ssr/serializer/seroval-plugins.cjs.map +1 -0
  118. package/dist/cjs/ssr/serializer/seroval-plugins.d.cts +2 -0
  119. package/dist/cjs/ssr/serializer/transformer.cjs +53 -0
  120. package/dist/cjs/ssr/serializer/transformer.cjs.map +1 -0
  121. package/dist/cjs/ssr/serializer/transformer.d.cts +91 -0
  122. package/dist/cjs/ssr/server.cjs +13 -0
  123. package/dist/cjs/ssr/server.d.cts +6 -0
  124. package/dist/cjs/ssr/ssr-client.cjs +183 -0
  125. package/dist/cjs/ssr/ssr-client.cjs.map +1 -0
  126. package/dist/cjs/ssr/ssr-client.d.cts +10 -0
  127. package/dist/cjs/ssr/ssr-match-id.cjs +12 -0
  128. package/dist/cjs/ssr/ssr-match-id.cjs.map +1 -0
  129. package/dist/cjs/ssr/ssr-match-id.d.cts +2 -0
  130. package/dist/cjs/ssr/ssr-server.cjs +279 -0
  131. package/dist/cjs/ssr/ssr-server.cjs.map +1 -0
  132. package/dist/cjs/ssr/ssr-server.d.cts +42 -0
  133. package/dist/cjs/ssr/transformStreamWithRouter.cjs +327 -0
  134. package/dist/cjs/ssr/transformStreamWithRouter.cjs.map +1 -0
  135. package/dist/cjs/ssr/transformStreamWithRouter.d.cts +11 -0
  136. package/dist/cjs/ssr/tsrScript.cjs +6 -0
  137. package/dist/cjs/ssr/tsrScript.cjs.map +1 -0
  138. package/dist/cjs/ssr/tsrScript.d.cts +1 -0
  139. package/dist/cjs/ssr/types.d.cts +30 -0
  140. package/dist/cjs/stores.cjs +148 -0
  141. package/dist/cjs/stores.cjs.map +1 -0
  142. package/dist/cjs/stores.d.cts +70 -0
  143. package/dist/cjs/structuralSharing.d.cts +4 -0
  144. package/dist/cjs/typePrimitives.d.cts +65 -0
  145. package/dist/cjs/useLoaderData.d.cts +5 -0
  146. package/dist/cjs/useLoaderDeps.d.cts +5 -0
  147. package/dist/cjs/useNavigate.d.cts +3 -0
  148. package/dist/cjs/useParams.d.cts +5 -0
  149. package/dist/cjs/useRouteContext.d.cts +9 -0
  150. package/dist/cjs/useSearch.d.cts +5 -0
  151. package/dist/cjs/utils.cjs +339 -0
  152. package/dist/cjs/utils.cjs.map +1 -0
  153. package/dist/cjs/utils.d.cts +178 -0
  154. package/dist/cjs/validators.d.cts +51 -0
  155. package/dist/esm/Matches.d.ts +139 -0
  156. package/dist/esm/Matches.js +17 -0
  157. package/dist/esm/Matches.js.map +1 -0
  158. package/dist/esm/RouterProvider.d.ts +27 -0
  159. package/dist/esm/config.d.ts +17 -0
  160. package/dist/esm/config.js +11 -0
  161. package/dist/esm/config.js.map +1 -0
  162. package/dist/esm/defer.d.ts +37 -0
  163. package/dist/esm/defer.js +40 -0
  164. package/dist/esm/defer.js.map +1 -0
  165. package/dist/esm/fileRoute.d.ts +24 -0
  166. package/dist/esm/global.d.ts +7 -0
  167. package/dist/esm/hash-scroll.d.ts +7 -0
  168. package/dist/esm/hash-scroll.js +20 -0
  169. package/dist/esm/hash-scroll.js.map +1 -0
  170. package/dist/esm/history.d.ts +8 -0
  171. package/dist/esm/index.d.ts +53 -0
  172. package/dist/esm/index.js +24 -0
  173. package/dist/esm/invariant.d.ts +1 -0
  174. package/dist/esm/invariant.js +8 -0
  175. package/dist/esm/invariant.js.map +1 -0
  176. package/dist/esm/isServer/client.d.ts +1 -0
  177. package/dist/esm/isServer/client.js +6 -0
  178. package/dist/esm/isServer/client.js.map +1 -0
  179. package/dist/esm/isServer/development.d.ts +1 -0
  180. package/dist/esm/isServer/development.js +6 -0
  181. package/dist/esm/isServer/development.js.map +1 -0
  182. package/dist/esm/isServer/server.d.ts +1 -0
  183. package/dist/esm/isServer/server.js +6 -0
  184. package/dist/esm/isServer/server.js.map +1 -0
  185. package/dist/esm/link.d.ts +221 -0
  186. package/dist/esm/link.js +6 -0
  187. package/dist/esm/link.js.map +1 -0
  188. package/dist/esm/load-matches.d.ts +18 -0
  189. package/dist/esm/load-matches.js +657 -0
  190. package/dist/esm/load-matches.js.map +1 -0
  191. package/dist/esm/location.d.ts +50 -0
  192. package/dist/esm/lru-cache.d.ts +6 -0
  193. package/dist/esm/lru-cache.js +70 -0
  194. package/dist/esm/lru-cache.js.map +1 -0
  195. package/dist/esm/manifest.d.ts +35 -0
  196. package/dist/esm/manifest.js +17 -0
  197. package/dist/esm/manifest.js.map +1 -0
  198. package/dist/esm/new-process-route-tree.d.ts +236 -0
  199. package/dist/esm/new-process-route-tree.js +749 -0
  200. package/dist/esm/new-process-route-tree.js.map +1 -0
  201. package/dist/esm/not-found.d.ts +32 -0
  202. package/dist/esm/not-found.js +25 -0
  203. package/dist/esm/not-found.js.map +1 -0
  204. package/dist/esm/path.d.ts +56 -0
  205. package/dist/esm/path.js +243 -0
  206. package/dist/esm/path.js.map +1 -0
  207. package/dist/esm/qss.d.ts +33 -0
  208. package/dist/esm/qss.js +69 -0
  209. package/dist/esm/qss.js.map +1 -0
  210. package/dist/esm/redirect.d.ts +77 -0
  211. package/dist/esm/redirect.js +53 -0
  212. package/dist/esm/redirect.js.map +1 -0
  213. package/dist/esm/rewrite.d.ts +30 -0
  214. package/dist/esm/rewrite.js +65 -0
  215. package/dist/esm/rewrite.js.map +1 -0
  216. package/dist/esm/root.d.ts +3 -0
  217. package/dist/esm/root.js +7 -0
  218. package/dist/esm/root.js.map +1 -0
  219. package/dist/esm/route.d.ts +552 -0
  220. package/dist/esm/route.js +98 -0
  221. package/dist/esm/route.js.map +1 -0
  222. package/dist/esm/routeInfo.d.ts +54 -0
  223. package/dist/esm/router.d.ts +734 -0
  224. package/dist/esm/router.js +1165 -0
  225. package/dist/esm/router.js.map +1 -0
  226. package/dist/esm/scroll-restoration-inline.d.ts +6 -0
  227. package/dist/esm/scroll-restoration-inline.js +6 -0
  228. package/dist/esm/scroll-restoration-inline.js.map +1 -0
  229. package/dist/esm/scroll-restoration-script/client.d.ts +2 -0
  230. package/dist/esm/scroll-restoration-script/client.js +8 -0
  231. package/dist/esm/scroll-restoration-script/client.js.map +1 -0
  232. package/dist/esm/scroll-restoration-script/server.d.ts +2 -0
  233. package/dist/esm/scroll-restoration-script/server.js +29 -0
  234. package/dist/esm/scroll-restoration-script/server.js.map +1 -0
  235. package/dist/esm/scroll-restoration.d.ts +38 -0
  236. package/dist/esm/scroll-restoration.js +187 -0
  237. package/dist/esm/scroll-restoration.js.map +1 -0
  238. package/dist/esm/searchMiddleware.d.ts +25 -0
  239. package/dist/esm/searchMiddleware.js +54 -0
  240. package/dist/esm/searchMiddleware.js.map +1 -0
  241. package/dist/esm/searchParams.d.ts +31 -0
  242. package/dist/esm/searchParams.js +62 -0
  243. package/dist/esm/searchParams.js.map +1 -0
  244. package/dist/esm/ssr/client.d.ts +6 -0
  245. package/dist/esm/ssr/client.js +4 -0
  246. package/dist/esm/ssr/constants.d.ts +3 -0
  247. package/dist/esm/ssr/constants.js +7 -0
  248. package/dist/esm/ssr/constants.js.map +1 -0
  249. package/dist/esm/ssr/createRequestHandler.d.ts +9 -0
  250. package/dist/esm/ssr/createRequestHandler.js +44 -0
  251. package/dist/esm/ssr/createRequestHandler.js.map +1 -0
  252. package/dist/esm/ssr/handlerCallback.d.ts +9 -0
  253. package/dist/esm/ssr/handlerCallback.js +8 -0
  254. package/dist/esm/ssr/handlerCallback.js.map +1 -0
  255. package/dist/esm/ssr/headers.d.ts +3 -0
  256. package/dist/esm/ssr/headers.js +21 -0
  257. package/dist/esm/ssr/headers.js.map +1 -0
  258. package/dist/esm/ssr/json.d.ts +10 -0
  259. package/dist/esm/ssr/json.js +11 -0
  260. package/dist/esm/ssr/json.js.map +1 -0
  261. package/dist/esm/ssr/serializer/RawStream.d.ts +64 -0
  262. package/dist/esm/ssr/serializer/RawStream.js +282 -0
  263. package/dist/esm/ssr/serializer/RawStream.js.map +1 -0
  264. package/dist/esm/ssr/serializer/ShallowErrorPlugin.d.ts +9 -0
  265. package/dist/esm/ssr/serializer/ShallowErrorPlugin.js +33 -0
  266. package/dist/esm/ssr/serializer/ShallowErrorPlugin.js.map +1 -0
  267. package/dist/esm/ssr/serializer/seroval-plugins.d.ts +2 -0
  268. package/dist/esm/ssr/serializer/seroval-plugins.js +13 -0
  269. package/dist/esm/ssr/serializer/seroval-plugins.js.map +1 -0
  270. package/dist/esm/ssr/serializer/transformer.d.ts +91 -0
  271. package/dist/esm/ssr/serializer/transformer.js +51 -0
  272. package/dist/esm/ssr/serializer/transformer.js.map +1 -0
  273. package/dist/esm/ssr/server.d.ts +6 -0
  274. package/dist/esm/ssr/server.js +5 -0
  275. package/dist/esm/ssr/ssr-client.d.ts +10 -0
  276. package/dist/esm/ssr/ssr-client.js +183 -0
  277. package/dist/esm/ssr/ssr-client.js.map +1 -0
  278. package/dist/esm/ssr/ssr-match-id.d.ts +2 -0
  279. package/dist/esm/ssr/ssr-match-id.js +11 -0
  280. package/dist/esm/ssr/ssr-match-id.js.map +1 -0
  281. package/dist/esm/ssr/ssr-server.d.ts +42 -0
  282. package/dist/esm/ssr/ssr-server.js +277 -0
  283. package/dist/esm/ssr/ssr-server.js.map +1 -0
  284. package/dist/esm/ssr/transformStreamWithRouter.d.ts +11 -0
  285. package/dist/esm/ssr/transformStreamWithRouter.js +325 -0
  286. package/dist/esm/ssr/transformStreamWithRouter.js.map +1 -0
  287. package/dist/esm/ssr/tsrScript.d.ts +0 -0
  288. package/dist/esm/ssr/tsrScript.js +6 -0
  289. package/dist/esm/ssr/tsrScript.js.map +1 -0
  290. package/dist/esm/ssr/types.d.ts +30 -0
  291. package/dist/esm/stores.d.ts +70 -0
  292. package/dist/esm/stores.js +146 -0
  293. package/dist/esm/stores.js.map +1 -0
  294. package/dist/esm/structuralSharing.d.ts +4 -0
  295. package/dist/esm/typePrimitives.d.ts +65 -0
  296. package/dist/esm/useLoaderData.d.ts +5 -0
  297. package/dist/esm/useLoaderDeps.d.ts +5 -0
  298. package/dist/esm/useNavigate.d.ts +3 -0
  299. package/dist/esm/useParams.d.ts +5 -0
  300. package/dist/esm/useRouteContext.d.ts +9 -0
  301. package/dist/esm/useSearch.d.ts +5 -0
  302. package/dist/esm/utils.d.ts +178 -0
  303. package/dist/esm/utils.js +322 -0
  304. package/dist/esm/utils.js.map +1 -0
  305. package/dist/esm/validators.d.ts +51 -0
  306. package/package.json +200 -0
  307. package/skills/router-core/SKILL.md +139 -0
  308. package/skills/router-core/auth-and-guards/SKILL.md +458 -0
  309. package/skills/router-core/code-splitting/SKILL.md +322 -0
  310. package/skills/router-core/data-loading/SKILL.md +485 -0
  311. package/skills/router-core/navigation/SKILL.md +448 -0
  312. package/skills/router-core/not-found-and-errors/SKILL.md +435 -0
  313. package/skills/router-core/path-params/SKILL.md +382 -0
  314. package/skills/router-core/search-params/SKILL.md +349 -0
  315. package/skills/router-core/search-params/references/validation-patterns.md +379 -0
  316. package/skills/router-core/ssr/SKILL.md +437 -0
  317. package/skills/router-core/type-safety/SKILL.md +497 -0
  318. package/src/Matches.ts +291 -0
  319. package/src/RouterProvider.ts +47 -0
  320. package/src/config.ts +42 -0
  321. package/src/defer.ts +69 -0
  322. package/src/fileRoute.ts +164 -0
  323. package/src/global.ts +9 -0
  324. package/src/hash-scroll.ts +21 -0
  325. package/src/history.ts +9 -0
  326. package/src/index.ts +471 -0
  327. package/src/invariant.ts +3 -0
  328. package/src/isServer/client.ts +1 -0
  329. package/src/isServer/development.ts +2 -0
  330. package/src/isServer/server.ts +1 -0
  331. package/src/link.ts +704 -0
  332. package/src/load-matches.ts +1281 -0
  333. package/src/location.ts +51 -0
  334. package/src/lru-cache.ts +74 -0
  335. package/src/manifest.ts +68 -0
  336. package/src/new-process-route-tree.ts +1387 -0
  337. package/src/not-found.ts +41 -0
  338. package/src/path.ts +436 -0
  339. package/src/qss.ts +81 -0
  340. package/src/redirect.ts +179 -0
  341. package/src/rewrite.ts +93 -0
  342. package/src/root.ts +3 -0
  343. package/src/route.ts +2235 -0
  344. package/src/routeInfo.ts +235 -0
  345. package/src/router.ts +3207 -0
  346. package/src/scroll-restoration-inline.ts +81 -0
  347. package/src/scroll-restoration-script/client.ts +5 -0
  348. package/src/scroll-restoration-script/server.ts +64 -0
  349. package/src/scroll-restoration.ts +357 -0
  350. package/src/searchMiddleware.ts +76 -0
  351. package/src/searchParams.ts +90 -0
  352. package/src/ssr/client.ts +6 -0
  353. package/src/ssr/constants.ts +3 -0
  354. package/src/ssr/createRequestHandler.ts +98 -0
  355. package/src/ssr/handlerCallback.ts +15 -0
  356. package/src/ssr/headers.ts +40 -0
  357. package/src/ssr/json.ts +16 -0
  358. package/src/ssr/serializer/RawStream.ts +464 -0
  359. package/src/ssr/serializer/ShallowErrorPlugin.ts +43 -0
  360. package/src/ssr/serializer/seroval-plugins.ts +12 -0
  361. package/src/ssr/serializer/transformer.ts +312 -0
  362. package/src/ssr/server.ts +14 -0
  363. package/src/ssr/ssr-client.ts +313 -0
  364. package/src/ssr/ssr-match-id.ts +7 -0
  365. package/src/ssr/ssr-server.ts +425 -0
  366. package/src/ssr/transformStreamWithRouter.ts +493 -0
  367. package/src/ssr/tsrScript.ts +20 -0
  368. package/src/ssr/types.ts +41 -0
  369. package/src/stores.ts +342 -0
  370. package/src/structuralSharing.ts +7 -0
  371. package/src/typePrimitives.ts +181 -0
  372. package/src/useLoaderData.ts +20 -0
  373. package/src/useLoaderDeps.ts +13 -0
  374. package/src/useNavigate.ts +13 -0
  375. package/src/useParams.ts +20 -0
  376. package/src/useRouteContext.ts +39 -0
  377. package/src/useSearch.ts +20 -0
  378. package/src/utils.ts +708 -0
  379. package/src/validators.ts +121 -0
  380. package/src/vite-env.d.ts +4 -0
package/src/link.ts ADDED
@@ -0,0 +1,704 @@
1
+ import type { HistoryState, ParsedHistoryState } from '@benjavicente/history'
2
+ import type {
3
+ AllParams,
4
+ CatchAllPaths,
5
+ CurrentPath,
6
+ FullSearchSchema,
7
+ FullSearchSchemaInput,
8
+ ParentPath,
9
+ RouteByPath,
10
+ RouteByToPath,
11
+ RoutePaths,
12
+ RouteToPath,
13
+ ToPath,
14
+ } from './routeInfo'
15
+ import type {
16
+ AnyRouter,
17
+ RegisteredRouter,
18
+ ViewTransitionOptions,
19
+ } from './router'
20
+ import type {
21
+ ConstrainLiteral,
22
+ Expand,
23
+ MakeDifferenceOptional,
24
+ NoInfer,
25
+ NonNullableUpdater,
26
+ Updater,
27
+ } from './utils'
28
+ import type { ParsedLocation } from './location'
29
+
30
+ export type IsRequiredParams<TParams> =
31
+ Record<never, never> extends TParams ? never : true
32
+
33
+ export interface ParsePathParamsResult<
34
+ in out TRequired,
35
+ in out TOptional,
36
+ in out TRest,
37
+ > {
38
+ required: TRequired
39
+ optional: TOptional
40
+ rest: TRest
41
+ }
42
+
43
+ export type AnyParsePathParamsResult = ParsePathParamsResult<
44
+ string,
45
+ string,
46
+ string
47
+ >
48
+
49
+ export type ParsePathParamsBoundaryStart<T extends string> =
50
+ T extends `${infer TLeft}{-${infer TRight}`
51
+ ? ParsePathParamsResult<
52
+ ParsePathParams<TLeft>['required'],
53
+ | ParsePathParams<TLeft>['optional']
54
+ | ParsePathParams<TRight>['required']
55
+ | ParsePathParams<TRight>['optional'],
56
+ ParsePathParams<TRight>['rest']
57
+ >
58
+ : T extends `${infer TLeft}{${infer TRight}`
59
+ ? ParsePathParamsResult<
60
+ | ParsePathParams<TLeft>['required']
61
+ | ParsePathParams<TRight>['required'],
62
+ | ParsePathParams<TLeft>['optional']
63
+ | ParsePathParams<TRight>['optional'],
64
+ ParsePathParams<TRight>['rest']
65
+ >
66
+ : never
67
+
68
+ export type ParsePathParamsSymbol<T extends string> =
69
+ T extends `${string}$${infer TRight}`
70
+ ? TRight extends `${string}/${string}`
71
+ ? TRight extends `${infer TParam}/${infer TRest}`
72
+ ? TParam extends ''
73
+ ? ParsePathParamsResult<
74
+ ParsePathParams<TRest>['required'],
75
+ '_splat' | ParsePathParams<TRest>['optional'],
76
+ ParsePathParams<TRest>['rest']
77
+ >
78
+ : ParsePathParamsResult<
79
+ TParam | ParsePathParams<TRest>['required'],
80
+ ParsePathParams<TRest>['optional'],
81
+ ParsePathParams<TRest>['rest']
82
+ >
83
+ : never
84
+ : TRight extends ''
85
+ ? ParsePathParamsResult<never, '_splat', never>
86
+ : ParsePathParamsResult<TRight, never, never>
87
+ : never
88
+
89
+ export type ParsePathParamsBoundaryEnd<T extends string> =
90
+ T extends `${infer TLeft}}${infer TRight}`
91
+ ? ParsePathParamsResult<
92
+ | ParsePathParams<TLeft>['required']
93
+ | ParsePathParams<TRight>['required'],
94
+ | ParsePathParams<TLeft>['optional']
95
+ | ParsePathParams<TRight>['optional'],
96
+ ParsePathParams<TRight>['rest']
97
+ >
98
+ : never
99
+
100
+ export type ParsePathParamsEscapeStart<T extends string> =
101
+ T extends `${infer TLeft}[${infer TRight}`
102
+ ? ParsePathParamsResult<
103
+ | ParsePathParams<TLeft>['required']
104
+ | ParsePathParams<TRight>['required'],
105
+ | ParsePathParams<TLeft>['optional']
106
+ | ParsePathParams<TRight>['optional'],
107
+ ParsePathParams<TRight>['rest']
108
+ >
109
+ : never
110
+
111
+ export type ParsePathParamsEscapeEnd<T extends string> =
112
+ T extends `${string}]${infer TRight}` ? ParsePathParams<TRight> : never
113
+
114
+ export type ParsePathParams<T extends string> = T extends `${string}[${string}`
115
+ ? ParsePathParamsEscapeStart<T>
116
+ : T extends `${string}]${string}`
117
+ ? ParsePathParamsEscapeEnd<T>
118
+ : T extends `${string}}${string}`
119
+ ? ParsePathParamsBoundaryEnd<T>
120
+ : T extends `${string}{${string}`
121
+ ? ParsePathParamsBoundaryStart<T>
122
+ : T extends `${string}$${string}`
123
+ ? ParsePathParamsSymbol<T>
124
+ : never
125
+
126
+ export type AddTrailingSlash<T> = T extends `${string}/` ? T : `${T & string}/`
127
+
128
+ export type RemoveTrailingSlashes<T> = T & `${string}/` extends never
129
+ ? T
130
+ : T extends `${infer R}/`
131
+ ? R
132
+ : T
133
+
134
+ export type AddLeadingSlash<T> = T & `/${string}` extends never
135
+ ? `/${T & string}`
136
+ : T
137
+
138
+ export type RemoveLeadingSlashes<T> = T & `/${string}` extends never
139
+ ? T
140
+ : T extends `/${infer R}`
141
+ ? R
142
+ : T
143
+
144
+ type JoinPath<TLeft extends string, TRight extends string> = TRight extends ''
145
+ ? TLeft
146
+ : TLeft extends ''
147
+ ? TRight
148
+ : `${RemoveTrailingSlashes<TLeft>}/${RemoveLeadingSlashes<TRight>}`
149
+
150
+ type RemoveLastSegment<
151
+ T extends string,
152
+ TAcc extends string = '',
153
+ > = T extends `${infer TSegment}/${infer TRest}`
154
+ ? TRest & `${string}/${string}` extends never
155
+ ? TRest extends ''
156
+ ? TAcc
157
+ : `${TAcc}${TSegment}`
158
+ : RemoveLastSegment<TRest, `${TAcc}${TSegment}/`>
159
+ : TAcc
160
+
161
+ export type ResolveCurrentPath<
162
+ TFrom extends string,
163
+ TTo extends string,
164
+ > = TTo extends '.'
165
+ ? TFrom
166
+ : TTo extends './'
167
+ ? AddTrailingSlash<TFrom>
168
+ : TTo & `./${string}` extends never
169
+ ? never
170
+ : TTo extends `./${infer TRest}`
171
+ ? AddLeadingSlash<JoinPath<TFrom, TRest>>
172
+ : never
173
+
174
+ export type ResolveParentPath<
175
+ TFrom extends string,
176
+ TTo extends string,
177
+ > = TTo extends '../' | '..'
178
+ ? TFrom extends '' | '/'
179
+ ? never
180
+ : AddLeadingSlash<RemoveLastSegment<TFrom>>
181
+ : TTo & `../${string}` extends never
182
+ ? AddLeadingSlash<JoinPath<TFrom, TTo>>
183
+ : TFrom extends '' | '/'
184
+ ? never
185
+ : TTo extends `../${infer ToRest}`
186
+ ? ResolveParentPath<RemoveLastSegment<TFrom>, ToRest>
187
+ : AddLeadingSlash<JoinPath<TFrom, TTo>>
188
+
189
+ export type ResolveRelativePath<TFrom, TTo = '.'> = string extends TFrom
190
+ ? TTo
191
+ : string extends TTo
192
+ ? TFrom
193
+ : undefined extends TTo
194
+ ? TFrom
195
+ : TTo extends string
196
+ ? TFrom extends string
197
+ ? TTo extends `/${string}`
198
+ ? TTo
199
+ : TTo extends `..${string}`
200
+ ? ResolveParentPath<TFrom, TTo>
201
+ : TTo extends `.${string}`
202
+ ? ResolveCurrentPath<TFrom, TTo>
203
+ : AddLeadingSlash<JoinPath<TFrom, TTo>>
204
+ : never
205
+ : never
206
+
207
+ export type FindDescendantToPaths<
208
+ TRouter extends AnyRouter,
209
+ TPrefix extends string,
210
+ > = `${TPrefix}/${string}` & RouteToPath<TRouter>
211
+
212
+ export type InferDescendantToPaths<
213
+ TRouter extends AnyRouter,
214
+ TPrefix extends string,
215
+ TPaths = FindDescendantToPaths<TRouter, TPrefix>,
216
+ > = TPaths extends `${TPrefix}/`
217
+ ? never
218
+ : TPaths extends `${TPrefix}/${infer TRest}`
219
+ ? TRest
220
+ : never
221
+
222
+ export type RelativeToPath<
223
+ TRouter extends AnyRouter,
224
+ TTo extends string,
225
+ TResolvedPath extends string,
226
+ > =
227
+ | (TResolvedPath & RouteToPath<TRouter> extends never
228
+ ? never
229
+ : ToPath<TRouter, TTo>)
230
+ | `${RemoveTrailingSlashes<TTo>}/${InferDescendantToPaths<TRouter, RemoveTrailingSlashes<TResolvedPath>>}`
231
+
232
+ export type RelativeToParentPath<
233
+ TRouter extends AnyRouter,
234
+ TFrom extends string,
235
+ TTo extends string,
236
+ TResolvedPath extends string = ResolveRelativePath<TFrom, TTo>,
237
+ > =
238
+ | RelativeToPath<TRouter, TTo, TResolvedPath>
239
+ | (TTo extends `${string}..` | `${string}../`
240
+ ? TResolvedPath extends '/' | ''
241
+ ? never
242
+ : FindDescendantToPaths<
243
+ TRouter,
244
+ RemoveTrailingSlashes<TResolvedPath>
245
+ > extends never
246
+ ? never
247
+ : `${RemoveTrailingSlashes<TTo>}/${ParentPath<TRouter>}`
248
+ : never)
249
+
250
+ export type RelativeToCurrentPath<
251
+ TRouter extends AnyRouter,
252
+ TFrom extends string,
253
+ TTo extends string,
254
+ TResolvedPath extends string = ResolveRelativePath<TFrom, TTo>,
255
+ > = RelativeToPath<TRouter, TTo, TResolvedPath> | CurrentPath<TRouter>
256
+
257
+ export type AbsoluteToPath<TRouter extends AnyRouter, TFrom extends string> =
258
+ | (string extends TFrom
259
+ ? CurrentPath<TRouter>
260
+ : TFrom extends `/`
261
+ ? never
262
+ : CurrentPath<TRouter>)
263
+ | (string extends TFrom
264
+ ? ParentPath<TRouter>
265
+ : TFrom extends `/`
266
+ ? never
267
+ : ParentPath<TRouter>)
268
+ | RouteToPath<TRouter>
269
+ | (TFrom extends '/'
270
+ ? never
271
+ : string extends TFrom
272
+ ? never
273
+ : InferDescendantToPaths<TRouter, RemoveTrailingSlashes<TFrom>>)
274
+
275
+ export type RelativeToPathAutoComplete<
276
+ TRouter extends AnyRouter,
277
+ TFrom extends string,
278
+ TTo extends string,
279
+ > = string extends TTo
280
+ ? string
281
+ : string extends TFrom
282
+ ? AbsoluteToPath<TRouter, TFrom>
283
+ : TTo & `..${string}` extends never
284
+ ? TTo & `.${string}` extends never
285
+ ? AbsoluteToPath<TRouter, TFrom>
286
+ : RelativeToCurrentPath<TRouter, TFrom, TTo>
287
+ : RelativeToParentPath<TRouter, TFrom, TTo>
288
+
289
+ export type NavigateOptions<
290
+ TRouter extends AnyRouter = RegisteredRouter,
291
+ TFrom extends string = string,
292
+ TTo extends string | undefined = '.',
293
+ TMaskFrom extends string = TFrom,
294
+ TMaskTo extends string = '.',
295
+ > = ToOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & NavigateOptionProps
296
+
297
+ /**
298
+ * The NavigateOptions type is used to describe the options that can be used when describing a navigation action in TanStack Router.
299
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/NavigateOptionsType)
300
+ */
301
+ export interface NavigateOptionProps {
302
+ /**
303
+ * If set to `true`, the router will scroll the element with an id matching the hash into view with default `ScrollIntoViewOptions`.
304
+ * If set to `false`, the router will not scroll the element with an id matching the hash into view.
305
+ * If set to `ScrollIntoViewOptions`, the router will scroll the element with an id matching the hash into view with the provided options.
306
+ * @default true
307
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/NavigateOptionsType#hashscrollintoview)
308
+ * @see [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView)
309
+ */
310
+ hashScrollIntoView?: boolean | ScrollIntoViewOptions
311
+ /**
312
+ * `replace` is a boolean that determines whether the navigation should replace the current history entry or push a new one.
313
+ * @default false
314
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/NavigateOptionsType#replace)
315
+ */
316
+ replace?: boolean
317
+ /**
318
+ * Defaults to `true` so that the scroll position will be reset to 0,0 after the location is committed to the browser history.
319
+ * If `false`, the scroll position will not be reset to 0,0 after the location is committed to history.
320
+ * @default true
321
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/NavigateOptionsType#resetscroll)
322
+ */
323
+ resetScroll?: boolean
324
+ /** @deprecated All navigations now use startTransition under the hood */
325
+ startTransition?: boolean
326
+ /**
327
+ * If set to `true`, the router will wrap the resulting navigation in a `document.startViewTransition()` call.
328
+ * If `ViewTransitionOptions`, route navigations will be called using `document.startViewTransition({update, types})`
329
+ * where `types` will be the strings array passed with `ViewTransitionOptions["types"]`.
330
+ * If the browser does not support viewTransition types, the navigation will fall back to normal `document.startTransition()`, same as if `true` was passed.
331
+ *
332
+ * If the browser does not support this api, this option will be ignored.
333
+ * @default false
334
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/NavigateOptionsType#viewtransition)
335
+ * @see [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Document/startViewTransition)
336
+ * @see [Google](https://developer.chrome.com/docs/web-platform/view-transitions/same-document#view-transition-types)
337
+ */
338
+ viewTransition?: boolean | ViewTransitionOptions
339
+ /**
340
+ * If `true`, navigation will ignore any blockers that might prevent it.
341
+ * @default false
342
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/NavigateOptionsType#ignoreblocker)
343
+ */
344
+ ignoreBlocker?: boolean
345
+ /**
346
+ * If `true`, navigation to a route inside of router will trigger a full page load instead of the traditional SPA navigation.
347
+ * @default false
348
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/NavigateOptionsType#reloaddocument)
349
+ */
350
+ reloadDocument?: boolean
351
+ /**
352
+ * This can be used instead of `to` to navigate to a fully built href, e.g. pointing to an external target.
353
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/NavigateOptionsType#href)
354
+ */
355
+ href?: string
356
+ /** @internal */
357
+ publicHref?: string
358
+ }
359
+
360
+ export type ToOptions<
361
+ TRouter extends AnyRouter = RegisteredRouter,
362
+ TFrom extends string = string,
363
+ TTo extends string | undefined = '.',
364
+ TMaskFrom extends string = TFrom,
365
+ TMaskTo extends string = '.',
366
+ > = ToSubOptions<TRouter, TFrom, TTo> & MaskOptions<TRouter, TMaskFrom, TMaskTo>
367
+
368
+ export interface MaskOptions<
369
+ in out TRouter extends AnyRouter,
370
+ in out TMaskFrom extends string,
371
+ in out TMaskTo extends string,
372
+ > {
373
+ _fromLocation?: ParsedLocation
374
+ mask?: ToMaskOptions<TRouter, TMaskFrom, TMaskTo>
375
+ }
376
+
377
+ export type ToMaskOptions<
378
+ TRouter extends AnyRouter = RegisteredRouter,
379
+ TMaskFrom extends string = string,
380
+ TMaskTo extends string = '.',
381
+ > = ToSubOptions<TRouter, TMaskFrom, TMaskTo> & {
382
+ unmaskOnReload?: boolean
383
+ }
384
+
385
+ export type ToSubOptions<
386
+ TRouter extends AnyRouter = RegisteredRouter,
387
+ TFrom extends string = string,
388
+ TTo extends string | undefined = '.',
389
+ > = ToSubOptionsProps<TRouter, TFrom, TTo> &
390
+ SearchParamOptions<TRouter, TFrom, TTo> &
391
+ PathParamOptions<TRouter, TFrom, TTo>
392
+
393
+ export interface RequiredToOptions<
394
+ in out TRouter extends AnyRouter,
395
+ in out TFrom extends string,
396
+ in out TTo extends string | undefined,
397
+ > {
398
+ /**
399
+ * The internal route path to navigate to. This should be a relative or absolute path within your application.
400
+ * For external URLs, use the `href` property instead.
401
+ * @example "/dashboard" or "../profile"
402
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/NavigateOptionsType#href)
403
+ */
404
+ to: ToPathOption<TRouter, TFrom, TTo> & {}
405
+ }
406
+
407
+ export interface OptionalToOptions<
408
+ in out TRouter extends AnyRouter,
409
+ in out TFrom extends string,
410
+ in out TTo extends string | undefined,
411
+ > {
412
+ /**
413
+ * The internal route path to navigate to. This should be a relative or absolute path within your application.
414
+ * For external URLs, use the `href` property instead.
415
+ * @example "/dashboard" or "../profile"
416
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/NavigateOptionsType#href)
417
+ */
418
+ to?: ToPathOption<TRouter, TFrom, TTo> & {}
419
+ }
420
+
421
+ export type MakeToRequired<
422
+ TRouter extends AnyRouter,
423
+ TFrom extends string,
424
+ TTo extends string | undefined,
425
+ > = string extends TFrom
426
+ ? string extends TTo
427
+ ? OptionalToOptions<TRouter, TFrom, TTo>
428
+ : TTo & CatchAllPaths<TRouter> extends never
429
+ ? RequiredToOptions<TRouter, TFrom, TTo>
430
+ : OptionalToOptions<TRouter, TFrom, TTo>
431
+ : OptionalToOptions<TRouter, TFrom, TTo>
432
+
433
+ export type ToSubOptionsProps<
434
+ TRouter extends AnyRouter = RegisteredRouter,
435
+ TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
436
+ TTo extends string | undefined = '.',
437
+ > = MakeToRequired<TRouter, TFrom, TTo> & {
438
+ hash?: true | Updater<string>
439
+ state?: true | NonNullableUpdater<ParsedHistoryState, HistoryState>
440
+ from?: FromPathOption<TRouter, TFrom> & {}
441
+ unsafeRelative?: 'path'
442
+ }
443
+
444
+ export type ParamsReducerFn<
445
+ in out TRouter extends AnyRouter,
446
+ in out TParamVariant extends ParamVariant,
447
+ in out TFrom,
448
+ in out TTo,
449
+ > = (
450
+ current: Expand<ResolveFromParams<TRouter, TParamVariant, TFrom>>,
451
+ ) => Expand<ResolveRelativeToParams<TRouter, TParamVariant, TFrom, TTo>>
452
+
453
+ type ParamsReducer<
454
+ TRouter extends AnyRouter,
455
+ TParamVariant extends ParamVariant,
456
+ TFrom,
457
+ TTo,
458
+ > =
459
+ | Expand<ResolveRelativeToParams<TRouter, TParamVariant, TFrom, TTo>>
460
+ | (ParamsReducerFn<TRouter, TParamVariant, TFrom, TTo> & {})
461
+
462
+ type ParamVariant = 'PATH' | 'SEARCH'
463
+
464
+ export type ResolveRoute<
465
+ TRouter extends AnyRouter,
466
+ TFrom,
467
+ TTo,
468
+ TPath = ResolveRelativePath<TFrom, TTo>,
469
+ > = TPath extends string
470
+ ? TFrom extends TPath
471
+ ? RouteByPath<TRouter['routeTree'], TPath>
472
+ : RouteByToPath<TRouter, TPath>
473
+ : never
474
+
475
+ type ResolveFromParamType<TParamVariant extends ParamVariant> =
476
+ TParamVariant extends 'PATH' ? 'allParams' : 'fullSearchSchema'
477
+
478
+ type ResolveFromAllParams<
479
+ TRouter extends AnyRouter,
480
+ TParamVariant extends ParamVariant,
481
+ > = TParamVariant extends 'PATH'
482
+ ? AllParams<TRouter['routeTree']>
483
+ : FullSearchSchema<TRouter['routeTree']>
484
+
485
+ type ResolveFromParams<
486
+ TRouter extends AnyRouter,
487
+ TParamVariant extends ParamVariant,
488
+ TFrom,
489
+ > = string extends TFrom
490
+ ? ResolveFromAllParams<TRouter, TParamVariant>
491
+ : RouteByPath<
492
+ TRouter['routeTree'],
493
+ TFrom
494
+ >['types'][ResolveFromParamType<TParamVariant>]
495
+
496
+ type ResolveToParamType<TParamVariant extends ParamVariant> =
497
+ TParamVariant extends 'PATH' ? 'allParams' : 'fullSearchSchemaInput'
498
+
499
+ type ResolveAllToParams<
500
+ TRouter extends AnyRouter,
501
+ TParamVariant extends ParamVariant,
502
+ > = TParamVariant extends 'PATH'
503
+ ? AllParams<TRouter['routeTree']>
504
+ : FullSearchSchemaInput<TRouter['routeTree']>
505
+
506
+ export type ResolveToParams<
507
+ TRouter extends AnyRouter,
508
+ TParamVariant extends ParamVariant,
509
+ TFrom,
510
+ TTo,
511
+ > =
512
+ ResolveRelativePath<TFrom, TTo> extends infer TPath
513
+ ? undefined extends TPath
514
+ ? never
515
+ : string extends TPath
516
+ ? ResolveAllToParams<TRouter, TParamVariant>
517
+ : TPath extends CatchAllPaths<TRouter>
518
+ ? ResolveAllToParams<TRouter, TParamVariant>
519
+ : ResolveRoute<
520
+ TRouter,
521
+ TFrom,
522
+ TTo
523
+ >['types'][ResolveToParamType<TParamVariant>]
524
+ : never
525
+
526
+ type ResolveRelativeToParams<
527
+ TRouter extends AnyRouter,
528
+ TParamVariant extends ParamVariant,
529
+ TFrom,
530
+ TTo,
531
+ TToParams = ResolveToParams<TRouter, TParamVariant, TFrom, TTo>,
532
+ > = TParamVariant extends 'SEARCH'
533
+ ? TToParams
534
+ : string extends TFrom
535
+ ? TToParams
536
+ : MakeDifferenceOptional<
537
+ ResolveFromParams<TRouter, TParamVariant, TFrom>,
538
+ TToParams
539
+ >
540
+
541
+ export interface MakeOptionalSearchParams<
542
+ in out TRouter extends AnyRouter,
543
+ in out TFrom,
544
+ in out TTo,
545
+ > {
546
+ search?: true | (ParamsReducer<TRouter, 'SEARCH', TFrom, TTo> & {})
547
+ }
548
+
549
+ export interface MakeOptionalPathParams<
550
+ in out TRouter extends AnyRouter,
551
+ in out TFrom,
552
+ in out TTo,
553
+ > {
554
+ params?: true | (ParamsReducer<TRouter, 'PATH', TFrom, TTo> & {})
555
+ }
556
+
557
+ type MakeRequiredParamsReducer<
558
+ TRouter extends AnyRouter,
559
+ TParamVariant extends ParamVariant,
560
+ TFrom,
561
+ TTo,
562
+ > =
563
+ | (string extends TFrom
564
+ ? never
565
+ : ResolveFromParams<
566
+ TRouter,
567
+ TParamVariant,
568
+ TFrom
569
+ > extends ResolveRelativeToParams<TRouter, TParamVariant, TFrom, TTo>
570
+ ? true
571
+ : never)
572
+ | (ParamsReducer<TRouter, TParamVariant, TFrom, TTo> & {})
573
+
574
+ export interface MakeRequiredPathParams<
575
+ in out TRouter extends AnyRouter,
576
+ in out TFrom,
577
+ in out TTo,
578
+ > {
579
+ params: MakeRequiredParamsReducer<TRouter, 'PATH', TFrom, TTo> & {}
580
+ }
581
+
582
+ export interface MakeRequiredSearchParams<
583
+ in out TRouter extends AnyRouter,
584
+ in out TFrom,
585
+ in out TTo,
586
+ > {
587
+ search: MakeRequiredParamsReducer<TRouter, 'SEARCH', TFrom, TTo> & {}
588
+ }
589
+
590
+ export type IsRequired<
591
+ TRouter extends AnyRouter,
592
+ TParamVariant extends ParamVariant,
593
+ TFrom,
594
+ TTo,
595
+ > =
596
+ ResolveRelativePath<TFrom, TTo> extends infer TPath
597
+ ? undefined extends TPath
598
+ ? never
599
+ : TPath extends CatchAllPaths<TRouter>
600
+ ? never
601
+ : IsRequiredParams<
602
+ ResolveRelativeToParams<TRouter, TParamVariant, TFrom, TTo>
603
+ >
604
+ : never
605
+
606
+ export type SearchParamOptions<TRouter extends AnyRouter, TFrom, TTo> =
607
+ IsRequired<TRouter, 'SEARCH', TFrom, TTo> extends never
608
+ ? MakeOptionalSearchParams<TRouter, TFrom, TTo>
609
+ : MakeRequiredSearchParams<TRouter, TFrom, TTo>
610
+
611
+ export type PathParamOptions<TRouter extends AnyRouter, TFrom, TTo> =
612
+ IsRequired<TRouter, 'PATH', TFrom, TTo> extends never
613
+ ? MakeOptionalPathParams<TRouter, TFrom, TTo>
614
+ : MakeRequiredPathParams<TRouter, TFrom, TTo>
615
+
616
+ export type ToPathOption<
617
+ TRouter extends AnyRouter = AnyRouter,
618
+ TFrom extends string = string,
619
+ TTo extends string | undefined = string,
620
+ > = ConstrainLiteral<
621
+ TTo,
622
+ RelativeToPathAutoComplete<
623
+ TRouter,
624
+ NoInfer<TFrom> extends string ? NoInfer<TFrom> : '',
625
+ NoInfer<TTo> & string
626
+ >
627
+ >
628
+
629
+ export type FromPathOption<TRouter extends AnyRouter, TFrom> = ConstrainLiteral<
630
+ TFrom,
631
+ RoutePaths<TRouter['routeTree']>
632
+ >
633
+
634
+ /**
635
+ * @link [Guide](https://tanstack.com/router/latest/docs/framework/react/guide/navigation#active-options)
636
+ */
637
+ export interface ActiveOptions {
638
+ /**
639
+ * If true, the link will be active if the current route matches the `to` route path exactly (no children routes)
640
+ * @default false
641
+ */
642
+ exact?: boolean
643
+ /**
644
+ * If true, the link will only be active if the current URL hash matches the `hash` prop
645
+ * @default false
646
+ */
647
+ includeHash?: boolean
648
+ /**
649
+ * If true, the link will only be active if the current URL search params inclusively match the `search` prop
650
+ * @default true
651
+ */
652
+ includeSearch?: boolean
653
+ /**
654
+ * This modifies the `includeSearch` behavior.
655
+ * If true, properties in `search` that are explicitly `undefined` must NOT be present in the current URL search params for the link to be active.
656
+ * @default false
657
+ */
658
+ explicitUndefined?: boolean
659
+ }
660
+
661
+ export interface LinkOptionsProps {
662
+ /**
663
+ * The standard anchor tag target attribute
664
+ */
665
+ target?: HTMLAnchorElement['target']
666
+ /**
667
+ * Configurable options to determine if the link should be considered active or not
668
+ * @default {exact:true,includeHash:true}
669
+ */
670
+ activeOptions?: ActiveOptions
671
+ /**
672
+ * The preloading strategy for this link
673
+ * - `false` - No preloading
674
+ * - `'intent'` - Preload the linked route on hover and cache it for this many milliseconds in hopes that the user will eventually navigate there.
675
+ * - `'viewport'` - Preload the linked route when it enters the viewport
676
+ */
677
+ preload?: false | 'intent' | 'viewport' | 'render'
678
+ /**
679
+ * When a preload strategy is set, this delays the preload by this many milliseconds.
680
+ * If the user exits the link before this delay, the preload will be cancelled.
681
+ */
682
+ preloadDelay?: number
683
+ /**
684
+ * Control whether the link should be disabled or not
685
+ * If set to `true`, the link will be rendered without an `href` attribute
686
+ * @default false
687
+ */
688
+ disabled?: boolean
689
+ /**
690
+ * When the preload strategy is set to `intent`, this controls the proximity of the link to the cursor before it is preloaded.
691
+ * If the user exits this proximity before this delay, the preload will be cancelled.
692
+ */
693
+ preloadIntentProximity?: number
694
+ }
695
+
696
+ export type LinkOptions<
697
+ TRouter extends AnyRouter = RegisteredRouter,
698
+ TFrom extends string = string,
699
+ TTo extends string | undefined = '.',
700
+ TMaskFrom extends string = TFrom,
701
+ TMaskTo extends string = '.',
702
+ > = NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & LinkOptionsProps
703
+
704
+ export const preloadWarning = 'Error preloading route! ☝️'