@rangojs/router 0.0.0-experimental.141 → 0.0.0-experimental.142

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 (903) hide show
  1. package/AGENTS.md +6 -10
  2. package/README.md +17 -0
  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.map +1 -0
  82. package/dist/browser/event-controller.d.ts +191 -0
  83. package/dist/browser/event-controller.d.ts.map +1 -0
  84. package/dist/browser/event-controller.js +559 -0
  85. package/dist/browser/event-controller.js.map +1 -0
  86. package/dist/browser/index.d.ts +2 -0
  87. package/dist/browser/index.d.ts.map +1 -0
  88. package/dist/browser/index.js +14 -0
  89. package/dist/browser/index.js.map +1 -0
  90. package/dist/browser/link-interceptor.d.ts +38 -0
  91. package/dist/browser/link-interceptor.d.ts.map +1 -0
  92. package/dist/browser/link-interceptor.js +99 -0
  93. package/dist/browser/link-interceptor.js.map +1 -0
  94. package/dist/browser/logging.d.ts +10 -0
  95. package/dist/browser/logging.d.ts.map +1 -0
  96. package/dist/browser/logging.js +29 -0
  97. package/dist/browser/logging.js.map +1 -0
  98. package/dist/browser/lru-cache.d.ts +17 -0
  99. package/dist/browser/lru-cache.d.ts.map +1 -0
  100. package/dist/browser/lru-cache.js +50 -0
  101. package/dist/browser/lru-cache.js.map +1 -0
  102. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  103. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  104. package/dist/browser/merge-segment-loaders.js +102 -0
  105. package/dist/browser/merge-segment-loaders.js.map +1 -0
  106. package/dist/browser/navigation-bridge.d.ts +102 -0
  107. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  108. package/dist/browser/navigation-bridge.js +708 -0
  109. package/dist/browser/navigation-bridge.js.map +1 -0
  110. package/dist/browser/navigation-client.d.ts +25 -0
  111. package/dist/browser/navigation-client.d.ts.map +1 -0
  112. package/dist/browser/navigation-client.js +157 -0
  113. package/dist/browser/navigation-client.js.map +1 -0
  114. package/dist/browser/navigation-store.d.ts +101 -0
  115. package/dist/browser/navigation-store.d.ts.map +1 -0
  116. package/dist/browser/navigation-store.js +625 -0
  117. package/dist/browser/navigation-store.js.map +1 -0
  118. package/dist/browser/partial-update.d.ts +75 -0
  119. package/dist/browser/partial-update.d.ts.map +1 -0
  120. package/dist/browser/partial-update.js +426 -0
  121. package/dist/browser/partial-update.js.map +1 -0
  122. package/dist/browser/react/Link.d.ts +86 -0
  123. package/dist/browser/react/Link.d.ts.map +1 -0
  124. package/dist/browser/react/Link.js +128 -0
  125. package/dist/browser/react/Link.js.map +1 -0
  126. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  127. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  128. package/dist/browser/react/NavigationProvider.js +216 -0
  129. package/dist/browser/react/NavigationProvider.js.map +1 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  132. package/dist/browser/react/ScrollRestoration.js +57 -0
  133. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  134. package/dist/browser/react/context.d.ts +46 -0
  135. package/dist/browser/react/context.d.ts.map +1 -0
  136. package/dist/browser/react/context.js +10 -0
  137. package/dist/browser/react/context.js.map +1 -0
  138. package/dist/browser/react/index.d.ts +11 -0
  139. package/dist/browser/react/index.d.ts.map +1 -0
  140. package/dist/browser/react/index.js +22 -0
  141. package/dist/browser/react/index.js.map +1 -0
  142. package/dist/browser/react/location-state-shared.d.ts +63 -0
  143. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  144. package/dist/browser/react/location-state-shared.js +81 -0
  145. package/dist/browser/react/location-state-shared.js.map +1 -0
  146. package/dist/browser/react/location-state.d.ts +23 -0
  147. package/dist/browser/react/location-state.d.ts.map +1 -0
  148. package/dist/browser/react/location-state.js +29 -0
  149. package/dist/browser/react/location-state.js.map +1 -0
  150. package/dist/browser/react/mount-context.d.ts +24 -0
  151. package/dist/browser/react/mount-context.d.ts.map +1 -0
  152. package/dist/browser/react/mount-context.js +24 -0
  153. package/dist/browser/react/mount-context.js.map +1 -0
  154. package/dist/browser/react/use-action.d.ts +64 -0
  155. package/dist/browser/react/use-action.d.ts.map +1 -0
  156. package/dist/browser/react/use-action.js +134 -0
  157. package/dist/browser/react/use-action.js.map +1 -0
  158. package/dist/browser/react/use-client-cache.d.ts +41 -0
  159. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  160. package/dist/browser/react/use-client-cache.js +39 -0
  161. package/dist/browser/react/use-client-cache.js.map +1 -0
  162. package/dist/browser/react/use-handle.d.ts +31 -0
  163. package/dist/browser/react/use-handle.d.ts.map +1 -0
  164. package/dist/browser/react/use-handle.js +144 -0
  165. package/dist/browser/react/use-handle.js.map +1 -0
  166. package/dist/browser/react/use-href.d.ts +33 -0
  167. package/dist/browser/react/use-href.d.ts.map +1 -0
  168. package/dist/browser/react/use-href.js +39 -0
  169. package/dist/browser/react/use-href.js.map +1 -0
  170. package/dist/browser/react/use-link-status.d.ts +37 -0
  171. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  172. package/dist/browser/react/use-link-status.js +99 -0
  173. package/dist/browser/react/use-link-status.js.map +1 -0
  174. package/dist/browser/react/use-mount.d.ts +25 -0
  175. package/dist/browser/react/use-mount.d.ts.map +1 -0
  176. package/dist/browser/react/use-mount.js +30 -0
  177. package/dist/browser/react/use-mount.js.map +1 -0
  178. package/dist/browser/react/use-navigation.d.ts +27 -0
  179. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  180. package/dist/browser/react/use-navigation.js +87 -0
  181. package/dist/browser/react/use-navigation.js.map +1 -0
  182. package/dist/browser/react/use-segments.d.ts +38 -0
  183. package/dist/browser/react/use-segments.d.ts.map +1 -0
  184. package/dist/browser/react/use-segments.js +130 -0
  185. package/dist/browser/react/use-segments.js.map +1 -0
  186. package/dist/browser/request-controller.d.ts +26 -0
  187. package/dist/browser/request-controller.d.ts.map +1 -0
  188. package/dist/browser/request-controller.js +147 -0
  189. package/dist/browser/request-controller.js.map +1 -0
  190. package/dist/browser/rsc-router.d.ts +129 -0
  191. package/dist/browser/rsc-router.d.ts.map +1 -0
  192. package/dist/browser/rsc-router.js +195 -0
  193. package/dist/browser/rsc-router.js.map +1 -0
  194. package/dist/browser/scroll-restoration.d.ts +93 -0
  195. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  196. package/dist/browser/scroll-restoration.js +321 -0
  197. package/dist/browser/scroll-restoration.js.map +1 -0
  198. package/dist/browser/segment-structure-assert.d.ts +17 -0
  199. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  200. package/dist/browser/segment-structure-assert.js +59 -0
  201. package/dist/browser/segment-structure-assert.js.map +1 -0
  202. package/dist/browser/server-action-bridge.d.ts +26 -0
  203. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  204. package/dist/browser/server-action-bridge.js +668 -0
  205. package/dist/browser/server-action-bridge.js.map +1 -0
  206. package/dist/browser/shallow.d.ts +12 -0
  207. package/dist/browser/shallow.d.ts.map +1 -0
  208. package/dist/browser/shallow.js +34 -0
  209. package/dist/browser/shallow.js.map +1 -0
  210. package/dist/browser/types.d.ts +369 -0
  211. package/dist/browser/types.d.ts.map +1 -0
  212. package/dist/browser/types.js +2 -0
  213. package/dist/browser/types.js.map +1 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  216. package/dist/build/__tests__/generate-cli.test.js +237 -0
  217. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  220. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  221. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  224. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  225. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  230. package/dist/build/generate-manifest.d.ts +81 -0
  231. package/dist/build/generate-manifest.d.ts.map +1 -0
  232. package/dist/build/generate-manifest.js +276 -0
  233. package/dist/build/generate-manifest.js.map +1 -0
  234. package/dist/build/generate-route-types.d.ts +115 -0
  235. package/dist/build/generate-route-types.d.ts.map +1 -0
  236. package/dist/build/generate-route-types.js +740 -0
  237. package/dist/build/generate-route-types.js.map +1 -0
  238. package/dist/build/index.d.ts +21 -0
  239. package/dist/build/index.d.ts.map +1 -0
  240. package/dist/build/index.js +21 -0
  241. package/dist/build/index.js.map +1 -0
  242. package/dist/build/route-trie.d.ts +71 -0
  243. package/dist/build/route-trie.d.ts.map +1 -0
  244. package/dist/build/route-trie.js +175 -0
  245. package/dist/build/route-trie.js.map +1 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  248. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  249. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  252. package/dist/cache/__tests__/document-cache.test.js +345 -0
  253. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  260. package/dist/cache/__tests__/memory-store.test.js +367 -0
  261. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  262. package/dist/cache/cache-scope.d.ts +102 -0
  263. package/dist/cache/cache-scope.d.ts.map +1 -0
  264. package/dist/cache/cache-scope.js +440 -0
  265. package/dist/cache/cache-scope.js.map +1 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  272. package/dist/cache/cf/cf-cache-store.js +242 -0
  273. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  274. package/dist/cache/cf/index.d.ts +14 -0
  275. package/dist/cache/cf/index.d.ts.map +1 -0
  276. package/dist/cache/cf/index.js +17 -0
  277. package/dist/cache/cf/index.js.map +1 -0
  278. package/dist/cache/document-cache.d.ts +64 -0
  279. package/dist/cache/document-cache.d.ts.map +1 -0
  280. package/dist/cache/document-cache.js +228 -0
  281. package/dist/cache/document-cache.js.map +1 -0
  282. package/dist/cache/index.d.ts +19 -0
  283. package/dist/cache/index.d.ts.map +1 -0
  284. package/dist/cache/index.js +21 -0
  285. package/dist/cache/index.js.map +1 -0
  286. package/dist/cache/memory-segment-store.d.ts +110 -0
  287. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  288. package/dist/cache/memory-segment-store.js +117 -0
  289. package/dist/cache/memory-segment-store.js.map +1 -0
  290. package/dist/cache/memory-store.d.ts +41 -0
  291. package/dist/cache/memory-store.d.ts.map +1 -0
  292. package/dist/cache/memory-store.js +191 -0
  293. package/dist/cache/memory-store.js.map +1 -0
  294. package/dist/cache/types.d.ts +317 -0
  295. package/dist/cache/types.d.ts.map +1 -0
  296. package/dist/cache/types.js +12 -0
  297. package/dist/cache/types.js.map +1 -0
  298. package/dist/client.d.ts +248 -0
  299. package/dist/client.d.ts.map +1 -0
  300. package/dist/client.js +367 -0
  301. package/dist/client.js.map +1 -0
  302. package/dist/client.rsc.d.ts +26 -0
  303. package/dist/client.rsc.d.ts.map +1 -0
  304. package/dist/client.rsc.js +46 -0
  305. package/dist/client.rsc.js.map +1 -0
  306. package/dist/component-utils.d.ts +36 -0
  307. package/dist/component-utils.d.ts.map +1 -0
  308. package/dist/component-utils.js +61 -0
  309. package/dist/component-utils.js.map +1 -0
  310. package/dist/components/DefaultDocument.d.ts +13 -0
  311. package/dist/components/DefaultDocument.d.ts.map +1 -0
  312. package/dist/components/DefaultDocument.js +15 -0
  313. package/dist/components/DefaultDocument.js.map +1 -0
  314. package/dist/debug.d.ts +58 -0
  315. package/dist/debug.d.ts.map +1 -0
  316. package/dist/debug.js +157 -0
  317. package/dist/debug.js.map +1 -0
  318. package/dist/default-error-boundary.d.ts +11 -0
  319. package/dist/default-error-boundary.d.ts.map +1 -0
  320. package/dist/default-error-boundary.js +45 -0
  321. package/dist/default-error-boundary.js.map +1 -0
  322. package/dist/deps/browser.d.ts +2 -0
  323. package/dist/deps/browser.d.ts.map +1 -0
  324. package/dist/deps/browser.js +3 -0
  325. package/dist/deps/browser.js.map +1 -0
  326. package/dist/deps/html-stream-client.d.ts +2 -0
  327. package/dist/deps/html-stream-client.d.ts.map +1 -0
  328. package/dist/deps/html-stream-client.js +3 -0
  329. package/dist/deps/html-stream-client.js.map +1 -0
  330. package/dist/deps/html-stream-server.d.ts +2 -0
  331. package/dist/deps/html-stream-server.d.ts.map +1 -0
  332. package/dist/deps/html-stream-server.js +3 -0
  333. package/dist/deps/html-stream-server.js.map +1 -0
  334. package/dist/deps/rsc.d.ts +2 -0
  335. package/dist/deps/rsc.d.ts.map +1 -0
  336. package/dist/deps/rsc.js +4 -0
  337. package/dist/deps/rsc.js.map +1 -0
  338. package/dist/deps/ssr.d.ts +2 -0
  339. package/dist/deps/ssr.d.ts.map +1 -0
  340. package/dist/deps/ssr.js +3 -0
  341. package/dist/deps/ssr.js.map +1 -0
  342. package/dist/errors.d.ts +174 -0
  343. package/dist/errors.d.ts.map +1 -0
  344. package/dist/errors.js +241 -0
  345. package/dist/errors.js.map +1 -0
  346. package/dist/handle.d.ts +78 -0
  347. package/dist/handle.d.ts.map +1 -0
  348. package/dist/handle.js +82 -0
  349. package/dist/handle.js.map +1 -0
  350. package/dist/handles/MetaTags.d.ts +14 -0
  351. package/dist/handles/MetaTags.d.ts.map +1 -0
  352. package/dist/handles/MetaTags.js +136 -0
  353. package/dist/handles/MetaTags.js.map +1 -0
  354. package/dist/handles/index.d.ts +6 -0
  355. package/dist/handles/index.d.ts.map +1 -0
  356. package/dist/handles/index.js +6 -0
  357. package/dist/handles/index.js.map +1 -0
  358. package/dist/handles/meta.d.ts +39 -0
  359. package/dist/handles/meta.d.ts.map +1 -0
  360. package/dist/handles/meta.js +202 -0
  361. package/dist/handles/meta.js.map +1 -0
  362. package/dist/host/__tests__/errors.test.d.ts +2 -0
  363. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  364. package/dist/host/__tests__/errors.test.js +76 -0
  365. package/dist/host/__tests__/errors.test.js.map +1 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  374. package/dist/host/__tests__/router.test.d.ts +2 -0
  375. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  376. package/dist/host/__tests__/router.test.js +241 -0
  377. package/dist/host/__tests__/router.test.js.map +1 -0
  378. package/dist/host/__tests__/testing.test.d.ts +2 -0
  379. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  380. package/dist/host/__tests__/testing.test.js +64 -0
  381. package/dist/host/__tests__/testing.test.js.map +1 -0
  382. package/dist/host/__tests__/utils.test.d.ts +2 -0
  383. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  384. package/dist/host/__tests__/utils.test.js +29 -0
  385. package/dist/host/__tests__/utils.test.js.map +1 -0
  386. package/dist/host/cookie-handler.d.ts +34 -0
  387. package/dist/host/cookie-handler.d.ts.map +1 -0
  388. package/dist/host/cookie-handler.js +124 -0
  389. package/dist/host/cookie-handler.js.map +1 -0
  390. package/dist/host/errors.d.ts +56 -0
  391. package/dist/host/errors.d.ts.map +1 -0
  392. package/dist/host/errors.js +79 -0
  393. package/dist/host/errors.js.map +1 -0
  394. package/dist/host/index.d.ts +29 -0
  395. package/dist/host/index.d.ts.map +1 -0
  396. package/dist/host/index.js +32 -0
  397. package/dist/host/index.js.map +1 -0
  398. package/dist/host/pattern-matcher.d.ts +36 -0
  399. package/dist/host/pattern-matcher.d.ts.map +1 -0
  400. package/dist/host/pattern-matcher.js +172 -0
  401. package/dist/host/pattern-matcher.js.map +1 -0
  402. package/dist/host/router.d.ts +26 -0
  403. package/dist/host/router.d.ts.map +1 -0
  404. package/dist/host/router.js +218 -0
  405. package/dist/host/router.js.map +1 -0
  406. package/dist/host/testing.d.ts +36 -0
  407. package/dist/host/testing.d.ts.map +1 -0
  408. package/dist/host/testing.js +55 -0
  409. package/dist/host/testing.js.map +1 -0
  410. package/dist/host/types.d.ts +115 -0
  411. package/dist/host/types.d.ts.map +1 -0
  412. package/dist/host/types.js +7 -0
  413. package/dist/host/types.js.map +1 -0
  414. package/dist/host/utils.d.ts +21 -0
  415. package/dist/host/utils.d.ts.map +1 -0
  416. package/dist/host/utils.js +23 -0
  417. package/dist/host/utils.js.map +1 -0
  418. package/dist/href-client.d.ts +131 -0
  419. package/dist/href-client.d.ts.map +1 -0
  420. package/dist/href-client.js +64 -0
  421. package/dist/href-client.js.map +1 -0
  422. package/dist/href-context.d.ts +29 -0
  423. package/dist/href-context.d.ts.map +1 -0
  424. package/dist/href-context.js +21 -0
  425. package/dist/href-context.js.map +1 -0
  426. package/dist/index.d.ts +73 -0
  427. package/dist/index.d.ts.map +1 -0
  428. package/dist/index.js +91 -0
  429. package/dist/index.js.map +1 -0
  430. package/dist/index.rsc.d.ts +32 -0
  431. package/dist/index.rsc.d.ts.map +1 -0
  432. package/dist/index.rsc.js +40 -0
  433. package/dist/index.rsc.js.map +1 -0
  434. package/dist/internal-debug.d.ts +2 -0
  435. package/dist/internal-debug.d.ts.map +1 -0
  436. package/dist/internal-debug.js +5 -0
  437. package/dist/internal-debug.js.map +1 -0
  438. package/dist/loader.d.ts +14 -0
  439. package/dist/loader.d.ts.map +1 -0
  440. package/dist/loader.js +20 -0
  441. package/dist/loader.js.map +1 -0
  442. package/dist/loader.rsc.d.ts +19 -0
  443. package/dist/loader.rsc.d.ts.map +1 -0
  444. package/dist/loader.rsc.js +99 -0
  445. package/dist/loader.rsc.js.map +1 -0
  446. package/dist/network-error-thrower.d.ts +17 -0
  447. package/dist/network-error-thrower.d.ts.map +1 -0
  448. package/dist/network-error-thrower.js +14 -0
  449. package/dist/network-error-thrower.js.map +1 -0
  450. package/dist/outlet-context.d.ts +13 -0
  451. package/dist/outlet-context.d.ts.map +1 -0
  452. package/dist/outlet-context.js +3 -0
  453. package/dist/outlet-context.js.map +1 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  456. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  457. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  458. package/dist/prerender/param-hash.d.ts +16 -0
  459. package/dist/prerender/param-hash.d.ts.map +1 -0
  460. package/dist/prerender/param-hash.js +36 -0
  461. package/dist/prerender/param-hash.js.map +1 -0
  462. package/dist/prerender/store.d.ts +38 -0
  463. package/dist/prerender/store.d.ts.map +1 -0
  464. package/dist/prerender/store.js +61 -0
  465. package/dist/prerender/store.js.map +1 -0
  466. package/dist/prerender.d.ts +66 -0
  467. package/dist/prerender.d.ts.map +1 -0
  468. package/dist/prerender.js +57 -0
  469. package/dist/prerender.js.map +1 -0
  470. package/dist/reverse.d.ts +196 -0
  471. package/dist/reverse.d.ts.map +1 -0
  472. package/dist/reverse.js +78 -0
  473. package/dist/reverse.js.map +1 -0
  474. package/dist/root-error-boundary.d.ts +33 -0
  475. package/dist/root-error-boundary.d.ts.map +1 -0
  476. package/dist/root-error-boundary.js +165 -0
  477. package/dist/root-error-boundary.js.map +1 -0
  478. package/dist/route-content-wrapper.d.ts +46 -0
  479. package/dist/route-content-wrapper.d.ts.map +1 -0
  480. package/dist/route-content-wrapper.js +77 -0
  481. package/dist/route-content-wrapper.js.map +1 -0
  482. package/dist/route-definition.d.ts +421 -0
  483. package/dist/route-definition.d.ts.map +1 -0
  484. package/dist/route-definition.js +868 -0
  485. package/dist/route-definition.js.map +1 -0
  486. package/dist/route-map-builder.d.ts +155 -0
  487. package/dist/route-map-builder.d.ts.map +1 -0
  488. package/dist/route-map-builder.js +237 -0
  489. package/dist/route-map-builder.js.map +1 -0
  490. package/dist/route-types.d.ts +165 -0
  491. package/dist/route-types.d.ts.map +1 -0
  492. package/dist/route-types.js +7 -0
  493. package/dist/route-types.js.map +1 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  496. package/dist/router/__tests__/handler-context.test.js +65 -0
  497. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  502. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  503. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  504. package/dist/router/__tests__/match-context.test.js +92 -0
  505. package/dist/router/__tests__/match-context.test.js.map +1 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  508. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  509. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  510. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  511. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  512. package/dist/router/__tests__/match-result.test.js +457 -0
  513. package/dist/router/__tests__/match-result.test.js.map +1 -0
  514. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  515. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  516. package/dist/router/__tests__/on-error.test.js +678 -0
  517. package/dist/router/__tests__/on-error.test.js.map +1 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  520. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  521. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  526. package/dist/router/error-handling.d.ts +77 -0
  527. package/dist/router/error-handling.d.ts.map +1 -0
  528. package/dist/router/error-handling.js +202 -0
  529. package/dist/router/error-handling.js.map +1 -0
  530. package/dist/router/handler-context.d.ts +20 -0
  531. package/dist/router/handler-context.d.ts.map +1 -0
  532. package/dist/router/handler-context.js +198 -0
  533. package/dist/router/handler-context.js.map +1 -0
  534. package/dist/router/intercept-resolution.d.ts +66 -0
  535. package/dist/router/intercept-resolution.d.ts.map +1 -0
  536. package/dist/router/intercept-resolution.js +246 -0
  537. package/dist/router/intercept-resolution.js.map +1 -0
  538. package/dist/router/loader-resolution.d.ts +64 -0
  539. package/dist/router/loader-resolution.d.ts.map +1 -0
  540. package/dist/router/loader-resolution.js +284 -0
  541. package/dist/router/loader-resolution.js.map +1 -0
  542. package/dist/router/logging.d.ts +15 -0
  543. package/dist/router/logging.d.ts.map +1 -0
  544. package/dist/router/logging.js +99 -0
  545. package/dist/router/logging.js.map +1 -0
  546. package/dist/router/manifest.d.ts +22 -0
  547. package/dist/router/manifest.d.ts.map +1 -0
  548. package/dist/router/manifest.js +181 -0
  549. package/dist/router/manifest.js.map +1 -0
  550. package/dist/router/match-api.d.ts +35 -0
  551. package/dist/router/match-api.d.ts.map +1 -0
  552. package/dist/router/match-api.js +406 -0
  553. package/dist/router/match-api.js.map +1 -0
  554. package/dist/router/match-context.d.ts +206 -0
  555. package/dist/router/match-context.d.ts.map +1 -0
  556. package/dist/router/match-context.js +17 -0
  557. package/dist/router/match-context.js.map +1 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  560. package/dist/router/match-middleware/background-revalidation.js +75 -0
  561. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  564. package/dist/router/match-middleware/cache-lookup.js +257 -0
  565. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  566. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  567. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  568. package/dist/router/match-middleware/cache-store.js +108 -0
  569. package/dist/router/match-middleware/cache-store.js.map +1 -0
  570. package/dist/router/match-middleware/index.d.ts +81 -0
  571. package/dist/router/match-middleware/index.d.ts.map +1 -0
  572. package/dist/router/match-middleware/index.js +80 -0
  573. package/dist/router/match-middleware/index.js.map +1 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  576. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  577. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  580. package/dist/router/match-middleware/segment-resolution.js +53 -0
  581. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  582. package/dist/router/match-pipelines.d.ts +147 -0
  583. package/dist/router/match-pipelines.d.ts.map +1 -0
  584. package/dist/router/match-pipelines.js +82 -0
  585. package/dist/router/match-pipelines.js.map +1 -0
  586. package/dist/router/match-result.d.ts +126 -0
  587. package/dist/router/match-result.d.ts.map +1 -0
  588. package/dist/router/match-result.js +93 -0
  589. package/dist/router/match-result.js.map +1 -0
  590. package/dist/router/metrics.d.ts +20 -0
  591. package/dist/router/metrics.d.ts.map +1 -0
  592. package/dist/router/metrics.js +47 -0
  593. package/dist/router/metrics.js.map +1 -0
  594. package/dist/router/middleware.d.ts +249 -0
  595. package/dist/router/middleware.d.ts.map +1 -0
  596. package/dist/router/middleware.js +434 -0
  597. package/dist/router/middleware.js.map +1 -0
  598. package/dist/router/middleware.test.d.ts +2 -0
  599. package/dist/router/middleware.test.d.ts.map +1 -0
  600. package/dist/router/middleware.test.js +816 -0
  601. package/dist/router/middleware.test.js.map +1 -0
  602. package/dist/router/pattern-matching.d.ts +149 -0
  603. package/dist/router/pattern-matching.d.ts.map +1 -0
  604. package/dist/router/pattern-matching.js +349 -0
  605. package/dist/router/pattern-matching.js.map +1 -0
  606. package/dist/router/revalidation.d.ts +44 -0
  607. package/dist/router/revalidation.d.ts.map +1 -0
  608. package/dist/router/revalidation.js +147 -0
  609. package/dist/router/revalidation.js.map +1 -0
  610. package/dist/router/router-context.d.ts +135 -0
  611. package/dist/router/router-context.d.ts.map +1 -0
  612. package/dist/router/router-context.js +36 -0
  613. package/dist/router/router-context.js.map +1 -0
  614. package/dist/router/segment-resolution.d.ts +127 -0
  615. package/dist/router/segment-resolution.d.ts.map +1 -0
  616. package/dist/router/segment-resolution.js +919 -0
  617. package/dist/router/segment-resolution.js.map +1 -0
  618. package/dist/router/trie-matching.d.ts +40 -0
  619. package/dist/router/trie-matching.d.ts.map +1 -0
  620. package/dist/router/trie-matching.js +127 -0
  621. package/dist/router/trie-matching.js.map +1 -0
  622. package/dist/router/types.d.ts +136 -0
  623. package/dist/router/types.d.ts.map +1 -0
  624. package/dist/router/types.js +7 -0
  625. package/dist/router/types.js.map +1 -0
  626. package/dist/router.d.ts +753 -0
  627. package/dist/router.d.ts.map +1 -0
  628. package/dist/router.gen.d.ts +6 -0
  629. package/dist/router.gen.d.ts.map +1 -0
  630. package/dist/router.gen.js +6 -0
  631. package/dist/router.gen.js.map +1 -0
  632. package/dist/router.js +1304 -0
  633. package/dist/router.js.map +1 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  636. package/dist/rsc/__tests__/helpers.test.js +140 -0
  637. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  638. package/dist/rsc/handler.d.ts +45 -0
  639. package/dist/rsc/handler.d.ts.map +1 -0
  640. package/dist/rsc/handler.js +1172 -0
  641. package/dist/rsc/handler.js.map +1 -0
  642. package/dist/rsc/helpers.d.ts +16 -0
  643. package/dist/rsc/helpers.d.ts.map +1 -0
  644. package/dist/rsc/helpers.js +55 -0
  645. package/dist/rsc/helpers.js.map +1 -0
  646. package/dist/rsc/index.d.ts +22 -0
  647. package/dist/rsc/index.d.ts.map +1 -0
  648. package/dist/rsc/index.js +23 -0
  649. package/dist/rsc/index.js.map +1 -0
  650. package/dist/rsc/nonce.d.ts +9 -0
  651. package/dist/rsc/nonce.d.ts.map +1 -0
  652. package/dist/rsc/nonce.js +18 -0
  653. package/dist/rsc/nonce.js.map +1 -0
  654. package/dist/rsc/types.d.ts +206 -0
  655. package/dist/rsc/types.d.ts.map +1 -0
  656. package/dist/rsc/types.js +8 -0
  657. package/dist/rsc/types.js.map +1 -0
  658. package/dist/search-params.d.ts +103 -0
  659. package/dist/search-params.d.ts.map +1 -0
  660. package/dist/search-params.js +74 -0
  661. package/dist/search-params.js.map +1 -0
  662. package/dist/segment-system.d.ts +75 -0
  663. package/dist/segment-system.d.ts.map +1 -0
  664. package/dist/segment-system.js +336 -0
  665. package/dist/segment-system.js.map +1 -0
  666. package/dist/server/context.d.ts +245 -0
  667. package/dist/server/context.d.ts.map +1 -0
  668. package/dist/server/context.js +197 -0
  669. package/dist/server/context.js.map +1 -0
  670. package/dist/server/fetchable-loader-store.d.ts +18 -0
  671. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  672. package/dist/server/fetchable-loader-store.js +18 -0
  673. package/dist/server/fetchable-loader-store.js.map +1 -0
  674. package/dist/server/handle-store.d.ts +85 -0
  675. package/dist/server/handle-store.d.ts.map +1 -0
  676. package/dist/server/handle-store.js +142 -0
  677. package/dist/server/handle-store.js.map +1 -0
  678. package/dist/server/loader-registry.d.ts +55 -0
  679. package/dist/server/loader-registry.d.ts.map +1 -0
  680. package/dist/server/loader-registry.js +132 -0
  681. package/dist/server/loader-registry.js.map +1 -0
  682. package/dist/server/request-context.d.ts +226 -0
  683. package/dist/server/request-context.d.ts.map +1 -0
  684. package/dist/server/request-context.js +290 -0
  685. package/dist/server/request-context.js.map +1 -0
  686. package/dist/server/root-layout.d.ts +4 -0
  687. package/dist/server/root-layout.d.ts.map +1 -0
  688. package/dist/server/root-layout.js +5 -0
  689. package/dist/server/root-layout.js.map +1 -0
  690. package/dist/server.d.ts +15 -0
  691. package/dist/server.d.ts.map +1 -0
  692. package/dist/server.js +20 -0
  693. package/dist/server.js.map +1 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  698. package/dist/ssr/index.d.ts +98 -0
  699. package/dist/ssr/index.d.ts.map +1 -0
  700. package/dist/ssr/index.js +158 -0
  701. package/dist/ssr/index.js.map +1 -0
  702. package/dist/static-handler.d.ts +50 -0
  703. package/dist/static-handler.d.ts.map +1 -0
  704. package/dist/static-handler.gen.d.ts +5 -0
  705. package/dist/static-handler.gen.d.ts.map +1 -0
  706. package/dist/static-handler.gen.js +5 -0
  707. package/dist/static-handler.gen.js.map +1 -0
  708. package/dist/static-handler.js +29 -0
  709. package/dist/static-handler.js.map +1 -0
  710. package/dist/theme/ThemeProvider.d.ts +20 -0
  711. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  712. package/dist/theme/ThemeProvider.js +240 -0
  713. package/dist/theme/ThemeProvider.js.map +1 -0
  714. package/dist/theme/ThemeScript.d.ts +48 -0
  715. package/dist/theme/ThemeScript.d.ts.map +1 -0
  716. package/dist/theme/ThemeScript.js +13 -0
  717. package/dist/theme/ThemeScript.js.map +1 -0
  718. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  719. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  720. package/dist/theme/__tests__/theme.test.js +103 -0
  721. package/dist/theme/__tests__/theme.test.js.map +1 -0
  722. package/dist/theme/constants.d.ts +29 -0
  723. package/dist/theme/constants.d.ts.map +1 -0
  724. package/dist/theme/constants.js +48 -0
  725. package/dist/theme/constants.js.map +1 -0
  726. package/dist/theme/index.d.ts +31 -0
  727. package/dist/theme/index.d.ts.map +1 -0
  728. package/dist/theme/index.js +36 -0
  729. package/dist/theme/index.js.map +1 -0
  730. package/dist/theme/theme-context.d.ts +40 -0
  731. package/dist/theme/theme-context.d.ts.map +1 -0
  732. package/dist/theme/theme-context.js +60 -0
  733. package/dist/theme/theme-context.js.map +1 -0
  734. package/dist/theme/theme-script.d.ts +27 -0
  735. package/dist/theme/theme-script.d.ts.map +1 -0
  736. package/dist/theme/theme-script.js +147 -0
  737. package/dist/theme/theme-script.js.map +1 -0
  738. package/dist/theme/types.d.ts +163 -0
  739. package/dist/theme/types.d.ts.map +1 -0
  740. package/dist/theme/types.js +11 -0
  741. package/dist/theme/types.js.map +1 -0
  742. package/dist/theme/use-theme.d.ts +12 -0
  743. package/dist/theme/use-theme.d.ts.map +1 -0
  744. package/dist/theme/use-theme.js +40 -0
  745. package/dist/theme/use-theme.js.map +1 -0
  746. package/dist/types.d.ts +1479 -0
  747. package/dist/types.d.ts.map +1 -0
  748. package/dist/types.js +10 -0
  749. package/dist/types.js.map +1 -0
  750. package/dist/urls.d.ts +441 -0
  751. package/dist/urls.d.ts.map +1 -0
  752. package/dist/urls.gen.d.ts +8 -0
  753. package/dist/urls.gen.d.ts.map +1 -0
  754. package/dist/urls.gen.js +8 -0
  755. package/dist/urls.gen.js.map +1 -0
  756. package/dist/urls.js +443 -0
  757. package/dist/urls.js.map +1 -0
  758. package/dist/use-loader.d.ts +127 -0
  759. package/dist/use-loader.d.ts.map +1 -0
  760. package/dist/use-loader.js +237 -0
  761. package/dist/use-loader.js.map +1 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  774. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  778. package/dist/vite/ast-handler-extract.d.ts +49 -0
  779. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  780. package/dist/vite/ast-handler-extract.js +249 -0
  781. package/dist/vite/ast-handler-extract.js.map +1 -0
  782. package/dist/vite/expose-action-id.d.ts +19 -0
  783. package/dist/vite/expose-action-id.d.ts.map +1 -0
  784. package/dist/vite/expose-action-id.js +250 -0
  785. package/dist/vite/expose-action-id.js.map +1 -0
  786. package/dist/vite/expose-id-utils.d.ts +69 -0
  787. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  788. package/dist/vite/expose-id-utils.js +289 -0
  789. package/dist/vite/expose-id-utils.js.map +1 -0
  790. package/dist/vite/expose-internal-ids.d.ts +22 -0
  791. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  792. package/dist/vite/expose-internal-ids.js +886 -0
  793. package/dist/vite/expose-internal-ids.js.map +1 -0
  794. package/dist/vite/index.d.ts +149 -0
  795. package/dist/vite/index.d.ts.map +1 -0
  796. package/dist/vite/index.js +82 -15
  797. package/dist/vite/index.js.bak +5448 -0
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/dist/vite/virtual-entries.js +110 -0
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +19 -18
  809. package/skills/api-client/SKILL.md +1 -1
  810. package/skills/breadcrumbs/SKILL.md +1 -1
  811. package/skills/cache-guide/SKILL.md +1 -1
  812. package/skills/caching/SKILL.md +17 -1
  813. package/skills/catalog.json +265 -0
  814. package/skills/comparison/references/framework-comparison.md +1 -1
  815. package/skills/composability/SKILL.md +1 -1
  816. package/skills/debug-manifest/SKILL.md +1 -1
  817. package/skills/document-cache/SKILL.md +9 -1
  818. package/skills/fonts/SKILL.md +1 -1
  819. package/skills/handler-use/SKILL.md +1 -1
  820. package/skills/hooks/SKILL.md +54 -892
  821. package/skills/hooks/data.md +273 -0
  822. package/skills/hooks/handle-and-actions.md +103 -0
  823. package/skills/hooks/navigation.md +110 -0
  824. package/skills/hooks/outlets.md +41 -0
  825. package/skills/hooks/state.md +228 -0
  826. package/skills/hooks/urls.md +135 -0
  827. package/skills/host-router/SKILL.md +1 -1
  828. package/skills/i18n/SKILL.md +1 -1
  829. package/skills/intercept/SKILL.md +8 -1
  830. package/skills/layout/SKILL.md +1 -1
  831. package/skills/links/SKILL.md +1 -1
  832. package/skills/loader/SKILL.md +8 -1
  833. package/skills/middleware/SKILL.md +1 -1
  834. package/skills/migrate-nextjs/SKILL.md +133 -1
  835. package/skills/migrate-react-router/SKILL.md +42 -816
  836. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  837. package/skills/migrate-react-router/component-migration.md +196 -0
  838. package/skills/migrate-react-router/data-and-actions.md +225 -0
  839. package/skills/migrate-react-router/route-mapping.md +271 -0
  840. package/skills/mime-routes/SKILL.md +1 -1
  841. package/skills/observability/SKILL.md +1 -1
  842. package/skills/parallel/SKILL.md +8 -1
  843. package/skills/ppr/SKILL.md +261 -28
  844. package/skills/prerender/SKILL.md +8 -1
  845. package/skills/rango/SKILL.md +12 -12
  846. package/skills/response-routes/SKILL.md +1 -1
  847. package/skills/route/SKILL.md +1 -1
  848. package/skills/router-setup/SKILL.md +1 -1
  849. package/skills/scripts/SKILL.md +1 -1
  850. package/skills/server-actions/SKILL.md +3 -2
  851. package/skills/shell-manifest/SKILL.md +1 -1
  852. package/skills/streams-and-websockets/SKILL.md +1 -1
  853. package/skills/tailwind/SKILL.md +1 -1
  854. package/skills/testing/SKILL.md +1 -1
  855. package/skills/theme/SKILL.md +1 -1
  856. package/skills/typesafety/SKILL.md +44 -919
  857. package/skills/typesafety/env-and-bindings.md +254 -0
  858. package/skills/typesafety/generated-files-and-cli.md +305 -0
  859. package/skills/typesafety/params-and-search.md +153 -0
  860. package/skills/typesafety/route-types.md +209 -0
  861. package/skills/use-cache/SKILL.md +7 -1
  862. package/skills/vercel/SKILL.md +1 -1
  863. package/skills/view-transitions/SKILL.md +1 -1
  864. package/src/browser/event-controller.ts +41 -10
  865. package/src/browser/logging.ts +10 -0
  866. package/src/browser/merge-segment-loaders.ts +6 -4
  867. package/src/browser/navigation-client.ts +5 -1
  868. package/src/browser/navigation-store.ts +46 -6
  869. package/src/browser/partial-update.ts +27 -15
  870. package/src/browser/prefetch/cache.ts +26 -4
  871. package/src/browser/prefetch/fetch.ts +27 -17
  872. package/src/browser/react/Link.tsx +13 -3
  873. package/src/browser/react/NavigationProvider.tsx +21 -19
  874. package/src/browser/scroll-restoration.ts +7 -5
  875. package/src/browser/segment-reconciler.ts +31 -21
  876. package/src/browser/types.ts +12 -0
  877. package/src/cache/cache-runtime.ts +203 -23
  878. package/src/cache/document-cache.ts +20 -9
  879. package/src/cache/memory-segment-store.ts +53 -2
  880. package/src/cache/segment-codec.ts +4 -4
  881. package/src/cache/shell-snapshot.ts +50 -1
  882. package/src/cache/types.ts +25 -5
  883. package/src/cache/vercel/vercel-cache-store.ts +131 -107
  884. package/src/router/manifest.ts +13 -5
  885. package/src/router/match-api.ts +70 -30
  886. package/src/router/match-handlers.ts +6 -2
  887. package/src/router/match-result.ts +35 -15
  888. package/src/router/middleware.ts +10 -3
  889. package/src/router/request-classification.ts +20 -7
  890. package/src/router/route-snapshot.ts +10 -0
  891. package/src/router/segment-resolution/fresh.ts +25 -4
  892. package/src/router/segment-resolution/loader-cache.ts +57 -8
  893. package/src/router/segment-resolution/loader-mask.ts +26 -3
  894. package/src/router/segment-resolution/loader-snapshot.ts +170 -0
  895. package/src/rsc/nonce.ts +10 -1
  896. package/src/rsc/rsc-rendering.ts +39 -8
  897. package/src/rsc/shell-capture.ts +196 -13
  898. package/src/rsc/shell-serve.ts +26 -0
  899. package/src/server/cookie-store.ts +6 -0
  900. package/src/server/request-context.ts +33 -0
  901. package/src/ssr/index.tsx +7 -0
  902. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  903. package/src/vite/router-discovery.ts +78 -15
