@rangojs/router 0.0.0-experimental.13 → 0.0.0-experimental.131

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 (1214) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +1040 -5
  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 +1712 -212
  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/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -26
  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/{src/handles/index.ts → dist/handles/index.js} +1 -1
  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/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +6263 -2733
  799. package/dist/vite/index.js.bak +5448 -0
  800. package/dist/vite/index.js.map +1 -0
  801. package/dist/vite/package-resolution.d.ts +43 -0
  802. package/dist/vite/package-resolution.d.ts.map +1 -0
  803. package/{src/vite/package-resolution.ts → dist/vite/package-resolution.js} +53 -66
  804. package/dist/vite/package-resolution.js.map +1 -0
  805. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  806. package/dist/vite/virtual-entries.d.ts +25 -0
  807. package/dist/vite/virtual-entries.d.ts.map +1 -0
  808. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +123 -68
  811. package/skills/api-client/SKILL.md +211 -0
  812. package/skills/breadcrumbs/SKILL.md +312 -0
  813. package/skills/bundle-analysis/SKILL.md +159 -0
  814. package/skills/cache-guide/SKILL.md +486 -0
  815. package/skills/caching/SKILL.md +349 -24
  816. package/skills/composability/SKILL.md +197 -0
  817. package/skills/css/SKILL.md +76 -0
  818. package/skills/debug-manifest/SKILL.md +12 -8
  819. package/skills/document-cache/SKILL.md +87 -62
  820. package/skills/fonts/SKILL.md +6 -4
  821. package/skills/handler-use/SKILL.md +364 -0
  822. package/skills/hooks/SKILL.md +557 -79
  823. package/skills/host-router/SKILL.md +278 -0
  824. package/skills/i18n/SKILL.md +276 -0
  825. package/skills/intercept/SKILL.md +175 -8
  826. package/skills/layout/SKILL.md +128 -5
  827. package/skills/links/SKILL.md +304 -25
  828. package/skills/loader/SKILL.md +604 -54
  829. package/skills/middleware/SKILL.md +213 -37
  830. package/skills/migrate-nextjs/SKILL.md +584 -0
  831. package/skills/migrate-react-router/SKILL.md +769 -0
  832. package/skills/mime-routes/SKILL.md +41 -10
  833. package/skills/observability/SKILL.md +172 -0
  834. package/skills/parallel/SKILL.md +276 -3
  835. package/skills/prerender/SKILL.md +432 -52
  836. package/skills/rango/SKILL.md +313 -21
  837. package/skills/react-compiler/SKILL.md +168 -0
  838. package/skills/response-routes/SKILL.md +248 -120
  839. package/skills/route/SKILL.md +287 -21
  840. package/skills/router-setup/SKILL.md +231 -33
  841. package/skills/server-actions/SKILL.md +775 -0
  842. package/skills/streams-and-websockets/SKILL.md +283 -0
  843. package/skills/tailwind/SKILL.md +27 -3
  844. package/skills/testing/SKILL.md +129 -0
  845. package/skills/testing/bindings.md +89 -0
  846. package/skills/testing/cache-prerender.md +124 -0
  847. package/skills/testing/client-components.md +122 -0
  848. package/skills/testing/e2e-parity.md +125 -0
  849. package/skills/testing/flight.md +92 -0
  850. package/skills/testing/handles.md +129 -0
  851. package/skills/testing/loader.md +128 -0
  852. package/skills/testing/middleware.md +99 -0
  853. package/skills/testing/render-handler.md +121 -0
  854. package/skills/testing/response-routes.md +95 -0
  855. package/skills/testing/reverse-and-types.md +84 -0
  856. package/skills/testing/server-actions.md +107 -0
  857. package/skills/testing/server-tree.md +128 -0
  858. package/skills/testing/setup.md +120 -0
  859. package/skills/theme/SKILL.md +9 -8
  860. package/skills/typesafety/SKILL.md +547 -107
  861. package/skills/use-cache/SKILL.md +355 -0
  862. package/skills/view-transitions/SKILL.md +294 -0
  863. package/src/__augment-tests__/augment.ts +81 -0
  864. package/src/__augment-tests__/augmented.check.ts +116 -0
  865. package/src/__internal.ts +77 -44
  866. package/src/bin/rango.ts +312 -15
  867. package/src/browser/action-coordinator.ts +114 -0
  868. package/src/browser/action-fence.ts +47 -0
  869. package/src/browser/app-shell.ts +39 -0
  870. package/src/browser/app-version.ts +14 -0
  871. package/src/browser/cookie-name.ts +140 -0
  872. package/src/browser/event-controller.ts +162 -200
  873. package/src/browser/history-state.ts +101 -0
  874. package/src/browser/index.ts +3 -3
  875. package/src/browser/intercept-utils.ts +52 -0
  876. package/src/browser/invalidate-client-cache.ts +52 -0
  877. package/src/browser/link-interceptor.ts +24 -4
  878. package/src/browser/logging.ts +11 -0
  879. package/src/browser/merge-segment-loaders.ts +20 -12
  880. package/src/browser/navigation-bridge.ts +323 -563
  881. package/src/browser/navigation-client.ts +219 -75
  882. package/src/browser/navigation-store-handle.ts +38 -0
  883. package/src/browser/navigation-store.ts +104 -112
  884. package/src/browser/navigation-transaction.ts +247 -0
  885. package/src/browser/network-error-handler.ts +61 -0
  886. package/src/browser/partial-update.ts +328 -348
  887. package/src/browser/prefetch/cache.ts +324 -0
  888. package/src/browser/prefetch/fetch.ts +357 -0
  889. package/src/browser/prefetch/observer.ts +65 -0
  890. package/src/browser/prefetch/policy.ts +48 -0
  891. package/src/browser/prefetch/queue.ts +194 -0
  892. package/src/browser/prefetch/resource-ready.ts +77 -0
  893. package/src/browser/rango-state.ts +194 -0
  894. package/src/browser/react/Link.tsx +253 -71
  895. package/src/browser/react/NavigationProvider.tsx +155 -34
  896. package/src/browser/react/ScrollRestoration.tsx +10 -6
  897. package/src/browser/react/context.ts +11 -0
  898. package/src/browser/react/filter-segment-order.ts +53 -0
  899. package/src/browser/react/index.ts +0 -48
  900. package/src/browser/react/location-state-shared.ts +260 -60
  901. package/src/browser/react/location-state.ts +90 -20
  902. package/src/browser/react/mount-context.ts +6 -1
  903. package/src/browser/react/nonce-context.ts +23 -0
  904. package/src/browser/react/shallow-equal.ts +27 -0
  905. package/src/browser/react/use-action.ts +35 -66
  906. package/src/browser/react/use-handle.ts +39 -126
  907. package/src/browser/react/use-link-status.ts +6 -9
  908. package/src/browser/react/use-navigation.ts +44 -68
  909. package/src/browser/react/use-params.ts +75 -0
  910. package/src/browser/react/use-pathname.ts +47 -0
  911. package/src/browser/react/use-reverse.ts +106 -0
  912. package/src/browser/react/use-router.ts +98 -0
  913. package/src/browser/react/use-search-params.ts +51 -0
  914. package/src/browser/react/use-segments.ts +72 -99
  915. package/src/browser/response-adapter.ts +124 -0
  916. package/src/browser/rsc-router.tsx +290 -72
  917. package/src/browser/scroll-restoration.ts +132 -49
  918. package/src/browser/segment-reconciler.ts +243 -0
  919. package/src/browser/segment-structure-assert.ts +17 -1
  920. package/src/browser/server-action-bridge.ts +621 -613
  921. package/src/browser/types.ts +175 -50
  922. package/src/browser/validate-redirect-origin.ts +56 -0
  923. package/src/build/collect-fallback-refs.ts +107 -0
  924. package/src/build/generate-manifest.ts +123 -56
  925. package/src/build/generate-route-types.ts +41 -1038
  926. package/src/build/index.ts +9 -6
  927. package/src/build/prefix-tree-utils.ts +123 -0
  928. package/src/build/route-trie.ts +165 -34
  929. package/src/build/route-types/ast-helpers.ts +25 -0
  930. package/src/build/route-types/ast-route-extraction.ts +98 -0
  931. package/src/build/route-types/codegen.ts +113 -0
  932. package/src/build/route-types/include-resolution.ts +418 -0
  933. package/src/build/route-types/param-extraction.ts +51 -0
  934. package/src/build/route-types/per-module-writer.ts +131 -0
  935. package/src/build/route-types/router-processing.ts +651 -0
  936. package/src/build/route-types/scan-filter.ts +85 -0
  937. package/src/build/route-types/source-scan.ts +118 -0
  938. package/src/build/runtime-discovery.ts +220 -0
  939. package/src/cache/background-task.ts +34 -0
  940. package/src/cache/cache-error.ts +104 -0
  941. package/src/cache/cache-key-utils.ts +44 -0
  942. package/src/cache/cache-policy.ts +165 -0
  943. package/src/cache/cache-runtime.ts +444 -0
  944. package/src/cache/cache-scope.ts +231 -325
  945. package/src/cache/cache-tag.ts +98 -0
  946. package/src/cache/cf/cf-cache-store.ts +2644 -75
  947. package/src/cache/cf/index.ts +17 -17
  948. package/src/cache/document-cache.ts +172 -92
  949. package/src/cache/handle-capture.ts +81 -0
  950. package/src/cache/handle-snapshot.ts +104 -0
  951. package/src/cache/index.ts +11 -35
  952. package/src/cache/memory-segment-store.ts +307 -30
  953. package/src/cache/profile-registry.ts +49 -0
  954. package/src/cache/read-through-swr.ts +164 -0
  955. package/src/cache/segment-codec.ts +240 -0
  956. package/src/cache/tag-invalidation.ts +230 -0
  957. package/src/cache/taint.ts +153 -0
  958. package/src/cache/types.ts +94 -211
  959. package/src/client.rsc.tsx +8 -21
  960. package/src/client.tsx +123 -347
  961. package/src/cloudflare/index.ts +11 -0
  962. package/src/cloudflare/tracing.ts +109 -0
  963. package/src/component-utils.ts +23 -4
  964. package/src/components/DefaultDocument.tsx +5 -1
  965. package/src/context-var.ts +168 -0
  966. package/src/debug.ts +19 -9
  967. package/src/decode-loader-results.ts +36 -0
  968. package/src/defer.ts +196 -0
  969. package/src/deps/ssr.ts +0 -1
  970. package/src/errors.ts +106 -10
  971. package/src/handle.ts +76 -23
  972. package/src/handles/MetaTags.tsx +73 -34
  973. package/src/handles/breadcrumbs.ts +77 -0
  974. package/src/handles/meta.ts +30 -52
  975. package/src/host/cookie-handler.ts +21 -51
  976. package/src/host/errors.ts +8 -32
  977. package/src/host/index.ts +12 -9
  978. package/src/host/pattern-matcher.ts +34 -77
  979. package/src/host/router.ts +151 -121
  980. package/src/host/testing.ts +45 -32
  981. package/src/host/types.ts +52 -11
  982. package/src/host/utils.ts +2 -2
  983. package/src/href-client.ts +192 -57
  984. package/src/index.rsc.ts +174 -34
  985. package/src/index.ts +241 -73
  986. package/src/internal-debug.ts +8 -4
  987. package/src/loader-store.ts +500 -0
  988. package/src/loader.rsc.ts +31 -99
  989. package/src/loader.ts +30 -12
  990. package/src/missing-id-error.ts +68 -0
  991. package/src/network-error-thrower.tsx +4 -7
  992. package/src/outlet-context.ts +1 -1
  993. package/src/outlet-provider.tsx +41 -0
  994. package/src/prerender/param-hash.ts +14 -13
  995. package/src/prerender/store.ts +121 -21
  996. package/src/prerender.ts +445 -24
  997. package/src/redirect-origin.ts +100 -0
  998. package/src/response-utils.ts +37 -0
  999. package/src/reverse.ts +198 -128
  1000. package/src/root-error-boundary.tsx +42 -48
  1001. package/src/route-content-wrapper.tsx +10 -72
  1002. package/src/route-definition/dsl-helpers.ts +1116 -0
  1003. package/src/route-definition/helper-factories.ts +90 -0
  1004. package/src/route-definition/helpers-types.ts +506 -0
  1005. package/src/route-definition/index.ts +55 -0
  1006. package/src/route-definition/redirect.ts +135 -0
  1007. package/src/route-definition/resolve-handler-use.ts +161 -0
  1008. package/src/route-definition/use-item-types.ts +32 -0
  1009. package/src/route-definition.ts +1 -1450
  1010. package/src/route-map-builder.ts +82 -144
  1011. package/src/route-name.ts +53 -0
  1012. package/src/route-types.ts +72 -41
  1013. package/src/router/basename.ts +14 -0
  1014. package/src/router/content-negotiation.ts +215 -0
  1015. package/src/router/debug-manifest.ts +72 -0
  1016. package/src/router/error-handling.ts +22 -26
  1017. package/src/router/find-match.ts +181 -0
  1018. package/src/router/handler-context.ts +372 -125
  1019. package/src/router/instrument.ts +346 -0
  1020. package/src/router/intercept-resolution.ts +34 -27
  1021. package/src/router/lazy-includes.ts +200 -0
  1022. package/src/router/loader-resolution.ts +381 -147
  1023. package/src/router/logging.ts +106 -6
  1024. package/src/router/manifest.ts +88 -51
  1025. package/src/router/match-api.ts +162 -245
  1026. package/src/router/match-context.ts +4 -24
  1027. package/src/router/match-handlers.ts +440 -0
  1028. package/src/router/match-middleware/background-revalidation.ts +90 -89
  1029. package/src/router/match-middleware/cache-lookup.ts +297 -150
  1030. package/src/router/match-middleware/cache-store.ts +75 -33
  1031. package/src/router/match-middleware/intercept-resolution.ts +44 -43
  1032. package/src/router/match-middleware/segment-resolution.ts +64 -22
  1033. package/src/router/match-pipelines.ts +11 -87
  1034. package/src/router/match-result.ts +121 -50
  1035. package/src/router/metrics.ts +219 -28
  1036. package/src/router/middleware-types.ts +93 -0
  1037. package/src/router/middleware.ts +421 -413
  1038. package/src/router/navigation-snapshot.ts +131 -0
  1039. package/src/router/params-util.ts +23 -0
  1040. package/src/router/pattern-matching.ts +263 -79
  1041. package/src/router/prerender-match.ts +541 -0
  1042. package/src/router/preview-match.ts +100 -0
  1043. package/src/router/request-classification.ts +276 -0
  1044. package/src/router/revalidation.ts +143 -44
  1045. package/src/router/route-snapshot.ts +244 -0
  1046. package/src/router/router-context.ts +41 -47
  1047. package/src/router/router-interfaces.ts +525 -0
  1048. package/src/router/router-options.ts +726 -0
  1049. package/src/router/router-registry.ts +21 -0
  1050. package/src/router/segment-resolution/fresh.ts +747 -0
  1051. package/src/router/segment-resolution/helpers.ts +314 -0
  1052. package/src/router/segment-resolution/loader-cache.ts +207 -0
  1053. package/src/router/segment-resolution/revalidation.ts +1322 -0
  1054. package/src/router/segment-resolution/static-store.ts +81 -0
  1055. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1056. package/src/router/segment-resolution/view-transition-default.ts +36 -0
  1057. package/src/router/segment-resolution.ts +24 -1354
  1058. package/src/router/segment-wrappers.ts +289 -0
  1059. package/src/router/state-cookie-name.ts +33 -0
  1060. package/src/router/substitute-pattern-params.ts +56 -0
  1061. package/src/router/telemetry-otel.ts +261 -0
  1062. package/src/router/telemetry.ts +377 -0
  1063. package/src/router/timeout.ts +128 -0
  1064. package/src/router/tracing.ts +206 -0
  1065. package/src/router/trie-matching.ts +172 -60
  1066. package/src/router/types.ts +23 -70
  1067. package/src/router/url-params.ts +44 -0
  1068. package/src/router.ts +748 -2376
  1069. package/src/rsc/handler-context.ts +46 -0
  1070. package/src/rsc/handler.ts +861 -1141
  1071. package/src/rsc/helpers.ts +269 -19
  1072. package/src/rsc/index.ts +1 -21
  1073. package/src/rsc/json-route-result.ts +38 -0
  1074. package/src/rsc/loader-fetch.ts +235 -0
  1075. package/src/rsc/manifest-init.ts +77 -0
  1076. package/src/rsc/nonce.ts +14 -0
  1077. package/src/rsc/origin-guard.ts +155 -0
  1078. package/src/rsc/progressive-enhancement.ts +413 -0
  1079. package/src/rsc/redirect-guard.ts +99 -0
  1080. package/src/rsc/response-error.ts +104 -0
  1081. package/src/rsc/response-route-handler.ts +374 -0
  1082. package/src/rsc/rsc-rendering.ts +261 -0
  1083. package/src/rsc/runtime-warnings.ts +55 -0
  1084. package/src/rsc/server-action.ts +376 -0
  1085. package/src/rsc/ssr-setup.ts +144 -0
  1086. package/src/rsc/types.ts +58 -12
  1087. package/src/runtime-env.ts +18 -0
  1088. package/src/search-params.ts +70 -74
  1089. package/src/segment-content-promise.ts +67 -0
  1090. package/src/segment-loader-promise.ts +134 -0
  1091. package/src/segment-system.tsx +292 -134
  1092. package/src/serialize.ts +243 -0
  1093. package/src/server/context.ts +439 -85
  1094. package/src/server/cookie-store.ts +265 -0
  1095. package/src/server/fetchable-loader-store.ts +11 -6
  1096. package/src/server/handle-store.ts +112 -31
  1097. package/src/server/loader-registry.ts +23 -82
  1098. package/src/server/request-context.ts +724 -143
  1099. package/src/server.ts +26 -164
  1100. package/src/ssr/index.tsx +113 -36
  1101. package/src/static-handler.ts +45 -18
  1102. package/src/testing/cache-status.ts +162 -0
  1103. package/src/testing/collect-handle.ts +40 -0
  1104. package/src/testing/dispatch.ts +618 -0
  1105. package/src/testing/dom.entry.ts +22 -0
  1106. package/src/testing/e2e/fixture.ts +188 -0
  1107. package/src/testing/e2e/index.ts +128 -0
  1108. package/src/testing/e2e/matchers.ts +35 -0
  1109. package/src/testing/e2e/page-helpers.ts +272 -0
  1110. package/src/testing/e2e/parity.ts +387 -0
  1111. package/src/testing/e2e/server.ts +195 -0
  1112. package/src/testing/flight-matchers.ts +97 -0
  1113. package/src/testing/flight-normalize.ts +11 -0
  1114. package/src/testing/flight-runtime.d.ts +57 -0
  1115. package/src/testing/flight-tree.ts +682 -0
  1116. package/src/testing/flight.entry.ts +52 -0
  1117. package/src/testing/flight.ts +232 -0
  1118. package/src/testing/generated-routes.ts +183 -0
  1119. package/src/testing/index.ts +99 -0
  1120. package/src/testing/internal/context.ts +348 -0
  1121. package/src/testing/internal/flight-client-globals.ts +30 -0
  1122. package/src/testing/internal/seed-vars.ts +54 -0
  1123. package/src/testing/render-handler.ts +330 -0
  1124. package/src/testing/render-route.tsx +566 -0
  1125. package/src/testing/run-loader.ts +378 -0
  1126. package/src/testing/run-middleware.ts +205 -0
  1127. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1128. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1129. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1130. package/src/testing/vitest-stubs/version.ts +5 -0
  1131. package/src/testing/vitest.ts +305 -0
  1132. package/src/theme/ThemeProvider.tsx +21 -67
  1133. package/src/theme/ThemeScript.tsx +5 -11
  1134. package/src/theme/constants.ts +5 -14
  1135. package/src/theme/index.ts +3 -20
  1136. package/src/theme/theme-context.ts +5 -35
  1137. package/src/theme/theme-script.ts +21 -32
  1138. package/src/theme/use-theme.ts +0 -3
  1139. package/src/types/boundaries.ts +123 -0
  1140. package/src/types/cache-types.ts +207 -0
  1141. package/src/types/error-types.ts +132 -0
  1142. package/src/types/global-namespace.ts +113 -0
  1143. package/src/types/handler-context.ts +839 -0
  1144. package/src/types/index.ts +79 -0
  1145. package/src/types/loader-types.ts +212 -0
  1146. package/src/types/request-scope.ts +107 -0
  1147. package/src/types/route-config.ts +126 -0
  1148. package/src/types/route-entry.ts +114 -0
  1149. package/src/types/segments.ts +171 -0
  1150. package/src/types.ts +1 -1795
  1151. package/src/urls/include-helper.ts +160 -0
  1152. package/src/urls/index.ts +43 -0
  1153. package/src/urls/path-helper-types.ts +386 -0
  1154. package/src/urls/path-helper.ts +275 -0
  1155. package/src/urls/pattern-types.ts +124 -0
  1156. package/src/urls/response-types.ts +109 -0
  1157. package/src/urls/type-extraction.ts +291 -0
  1158. package/src/urls/urls-function.ts +81 -0
  1159. package/src/urls.ts +1 -1323
  1160. package/src/use-loader.tsx +406 -141
  1161. package/src/vite/debug.ts +185 -0
  1162. package/src/vite/discovery/bundle-postprocess.ts +182 -0
  1163. package/src/vite/discovery/discover-routers.ts +389 -0
  1164. package/src/vite/discovery/discovery-errors.ts +194 -0
  1165. package/src/vite/discovery/gate-state.ts +171 -0
  1166. package/src/vite/discovery/prerender-collection.ts +467 -0
  1167. package/src/vite/discovery/route-types-writer.ts +214 -0
  1168. package/src/vite/discovery/self-gen-tracking.ts +73 -0
  1169. package/src/vite/discovery/state.ts +161 -0
  1170. package/src/vite/discovery/virtual-module-codegen.ts +183 -0
  1171. package/src/vite/index.ts +17 -2259
  1172. package/src/vite/plugin-types.ts +221 -0
  1173. package/src/vite/plugins/cjs-to-esm.ts +83 -0
  1174. package/src/vite/plugins/client-ref-dedup.ts +120 -0
  1175. package/src/vite/plugins/client-ref-hashing.ts +118 -0
  1176. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1177. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1178. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1179. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +88 -110
  1180. package/src/vite/{expose-id-utils.ts → plugins/expose-id-utils.ts} +13 -87
  1181. package/src/vite/plugins/expose-ids/export-analysis.ts +338 -0
  1182. package/src/vite/plugins/expose-ids/handler-transform.ts +141 -0
  1183. package/src/vite/plugins/expose-ids/loader-transform.ts +57 -0
  1184. package/src/vite/plugins/expose-ids/router-transform.ts +124 -0
  1185. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1186. package/src/vite/plugins/expose-internal-ids.ts +806 -0
  1187. package/src/vite/plugins/performance-tracks.ts +89 -0
  1188. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1189. package/src/vite/plugins/use-cache-transform.ts +313 -0
  1190. package/src/vite/plugins/version-injector.ts +79 -0
  1191. package/src/vite/plugins/version-plugin.ts +275 -0
  1192. package/src/vite/plugins/virtual-entries.ts +108 -0
  1193. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1194. package/src/vite/rango.ts +444 -0
  1195. package/src/vite/router-discovery.ts +1581 -0
  1196. package/src/vite/{ast-handler-extract.ts → utils/ast-handler-extract.ts} +193 -37
  1197. package/src/vite/utils/banner.ts +36 -0
  1198. package/src/vite/utils/bundle-analysis.ts +132 -0
  1199. package/src/vite/utils/client-chunks.ts +184 -0
  1200. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1201. package/src/vite/utils/manifest-utils.ts +15 -0
  1202. package/src/vite/utils/package-resolution.ts +89 -0
  1203. package/src/vite/utils/prerender-utils.ts +223 -0
  1204. package/src/vite/utils/shared-utils.ts +219 -0
  1205. package/CLAUDE.md +0 -43
  1206. package/src/browser/lru-cache.ts +0 -69
  1207. package/src/browser/request-controller.ts +0 -164
  1208. package/src/browser/shallow.ts +0 -35
  1209. package/src/cache/memory-store.ts +0 -253
  1210. package/src/router.gen.ts +0 -6
  1211. package/src/static-handler.gen.ts +0 -5
  1212. package/src/urls.gen.ts +0 -8
  1213. package/src/vite/expose-internal-ids.ts +0 -1167
  1214. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -15,10 +15,9 @@ argument-hint: [setup]
