@rangojs/router 0.0.0-experimental.7 → 0.0.0-experimental.73ab3466

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 (1106) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +884 -4
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +1606 -0
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/dist/browser/react/use-client-cache.js +39 -0
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +4639 -931
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +69 -59
  809. package/skills/breadcrumbs/SKILL.md +250 -0
  810. package/skills/cache-guide/SKILL.md +294 -0
  811. package/skills/caching/SKILL.md +93 -23
  812. package/skills/composability/SKILL.md +172 -0
  813. package/skills/debug-manifest/SKILL.md +12 -8
  814. package/skills/document-cache/SKILL.md +18 -16
  815. package/skills/fonts/SKILL.md +167 -0
  816. package/skills/hooks/SKILL.md +334 -72
  817. package/skills/host-router/SKILL.md +218 -0
  818. package/skills/intercept/SKILL.md +131 -8
  819. package/skills/layout/SKILL.md +100 -3
  820. package/skills/links/SKILL.md +89 -30
  821. package/skills/loader/SKILL.md +404 -44
  822. package/skills/middleware/SKILL.md +171 -34
  823. package/skills/mime-routes/SKILL.md +128 -0
  824. package/skills/parallel/SKILL.md +204 -1
  825. package/skills/prerender/SKILL.md +643 -0
  826. package/skills/rango/SKILL.md +85 -16
  827. package/skills/response-routes/SKILL.md +411 -0
  828. package/skills/route/SKILL.md +257 -14
  829. package/skills/router-setup/SKILL.md +175 -32
  830. package/skills/tailwind/SKILL.md +129 -0
  831. package/skills/theme/SKILL.md +9 -8
  832. package/skills/typesafety/SKILL.md +328 -89
  833. package/skills/use-cache/SKILL.md +324 -0
  834. package/src/__internal.ts +102 -4
  835. package/src/bin/rango.ts +321 -0
  836. package/src/browser/action-coordinator.ts +97 -0
  837. package/src/browser/action-response-classifier.ts +99 -0
  838. package/src/browser/debug-channel.ts +93 -0
  839. package/src/browser/event-controller.ts +92 -64
  840. package/src/browser/history-state.ts +80 -0
  841. package/src/browser/intercept-utils.ts +52 -0
  842. package/src/browser/link-interceptor.ts +24 -4
  843. package/src/browser/logging.ts +55 -0
  844. package/src/browser/merge-segment-loaders.ts +20 -12
  845. package/src/browser/navigation-bridge.ts +282 -557
  846. package/src/browser/navigation-client.ts +182 -72
  847. package/src/browser/navigation-store.ts +33 -50
  848. package/src/browser/navigation-transaction.ts +297 -0
  849. package/src/browser/network-error-handler.ts +61 -0
  850. package/src/browser/partial-update.ts +303 -310
  851. package/src/browser/prefetch/cache.ts +206 -0
  852. package/src/browser/prefetch/fetch.ts +144 -0
  853. package/src/browser/prefetch/observer.ts +65 -0
  854. package/src/browser/prefetch/policy.ts +48 -0
  855. package/src/browser/prefetch/queue.ts +160 -0
  856. package/src/browser/prefetch/resource-ready.ts +77 -0
  857. package/src/browser/rango-state.ts +112 -0
  858. package/src/browser/react/Link.tsx +193 -73
  859. package/src/browser/react/NavigationProvider.tsx +80 -11
  860. package/src/browser/react/context.ts +6 -0
  861. package/src/browser/react/filter-segment-order.ts +11 -0
  862. package/src/browser/react/index.ts +12 -12
  863. package/src/browser/react/location-state-shared.ts +95 -53
  864. package/src/browser/react/location-state.ts +60 -15
  865. package/src/browser/react/mount-context.ts +6 -1
  866. package/src/browser/react/nonce-context.ts +23 -0
  867. package/src/browser/react/shallow-equal.ts +27 -0
  868. package/src/browser/react/use-action.ts +29 -51
  869. package/src/browser/react/use-client-cache.ts +5 -3
  870. package/src/browser/react/use-handle.ts +32 -79
  871. package/src/browser/react/use-href.tsx +2 -2
  872. package/src/browser/react/use-link-status.ts +6 -5
  873. package/src/browser/react/use-navigation.ts +22 -63
  874. package/src/browser/react/use-params.ts +65 -0
  875. package/src/browser/react/use-pathname.ts +47 -0
  876. package/src/browser/react/use-router.ts +63 -0
  877. package/src/browser/react/use-search-params.ts +56 -0
  878. package/src/browser/react/use-segments.ts +80 -97
  879. package/src/browser/response-adapter.ts +73 -0
  880. package/src/browser/rsc-router.tsx +188 -55
  881. package/src/browser/scroll-restoration.ts +117 -44
  882. package/src/browser/segment-reconciler.ts +221 -0
  883. package/src/browser/segment-structure-assert.ts +16 -0
  884. package/src/browser/server-action-bridge.ts +516 -599
  885. package/src/browser/shallow.ts +6 -1
  886. package/src/browser/types.ts +125 -47
  887. package/src/browser/validate-redirect-origin.ts +29 -0
  888. package/src/build/generate-manifest.ts +235 -24
  889. package/src/build/generate-route-types.ts +36 -0
  890. package/src/build/index.ts +13 -0
  891. package/src/build/route-trie.ts +265 -0
  892. package/src/build/route-types/ast-helpers.ts +25 -0
  893. package/src/build/route-types/ast-route-extraction.ts +98 -0
  894. package/src/build/route-types/codegen.ts +102 -0
  895. package/src/build/route-types/include-resolution.ts +411 -0
  896. package/src/build/route-types/param-extraction.ts +48 -0
  897. package/src/build/route-types/per-module-writer.ts +128 -0
  898. package/src/build/route-types/router-processing.ts +479 -0
  899. package/src/build/route-types/scan-filter.ts +78 -0
  900. package/src/build/runtime-discovery.ts +231 -0
  901. package/src/cache/background-task.ts +34 -0
  902. package/src/cache/cache-key-utils.ts +44 -0
  903. package/src/cache/cache-policy.ts +125 -0
  904. package/src/cache/cache-runtime.ts +342 -0
  905. package/src/cache/cache-scope.ts +167 -309
  906. package/src/cache/cf/cf-cache-store.ts +571 -17
  907. package/src/cache/cf/index.ts +13 -3
  908. package/src/cache/document-cache.ts +116 -77
  909. package/src/cache/handle-capture.ts +81 -0
  910. package/src/cache/handle-snapshot.ts +41 -0
  911. package/src/cache/index.ts +1 -15
  912. package/src/cache/memory-segment-store.ts +191 -13
  913. package/src/cache/profile-registry.ts +73 -0
  914. package/src/cache/read-through-swr.ts +134 -0
  915. package/src/cache/segment-codec.ts +256 -0
  916. package/src/cache/taint.ts +153 -0
  917. package/src/cache/types.ts +72 -122
  918. package/src/client.rsc.tsx +3 -1
  919. package/src/client.tsx +106 -126
  920. package/src/component-utils.ts +4 -4
  921. package/src/components/DefaultDocument.tsx +5 -1
  922. package/src/context-var.ts +156 -0
  923. package/src/debug.ts +19 -9
  924. package/src/deps/browser.ts +1 -0
  925. package/src/errors.ts +108 -2
  926. package/src/handle.ts +15 -29
  927. package/src/handles/MetaTags.tsx +73 -20
  928. package/src/handles/breadcrumbs.ts +66 -0
  929. package/src/handles/index.ts +1 -0
  930. package/src/handles/meta.ts +30 -13
  931. package/src/host/cookie-handler.ts +21 -15
  932. package/src/host/errors.ts +8 -8
  933. package/src/host/index.ts +4 -7
  934. package/src/host/pattern-matcher.ts +27 -27
  935. package/src/host/router.ts +61 -39
  936. package/src/host/testing.ts +8 -8
  937. package/src/host/types.ts +15 -7
  938. package/src/host/utils.ts +1 -1
  939. package/src/href-client.ts +119 -29
  940. package/src/index.rsc.ts +153 -19
  941. package/src/index.ts +211 -30
  942. package/src/internal-debug.ts +11 -0
  943. package/src/loader.rsc.ts +26 -157
  944. package/src/loader.ts +27 -10
  945. package/src/network-error-thrower.tsx +3 -1
  946. package/src/outlet-provider.tsx +45 -0
  947. package/src/prerender/param-hash.ts +37 -0
  948. package/src/prerender/store.ts +185 -0
  949. package/src/prerender.ts +463 -0
  950. package/src/reverse.ts +330 -0
  951. package/src/root-error-boundary.tsx +41 -29
  952. package/src/route-content-wrapper.tsx +7 -4
  953. package/src/route-definition/dsl-helpers.ts +959 -0
  954. package/src/route-definition/helper-factories.ts +200 -0
  955. package/src/route-definition/helpers-types.ts +431 -0
  956. package/src/route-definition/index.ts +52 -0
  957. package/src/route-definition/redirect.ts +93 -0
  958. package/src/route-definition.ts +1 -1428
  959. package/src/route-map-builder.ts +217 -123
  960. package/src/route-name.ts +53 -0
  961. package/src/route-types.ts +59 -8
  962. package/src/router/content-negotiation.ts +116 -0
  963. package/src/router/debug-manifest.ts +72 -0
  964. package/src/router/error-handling.ts +9 -9
  965. package/src/router/find-match.ts +160 -0
  966. package/src/router/handler-context.ts +400 -84
  967. package/src/router/intercept-resolution.ts +397 -0
  968. package/src/router/lazy-includes.ts +237 -0
  969. package/src/router/loader-resolution.ts +222 -123
  970. package/src/router/logging.ts +251 -0
  971. package/src/router/manifest.ts +154 -35
  972. package/src/router/match-api.ts +620 -0
  973. package/src/router/match-context.ts +5 -3
  974. package/src/router/match-handlers.ts +440 -0
  975. package/src/router/match-middleware/background-revalidation.ts +108 -93
  976. package/src/router/match-middleware/cache-lookup.ts +440 -10
  977. package/src/router/match-middleware/cache-store.ts +98 -26
  978. package/src/router/match-middleware/intercept-resolution.ts +57 -17
  979. package/src/router/match-middleware/segment-resolution.ts +27 -6
  980. package/src/router/match-pipelines.ts +10 -45
  981. package/src/router/match-result.ts +55 -33
  982. package/src/router/metrics.ts +240 -15
  983. package/src/router/middleware-cookies.ts +55 -0
  984. package/src/router/middleware-types.ts +226 -0
  985. package/src/router/middleware.ts +327 -369
  986. package/src/router/pattern-matching.ts +211 -43
  987. package/src/router/prerender-match.ts +402 -0
  988. package/src/router/preview-match.ts +170 -0
  989. package/src/router/revalidation.ts +137 -38
  990. package/src/router/router-context.ts +41 -21
  991. package/src/router/router-interfaces.ts +452 -0
  992. package/src/router/router-options.ts +592 -0
  993. package/src/router/router-registry.ts +24 -0
  994. package/src/router/segment-resolution/fresh.ts +683 -0
  995. package/src/router/segment-resolution/helpers.ts +268 -0
  996. package/src/router/segment-resolution/loader-cache.ts +199 -0
  997. package/src/router/segment-resolution/revalidation.ts +1301 -0
  998. package/src/router/segment-resolution/static-store.ts +67 -0
  999. package/src/router/segment-resolution.ts +21 -0
  1000. package/src/router/segment-wrappers.ts +291 -0
  1001. package/src/router/telemetry-otel.ts +299 -0
  1002. package/src/router/telemetry.ts +300 -0
  1003. package/src/router/timeout.ts +148 -0
  1004. package/src/router/trie-matching.ts +239 -0
  1005. package/src/router/types.ts +78 -3
  1006. package/src/router.ts +697 -4257
  1007. package/src/rsc/handler-context.ts +45 -0
  1008. package/src/rsc/handler.ts +790 -755
  1009. package/src/rsc/helpers.ts +140 -6
  1010. package/src/rsc/index.ts +0 -20
  1011. package/src/rsc/loader-fetch.ts +214 -0
  1012. package/src/rsc/manifest-init.ts +86 -0
  1013. package/src/rsc/nonce.ts +14 -0
  1014. package/src/rsc/origin-guard.ts +141 -0
  1015. package/src/rsc/progressive-enhancement.ts +382 -0
  1016. package/src/rsc/response-error.ts +37 -0
  1017. package/src/rsc/response-route-handler.ts +347 -0
  1018. package/src/rsc/rsc-rendering.ts +240 -0
  1019. package/src/rsc/runtime-warnings.ts +42 -0
  1020. package/src/rsc/server-action.ts +350 -0
  1021. package/src/rsc/ssr-setup.ts +128 -0
  1022. package/src/rsc/types.ts +44 -11
  1023. package/src/search-params.ts +230 -0
  1024. package/src/segment-system.tsx +165 -17
  1025. package/src/server/context.ts +278 -58
  1026. package/src/server/cookie-store.ts +190 -0
  1027. package/src/server/fetchable-loader-store.ts +37 -0
  1028. package/src/server/handle-store.ts +94 -15
  1029. package/src/server/loader-registry.ts +15 -56
  1030. package/src/server/request-context.ts +481 -74
  1031. package/src/server.ts +35 -130
  1032. package/src/ssr/index.tsx +101 -31
  1033. package/src/static-handler.ts +114 -0
  1034. package/src/theme/ThemeProvider.tsx +21 -15
  1035. package/src/theme/ThemeScript.tsx +5 -5
  1036. package/src/theme/constants.ts +5 -2
  1037. package/src/theme/index.ts +4 -14
  1038. package/src/theme/theme-context.ts +4 -30
  1039. package/src/theme/theme-script.ts +21 -18
  1040. package/src/types/boundaries.ts +158 -0
  1041. package/src/types/cache-types.ts +198 -0
  1042. package/src/types/error-types.ts +192 -0
  1043. package/src/types/global-namespace.ts +100 -0
  1044. package/src/types/handler-context.ts +785 -0
  1045. package/src/types/index.ts +88 -0
  1046. package/src/types/loader-types.ts +183 -0
  1047. package/src/types/route-config.ts +170 -0
  1048. package/src/types/route-entry.ts +109 -0
  1049. package/src/types/segments.ts +150 -0
  1050. package/src/types.ts +1 -1623
  1051. package/src/urls/include-helper.ts +197 -0
  1052. package/src/urls/index.ts +53 -0
  1053. package/src/urls/path-helper-types.ts +339 -0
  1054. package/src/urls/path-helper.ts +329 -0
  1055. package/src/urls/pattern-types.ts +95 -0
  1056. package/src/urls/response-types.ts +106 -0
  1057. package/src/urls/type-extraction.ts +372 -0
  1058. package/src/urls/urls-function.ts +98 -0
  1059. package/src/urls.ts +1 -802
  1060. package/src/use-loader.tsx +85 -77
  1061. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  1062. package/src/vite/discovery/discover-routers.ts +344 -0
  1063. package/src/vite/discovery/prerender-collection.ts +385 -0
  1064. package/src/vite/discovery/route-types-writer.ts +258 -0
  1065. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1066. package/src/vite/discovery/state.ts +108 -0
  1067. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1068. package/src/vite/index.ts +11 -1129
  1069. package/src/vite/plugin-types.ts +48 -0
  1070. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1071. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1072. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1073. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -53
  1074. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1075. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1076. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1077. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1078. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1079. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1080. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  1081. package/src/vite/plugins/performance-tracks.ts +240 -0
  1082. package/src/vite/plugins/refresh-cmd.ts +65 -0
  1083. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1084. package/src/vite/plugins/version-injector.ts +83 -0
  1085. package/src/vite/plugins/version-plugin.ts +266 -0
  1086. package/src/vite/plugins/virtual-entries.ts +123 -0
  1087. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1088. package/src/vite/rango.ts +456 -0
  1089. package/src/vite/router-discovery.ts +777 -0
  1090. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1091. package/src/vite/utils/banner.ts +36 -0
  1092. package/src/vite/utils/bundle-analysis.ts +137 -0
  1093. package/src/vite/utils/manifest-utils.ts +70 -0
  1094. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1095. package/src/vite/utils/prerender-utils.ts +189 -0
  1096. package/src/vite/utils/shared-utils.ts +169 -0
  1097. package/CLAUDE.md +0 -43
  1098. package/src/browser/lru-cache.ts +0 -69
  1099. package/src/browser/request-controller.ts +0 -164
  1100. package/src/cache/memory-store.ts +0 -253
  1101. package/src/href.ts +0 -255
  1102. package/src/server/route-manifest-cache.ts +0 -173
  1103. package/src/vite/expose-handle-id.ts +0 -209
  1104. package/src/vite/expose-loader-id.ts +0 -426
  1105. package/src/vite/expose-location-state-id.ts +0 -177
  1106. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -74,8 +74,45 @@ path("/product/:slug", async (ctx) => {
74
74
 
75
75
  ```typescript
76
76
  path("/product/:slug", ProductPage, {
77
- name: "product", // Route name for href() and navigation
78
- })
77
+ name: "product", // Route name for href() and navigation
78
+ });
79
+ ```
80
+
81
+ ### Typed Search Params
82
+
83
+ Add a `search` schema to get typed `ctx.search`:
84
+
85
+ ```typescript
86
+ path("/search", SearchPage, {
87
+ name: "search",
88
+ search: { q: "string", page: "number?", sort: "string?" },
89
+ });
90
+ ```
91
+
92
+ Use `Handler<"name">` for typed search params (resolves from the generated route map automatically):
93
+
94
+ ```typescript
95
+ import type { Handler } from "@rangojs/router";
96
+
97
+ export const SearchPage: Handler<"search"> = (ctx) => {
98
+ // ctx.search is typed: { q: string; page?: number; sort?: string }
99
+ const { q, page, sort } = ctx.search;
100
+ // ctx.searchParams is always URLSearchParams
101
+ return <SearchResults q={q} page={page} sort={sort} />;
102
+ };
103
+ ```
104
+
105
+ Supported types: `"string"`, `"number"`, `"boolean"`, with `?` suffix for optional.
106
+ Missing params are `undefined` regardless of required/optional. The required/optional
107
+ distinction is a consumer-facing contract (for `href()` and `reverse()` autocomplete).
108
+
109
+ Use `RouteSearchParams<"name">` and `RouteParams<"name">` to extract types for props:
110
+
111
+ ```typescript
112
+ import type { RouteSearchParams, RouteParams } from "@rangojs/router";
113
+
114
+ type SP = RouteSearchParams<"search">; // { q: string; page?: number; sort?: string }
115
+ type P = RouteParams<"blogPost">; // { slug: string }
79
116
  ```
80
117
 
81
118
  ## Route Children
@@ -90,17 +127,224 @@ path("/product/:slug", ProductPage, { name: "product" }, () => [
90
127
  ])
91
128
  ```
92
129
 
130
+ ## Handler Data Ownership
131
+
132
+ When a route has children (orphan layouts, parallels), the handler executes
133
+ first. Use `ctx.set(key, value)` to share data with children, who read it
134
+ via `ctx.get(key)`. Caching wraps all segments together, so either all run
135
+ or none do.
136
+
137
+ ### Typed context variables with createVar
138
+
139
+ Use `createVar<T>()` to create a typed token for `ctx.set()`/`ctx.get()`.
140
+ The token is imported by both the handler (producer) and layout (consumer),
141
+ making the data contract explicit and compile-time verified:
142
+
143
+ ```typescript
144
+ import { createVar } from "@rangojs/router";
145
+ import { Outlet, ParallelOutlet } from "@rangojs/router/client";
146
+
147
+ // Typed token -- shared between handler and layout
148
+ interface DashboardData {
149
+ title: string;
150
+ stats: { views: number };
151
+ }
152
+ const Dashboard = createVar<DashboardData>();
153
+
154
+ path("/dashboard/:id", async (ctx) => {
155
+ const data = await fetchDashboard(ctx.params.id);
156
+ ctx.set(Dashboard, data); // type-checked
157
+ return <DashboardPage data={data} />;
158
+ }, { name: "dashboard" }, () => [
159
+ layout((ctx) => {
160
+ const data = ctx.get(Dashboard); // typed as DashboardData | undefined
161
+ return (
162
+ <div>
163
+ <h1>{data?.title}</h1>
164
+ <Outlet />
165
+ <ParallelOutlet name="@sidebar" />
166
+ </div>
167
+ );
168
+ }),
169
+ parallel({
170
+ "@sidebar": (ctx) => {
171
+ const data = ctx.get(Dashboard);
172
+ return <Sidebar stats={data?.stats} />;
173
+ },
174
+ }),
175
+ ])
176
+ ```
177
+
178
+ String keys still work (`ctx.set("key", value)` / `ctx.get("key")`), but
179
+ `createVar<T>()` is preferred for type safety.
180
+
181
+ Only route handlers and middleware can call `ctx.set()`. Layouts, parallels,
182
+ and intercepts can only read via `ctx.get()`.
183
+
184
+ #### Non-cacheable context variables
185
+
186
+ Mark a var as non-cacheable when it holds inherently request-specific data
187
+ (sessions, auth tokens, per-request IDs). There are two ways:
188
+
189
+ ```typescript
190
+ // Var-level: every value written to this var is non-cacheable
191
+ const Session = createVar<SessionData>({ cache: false });
192
+
193
+ // Write-level: escalate a normally-cacheable var for this specific write
194
+ const Theme = createVar<string>();
195
+ ctx.set(Theme, userTheme, { cache: false });
196
+ ```
197
+
198
+ "Least cacheable wins" — if either the var definition or the write site says
199
+ `cache: false`, the value is non-cacheable.
200
+
201
+ Reading a non-cacheable var inside `cache()` or `"use cache"` throws at
202
+ runtime. This prevents request-specific data from leaking into cached output:
203
+
204
+ ```typescript
205
+ // This throws — Session is non-cacheable
206
+ async function CachedWidget(ctx) {
207
+ "use cache";
208
+ const session = ctx.get(Session); // Error: non-cacheable var read inside cache scope
209
+ return <Widget />;
210
+ }
211
+ ```
212
+
213
+ Cacheable vars (the default) can be read freely inside cache scopes.
214
+
215
+ ### Revalidation Contracts for Handler Data
216
+
217
+ Handler-first guarantees apply within a single full render pass. For partial
218
+ action revalidation, define named revalidation contracts and reuse them on both
219
+ the producer route and the consumer child segments.
220
+
221
+ ```typescript
222
+ // revalidation-contracts.ts
223
+ export const revalidateCheckoutData = ({ actionId }) =>
224
+ actionId?.includes("src/actions/checkout.ts#") ?? false;
225
+
226
+ path("/checkout", CheckoutPage, { name: "checkout" }, () => [
227
+ revalidate(revalidateCheckoutData), // producer (route handler) reruns
228
+ layout(CheckoutLayout, () => [
229
+ revalidate(revalidateCheckoutData), // consumer reruns
230
+ parallel({ "@summary": CheckoutSummary }, () => [
231
+ revalidate(revalidateCheckoutData),
232
+ ]),
233
+ ]),
234
+ ]);
235
+ ```
236
+
237
+ If children depend on multiple upstream domains, compose multiple contracts on
238
+ the same segment (`revalidateAuthData`, `revalidateCheckoutData`, and so on).
239
+
240
+ For cleaner route trees, expose contract helpers and spread them:
241
+
242
+ ```typescript
243
+ import { revalidate } from "@rangojs/router";
244
+
245
+ export const revalidateCheckout = () => [revalidate(revalidateCheckoutData)];
246
+
247
+ path("/checkout", CheckoutPage, { name: "checkout" }, () => [
248
+ revalidateCheckout(),
249
+ layout(CheckoutLayout, () => [revalidateCheckout()]),
250
+ ]);
251
+ ```
252
+
253
+ For scope/revalidation guarantees and non-guarantees, see:
254
+ [docs/execution-model.md](../../docs/internal/execution-model.md)
255
+
256
+ ## Redirects
257
+
258
+ ### Basic redirect
259
+
260
+ ```typescript
261
+ import { redirect } from "@rangojs/router";
262
+
263
+ path("/old-page", () => redirect("/new-page"), { name: "oldPage" });
264
+ ```
265
+
266
+ ### Redirect with custom status
267
+
268
+ ```typescript
269
+ path("/moved", () => redirect("/new-location", 301), { name: "moved" });
270
+ ```
271
+
272
+ ### Redirect with location state
273
+
274
+ Carry typed state through redirects (e.g. flash messages):
275
+
276
+ ```typescript
277
+ import { redirect, createLocationState } from "@rangojs/router";
278
+
279
+ export const FlashMessage = createLocationState<{ text: string }>({
280
+ flash: true,
281
+ });
282
+
283
+ path(
284
+ "/save",
285
+ (ctx) => {
286
+ // ... save logic
287
+ return redirect("/dashboard", {
288
+ state: [FlashMessage({ text: "Item saved!" })],
289
+ });
290
+ },
291
+ { name: "save" },
292
+ );
293
+
294
+ // With custom status + state
295
+ path(
296
+ "/action",
297
+ (ctx) => {
298
+ return redirect("/target", {
299
+ status: 303,
300
+ state: [FlashMessage({ text: "Action complete" })],
301
+ });
302
+ },
303
+ { name: "action" },
304
+ );
305
+ ```
306
+
307
+ Read the state on the target page with `useLocationState(FlashMessage)`. The
308
+ `{ flash: true }` option makes it auto-clear. Without `{ flash: true }`,
309
+ state persists on back/forward. See `/hooks` for details.
310
+
311
+ ### ctx.setLocationState()
312
+
313
+ Attach location state to any server response (not just redirects):
314
+
315
+ ```typescript
316
+ path("/dashboard", (ctx) => {
317
+ ctx.setLocationState(ServerInfo({ data: "welcome" }));
318
+ return <Dashboard />;
319
+ }, { name: "dashboard" })
320
+ ```
321
+
322
+ State flows to the browser via the RSC payload and is merged into
323
+ `history.pushState()`. Only works for SPA (partial) navigations.
324
+
93
325
  ## Handler Context
94
326
 
95
327
  Every handler receives a context object:
96
328
 
97
329
  ```typescript
98
- interface HandlerContext<TParams = Record<string, string>> {
99
- params: TParams; // URL parameters
100
- request: Request; // Original request
101
- url: URL; // Parsed URL
102
- env: TEnv; // Environment (bindings + variables)
103
- use<T>(handle: Handle<T>): T; // Access handles
330
+ interface HandlerContext<TParams = {}, TEnv = DefaultEnv, TSearch = {}> {
331
+ params: TParams; // URL parameters
332
+ request: Request; // Original request
333
+ searchParams: URLSearchParams; // Query params (always URLSearchParams)
334
+ search: {} | ResolveSearchSchema<TSearch>; // Typed search params (from search schema)
335
+ url: URL; // Parsed URL
336
+ env: TEnv; // Environment (bindings + variables)
337
+ set(key: string, value: any): void; // Set context variable (untyped string key)
338
+ set<T>(contextVar: ContextVar<T>, value: T): void; // Set typed context variable
339
+ get(key: string): any; // Read context variable (untyped string key)
340
+ get<T>(contextVar: ContextVar<T>): T | undefined; // Read typed context variable
341
+ use<T>(handle: Handle<T>): T; // Access handles
342
+ reverse(
343
+ name: string,
344
+ params?: Record<string, string>,
345
+ search?: Record<string, unknown>,
346
+ ): string; // URL generation
347
+ setLocationState(entries: LocationStateEntry[]): void; // Attach state to response
104
348
  }
105
349
  ```
106
350
 
@@ -111,11 +355,11 @@ path("/product/:slug", (ctx) => {
111
355
  // Access URL params
112
356
  const { slug } = ctx.params;
113
357
 
114
- // Access query params
115
- const tab = ctx.url.searchParams.get("tab");
358
+ // Access query params (untyped - use search schema for typed access)
359
+ const tab = ctx.searchParams.get("tab");
116
360
 
117
- // Access environment
118
- const db = ctx.env.Bindings.DB;
361
+ // Access platform bindings
362
+ const db = ctx.env.DB;
119
363
 
120
364
  // Access handles
121
365
  const breadcrumbs = ctx.use(Breadcrumbs);
@@ -142,8 +386,7 @@ urls(({ path, layout }) => [
142
386
  ## Complete Example
143
387
 
144
388
  ```typescript
145
- import { urls } from "@rangojs/router";
146
- import { Breadcrumbs } from "./handles/breadcrumbs";
389
+ import { urls, Breadcrumbs } from "@rangojs/router";
147
390
 
148
391
  export const urlpatterns = urls(({ path, layout, loader, loading }) => [
149
392
  // Simple route
@@ -50,20 +50,22 @@ export const urlpatterns = urls(({ path, layout, loader, loading }) => [
50
50
  The `urls()` function provides a callback with all available DSL functions:
51
51
 
52
52
  ```typescript
53
- urls(({
54
- path, // Define a route
55
- layout, // Wrap routes in a layout
56
- parallel, // Define parallel routes (slots)
57
- loader, // Add data loader
58
- loading, // Add loading skeleton
59
- cache, // Configure caching
60
- middleware, // Add middleware
61
- revalidate, // Control revalidation
62
- intercept, // Intercept routes for modals
63
- when, // Conditional rendering
64
- }) => [
65
- // Route definitions here
66
- ]);
53
+ urls(
54
+ ({
55
+ path, // Define a route
56
+ layout, // Wrap routes in a layout
57
+ parallel, // Define parallel routes (slots)
58
+ loader, // Add data loader
59
+ loading, // Add loading skeleton
60
+ cache, // Configure caching
61
+ middleware, // Add middleware
62
+ revalidate, // Control revalidation
63
+ intercept, // Intercept routes for modals
64
+ when, // Conditional rendering
65
+ }) => [
66
+ // Route definitions here
67
+ ],
68
+ );
67
69
  ```
68
70
 
69
71
  ## Router Options
@@ -76,16 +78,16 @@ interface RSCRouterOptions<TEnv> {
76
78
  // Document component wrapping entire app
77
79
  document?: ComponentType<{ children: ReactNode }>;
78
80
 
79
- // Enable performance metrics
81
+ // Enable per-request performance timeline (console waterfall + Server-Timing header)
80
82
  debugPerformance?: boolean;
81
83
 
82
84
  // Default error boundary
83
85
  defaultErrorBoundary?: ReactNode | ErrorBoundaryHandler;
84
86
 
85
- // Default not-found boundary
87
+ // Default not-found boundary for notFound() thrown in handlers/loaders
86
88
  defaultNotFoundBoundary?: ReactNode | NotFoundBoundaryHandler;
87
89
 
88
- // Component for 404 routes
90
+ // Component for 404 (no route match, or notFound() without a boundary)
89
91
  notFound?: ReactNode | ((props: { pathname: string }) => ReactNode);
90
92
 
91
93
  // Error logging callback
@@ -97,11 +99,25 @@ interface RSCRouterOptions<TEnv> {
97
99
  // Theme configuration
98
100
  theme?: ThemeConfig | true;
99
101
 
102
+ // SSR options (streaming policy)
103
+ ssr?: SSROptions<TEnv>;
104
+
105
+ // Telemetry sink for structured lifecycle events
106
+ telemetry?: TelemetrySink;
107
+
100
108
  // Connection warmup (default: true)
101
109
  warmup?: boolean;
102
110
 
111
+ // Prefetch cache TTL in seconds (default: 300)
112
+ // Controls in-memory cache duration and Cache-Control max-age for prefetch responses.
113
+ // Set to false to disable prefetch caching.
114
+ prefetchCacheTTL?: number | false;
115
+
103
116
  // CSP nonce provider (for router.fetch)
104
- nonce?: (request: Request, env: TEnv) => string | true | Promise<string | true>;
117
+ nonce?: (
118
+ request: Request,
119
+ env: TEnv,
120
+ ) => string | true | Promise<string | true>;
105
121
 
106
122
  // RSC version string (for router.fetch)
107
123
  version?: string;
@@ -160,7 +176,7 @@ import { createRouter } from "@rangojs/router";
160
176
  import { Document } from "./document";
161
177
  import { urlpatterns } from "./urls";
162
178
 
163
- export const router = createRouter<AppEnv>({
179
+ export const router = createRouter<AppBindings>({
164
180
  document: Document,
165
181
  urls: urlpatterns,
166
182
  });
@@ -170,7 +186,7 @@ import { router } from "./router";
170
186
 
171
187
  export default {
172
188
  async fetch(request: Request, env: Env, ctx: ExecutionContext) {
173
- return router.fetch(request, { Bindings: env, Variables: {}, ctx });
189
+ return router.fetch(request, { env, ctx });
174
190
  },
175
191
  };
176
192
  ```
@@ -184,12 +200,12 @@ For per-request cache configuration (e.g., Cloudflare Workers with ExecutionCont
184
200
  import { createRouter } from "@rangojs/router";
185
201
  import { CFCacheStore } from "@rangojs/router/cache";
186
202
 
187
- export const router = createRouter<AppEnv>({
203
+ export const router = createRouter<AppBindings>({
188
204
  document: Document,
189
205
  urls: urlpatterns,
190
- // Cache config receives env with ctx for ExecutionContext access
191
- cache: (env) => ({
192
- store: new CFCacheStore({ ctx: env.ctx, defaults: { ttl: 60 } }),
206
+ // Cache config receives (env, ctx) separately
207
+ cache: (_env, ctx) => ({
208
+ store: new CFCacheStore({ ctx: ctx!, defaults: { ttl: 60 } }),
193
209
  }),
194
210
  });
195
211
 
@@ -198,7 +214,7 @@ import { router } from "./router";
198
214
 
199
215
  export default {
200
216
  async fetch(request: Request, env: Env, ctx: ExecutionContext) {
201
- return router.fetch(request, { Bindings: env, Variables: {}, ctx });
217
+ return router.fetch(request, { env, ctx });
202
218
  },
203
219
  };
204
220
  ```
@@ -274,6 +290,56 @@ const router = createRouter({
274
290
  export default router;
275
291
  ```
276
292
 
293
+ ## Not Found Handling
294
+
295
+ Two distinct 404 scenarios:
296
+
297
+ **1. No route matches the URL** — the router renders the `notFound` component from `createRouter()` config. This is automatic.
298
+
299
+ **2. A handler/loader calls `notFound()`** — signals that the route matched but the data doesn't exist (e.g., invalid product ID).
300
+
301
+ ```typescript
302
+ import { notFound } from "@rangojs/router";
303
+
304
+ // In a handler or loader
305
+ path("/product/:slug", async (ctx) => {
306
+ const product = await db.getProduct(ctx.params.slug);
307
+ if (!product) notFound("Product not found");
308
+ return <ProductPage product={product} />;
309
+ });
310
+ ```
311
+
312
+ ### Fallback chain for `notFound()`
313
+
314
+ When `notFound()` is thrown, the router looks for a fallback in this order:
315
+
316
+ 1. **`notFoundBoundary()`** — nearest boundary in the route tree (route-level)
317
+ 2. **`defaultNotFoundBoundary`** — from `createRouter()` config (app-level)
318
+ 3. **`notFound`** — from `createRouter()` config (same component used for no-route-match)
319
+ 4. **Default `<h1>Not Found</h1>`** — built-in fallback
320
+
321
+ All cases set HTTP 404 status.
322
+
323
+ ### notFoundBoundary
324
+
325
+ Wrap routes with `notFoundBoundary()` for route-specific not-found UI:
326
+
327
+ ```typescript
328
+ urls(({ path, layout }) => [
329
+ layout(ShopLayout, () => [
330
+ notFoundBoundary(({ notFound: info }) => (
331
+ <div>
332
+ <h1>Not Found</h1>
333
+ <p>{info.message}</p>
334
+ </div>
335
+ )),
336
+ path("/product/:slug", ProductPage),
337
+ ]),
338
+ ]);
339
+ ```
340
+
341
+ `notFoundBoundary` receives `{ notFound: NotFoundInfo }` where `NotFoundInfo` contains `message`, `segmentId`, `segmentType`, and `pathname`.
342
+
277
343
  ## Including Sub-patterns
278
344
 
279
345
  ```typescript
@@ -286,10 +352,10 @@ export const shopPatterns = urls(({ path, layout }) => [
286
352
  ]);
287
353
 
288
354
  // src/urls.tsx
289
- import { urls, include } from "@rangojs/router";
355
+ import { urls } from "@rangojs/router";
290
356
  import { shopPatterns } from "./urls/shop";
291
357
 
292
- export const urlpatterns = urls(({ path }) => [
358
+ export const urlpatterns = urls(({ path, include }) => [
293
359
  path("/", HomePage, { name: "home" }),
294
360
  include("/shop", shopPatterns, { name: "shop" }),
295
361
  ]);
@@ -298,23 +364,29 @@ export const urlpatterns = urls(({ path }) => [
298
364
  ## Environment Types
299
365
 
300
366
  ```typescript
301
- import type { RouterEnv } from "@rangojs/router";
302
-
367
+ // Bindings passed as TEnv to createRouter<TEnv>()
303
368
  interface AppBindings {
304
369
  DB: D1Database;
305
370
  KV: KVNamespace;
306
371
  }
307
372
 
373
+ // Variables declared via module augmentation
308
374
  interface AppVariables {
309
375
  user?: { id: string; name: string };
310
376
  }
311
377
 
312
- type AppEnv = RouterEnv<AppBindings, AppVariables>;
313
-
314
- const router = createRouter<AppEnv>({
378
+ const router = createRouter<AppBindings>({
315
379
  document: Document,
316
380
  urls: urlpatterns,
317
381
  });
382
+
383
+ // Register types globally for implicit typing
384
+ declare global {
385
+ namespace RSCRouter {
386
+ interface Env extends AppBindings {}
387
+ interface Vars extends AppVariables {}
388
+ }
389
+ }
318
390
  ```
319
391
 
320
392
  ## Connection Warmup
@@ -344,3 +416,74 @@ const router = createRouter({
344
416
 
345
417
  The warmup request is relative to the current page path, so it works correctly
346
418
  with subpath deployments (reverse proxy, base path).
419
+
420
+ ## Telemetry
421
+
422
+ The router emits structured lifecycle events through a pluggable telemetry sink.
423
+ Zero overhead when not configured.
424
+
425
+ ```typescript
426
+ // Console sink for development
427
+ import { createRouter, createConsoleSink } from "@rangojs/router";
428
+
429
+ const router = createRouter({
430
+ document: Document,
431
+ urls: urlpatterns,
432
+ telemetry: createConsoleSink(),
433
+ });
434
+ ```
435
+
436
+ ```typescript
437
+ // OpenTelemetry for production
438
+ import { createRouter, createOTelSink } from "@rangojs/router";
439
+ import { trace } from "@opentelemetry/api";
440
+
441
+ const router = createRouter({
442
+ document: Document,
443
+ urls: urlpatterns,
444
+ telemetry: createOTelSink(trace.getTracer("my-app")),
445
+ });
446
+ ```
447
+
448
+ ```typescript
449
+ // Custom sink
450
+ const router = createRouter({
451
+ telemetry: {
452
+ emit(event) {
453
+ // Send to any observability backend
454
+ myTracer.record(event);
455
+ },
456
+ },
457
+ });
458
+ ```
459
+
460
+ Events emitted: `request.start/end/error`, `loader.start/end/error`,
461
+ `handler.error`, `cache.decision`, `revalidation.decision`.
462
+
463
+ ## SSR Streaming Policy
464
+
465
+ Control whether HTML SSR responses stream progressively or wait for all content:
466
+
467
+ ```typescript
468
+ import { createRouter, type SSRStreamMode } from "@rangojs/router";
469
+
470
+ const router = createRouter({
471
+ ssr: {
472
+ resolveStreaming: ({ request }) => {
473
+ const ua = request.headers.get("user-agent") ?? "";
474
+ // Bots that can't process streamed HTML get a fully resolved page
475
+ if (/Googlebot|bingbot/i.test(ua)) return "allReady";
476
+ return "stream";
477
+ },
478
+ },
479
+ });
480
+ ```
481
+
482
+ `SSRStreamMode` is `"stream" | "allReady"`:
483
+
484
+ - `"stream"` (default) — flush HTML as React renders. Suspense fallbacks appear first, then resolved content streams in. Best for real users (fastest TTFB).
485
+ - `"allReady"` — await `stream.allReady` before flushing. The full page arrives in one shot. Use for bots that cannot execute JavaScript or process chunked HTML.
486
+
487
+ The resolver receives `{ request, env, url }` and may be sync or async. It only runs on HTML SSR paths — RSC partials, `__rsc` requests, and response routes are unaffected.
488
+
489
+ When `resolveStreaming` is not configured, the default is `"stream"`.