@@ -64,822 +64,45 @@ framework mode respectively.
64
64
  Work route-by-route, bottom-up. Start with leaf routes, then layouts, then
65
65
  loaders/actions. Verify each route works before moving to the next.
66
66
 
67
- ## 1. Project Setup
68
-
69
- Replace React Router tooling with Vite + Rango:
70
-
71
- ```bash
72
- # Framework mode:
73
- npm remove react-router @react-router/dev @react-router/node @react-router/serve
74
- # Library mode:
75
- npm remove react-router react-router-dom
76
-
77
- npm install @rangojs/router
78
- ```
79
-
80
- Replace the `@react-router/dev` Vite plugin with `rango()`:
81
-
82
- ```typescript
83
- // vite.config.ts
84
- // Before: import { reactRouter } from "@react-router/dev/vite";
85
- import { defineConfig } from "vite";
86
- import { rango } from "@rangojs/router/vite";
87
-
88
- export default defineConfig({
89
- plugins: [rango()],
90
- });
91
- ```
92
-
93
- Delete `react-router.config.ts` — route configuration moves to the `urls()` DSL.
94
-
95
- ```typescript
96
- // src/router.tsx
97
- import { createRouter } from "@rangojs/router";
98
- import { Document } from "./document";
99
- import { urlpatterns } from "./urls";
100
-
101
- export default createRouter({
102
- document: Document,
103
- }).routes(urlpatterns);
104
- ```
105
-
106
- ## 2. Route Mapping
107
-
108
- ### RR7 framework mode: route modules → urls() DSL
109
-
110
- In framework mode, each route is a file with conventional exports (`loader`,
111
- `action`, `default`, `meta`, `headers`, `shouldRevalidate`, `handle`,
112
- `ErrorBoundary`, `HydrateFallback`). In Rango, all of these become part of the
113
- `urls()` DSL or move into the server component handler:
114
-
115
- ```text
116
- RR7 route module export → Rango equivalent
117
- ─────────────────────────────────────────────────────
118
- default (Component) → handler in path()
119
- loader → fetch in handler, or createLoader()
120
- action → "use server" function
121
- meta → ctx.use(Meta) in handler
122
- headers → ctx.header() in handler or middleware
123
- shouldRevalidate → revalidate() DSL
124
- ErrorBoundary → errorBoundary() DSL
125
- HydrateFallback → loading() DSL
126
- handle → createHandle() for cross-segment data (breadcrumbs, etc.)
127
- clientLoader / clientAction → "use client" component with React hooks
128
- ```
129
-
130
- #### Example: full route module migration
131
-
132
- ```typescript
133
- // RR7 framework mode: app/routes/product.$slug.tsx
134
- import type { Route } from "./+types/product.$slug";
135
-
136
- export async function loader({ params }: Route.LoaderArgs) {
137
- const product = await getProduct(params.slug);
138
- if (!product) throw new Response("Not Found", { status: 404 });
139
- return { product };
140
- }
141
-
142
- export async function action({ request }: Route.ActionArgs) {
143
- const formData = await request.formData();
144
- await addToCart(formData.get("productId") as string);
145
- return { ok: true };
146
- }
147
-
148
- export function meta({ data }: Route.MetaArgs) {
149
- return [{ title: data.product.name }];
150
- }
151
-
152
- export function headers() {
153
- return { "Cache-Control": "max-age=300" };
154
- }
155
-
156
- export function shouldRevalidate({ actionResult }) {
157
- return !!actionResult;
158
- }
159
-
160
- export default function ProductPage({ loaderData }: Route.ComponentProps) {
161
- return <div>{loaderData.product.name}</div>;
162
- }
163
-
164
- export function ErrorBoundary() {
165
- return <div>Product error</div>;
166
- }
167
- ```
168
-
169
- ```typescript
170
- // Rango: urls.tsx + handler
171
- import { notFound } from "@rangojs/router";
172
-
173
- const ProductPage: Handler<"product"> = async (ctx) => {
174
- const product = await getProduct(ctx.params.slug);
175
- if (!product) notFound("Product not found");
176
-
177
- const meta = ctx.use(Meta);
178
- meta({ title: product.name });
179
- ctx.header("Cache-Control", "max-age=300");
180
-
181
- return <div>{product.name}</div>;
182
- };
183
-
184
- // In urls.tsx:
185
- path("/product/:slug", ProductPage, { name: "product" }, () => [
186
- revalidate(({ actionId }) => !!actionId),
187
- errorBoundary(() => <div>Product error</div>),
188
- loading(<ProductSkeleton />),
189
- ])
190
- ```
191
-
192
- Key shift: the route module's scattered exports consolidate into the handler
193
- (data fetching, meta, headers) and the DSL (revalidation, error boundary, loading).
194
-
195
- ### RR7 file routing → urls() DSL
196
-
197
- | RR7 file path | Rango |
198
- | ---------------------------------------- | ------------------------------------------------------------- |
199
- | `app/routes/_index.tsx` | `path("/", HomePage, { name: "home" })` |
200
- | `app/routes/about.tsx` | `path("/about", AboutPage, { name: "about" })` |
201
- | `app/routes/blog.$slug.tsx` | `path("/blog/:slug", BlogPost, { name: "blogPost" })` |
202
- | `app/routes/files.$.tsx` (splat) | `path("/files/:path*", FileBrowser, { name: "files" })` |
203
- | `app/routes/dashboard.tsx` (layout) | `layout(<DashboardLayout />, () => [...])` |
204
- | `app/routes/dashboard._index.tsx` | `path("/dashboard", DashboardIndex, { name: "dashboard" })` |
205
- | `app/routes/dashboard.settings.tsx` | `path("/dashboard/settings", Settings, { name: "settings" })` |
206
- | `app/routes/_auth.tsx` (pathless layout) | `layout(<AuthLayout />, () => [...])` |
207
- | `app/routes/_auth.login.tsx` | `path("/login", LoginPage, { name: "login" })` |
208
-
209
- ### Library mode: config routes → urls() DSL
210
-
211
- | React Router | Rango |
212
- | -------------------------------------- | ------------------------------------------------------- |
213
- | `path: "/"` | `path("/", HomePage, { name: "home" })` |
214
- | `path: "about"` | `path("/about", AboutPage, { name: "about" })` |
215
- | `path: "blog/:slug"` | `path("/blog/:slug", BlogPost, { name: "blogPost" })` |
216
- | `path: "files/*"` (splat) | `path("/files/:path*", FileBrowser, { name: "files" })` |
217
- | `path: "docs/:lang?"` (optional param) | `path("/docs/:lang?", Docs, { name: "docs" })` |
218
-
219
- The RR splat (`$` / `*`) matches the bare parent too (`/files` binds `""`), so
220
- it maps to `:path*` (zero-or-more). Use `:path+` only when you require at least
221
- one trailing segment. RR reads the splat at `params["*"]`; Rango exposes it as a
222
- named string at `ctx.params.path` with the `/` separators preserved (split to
223
- recover RR's array):
224
-
225
- ```typescript
226
- path("/files/:path*", (ctx) => {
227
- const parts = ctx.params.path === "" ? [] : ctx.params.path.split("/");
228
- return <FileBrowser path={parts} />;
229
- }, { name: "files" });
230
- ```
231
-
232
- ### Layouts
233
-
234
- React Router layouts use `<Outlet />` — same concept in Rango:
235
-
236
- ```typescript
237
- // React Router:
238
- function DashboardLayout() {
239
- return (
240
- <div className="dashboard">
241
- <Outlet />
242
- </div>
243
- );
244
- }
245
-
246
- // route config:
247
- { path: "dashboard", element: <DashboardLayout />, children: [...] }
248
-
249
- // Rango: same <Outlet />, from @rangojs/router/client
250
- import { Outlet } from "@rangojs/router/client";
251
-
252
- layout(<DashboardLayout />, () => [
253
- path("/dashboard", DashboardIndex, { name: "dashboard" }),
254
- path("/dashboard/settings", Settings, { name: "settings" }),
255
- ])
256
- ```
257
-
258
- ### Dynamic layouts (with data)
259
-
260
- ```typescript
261
- // React Router: useLoaderData() in layout component
262
- function DashboardLayout() {
263
- const { user } = useLoaderData();
264
- return <Shell user={user}><Outlet /></Shell>;
265
- }
266
-
267
- // Rango: handler function layout (server component)
268
- layout(async (ctx) => {
269
- const user = ctx.get("user");
270
- return (
271
- <Shell user={user}>
272
- <Outlet />
273
- </Shell>
274
- );
275
- }, () => [
276
- path("/dashboard", DashboardIndex, { name: "dashboard" }),
277
- ])
278
- ```
279
-
280
- ### Nested routes
281
-
282
- React Router's nested route tree maps directly to Rango's `layout()` nesting:
283
-
284
- ```typescript
285
- // React Router:
286
- createBrowserRouter([{
287
- path: "/",
288
- element: <RootLayout />,
289
- children: [
290
- { path: "dashboard",
291
- element: <DashboardLayout />,
292
- children: [
293
- { index: true, element: <DashboardIndex /> },
294
- { path: "settings", element: <Settings /> },
295
- ]
296
- },
297
- ]
298
- }])
299
-
300
- // Rango:
301
- urls(({ path, layout }) => [
302
- layout(<RootLayout />, () => [
303
- layout(<DashboardLayout />, () => [
304
- path("/dashboard", DashboardIndex, { name: "dashboard" }),
305
- path("/dashboard/settings", Settings, { name: "settings" }),
306
- ]),
307
- ]),
308
- ])
309
- ```
310
-
311
- ### Route groups / pathless layouts
312
-
313
- React Router's pathless routes (layout routes without a path) are Rango's
314
- layouts without a URL prefix:
315
-
316
- ```typescript
317
- // React Router: { element: <AuthLayout />, children: [...] }
318
-
319
- // Rango: layout with no URL segment
320
- layout(<AuthLayout />, () => [
321
- path("/login", LoginPage, { name: "login" }),
322
- path("/register", RegisterPage, { name: "register" }),
323
- ])
324
- ```
325
-
326
- ### Index routes
327
-
328
- ```typescript
329
- // React Router: { index: true, element: <Home /> }
330
-
331
- // Rango: path with "/" inside a layout
332
- layout(<RootLayout />, () => [
333
- path("/", HomePage, { name: "home" }),
334
- ])
335
- ```
336
-
337
- ## 3. Data Fetching
338
-
339
- ### Loaders → handler (the default migration)
340
-
341
- In React Router, loaders and components are separate: the loader fetches data,
342
- the component renders it via `useLoaderData()`. In Rango, server component
343
- handlers do both — combine the loader and component into a single handler:
344
-
345
- ```typescript
346
- // React Router: separate loader + component
347
- export async function loader({ params }) {
348
- const product = await getProduct(params.slug);
349
- return { product };
350
- }
351
- function ProductPage() {
352
- const { product } = useLoaderData();
353
- return <div>{product.name}</div>;
354
- }
355
-
356
- // Rango: handler fetches and renders directly
357
- const ProductPage: Handler<"product"> = async (ctx) => {
358
- const product = await getProduct(ctx.params.slug);
359
- return <div>{product.name}</div>;
360
- };
361
- ```
362
-
363
- This is the standard migration path. The handler IS the loader — it fetches
364
- data, then returns JSX. No separate data-fetching layer needed.
365
-
366
- ### When to use createLoader()
367
-
368
- Rango's `createLoader()` is a live data layer, not a loader migration target.
369
- Use it only when you need capabilities beyond what the handler provides:
370
-
371
- - **Client-side reactive data** — `useLoader()` in client components for data
372
- that updates without a full page navigation
373
- - **Shared data across segments** — a loader registered on a layout is available
374
- to all child routes via `ctx.use(Loader)` or `useLoader(Loader)`
375
- - **Independent revalidation** — `revalidate()` on a specific loader after actions
376
- - **Per-loader caching** — `loader(L, () => [cache({ ttl: 60 })])`
377
-
378
- If the React Router loader just fetches data for its page component, merge it
379
- into the handler. See `/loader` for when the live data layer is useful.
380
-
381
- ### Actions
382
-
383
- React Router form actions map to Rango server actions:
384
-
385
- ```typescript
386
- // React Router:
387
- export async function action({ request }) {
388
- const formData = await request.formData();
389
- await updateUser(formData.get("name"));
390
- return redirect("/profile");
391
- }
392
- function EditProfile() {
393
- return (
394
- <Form method="post">
395
- <input name="name" />
396
- <button type="submit">Save</button>
397
- </Form>
398
- );
399
- }
400
-
401
- // Rango: "use server" action + native form or useActionState
402
- "use server";
403
- import { redirect } from "@rangojs/router";
404
-
405
- export async function updateProfile(formData: FormData): Promise<void> {
406
- await updateUser(formData.get("name") as string);
407
- throw redirect("/profile");
408
- }
409
-
410
- // Client component:
411
- function EditProfile() {
412
- return (
413
- <form action={updateProfile}>
414
- <input name="name" />
415
- <button type="submit">Save</button>
416
- </form>
417
- );
418
- }
419
- ```
420
-
421
- Key difference: React Router actions are route-scoped (declared per route).
422
- Rango actions are function-scoped (`"use server"` on any exported async function).
423
-
424
- ### useLoaderData
425
-
426
- There is no `useLoaderData()` in Rango. For most cases, the handler fetches
427
- and renders directly (see above). When a client component needs live reactive
428
- data, use `createLoader()` + `useLoader()`:
429
-
430
- ```typescript
431
- // React Router: useLoaderData() in client component
432
- function ProductPrice() {
433
- const { price } = useLoaderData();
434
- return <span>{price}</span>;
435
- }
436
-
437
- // Rango: useLoader() reads from a registered loader (live data layer)
438
- "use client";
439
- import { useLoader } from "@rangojs/router/client";
440
- import { PriceLoader } from "../loaders";
441
-
442
- function ProductPrice() {
443
- const { data } = useLoader(PriceLoader);
444
- return <span>{data.price}</span>;
445
- }
446
- ```
447
-
448
- `useLoader()` provides live data that stays fresh — it re-fetches on navigation
449
- and after actions (controlled by `revalidate()`). This is different from
450
- `useLoaderData()` which just reads a snapshot.
451
-
452
- ### useActionData
453
-
454
- React Router's `useActionData()` reads the return value of a route-scoped
455
- `action()`. In Rango, actions are standard React server actions (`"use server"`),
456
- so all React patterns apply directly:
457
-
458
- ```typescript
459
- // React Router:
460
- export async function action({ request }) {
461
- const form = await request.formData();
462
- const errors = validate(form);
463
- if (errors) return { errors };
464
- await save(form);
465
- return { ok: true };
466
- }
467
- function EditForm() {
468
- const data = useActionData();
469
- return (
470
- <Form method="post">
471
- {data?.errors && <p>{data.errors}</p>}
472
- <input name="title" />
473
- <button>Save</button>
474
- </Form>
475
- );
476
- }
477
-
478
- // Rango: useActionState (standard React hook)
479
- "use client";
480
- import { useActionState } from "react";
481
- import { saveForm } from "../actions"; // "use server" function
482
-
483
- function EditForm() {
484
- const [state, action, pending] = useActionState(saveForm, null);
485
- return (
486
- <form action={action}>
487
- {state?.errors && <p>{state.errors}</p>}
488
- <input name="title" />
489
- <button disabled={pending}>Save</button>
490
- </form>
491
- );
492
- }
493
- ```
494
-
495
- Since Rango uses RSC server actions, all React action patterns work:
496
- `useActionState`, `useOptimistic`, `useTransition`, `startTransition`,
497
- and plain `<form action={serverAction}>`. No framework-specific hook needed.
498
-
499
- For the full guide — defining actions, validation with Zod, error handling,
500
- revalidation rules, file uploads, and progressive enhancement — see
501
- `/server-actions`.
502
-
503
- ### clientLoader / clientAction (framework mode)
504
-
505
- RR7 framework mode's `clientLoader` and `clientAction` run in the browser.
506
- Rango does not have a framework-level client loader/action concept — these
507
- migrate to standard React client-side code:
508
-
509
- ```typescript
510
- // RR7: clientLoader fetching from a third-party API
511
- export async function clientLoader() {
512
- const res = await fetch("https://api.weather.com/current?city=london");
513
- return res.json();
514
- }
515
-
516
- // Rango: "use client" component with hooks
517
- "use client";
518
- import { useState, useEffect } from "react";
519
-
520
- function WeatherWidget() {
521
- const [weather, setWeather] = useState(null);
522
- useEffect(() => {
523
- fetch("https://api.weather.com/current?city=london")
524
- .then((r) => r.json())
525
- .then(setWeather);
526
- }, []);
527
- if (!weather) return <span>Loading...</span>;
528
- return <span>{weather.temp}°C</span>;
529
- }
530
- ```
531
-
532
- The general rule: anything that ran in `clientLoader`/`clientAction` moves into
533
- React hooks (`useState`, `useEffect`, `useActionState`, `useOptimistic`) inside
534
- a `"use client"` component. There is no framework wrapper — it's just React.
535
-
536
- ### shouldRevalidate (framework mode)
537
-
538
- RR7's `shouldRevalidate` export maps directly to Rango's `revalidate()` DSL:
539
-
540
- ```typescript
541
- // RR7:
542
- export function shouldRevalidate({ actionResult, currentParams, nextParams }) {
543
- if (actionResult) return true;
544
- return currentParams.slug !== nextParams.slug;
545
- }
546
-
547
- // Rango:
548
- path("/product/:slug", ProductPage, { name: "product" }, () => [
549
- revalidate(({ actionId, currentParams, nextParams }) => {
550
- if (actionId) return true;
551
- return currentParams.slug !== nextParams.slug;
552
- }),
553
- ]);
554
- ```
555
-
556
- Note: RR7's `shouldRevalidate` controls client-side loader re-fetching. Rango's
557
- `revalidate()` controls which segments re-run during partial rendering after
558
- navigation or actions. The intent is the same — skip unnecessary work — but
559
- the mechanism is segment-level rather than loader-level.
560
-
561
- ## 4. Middleware / Route Protection
562
-
563
- React Router doesn't have built-in middleware. Protection is typically done in loaders:
564
-
565
- ```typescript
566
- // React Router: auth check in loader
567
- export async function loader({ request }) {
568
- const user = await getUser(request);
569
- if (!user) throw redirect("/login");
570
- return { user };
571
- }
572
-
573
- // Rango: router.use() for request-level auth
574
- const router = createRouter({})
575
- .use(authInit) // all routes — resolves session
576
- .use("/dashboard/*", requireAuth) // scoped guard
577
- .routes(urlpatterns);
578
- ```
579
-
580
- Use `router.use()` for auth guards (wraps entire request including actions).
581
- Use DSL `middleware()` for render-level concerns (context shaping, headers).
582
- See `/middleware`.
583
-
584
- ## 5. Loading & Error States
585
-
586
- ### Loading / Suspense
587
-
588
- ```typescript
589
- // React Router: defer() + Suspense, or HydrateFallback
590
- export async function loader() {
591
- return defer({ data: fetchData() });
592
- }
593
-
594
- // Rango: loading() DSL for automatic Suspense boundaries
595
- path("/dashboard", DashboardPage, { name: "dashboard" }, () => [
596
- loading(<DashboardSkeleton />),
597
- ])
598
- ```
599
-
600
- ### Error boundaries
601
-
602
- ```typescript
603
- // React Router:
604
- { path: "dashboard", element: <Dashboard />, errorElement: <ErrorPage /> }
605
-
606
- // or with ErrorBoundary component:
607
- function ErrorBoundary() {
608
- const error = useRouteError();
609
- return <div>Error: {error.message}</div>;
610
- }
611
-
612
- // Rango: errorBoundary() wrapping a group of routes
613
- // Server-side error boundaries only receive `error` (no `reset` — server render
614
- // cannot be retried; users can navigate away or refresh).
615
- layout(<DashboardLayout />, () => [
616
- errorBoundary(({ error }) => (
617
- <div>
618
- <h2>Something went wrong</h2>
619
- <p>{error.message}</p>
620
- </div>
621
- )),
622
- path("/dashboard", DashboardIndex, { name: "dashboard" }),
623
- path("/dashboard/settings", Settings, { name: "settings" }),
624
- ])
625
- ```
626
-
627
- ### Not found
628
-
629
- ```typescript
630
- // React Router: { path: "*", element: <NotFound /> }
631
-
632
- // Rango (app-level):
633
- createRouter({
634
- notFound: ({ pathname }) => <NotFoundPage pathname={pathname} />,
635
- })
636
-
637
- // Rango (route-level — catches notFound() thrown in handlers/loaders):
638
- layout(<ShopLayout />, () => [
639
- notFoundBoundary(<ProductNotFound />),
640
- path("/product/:slug", ProductPage, { name: "product" }),
641
- ])
642
- ```
643
-
644
- ## 6. Navigation
645
-
646
- | React Router | Rango |
647
- | ----------------------------------------- | -------------------------------------------------------------------------------- |
648
- | `import { Link } from "react-router-dom"` | `import { Link } from "@rangojs/router/client"` |
649
- | `<Link to="/about">` | `<Link to="/about">` |
650
- | `useNavigate()` | `useRouter()` from `@rangojs/router/client` |
651
- | `navigate("/about")` | `useRouter().push("/about")` |
652
- | `navigate("/about", { replace: true })` | `useRouter().replace("/about")` |
653
- | `navigate(-1)` | `useRouter().back()` |
654
- | `useLocation().pathname` | `usePathname()` from `@rangojs/router/client` |
655
- | `useSearchParams()` | `useSearchParams()` from `@rangojs/router/client` |
656
- | `useParams()` | `useParams()` from `@rangojs/router/client` (or `ctx.params` in server handlers) |
657
- | `useParams<T>()` | `useParams<T>()` — same generic annotation pattern |
658
- | `<NavLink>` | `<Link>` with `usePathname()` for active state |
659
-
660
- ### useNavigate → useRouter
661
-
662
- ```typescript
663
- // React Router:
664
- const navigate = useNavigate();
665
- navigate("/dashboard");
666
- navigate(-1);
667
-
668
- // Rango:
669
- const router = useRouter();
670
- router.push("/dashboard");
671
- router.back();
672
- ```
673
-
674
- ## 7. Metadata / Head
675
-
676
- ```typescript
677
- // React Router: meta function export (framework mode)
678
- export function meta() {
679
- return [{ title: "Home" }, { name: "description", content: "Welcome" }];
680
- }
681
-
682
- // Rango: Meta handle in server handlers
683
- import { Meta } from "@rangojs/router";
684
-
685
- const HomePage: Handler<"home"> = (ctx) => {
686
- const meta = ctx.use(Meta);
687
- meta({ title: "Home" });
688
- meta({ name: "description", content: "Welcome" });
689
- return <div>Home page</div>;
690
- };
691
- ```
692
-
693
- Add `<MetaTags />` in the Document component's `<head>`:
694
-
695
- ```typescript
696
- import { MetaTags } from "@rangojs/router/client";
697
-
698
- function Document({ children }: { children: ReactNode }) {
699
- return (
700
- <html>
701
- <head>
702
- <MetaTags />
703
- </head>
704
- <body>{children}</body>
705
- </html>
706
- );
707
- }
708
- ```
709
-
710
- ## 8. API / Resource Routes
711
-
712
- ```typescript
713
- // React Router (framework mode):
714
- // app/routes/api.users.ts
715
- export async function loader() {
716
- return Response.json(await getUsers());
717
- }
718
-
719
- // Rango: response routes
720
- path.json(
721
- "/api/users",
722
- async () => {
723
- return await getUsers();
724
- },
725
- { name: "apiUsers" },
726
- );
727
- ```
728
-
729
- See `/response-routes` for `path.json()`, `path.text()`, `path.html()`, etc.
730
-
731
- ## 9. Theme / Dark Mode
732
-
733
- Rango has a built-in theme system with FOUC prevention. If the React Router app
734
- uses a custom theme provider or `next-themes`, replace it with Rango's theme API:
735
-
736
- ```typescript
737
- const router = createRouter({
738
- theme: true, // or { defaultTheme: "system", attribute: "class" }
739
- });
740
- ```
741
-
742
- Client components use `useTheme()` to read and toggle:
743
-
744
- ```typescript
745
- "use client";
746
- import { useTheme } from "@rangojs/router/theme";
747
-
748
- function ThemeToggle() {
749
- const { theme, setTheme } = useTheme();
750
- return <button onClick={() => setTheme(theme === "dark" ? "light" : "dark")}>{theme}</button>;
751
- }
752
- ```
753
-
754
- See `/theme` for full API including system detection and cookie persistence.
755
-
756
- ## 10. Cloudflare Workers: streaming, dev tooling, and deploy
757
-
758
- This is the part of an RR7-on-Cloudflare migration that the API tables above do
759
- **not** cover, and it produces symptoms that look like router bugs but aren't.
760
- RR7 serves a fully-rendered HTML/Turbo-Stream response; Rango serves a **streamed**
761
- RSC/SSR response. Anything in the request path that was harmless for RR7 but
762
- **buffers the response** silently kills that stream — the `loading()` /
763
- `<Suspense>` fallback never shows and the page appears "awaited" (old content
764
- held until everything resolves).
765
-
766
- ### 10a. Never buffer the Rango response in a custom worker entry
767
-
768
- RR7 Cloudflare entries commonly **rewrite the response body** — `await
769
- response.text()` / `await response.arrayBuffer()`, `HTMLRewriter`, cookie/URL
770
- rewriting, hybrid-proxy bridging. That is fine for RR7's complete HTML, but if it
771
- runs on the **Rango** path it consumes the stream and you lose streaming
772
- entirely.
773
-
774
- Rule: in the worker entry, the Rango response must pass through as a **stream**.
775
- Buffer only on non-Rango branches (a legacy/SFRA proxy, an error page).
776
-
777
- ```typescript
778
- // BAD — buffers the whole RSC stream before returning (no streaming, no fallback)
779
- const response = await router.fetch(request, { env, ctx });
780
- const body = await response.text(); // <- drains the stream
781
- return new Response(rewrite(body), response);
782
-
783
- // GOOD — pass the body through as a stream (re-wrap headers only)
784
- const response = await router.fetch(request, { env, ctx });
785
- return new Response(response.body, response); // <- streams; safe to add headers
786
- ```
787
-
788
- If you keep a legacy proxy (e.g. an SFRA/host fallback) that legitimately buffers
789
- to rewrite HTML, gate it so it only runs for proxied paths — never for the
790
- `router.fetch()` result.
791
-
792
- Keep the custom entry itself (host/site resolution, sessions, proxy fallback) —
793
- that's real product logic, not a deviation. Just don't let it touch the stream.
794
-
795
- ### 10b. Use `vite dev` / `vite preview`, not `wrangler dev`, for local work
796
-
797
- The `@cloudflare/vite-plugin` runs **your worker entry** inside miniflare for both
798
- `vite dev` and `vite preview`, with bindings + `.dev.vars`, and it **streams**.
799
- `wrangler dev` does **not** stream RSC locally: it gzip-compresses the response by
800
- buffering the entire body before sending. Measured on a bare streaming Worker
801
- under `wrangler dev`: `Accept-Encoding: gzip` → first byte at the full delay
802
- (buffered); `Accept-Encoding: identity` → first byte at ~3ms (streams). The
803
- deployed Cloudflare edge does **streaming** compression, so this is a
804
- **local-`wrangler dev`-only artifact** — do not mistake it for a production
805
- streaming bug (verify the deployed edge with `curl` and watch chunk timing /
806
- `transfer-encoding: chunked`).
807
-
808
- ```jsonc
809
- // package.json — the standard rango-on-Workers shape
810
- "dev": "vite", // streams, bindings, .dev.vars live
811
- "build": "vite build",
812
- "preview": "vite preview", // runs the built worker in workerd; also streams
813
- // wrangler is only for: wrangler deploy / wrangler secret
814
- ```
815
-
816
- If a workflow truly requires `wrangler dev`, declare `Content-Encoding: identity`
817
- on streamed responses, gated to local hostnames (so the edge still compresses):
818
-
819
- ```typescript
820
- if (
821
- isLocalHostname(url.hostname) &&
822
- response.body &&
823
- !response.headers.has("content-encoding")
824
- ) {
825
- const ct = (response.headers.get("content-type") ?? "").toLowerCase();
826
- if (ct.includes("text/html") || ct.includes("text/x-component")) {
827
- const headers = new Headers(response.headers);
828
- headers.set("content-encoding", "identity"); // wrangler skips gzip -> streams
829
- return new Response(response.body, {
830
- status: response.status,
831
- statusText: response.statusText,
832
- headers,
833
- });
834
- }
835
- }
836
- ```
837
-
838
- ### 10c. `.dev.vars` loads differently per tool
839
-
840
- A frequent "my env vars vanished after migration" symptom — it's the tool, not
841
- the file:
842
-
843
- | Command | How `.dev.vars` is loaded |
844
- | -------------- | ------------------------------------------------------------------------------------ |
845
- | `wrangler dev` | Loaded natively at runtime (RR7's path — why it "worked before") |
846
- | `vite dev` | Loaded **live** by the plugin (+ `.dev.vars.<CLOUDFLARE_ENV>` if a named env is set) |
847
- | `vite preview` | Read from the **build output** `dist/<env>/.dev.vars`, written at `vite build` time |
848
-
849
- So `vite preview` only sees vars that were present when you built — re-run
850
- `vite build` after editing `.dev.vars`. (`vite dev` is the simplest: live vars +
851
- streaming, no rebuild.)
852
-
853
- ### 10d. Build output moves from `build/` to `dist/`
854
-
855
- RR7's `react-router build` writes to `build/`; Rango's `vite build` writes to
856
- `dist/` (`dist/client`, `dist/rsc`, …). The leftover `build/` paths in
857
- `wrangler.toml` and cleanup scripts must move, or you deploy stale/empty assets:
858
-
859
- ```toml
860
- # wrangler.toml — was RR7's react-router build output
861
- - assets = { directory = "./build/client/", binding = "ASSETS" }
862
- + assets = { directory = "./dist/client/", binding = "ASSETS" }
863
- ```
864
-
865
- ```jsonc
866
- // package.json — clean the real output dir
867
- - "cleanup": "rimraf ./build ./public/build"
868
- + "cleanup": "rimraf ./dist ./build ./public/build"
869
- ```
870
-
871
- ### 10e. Deploy the built worker, not the source entry
872
-
873
- `vite build` emits the **deployable** Worker config at `dist/<env>/wrangler.json`
874
- with `main: "index.js"` (the bundled worker), `no_bundle: true`, and
875
- `assets: "../client"`. A plain `wrangler deploy` run from the repo root uses the
876
- **root** `wrangler.toml`, where `main` points at your **source** entry
877
- (`app/.../worker.ts`) — and wrangler's bundler cannot resolve Rango's
878
- `virtual:rsc-router/*` modules, so deploying the source entry fails or ships a
879
- broken worker. Deploy the build output instead (e.g.
880
- `wrangler deploy -c dist/<env>/wrangler.json`) or use the plugin's deploy flow.
881
- RR7's `wrangler deploy` from root worked only because its worker was already
882
- fully bundled by `react-router build`.
67
+ ## Replace imports, never shim React Router
68
+
69
+ Do NOT create mock `react-router` modules, Vite aliases, or compatibility
70
+ wrappers (a local `useLoaderData` backed by context, a `Form` that wraps
71
+ `<form>`, a fake `useFetcher`). Shims freeze RR semantics into the app, hide
72
+ unsupported behavior until runtime, and keep the old packages in the dependency
73
+ graph. Replace every `react-router` / `react-router-dom` / `@remix-run/*`
74
+ import at its call site:
75
+
76
+ | React Router import | Replace with |
77
+ | --------------------------------------------- | ----------------------------------------------------------------------------------------- |
78
+ | `Link`, `NavLink` | `Link` from `@rangojs/router/client` (`NavLink` active state via `usePathname()`, see §6) |
79
+ | `Outlet` | `Outlet` from `@rangojs/router/client` |
80
+ | `useNavigate` | `useRouter()` from `@rangojs/router/client` (see §6) |
81
+ | `useLocation`, `useSearchParams`, `useParams` | `usePathname()`, `useSearchParams()`, `useParams()` from `@rangojs/router/client` |
82
+ | `useLoaderData` | merge the loader into the handler; `useLoader()` only for live client data (see §3) |
83
+ | `useActionData` | `useActionState` (standard React, see §3) |
84
+ | `Form` | `<form action={serverAction}>` with a `"use server"` function (see §3) |
85
+ | `useFetcher` | submits → server actions + `useActionState`/`useOptimistic`; reads → `useLoader()` |
86
+ | `defer` / `Await` | `loading()` DSL / plain `<Suspense>` (see §5) |
87
+ | `json()`, `redirect()` | plain return values; `redirect` from `@rangojs/router` |
88
+ | `useRouteError` | the `error` prop of `errorBoundary()` (see §5) |
89
+
90
+ If an import has no row here and no obvious Rango equivalent, stop and surface
91
+ it to the user — do not mock it to keep the build green.
92
+
93
+ Done means: `grep -rnE "from ['\"](react-router|@remix-run)" src/ app/` returns
94
+ nothing, and the packages are out of `package.json`.
95
+
96
+ ## Migration steps
97
+
98
+ Each numbered step's full walkthrough lives in a companion file linked below.
99
+
100
+ | Step | File |
101
+ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
102
+ | §1 Project Setup, §2 Route Mapping | [`./route-mapping.md`](./route-mapping.md) |
103
+ | §3 Data Fetching (loaders, actions, `useLoaderData`/`useActionData`, `clientLoader`/`clientAction`, `shouldRevalidate`) | [`./data-and-actions.md`](./data-and-actions.md) |
104
+ | §4 Middleware / Route Protection, §5 Loading & Error States, §6 Navigation, §7 Metadata / Head, §8 API / Resource Routes, §9 Theme / Dark Mode | [`./component-migration.md`](./component-migration.md) |
105
+ | §10 Cloudflare Workers (streaming, dev tooling, deploy) | [`./cloudflare-workers.md`](./cloudflare-workers.md) |
883
106
 
884
107
  ## 11. Key Conceptual Differences
885
108
 
@@ -910,6 +133,9 @@ fully bundled by `react-router build`.
910
133
  11. [ ] Update metadata to use `Meta` handle + `<MetaTags />`
911
134
  12. [ ] Replace custom theme provider with `theme: true` in createRouter (see `/theme`)
912
135
  13. [ ] Run `npx rango generate src/` to generate route types
136
+ 14. [ ] Verify no shims: `grep -rnE "from ['\"](react-router|@remix-run)" src/ app/`
137
+ returns nothing, no mock modules or aliases exist, and the packages are
138
+ out of `package.json`
913
139
 
914
140
  **Cloudflare Workers (if migrating an RR7-on-Workers app):**
915
141