15
15
  import { createRouter } from "@rangojs/router";
16
16
  import { urlpatterns } from "./urls";
17
17
 
18
- const router = createRouter<AppEnv>({
18
+ const router = createRouter<AppBindings>({
19
19
  document: Document,
20
- urls: urlpatterns,
21
- });
20
+ }).routes(urlpatterns);
22
21
 
23
22
  // Server-side named-route reverse (type-safe via routeMap)
24
23
  export const reverse = router.reverse;
@@ -26,6 +25,108 @@ export const reverse = router.reverse;
26
25
  export default router;
27
26
  ```
28
27
 
28
+ ### Which global type should I use?
29
+
30
+ Use the generated route map by default. Manual `RegisteredRoutes` augmentation
31
+ is only needed when you want the richer `typeof router.routeMap` shape
32
+ available globally.
33
+
34
+ - `GeneratedRouteMap` — auto-registered by `router.named-routes.gen.ts`
35
+ Use for `Handler<"name">`, `Prerender<"name">`, server `ctx.reverse()`,
36
+ and named-route param/search inference.
37
+ - `typeof router.routeMap` — the real merged route map from your router
38
+ instance, including response-route metadata such as `{ path, response }`.
39
+ - `RegisteredRoutes` — manual global hook for exposing `typeof router.routeMap`
40
+ to global utilities that need the exact router-builder map, especially
41
+ `Rango.PathResponse`.
42
+
43
+ ### Generated Route Type Surfaces
44
+
45
+ There are three distinct typing surfaces. They are **not** interchangeable —
46
+ pick the one that matches what you need to type:
47
+
48
+ | Surface | Source | Scope | Gives | Does not give |
49
+ | ------------------- | ---------------------------------------- | ------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------ |
50
+ | `GeneratedRouteMap` | `router.named-routes.gen.ts` (auto) | global | route names, path params, search schemas | response/MIME payloads |
51
+ | `routes` | per-module `*.gen.ts` (`rango generate`) | local | local names, params, search | the global app map |
52
+ | `RegisteredRoutes` | manual `extends typeof router.routeMap` | global | paths, params, **response payloads** | the `Handler`/`Prerender` default (those read `GeneratedRouteMap` to avoid a `router.tsx` cycle) |
53
+
54
+ Key consequence: `href()` and the ambient `Rango.Path` type are typed from
55
+ whichever map is present — they prefer `RegisteredRoutes` when you wire it, otherwise fall back to
56
+ the auto-generated `GeneratedRouteMap`, so **`rango generate` alone gives you
57
+ path-checked `href()`** with no manual augmentation. Response and MIME payload
58
+ inference is the exception: it comes only from `typeof router.routeMap` (via
59
+ `RegisteredRoutes`), because `GeneratedRouteMap` carries paths + search but no
60
+ payloads — so `Rango.PathResponse` resolves to `never` until you wire
61
+ `RegisteredRoutes`.
62
+
63
+ Recommended setup:
64
+
65
+ ```typescript
66
+ // router.tsx
67
+ import { createRouter } from "@rangojs/router";
68
+ import { urlpatterns } from "./urls";
69
+ import type { AppBindings, AppVars } from "./env";
70
+
71
+ export const router = createRouter<AppBindings>({}).routes(urlpatterns);
72
+
73
+ declare global {
74
+ namespace Rango {
75
+ interface Env extends AppBindings {}
76
+ interface Vars extends AppVars {}
77
+ interface RegisteredRoutes extends typeof router.routeMap {}
78
+ }
79
+ }
80
+ ```
81
+
82
+ ### Single-App Setup Checklist
83
+
84
+ For one app, keep the ambient types, generated named-routes file, and router
85
+ instance in the same TypeScript program:
86
+
87
+ ```jsonc
88
+ // tsconfig.json
89
+ {
90
+ "compilerOptions": {
91
+ "strict": true,
92
+ "moduleResolution": "bundler",
93
+ "jsx": "react-jsx",
94
+ "noEmit": true,
95
+ },
96
+ "include": ["src"],
97
+ "files": ["src/router.tsx"],
98
+ }
99
+ ```
100
+
101
+ Then generate the route types from the router file:
102
+
103
+ ```bash
104
+ npx rango generate src/router.tsx
105
+ ```
106
+
107
+ This creates `src/router.named-routes.gen.ts`, which augments
108
+ `Rango.GeneratedRouteMap`. Keep that generated file committed with the router
109
+ source. The `files` entry keeps `router.tsx` in the program even when nothing
110
+ imports it directly, so `Rango.Env`, `Rango.Vars`, and optional
111
+ `Rango.RegisteredRoutes` augmentation are visible to handlers, loaders, actions,
112
+ and client helpers.
113
+
114
+ ### Named Routes, `$$routeNames`, And `router.routeMap`
115
+
116
+ There are two runtime/type surfaces with similar names:
117
+
118
+ - `router.named-routes.gen.ts` exports `NamedRoutes` and augments
119
+ `Rango.GeneratedRouteMap`. The Vite plugin imports that file internally and
120
+ injects it as `$$routeNames` so `router.reverse` has the static route-name map.
121
+ App code should not pass or import `$$routeNames` directly.
122
+ - `router.routeMap` is the public router instance property for type extraction.
123
+ Use `typeof router.routeMap` when augmenting `Rango.RegisteredRoutes` for
124
+ global response payload helpers such as `Rango.PathResponse`.
125
+
126
+ Do not document or use a public `router.routeNames` API unless one is
127
+ intentionally added. Today, the public extraction surface is `router.routeMap`;
128
+ the generated file and `$$routeNames` are build machinery.
129
+
29
130
  ## Route Definition with Type-Safe Names
30
131
 
31
132
  ```typescript
@@ -45,22 +146,35 @@ export const urlpatterns = urls(({ path, layout }) => [
45
146
 
46
147
  ## Type-Safe href()
47
148
 
48
- ### Server: ctx.reverse + scopedReverse
149
+ ### Server: ctx.reverse with route names
49
150
 
50
- In route handlers, use `scopedReverse()` for local route name autocomplete:
151
+ In route handlers, `ctx.reverse()` uses two namespaces:
152
+
153
+ - **`.name`** — local route, resolved within the current `include()` scope
154
+ - **`name`** — global route, from the named-routes definition
51
155
 
52
156
  ```typescript
53
- import { scopedReverse } from "@rangojs/router";
157
+ import type { Handler } from "@rangojs/router";
54
158
 
55
- path("/product/:slug", (ctx) => {
56
- const reverse = scopedReverse<typeof shopPatterns>(ctx.reverse);
159
+ export const ProductHandler: Handler<"shop.product"> = (ctx) => {
160
+ ctx.reverse(".cart"); // Local: /shop/cart
161
+ ctx.reverse(".product", { slug: "widget" }); // Local: /shop/product/widget
162
+ ctx.reverse("blog.post", { slug: "1" }); // Global: /blog/1
163
+ };
164
+ ```
57
165
 
58
- reverse("cart"); // Type-safe local name
59
- reverse("product", { slug: "widget" }); // Type-safe with params
60
- reverse("blog.post"); // Absolute names always allowed
166
+ For type-safe local names, generate a route types file with `npx rango generate urls/shop.tsx`
167
+ and pass it as the second generic to `Handler` or `Prerender`:
61
168
 
62
- return <ProductPage slug={ctx.params.slug} />;
63
- }, { name: "product" })
169
+ ```typescript
170
+ import type { Handler } from "@rangojs/router";
171
+ import type { routes } from "./shop.gen.js";
172
+
173
+ export const ProductHandler: Handler<"shop.product", routes> = (ctx) => {
174
+ ctx.reverse(".cart"); // Type-safe local name
175
+ ctx.reverse(".product", { slug: "widget" }); // Type-safe local with params
176
+ ctx.reverse("blog.post", { slug: "hi" }); // Type-safe global name
177
+ };
64
178
  ```
65
179
 
66
180
  ### Client: href + useHref
@@ -82,6 +196,107 @@ function ShopNav() {
82
196
  }
83
197
  ```
84
198
 
199
+ `href()` and the `Rango.Path` type read from `RegisteredRoutes` when you augment
200
+ it, otherwise from the auto-generated `GeneratedRouteMap` — so `rango generate`
201
+ alone type-checks `href()` paths with no manual augmentation. The augmentation
202
+ below is only needed for **`Rango.PathResponse`** (response-payload inference), which
203
+ `GeneratedRouteMap` cannot provide:
204
+
205
+ ```typescript
206
+ declare global {
207
+ namespace Rango {
208
+ interface RegisteredRoutes extends typeof router.routeMap {}
209
+ }
210
+ }
211
+ ```
212
+
213
+ For wrapper helpers, type the path parameter as `Rango.Path`. It is ambient (no
214
+ import) and shares `href()`'s compile-time path checking, so a wrapper stays in
215
+ sync with your routes automatically:
216
+
217
+ ```typescript
218
+ import { href } from "@rangojs/router/client";
219
+
220
+ export const appHref = (path: Rango.Path): string => href(path);
221
+ ```
222
+
223
+ For response-route payloads, `Rango.PathResponse<T>` is the ambient lookup. It
224
+ accepts a route _pattern_ **or** a concrete path, so it also serves as the return
225
+ type of a typed `fetch` wrapper. It only resolves once `RegisteredRoutes` carries
226
+ response metadata:
227
+
228
+ ```typescript
229
+ import { href } from "@rangojs/router/client";
230
+
231
+ type Product = Rango.PathResponse<"/api/products/:id">; // by pattern
232
+ type Same = Rango.PathResponse<"/api/products/42">; // by concrete path
233
+
234
+ // Response inferred from the concrete path passed in:
235
+ async function get<T extends Rango.Path>(
236
+ path: T,
237
+ ): Promise<Rango.PathResponse<T>> {
238
+ return fetch(href(path)).then((r) => r.json());
239
+ }
240
+ const product = await get("/api/products/42"); // Product (bare value)
241
+ ```
242
+
243
+ Pattern keys (`/:id`) match exactly; a concrete path under a _nested_ dynamic
244
+ route can match several patterns and union their responses.
245
+
246
+ `Rango.PathResponse` describes the JSON **wire** shape, not the handler's raw
247
+ return. A `path.json()` handler returning `{ createdAt: Date }` resolves here to
248
+ `{ createdAt: string }` (bare value), matching what `r.json()` yields. This
249
+ is applied via the ambient `Rango.JsonSerialize<T>` transform (`Date -> string`,
250
+ honors `toJSON()`, drops functions/`undefined`, `bigint -> never`). A separate
251
+ `Rango.FlightSerialize<T>` models the higher-fidelity RSC Flight boundary
252
+ (loaders / RSC props, where `Date` is preserved) — do **not** use it for
253
+ `path.json()`.
254
+
255
+ ### Overriding serialization globally
256
+
257
+ For your own types, the zero-config way to control the JSON wire shape is a
258
+ `toJSON()` method — `Rango.JsonSerialize` honors it, and it matches the runtime
259
+ exactly (`JSON.stringify` calls `toJSON()`):
260
+
261
+ ```typescript
262
+ class Money {
263
+ constructor(private cents: number) {}
264
+ toJSON(): number {
265
+ return this.cents;
266
+ }
267
+ }
268
+ // Rango.JsonSerialize<Money> is number; Rango.PathResponse reflects it.
269
+ ```
270
+
271
+ To override a transform for types you **don't** own (or for the Flight boundary,
272
+ which has no `toJSON()`), augment its override slot. Because `Rango.JsonSerialize`
273
+ / `Rango.FlightSerialize` are type _aliases_ (TS can't merge those), you provide a
274
+ single member that is your **complete** transform, delegating to the built-in for
275
+ the cases you don't change:
276
+
277
+ ```typescript
278
+ declare global {
279
+ namespace Rango {
280
+ interface JsonSerializeOverride<T> {
281
+ app: T extends Decimal ? string : Rango.JsonSerializeBuiltin<T>;
282
+ }
283
+ interface FlightSerializeOverride<T> {
284
+ app: T extends Money ? number : Rango.FlightSerializeBuiltin<T>;
285
+ }
286
+ }
287
+ }
288
+ // Rango.JsonSerialize<Decimal> -> string; Rango.FlightSerialize<Money> -> number;
289
+ // everything else stays on the built-in, recursively (nested fields too).
290
+ ```
291
+
292
+ Rules: provide **exactly one** member (the slot is read as
293
+ `Override<T>[keyof Override<T>]`, so multiple members union and conflict).
294
+ Overrides win over `toJSON()` and apply at every nesting level. Caveat for JSON:
295
+ the `path.json()` runtime is plain `JSON.stringify`, which only honors `toJSON()`,
296
+ so a `JsonSerializeOverride` that disagrees with what the runtime emits will lie —
297
+ prefer `toJSON()` for your own types and use the slot only for types you can't
298
+ modify.
299
+
85
300
  See `/links` for full URL generation guide.
86
301
 
87
302
  ## Environment Type Setup
@@ -90,50 +305,57 @@ Define your app's environment for type-safe bindings and variables:
90
305
 
91
306
  ```typescript
92
307
  // env.ts
93
- import type { RouterEnv } from "@rangojs/router";
94
308
 
95
- // Cloudflare bindings
96
- interface AppBindings {
309
+ // Cloudflare bindings — passed as TEnv to createRouter<TEnv>()
310
+ export interface AppBindings {
97
311
  DB: D1Database;
98
312
  KV: KVNamespace;
99
313
  CACHE: KVNamespace;
100
314
  AI: Ai;
101
315
  }
102
316
 
103
- // Variables set by middleware
104
- interface AppVariables {
317
+ // Variables set by middleware — declared via global namespace augmentation
318
+ export interface AppVariables {
105
319
  user?: { id: string; email: string; role: string };
106
320
  requestId?: string;
107
321
  permissions?: string[];
108
322
  }
109
-
110
- // Combined environment type
111
- export type AppEnv = RouterEnv<AppBindings, AppVariables>;
112
323
  ```
113
324
 
114
325
  ### Using Environment Types
115
326
 
116
327
  ```typescript
117
328
  // router.tsx
118
- import type { AppEnv } from "./env";
329
+ import type { AppBindings, AppVariables } from "./env";
119
330
 
120
- const router = createRouter<AppEnv>({
331
+ const router = createRouter<AppBindings>({
121
332
  document: Document,
122
- urls: urlpatterns,
123
- });
333
+ }).routes(urlpatterns);
124
334
 
125
- // middleware - typed ctx.env.Variables
126
- import { createMiddleware } from "@rangojs/router";
335
+ // Register bindings and variables globally for implicit typing
336
+ declare global {
337
+ namespace Rango {
338
+ interface Env extends AppBindings {}
339
+ interface Vars extends AppVariables {}
340
+ }
341
+ }
342
+
343
+ // middleware - typed via ctx.set / ctx.get
344
+ import type { Middleware } from "@rangojs/router";
127
345
 
128
- export const authMiddleware = createMiddleware(async (ctx, next) => {
129
- ctx.env.Variables.user = { id: "123", email: "user@example.com", role: "admin" };
346
+ export const authMiddleware: Middleware = async (ctx, next) => {
347
+ ctx.set("user", {
348
+ id: "123",
349
+ email: "user@example.com",
350
+ role: "admin",
351
+ });
130
352
  await next();
131
- });
353
+ };
132
354
 
133
355
  // loaders - typed context
134
- export const UserLoader = createLoader("user", async (ctx) => {
135
- const db = ctx.env.Bindings.DB; // D1Database
136
- const userId = ctx.env.Variables.user?.id;
356
+ export const UserLoader = createLoader(async (ctx) => {
357
+ const db = ctx.env.DB; // D1Database (plain bindings)
358
+ const userId = ctx.get("user")?.id; // from Rango.Vars
137
359
  return db.prepare("SELECT * FROM users WHERE id = ?").bind(userId).first();
138
360
  });
139
361
  ```
@@ -145,8 +367,9 @@ Register environment types globally for implicit typing:
145
367
  ```typescript
146
368
  // router.tsx
147
369
  declare global {
148
- namespace RSCRouter {
149
- interface Env extends AppEnv {}
370
+ namespace Rango {
371
+ interface Env extends AppBindings {}
372
+ interface Vars extends AppVariables {}
150
373
  }
151
374
  }
152
375
  ```
@@ -155,10 +378,10 @@ Now handlers have typed context without explicit imports:
155
378
 
156
379
  ```typescript
157
380
  // In loaders
158
- export const DashboardLoader = createLoader("dashboard", async (ctx) => {
159
- // ctx.env.Variables.user is typed from global Env
160
- // ctx.params is typed from route pattern
161
- const user = ctx.env.Variables.user;
381
+ export const DashboardLoader = createLoader(async (ctx) => {
382
+ // ctx.env.DB is typed from global Rango.Env
383
+ // ctx.get("user") is typed from global Rango.Vars
384
+ const user = ctx.get("user");
162
385
  return { user };
163
386
  });
164
387
  ```
@@ -172,7 +395,7 @@ Add a `search` schema to `path()` options for type-safe query parameters:
172
395
  path("/search", SearchPage, {
173
396
  name: "search",
174
397
  search: { q: "string", page: "number?", sort: "string?" },
175
- })
398
+ });
176
399
  ```
177
400
 
178
401
  ### Handler with typed search params
@@ -185,24 +408,31 @@ global `GeneratedRouteMap` (the gen file). No explicit route map import needed:
185
408
  import type { Handler } from "@rangojs/router";
186
409
 
187
410
  export const SearchPage: Handler<"search"> = (ctx) => {
188
- // ctx.searchParams is typed: { q: string; page?: number; sort?: string }
189
- const { q, page, sort } = ctx.searchParams;
411
+ // ctx.search is typed: { q: string; page?: number; sort?: string }
412
+ const { q, page, sort } = ctx.search;
190
413
  return <SearchResults q={q} page={page} sort={sort} />;
191
414
  };
192
415
  ```
193
416
 
194
417
  This avoids circular references because `Handler` defaults to `GeneratedRouteMap`
195
- (standalone gen file) instead of `RegisteredRoutes` (which depends on `router.tsx`).
418
+ (from `router.named-routes.gen.ts`) instead of `RegisteredRoutes` (which depends on `router.tsx`).
196
419
 
197
- You can also pass an explicit route map if needed:
420
+ You can also pass an explicit route map for per-module isolation (opt-in,
421
+ after running `npx rango generate`). With a local map, the route name is
422
+ **dot-prefixed** so params and search resolve from `routes`, not the global map:
198
423
 
199
424
  ```typescript
200
425
  import type { Handler } from "@rangojs/router";
201
- import type { routes } from "../urls.gen.js";
426
+ import type { routes } from "./urls.gen.js";
202
427
 
203
- export const SearchPage: Handler<"search", routes> = (ctx) => { ... };
428
+ export const SearchPage: Handler<".search", routes> = (ctx) => { ... };
204
429
  ```
205
430
 
431
+ Note the difference: `Handler<"search">` (no dot) resolves against the global
432
+ `GeneratedRouteMap`; `Handler<".search", routes>` resolves against the local
433
+ `routes` map. Mixing them — `Handler<"search", routes>` — silently ignores
434
+ `routes` for param/search inference and only uses it for local `ctx.reverse(".x")`.
435
+
206
436
  Supported types: `"string"`, `"number"`, `"boolean"`, with `?` suffix for optional.
207
437
  Values are automatically coerced from query string (e.g., `"2"` becomes `2` for numbers).
208
438
  Routes without a `search` schema keep the standard `URLSearchParams` behavior.
@@ -216,12 +446,18 @@ import type { RouteSearchParams, RouteParams } from "@rangojs/router";
216
446
 
217
447
  // RouteSearchParams<"name"> resolves the search schema to a typed object
218
448
  type SP = RouteSearchParams<"search">;
219
- // { q: string; page?: number; sort?: string }
449
+ // { q: string | undefined; page?: number; sort?: string }
220
450
 
221
451
  // RouteParams<"name"> resolves URL params from the route pattern
222
452
  type P = RouteParams<"blogPost">;
223
453
  // { slug: string }
224
454
 
455
+ // Optional URL params (`:slug?`) resolve to `string | undefined`
456
+ // because absent segments are omitted from `ctx.params` at runtime.
457
+ type C = RouteParams<"checkout">;
458
+ // { step?: string }
459
+ // → ctx.params.step is `string | undefined`; use `?? "default"` to coalesce.
460
+
225
461
  // Use in component props
226
462
  interface SearchResultsProps {
227
463
  params: RouteSearchParams<"search">;
@@ -240,25 +476,40 @@ type P = RouteParams<"blogPost", routes>;
240
476
 
241
477
  ### Generated route types
242
478
 
243
- In the generated route types (`urls.gen.ts` and `GeneratedRouteMap`), routes with
244
- search schemas use `{ path, search }` objects:
479
+ In the generated `router.named-routes.gen.ts`, routes with search schemas
480
+ use `{ path, search }` objects:
245
481
 
246
482
  ```typescript
247
- // urls.gen.ts (auto-generated by `npx rango extract-names`)
248
- export const routes = {
249
- search: { path: "/search", search: { q: "string", page: "number?", sort: "string?" } },
250
- home: "/", // No search schema -> plain string
483
+ // router.named-routes.gen.ts (auto-generated)
484
+ export const NamedRoutes = {
485
+ "search.index": {
486
+ path: "/search",
487
+ search: { q: "string", page: "number?", sort: "string?" },
488
+ },
489
+ "home.index": "/", // No search schema -> plain string
251
490
  } as const;
252
- export type routes = typeof routes;
253
491
  ```
254
492
 
493
+ You never open a `.gen.ts` by hand. Treat the generated types as call-site
494
+ honesty checks, not modules to read:
495
+
496
+ - **Do not import `router.named-routes.gen.ts` directly**, and don't reach for
497
+ `Rango.GeneratedRouteMap`. It is the whole-app manifest, auto-wired
498
+ globally — `Handler<"name">` and `ctx.reverse("name")` already see it.
499
+ - **Per-module `*.gen.ts` imports are fine** — they are the opt-in local-route
500
+ pattern for `useReverse(routes)` and explicit local handler typing
501
+ (`Handler<".name", routes>`). See `/links`.
502
+
503
+ If a type error points at a generated map instead of your call site, that's a
504
+ smell — fix the call site (or regenerate), never edit the generated file.
505
+
255
506
  ## Loader Type Safety
256
507
 
257
508
  Loaders have typed return values:
258
509
 
259
510
  ```typescript
260
511
  // loaders/product.ts
261
- export const ProductLoader = createLoader("product", async (ctx) => {
512
+ export const ProductLoader = createLoader(async (ctx) => {
262
513
  return {
263
514
  id: ctx.params.slug,
264
515
  name: "Widget",
@@ -267,7 +518,7 @@ export const ProductLoader = createLoader("product", async (ctx) => {
267
518
  });
268
519
 
269
520
  // In server component - type is inferred
270
- import { useLoader } from "@rangojs/router";
521
+ import { useLoader } from "@rangojs/router/client";
271
522
 
272
523
  async function ProductPage() {
273
524
  const product = await useLoader(ProductLoader);
@@ -277,40 +528,110 @@ async function ProductPage() {
277
528
 
278
529
  // In client component - same type
279
530
  "use client";
280
- import { useLoaderData } from "@rangojs/router/client";
531
+ import { useLoader } from "@rangojs/router/client";
281
532
 
282
533
  function ProductPrice() {
283
- const { product } = useLoaderData(ProductLoader);
284
- // product: { id: string; name: string; price: number }
534
+ const { data } = useLoader(ProductLoader);
535
+ // data: { id: string; name: string; price: number }
536
+ const product = data;
285
537
  return <span>${product.price}</span>;
286
538
  }
287
539
  ```
288
540
 
289
- ## Handle Type Safety
541
+ ## Typed Context Variables
290
542
 
291
- Handles have typed data:
543
+ `createVar<T>()` creates a typed token for `ctx.set()`/`ctx.get()`, making
544
+ handler-to-layout data contracts explicit and compile-time verified:
292
545
 
293
546
  ```typescript
294
- // handles/breadcrumbs.ts
295
- import { createHandle } from "@rangojs/router";
547
+ import { createVar } from "@rangojs/router";
296
548
 
297
- // All export patterns work: export const, const + export { X }, export { X as Y }
298
- export const Breadcrumbs = createHandle<{ label: string; href: string }>();
549
+ // Define a typed token (shared between producer and consumer)
550
+ interface PaginationData {
551
+ current: number;
552
+ total: number;
553
+ perPage: number;
554
+ }
555
+ export const Pagination = createVar<PaginationData>();
299
556
 
300
- // In route definition - use handle() DSL
301
- import { urls } from "@rangojs/router";
557
+ // Non-cacheable var reading inside cache() or "use cache" throws at runtime
558
+ const Session = createVar<SessionData>({ cache: false });
559
+ ```
302
560
 
303
- export const urlpatterns = urls(({ path, handle }) => [
304
- path("/shop/product/:slug", ProductPage, { name: "product" }, () => [
305
- handle(Breadcrumbs, { label: "Products", href: "/shop/products" }),
306
- ]),
307
- ]);
561
+ `createVar` accepts an optional options object. The `cache` option (default
562
+ `true`) controls whether the var's values can be read inside cache scopes.
563
+ Write-level escalation is also supported: `ctx.set(Var, value, { cache: false })`
564
+ marks a specific write as non-cacheable even if the var itself is cacheable.
565
+ "Least cacheable wins" — if either says `cache: false`, the value throws on
566
+ read inside `cache()` or `"use cache"`.
567
+
568
+ ### Producer (handler or middleware)
308
569
 
309
- // In client - typed array
570
+ ```typescript
571
+ import { Pagination } from "../vars/pagination.js";
572
+
573
+ const ArticleList: Handler<"articles.list"> = async (ctx) => {
574
+ ctx.set(Pagination, { // type-checked
575
+ current: 1,
576
+ total: 10,
577
+ perPage: 5,
578
+ });
579
+ return <Articles />;
580
+ };
581
+ ```
582
+
583
+ ### Consumer (layout, parallel, or any context with get)
584
+
585
+ ```typescript
586
+ import { Pagination } from "../vars/pagination.js";
587
+
588
+ export function PaginationLayout(ctx: any) {
589
+ const pagination = ctx.get(Pagination); // typed as PaginationData | undefined
590
+ if (!pagination) return <Outlet />;
591
+ return <nav>Page {pagination.current} of {pagination.total}</nav>;
592
+ }
593
+ ```
594
+
595
+ ### Why not just use Rango.Vars?
596
+
597
+ `Rango.Vars` (via global namespace augmentation) provides app-global typing for
598
+ `ctx.get("key")` / `ctx.set("key", value)`. It works for middleware state
599
+ shared app-wide. `createVar<T>()` is for route-local or feature-scoped
600
+ context -- the producer and consumer import the same token, creating a
601
+ scoped contract without polluting global types.
602
+
603
+ Both approaches coexist: `ctx.get("user")` (global via Vars) and
604
+ `ctx.get(Pagination)` (scoped via createVar) work side by side.
605
+
606
+ ## Handle Type Safety
607
+
608
+ Handles have typed data:
609
+
610
+ ```typescript
611
+ // Built-in Breadcrumbs handle — import from "@rangojs/router"
612
+ import { Breadcrumbs } from "@rangojs/router";
613
+ // Type: Handle<BreadcrumbItem, BreadcrumbItem[]>
614
+ // BreadcrumbItem: { label: string; href: string; content?: ReactNode | Promise<ReactNode> }
615
+
616
+ // In route handler — push is fully typed
617
+ path("/shop/product/:slug", (ctx) => {
618
+ const breadcrumb = ctx.use(Breadcrumbs);
619
+ breadcrumb({ label: "Products", href: "/shop/products" });
620
+ return <ProductPage />;
621
+ }, { name: "product" });
622
+
623
+ // In client — typed array
624
+ import { useHandle, Breadcrumbs } from "@rangojs/router/client";
310
625
  function BreadcrumbNav() {
311
626
  const crumbs = useHandle(Breadcrumbs);
312
- // crumbs: Array<{ label: string; href: string }>
627
+ // crumbs: BreadcrumbItem[]
313
628
  }
629
+
630
+ // Custom handles also work the same way
631
+ import { createHandle } from "@rangojs/router";
632
+ export const PageTitle = createHandle<string, string>(
633
+ (segments) => segments.flat().at(-1) ?? "Default Title"
634
+ );
314
635
  ```
315
636
 
316
637
  ## Ref Prop Type Safety (Loaders & Handles)
@@ -324,24 +645,24 @@ export const ProductLoader = createLoader(async (ctx) => {
324
645
  return { product: await fetchProduct(ctx.params.slug) };
325
646
  });
326
647
 
327
- // handles.ts
328
- export const Breadcrumbs = createHandle<{ label: string; href: string }>();
648
+ // Built-in Breadcrumbs — or any custom handle created with createHandle()
649
+ ```
329
650
 
651
+ ```tsx
330
652
  // Client component — typeof infers all generics
331
653
  "use client";
332
- import { useLoader, useHandle } from "@rangojs/router/client";
654
+ import { useLoader, useHandle, type Breadcrumbs } from "@rangojs/router/client";
333
655
  import type { ProductLoader } from "../loaders";
334
- import type { Breadcrumbs } from "../handles";
335
656
 
336
657
  function MyComponent({
337
658
  loader,
338
659
  handle,
339
660
  }: {
340
- loader: typeof ProductLoader; // LoaderDefinition<{ product: Product }>
341
- handle: typeof Breadcrumbs; // Handle<{ label: string; href: string }>
661
+ loader: typeof ProductLoader; // LoaderDefinition<{ product: Product }>
662
+ handle: typeof Breadcrumbs; // Handle<{ label: string; href: string }>
342
663
  }) {
343
- const { data } = useLoader(loader); // data is typed
344
- const crumbs = useHandle(handle); // crumbs is typed array
664
+ const { data } = useLoader(loader); // data is typed
665
+ const crumbs = useHandle(handle); // crumbs is typed array
345
666
  // ...
346
667
  }
347
668
  ```
@@ -350,6 +671,42 @@ RSC Flight serialization calls `toJSON()` on both loaders and handles,
350
671
  sending only `{ __brand, $$id }` to the client. The hooks recover the
351
672
  full functionality from module-level registries.
352
673
 
674
+ ## Stable identity: `path#export`
675
+
676
+ Loaders, handles, cached functions (`functionId`), and server actions
677
+ (`actionId`) all share one identity scheme: `{modulePath}#{exportName}`,
678
+ injected at build by the `exposeInternalIds` and `exposeActionId` Vite plugins.
679
+ This is also the identity React server actions carry across the Flight boundary,
680
+ which is why a `revalidate()` predicate sees an action as a `path#export` string:
681
+
682
+ ```typescript
683
+ revalidate(
684
+ ({ actionId }) => actionId === "src/actions/cart.ts#addToCart" || undefined,
685
+ );
686
+ ```
687
+
688
+ `actionId` is the only stable reference React exposes across the Flight boundary,
689
+ so it stays as the floor and escape hatch. The hand-written-string surface
690
+ (`actionId?.includes("cart.ts#")`) is brittle: a renamed action or moved file
691
+ silently stops matching with no compile error. Prefer **`ctx.isAction()`** in a
692
+ revalidate predicate — it resolves the action's id from an imported reference, so
693
+ a rename is a type error in one place instead of silent drift:
694
+
695
+ ```ts
696
+ import { addToCart, removeFromCart } from "./actions/cart";
697
+ import * as CartActions from "./actions/cart";
698
+
699
+ revalidate((ctx) => ctx.isAction(addToCart) || undefined); // one action
700
+ revalidate((ctx) => ctx.isAction(addToCart, removeFromCart) || undefined); // several
701
+ revalidate((ctx) => ctx.isAction(CartActions) || undefined); // any action in the module
702
+ ```
703
+
704
+ `ctx.isAction()` (only available on the revalidate predicate's context) returns a
705
+ raw boolean — combine with `|| undefined` for the "revalidate on match, else
706
+ defer" intent. It resolves the reference the same way the router derives
707
+ `actionId` (`$id` in production, `$$id` in dev), so matching
708
+ works in both modes. `actionId` stays available for advanced cases.
709
+
353
710
  ## Location State Type Safety
354
711
 
355
712
  ```typescript
@@ -385,9 +742,37 @@ function ProductHeader() {
385
742
 
386
743
  ## Multi-Project tsconfig Setup
387
744
 
388
- For monorepos or multi-app setups, use a shared base tsconfig. Each app only needs
389
- to extend the base and add its `router.tsx` to `files` so TypeScript picks up the
390
- global type declarations (like `RSCRouter.Env`).
745
+ For monorepos or multi-app setups, each app should have its own TypeScript
746
+ program. Do not typecheck two Rango apps with different `Rango.Env`,
747
+ `Rango.Vars`, or `Rango.RegisteredRoutes` declarations in one tsconfig, because
748
+ ambient global interfaces merge across the whole program.
749
+
750
+ ### Multiple routers in one program
751
+
752
+ `Rango.GeneratedRouteMap` is a **single global interface**. Each router's
753
+ generated `router.named-routes.gen.ts` augments it, so two routers in the **same
754
+ TS program** that define overlapping route names (e.g. both have a `home`) make
755
+ the augmentations collide:
756
+
757
+ ```text
758
+ Interface 'GeneratedRouteMap' cannot simultaneously extend ...
759
+ Named property 'home' ... are not identical.
760
+ ```
761
+
762
+ This is the multi-router / host-router case. Resolve it by:
763
+
764
+ - **Separate TS programs** — give each router its own tsconfig (as below) so only
765
+ one generated map is in scope per program. Recommended.
766
+ - **Unique route-name prefixes** — name routes per router (`appA.home`,
767
+ `appB.home`) so the merged global map has no duplicate keys.
768
+
769
+ A single global generated map is a single-router convenience; global named-route
770
+ typing across multiple routers in one program is not supported today (it would
771
+ need per-router scoping in the generated map).
772
+
773
+ Use a shared base tsconfig for common compiler options, then make every app
774
+ tsconfig include its own source tree, its own `router.tsx`, and the generated
775
+ `router.named-routes.gen.ts` that lives beside that router.
391
776
 
392
777
  ```jsonc
393
778
  // tsconfig.base.json (root)
@@ -403,8 +788,8 @@ global type declarations (like `RSCRouter.Env`).
403
788
  "skipLibCheck": true,
404
789
  "isolatedModules": true,
405
790
  "esModuleInterop": true,
406
- "resolveJsonModule": true
407
- }
791
+ "resolveJsonModule": true,
792
+ },
408
793
  }
409
794
  ```
410
795
 
@@ -413,7 +798,7 @@ global type declarations (like `RSCRouter.Env`).
413
798
  {
414
799
  "extends": "../../tsconfig.base.json",
415
800
  "include": ["src"],
416
- "files": ["src/router.tsx"]
801
+ "files": ["src/router.tsx"],
417
802
  }
418
803
  ```
419
804
 
@@ -422,19 +807,66 @@ global type declarations (like `RSCRouter.Env`).
422
807
  {
423
808
  "extends": "../../tsconfig.base.json",
424
809
  "include": ["src"],
425
- "files": ["src/router.tsx"]
810
+ "files": ["src/router.tsx"],
426
811
  }
427
812
  ```
428
813
 
429
- The `files` array ensures `router.tsx` (which contains `declare global { namespace RSCRouter { ... } }`)
430
- is always included in the compilation even if nothing directly imports it. Each app gets its own
431
- typed environment without interfering with other apps.
814
+ Run generation per app:
815
+
816
+ ```bash
817
+ npx rango generate apps/shop/src/router.tsx
818
+ npx rango generate apps/blog/src/router.tsx
819
+ ```
820
+
821
+ If an app has multiple tsconfigs (`tsconfig.app.json`, `tsconfig.test.json`,
822
+ `tsconfig.worker.json`), every tsconfig that typechecks Rango handlers,
823
+ components, loaders, actions, or client navigation must see the same app-local
824
+ type surfaces:
825
+
826
+ ```jsonc
827
+ // apps/shop/tsconfig.test.json
828
+ {
829
+ "extends": "./tsconfig.json",
830
+ "include": ["src", "tests"],
831
+ "files": ["src/router.tsx"],
832
+ }
833
+ ```
834
+
835
+ The `files` array ensures `router.tsx` is always included even if nothing
836
+ directly imports it. The generated `router.named-routes.gen.ts` is normally
837
+ covered by `include: ["src"]`; if a tsconfig uses a narrow `include`, add the
838
+ generated file explicitly. Each app gets its own typed environment and named
839
+ route map without interfering with other apps.
840
+
841
+ For response and MIME payload lookup in each app, augment `RegisteredRoutes`
842
+ inside that app's router file:
843
+
844
+ ```typescript
845
+ // apps/shop/src/router.tsx
846
+ export const router = createRouter<ShopEnv>({ document: Document }).routes(
847
+ urlpatterns,
848
+ );
849
+
850
+ declare global {
851
+ namespace Rango {
852
+ interface Env extends ShopEnv {}
853
+ interface RegisteredRoutes extends typeof router.routeMap {}
854
+ }
855
+ }
856
+ ```
432
857
 
433
858
  ## Complete Type-Safe Setup
434
859
 
435
860
  ```typescript
436
861
  // 1. env.ts - Environment types
437
- export type AppEnv = RouterEnv<AppBindings, AppVariables>;
862
+ export interface AppBindings {
863
+ DB: D1Database;
864
+ KV: KVNamespace;
865
+ }
866
+
867
+ export interface AppVariables {
868
+ user?: { id: string; email: string; role: string };
869
+ }
438
870
 
439
871
  // 2. urls.tsx - Route definitions with names
440
872
  import { urls } from "@rangojs/router";
@@ -450,35 +882,43 @@ export const urlpatterns = urls(({ path, layout, loader }) => [
450
882
  ]),
451
883
  ]);
452
884
 
453
- // 3. router.tsx - Registration
454
- const router = createRouter<AppEnv>({
885
+ // 3. router.tsx - Create router and export reverse
886
+ const router = createRouter<AppBindings>({
455
887
  document: Document,
456
- urls: urlpatterns,
457
- });
888
+ }).routes(urlpatterns);
458
889
 
890
+ // Register bindings and variables globally for implicit typing
459
891
  declare global {
460
- namespace RSCRouter {
461
- interface Env extends AppEnv {}
892
+ namespace Rango {
893
+ interface Env extends AppBindings {}
894
+ interface Vars extends AppVariables {}
462
895
  }
463
896
  }
464
897
 
898
+ export const reverse = router.reverse;
465
899
  export default router;
466
900
 
467
- // 4. loaders/*.ts - Type-safe loaders
468
- export const ProductLoader = createLoader("product", async (ctx) => {
901
+ // 4. Run `npx rango generate src/router.tsx` to generate
902
+ // router.named-routes.gen.ts (auto-registers GeneratedRouteMap globally).
903
+ // No manual RegisteredRoutes declaration is needed for named-route handlers,
904
+ // ctx.reverse, prerender, href(), or Rango.Path. Add `RegisteredRoutes
905
+ // extends typeof router.routeMap` when global response payload helpers such
906
+ // as Rango.PathResponse need the richer router.routeMap metadata.
907
+
908
+ // 5. loaders/*.ts - Type-safe loaders
909
+ export const ProductLoader = createLoader(async (ctx) => {
469
910
  // ctx.params: { slug: string }
470
- // ctx.env.Variables.user: User | undefined
471
- // ctx.env.Bindings.DB: D1Database
911
+ // ctx.get("user"): User | undefined (from Rango.Vars)
912
+ // ctx.env.DB: D1Database (plain bindings from Rango.Env)
472
913
  return { product: await fetchProduct(ctx.params.slug) };
473
914
  });
474
915
 
475
- // 5. Server: ctx.reverse for named routes
916
+ // 6. Server: ctx.reverse for named routes
476
917
  path("/product/:slug", (ctx) => {
477
- const reverse = scopedReverse<typeof urlpatterns>(ctx.reverse);
478
- return <Link to={reverse("shop")}>Back to Shop</Link>;
918
+ return <Link to={ctx.reverse("shop")}>Back to Shop</Link>;
479
919
  }, { name: "product" })
480
920
 
481
- // 6. Client: useHref for mounted paths, href for absolute
921
+ // 7. Client: useHref for mounted paths, href for absolute
482
922
  "use client";
483
923
  import { useHref, href, Link } from "@rangojs/router/client";
484
924
  <Link to={href("/shop/product/widget")}>Widget</Link>