@rangojs/router 0.0.0-experimental.9 → 0.0.0-experimental.pr251

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 (1067) hide show
  1. package/CLAUDE.md +2 -40
  2. package/README.md +617 -4
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +1223 -155
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/dist/browser/react/use-client-cache.js +39 -0
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +4088 -2237
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +60 -54
  809. package/skills/cache-guide/SKILL.md +258 -0
  810. package/skills/caching/SKILL.md +46 -17
  811. package/skills/composability/SKILL.md +172 -0
  812. package/skills/debug-manifest/SKILL.md +12 -8
  813. package/skills/document-cache/SKILL.md +16 -14
  814. package/skills/fonts/SKILL.md +6 -4
  815. package/skills/hooks/SKILL.md +288 -55
  816. package/skills/intercept/SKILL.md +52 -8
  817. package/skills/layout/SKILL.md +40 -3
  818. package/skills/links/SKILL.md +74 -15
  819. package/skills/loader/SKILL.md +111 -15
  820. package/skills/middleware/SKILL.md +90 -34
  821. package/skills/mime-routes/SKILL.md +15 -11
  822. package/skills/parallel/SKILL.md +23 -1
  823. package/skills/prerender/SKILL.md +231 -41
  824. package/skills/rango/SKILL.md +85 -20
  825. package/skills/response-routes/SKILL.md +142 -89
  826. package/skills/route/SKILL.md +184 -12
  827. package/skills/router-setup/SKILL.md +38 -27
  828. package/skills/testing/SKILL.md +226 -0
  829. package/skills/theme/SKILL.md +8 -7
  830. package/skills/typesafety/SKILL.md +241 -57
  831. package/skills/use-cache/SKILL.md +310 -0
  832. package/src/__internal.ts +9 -3
  833. package/src/bin/rango.ts +275 -15
  834. package/src/browser/action-response-classifier.ts +99 -0
  835. package/src/browser/event-controller.ts +60 -18
  836. package/src/browser/intercept-utils.ts +52 -0
  837. package/src/browser/link-interceptor.ts +1 -1
  838. package/src/browser/logging.ts +55 -0
  839. package/src/browser/merge-segment-loaders.ts +11 -10
  840. package/src/browser/navigation-bridge.ts +190 -165
  841. package/src/browser/navigation-client.ts +67 -13
  842. package/src/browser/navigation-store.ts +39 -26
  843. package/src/browser/network-error-handler.ts +61 -0
  844. package/src/browser/partial-update.ts +188 -190
  845. package/src/browser/prefetch-cache.ts +63 -0
  846. package/src/browser/prefetch-observer.ts +65 -0
  847. package/src/browser/prefetch-queue.ts +81 -0
  848. package/src/browser/rango-state.ts +97 -0
  849. package/src/browser/react/Link.tsx +243 -29
  850. package/src/browser/react/NavigationProvider.tsx +50 -11
  851. package/src/browser/react/context.ts +11 -0
  852. package/src/browser/react/index.ts +15 -11
  853. package/src/browser/react/location-state-shared.ts +75 -51
  854. package/src/browser/react/location-state.ts +54 -11
  855. package/src/browser/react/mount-context.ts +6 -1
  856. package/src/browser/react/prefetch.ts +27 -0
  857. package/src/browser/react/use-action.ts +6 -6
  858. package/src/browser/react/use-handle.ts +8 -6
  859. package/src/browser/react/use-link-status.ts +6 -5
  860. package/src/browser/react/use-navigation.ts +18 -34
  861. package/src/browser/react/use-params.ts +94 -0
  862. package/src/browser/react/use-pathname.ts +48 -0
  863. package/src/browser/react/use-router.ts +66 -0
  864. package/src/browser/react/use-search-params.ts +55 -0
  865. package/src/browser/react/use-segments.ts +28 -6
  866. package/src/browser/rsc-router.tsx +77 -15
  867. package/src/browser/scroll-restoration.ts +83 -10
  868. package/src/browser/segment-reconciler.ts +216 -0
  869. package/src/browser/segment-structure-assert.ts +16 -0
  870. package/src/browser/server-action-bridge.ts +297 -445
  871. package/src/browser/shallow.ts +6 -1
  872. package/src/browser/types.ts +65 -13
  873. package/src/build/generate-manifest.ts +48 -12
  874. package/src/build/generate-route-types.ts +32 -752
  875. package/src/build/index.ts +5 -5
  876. package/src/build/route-trie.ts +20 -10
  877. package/src/build/route-types/ast-helpers.ts +25 -0
  878. package/src/build/route-types/ast-route-extraction.ts +98 -0
  879. package/src/build/route-types/codegen.ts +93 -0
  880. package/src/build/route-types/include-resolution.ts +398 -0
  881. package/src/build/route-types/param-extraction.ts +48 -0
  882. package/src/build/route-types/per-module-writer.ts +116 -0
  883. package/src/build/route-types/router-processing.ts +317 -0
  884. package/src/build/route-types/scan-filter.ts +78 -0
  885. package/src/build/runtime-discovery.ts +219 -0
  886. package/src/cache/cache-runtime.ts +325 -0
  887. package/src/cache/cache-scope.ts +63 -237
  888. package/src/cache/cf/cf-cache-store.ts +109 -2
  889. package/src/cache/cf/index.ts +8 -2
  890. package/src/cache/document-cache.ts +12 -7
  891. package/src/cache/handle-snapshot.ts +41 -0
  892. package/src/cache/memory-segment-store.ts +216 -12
  893. package/src/cache/memory-store.ts +2 -2
  894. package/src/cache/profile-registry.ts +38 -0
  895. package/src/cache/segment-codec.ts +233 -0
  896. package/src/cache/taint.ts +71 -0
  897. package/src/cache/types.ts +72 -8
  898. package/src/client.rsc.tsx +1 -0
  899. package/src/client.tsx +30 -50
  900. package/src/component-utils.ts +4 -4
  901. package/src/components/DefaultDocument.tsx +5 -1
  902. package/src/context-var.ts +86 -0
  903. package/src/debug.ts +17 -7
  904. package/src/errors.ts +71 -6
  905. package/src/handle.ts +14 -9
  906. package/src/handles/MetaTags.tsx +68 -18
  907. package/src/handles/meta.ts +30 -13
  908. package/src/host/cookie-handler.ts +14 -13
  909. package/src/host/errors.ts +8 -8
  910. package/src/host/index.ts +5 -5
  911. package/src/host/pattern-matcher.ts +27 -27
  912. package/src/host/router.ts +48 -39
  913. package/src/host/testing.ts +8 -8
  914. package/src/host/types.ts +15 -7
  915. package/src/host/utils.ts +1 -1
  916. package/src/href-client.ts +62 -44
  917. package/src/index.rsc.ts +112 -11
  918. package/src/index.ts +152 -37
  919. package/src/internal-debug.ts +11 -0
  920. package/src/loader.rsc.ts +13 -139
  921. package/src/loader.ts +19 -10
  922. package/src/network-error-thrower.tsx +3 -1
  923. package/src/outlet-provider.tsx +45 -0
  924. package/src/prerender/param-hash.ts +4 -2
  925. package/src/prerender/store.ts +116 -13
  926. package/src/prerender.ts +275 -26
  927. package/src/reverse.ts +180 -121
  928. package/src/root-error-boundary.tsx +11 -3
  929. package/src/route-content-wrapper.tsx +7 -4
  930. package/src/route-definition/dsl-helpers.ts +931 -0
  931. package/src/route-definition/helper-factories.ts +200 -0
  932. package/src/route-definition/helpers-types.ts +430 -0
  933. package/src/route-definition/index.ts +55 -0
  934. package/src/route-definition/redirect.ts +81 -0
  935. package/src/route-definition/route-function.ts +119 -0
  936. package/src/route-definition.ts +1 -1431
  937. package/src/route-map-builder.ts +120 -123
  938. package/src/route-types.ts +41 -9
  939. package/src/router/content-negotiation.ts +116 -0
  940. package/src/router/debug-manifest.ts +59 -0
  941. package/src/router/error-handling.ts +9 -9
  942. package/src/router/find-match.ts +158 -0
  943. package/src/router/handler-context.ts +264 -77
  944. package/src/router/intercept-resolution.ts +18 -12
  945. package/src/router/lazy-includes.ts +230 -0
  946. package/src/router/loader-resolution.ts +209 -120
  947. package/src/router/logging.ts +151 -0
  948. package/src/router/manifest.ts +51 -29
  949. package/src/router/match-api.ts +56 -65
  950. package/src/router/match-context.ts +1 -2
  951. package/src/router/match-handlers.ts +266 -0
  952. package/src/router/match-middleware/background-revalidation.ts +18 -11
  953. package/src/router/match-middleware/cache-lookup.ts +267 -83
  954. package/src/router/match-middleware/cache-store.ts +41 -24
  955. package/src/router/match-middleware/intercept-resolution.ts +45 -20
  956. package/src/router/match-middleware/segment-resolution.ts +16 -8
  957. package/src/router/match-pipelines.ts +4 -4
  958. package/src/router/match-result.ts +34 -19
  959. package/src/router/metrics.ts +3 -3
  960. package/src/router/middleware-cookies.ts +55 -0
  961. package/src/router/middleware-types.ts +197 -0
  962. package/src/router/middleware.ts +86 -255
  963. package/src/router/pattern-matching.ts +141 -36
  964. package/src/router/prerender-match.ts +361 -0
  965. package/src/router/preview-match.ts +164 -0
  966. package/src/router/revalidation.ts +53 -33
  967. package/src/router/router-context.ts +21 -21
  968. package/src/router/router-interfaces.ts +340 -0
  969. package/src/router/router-options.ts +398 -0
  970. package/src/router/router-registry.ts +21 -0
  971. package/src/router/segment-resolution/fresh.ts +647 -0
  972. package/src/router/segment-resolution/loader-cache.ts +194 -0
  973. package/src/router/segment-resolution/revalidation.ts +1119 -0
  974. package/src/router/segment-resolution/static-store.ts +67 -0
  975. package/src/router/segment-resolution.ts +23 -1315
  976. package/src/router/segment-wrappers.ts +286 -0
  977. package/src/router/trie-matching.ts +76 -27
  978. package/src/router/types.ts +9 -8
  979. package/src/router.ts +400 -1973
  980. package/src/rsc/handler-context.ts +34 -0
  981. package/src/rsc/handler.ts +439 -844
  982. package/src/rsc/helpers.ts +15 -1
  983. package/src/rsc/loader-fetch.ts +167 -0
  984. package/src/rsc/manifest-init.ts +85 -0
  985. package/src/rsc/nonce.ts +14 -0
  986. package/src/rsc/progressive-enhancement.ts +154 -0
  987. package/src/rsc/response-error.ts +37 -0
  988. package/src/rsc/rsc-rendering.ts +244 -0
  989. package/src/rsc/server-action.ts +248 -0
  990. package/src/rsc/types.ts +28 -9
  991. package/src/search-params.ts +215 -0
  992. package/src/segment-system.tsx +25 -13
  993. package/src/server/context.ts +112 -41
  994. package/src/server/fetchable-loader-store.ts +32 -0
  995. package/src/server/handle-store.ts +10 -3
  996. package/src/server/loader-registry.ts +8 -14
  997. package/src/server/request-context.ts +140 -37
  998. package/src/server.ts +31 -157
  999. package/src/ssr/index.tsx +48 -14
  1000. package/src/static-handler.gen.ts +5 -0
  1001. package/src/static-handler.ts +107 -0
  1002. package/src/theme/ThemeProvider.tsx +15 -14
  1003. package/src/theme/ThemeScript.tsx +5 -5
  1004. package/src/theme/constants.ts +5 -2
  1005. package/src/theme/index.ts +5 -1
  1006. package/src/theme/theme-context.ts +3 -2
  1007. package/src/theme/theme-script.ts +19 -17
  1008. package/src/types/boundaries.ts +158 -0
  1009. package/src/types/cache-types.ts +193 -0
  1010. package/src/types/error-types.ts +189 -0
  1011. package/src/types/global-namespace.ts +78 -0
  1012. package/src/types/handler-context.ts +604 -0
  1013. package/src/types/index.ts +88 -0
  1014. package/src/types/loader-types.ts +176 -0
  1015. package/src/types/route-config.ts +179 -0
  1016. package/src/types/route-entry.ts +74 -0
  1017. package/src/types/segments.ts +153 -0
  1018. package/src/types.ts +1 -1757
  1019. package/src/urls/include-helper.ts +156 -0
  1020. package/src/urls/index.ts +52 -0
  1021. package/src/urls/path-helper-types.ts +321 -0
  1022. package/src/urls/path-helper.ts +314 -0
  1023. package/src/urls/pattern-types.ts +75 -0
  1024. package/src/urls/response-types.ts +84 -0
  1025. package/src/urls/type-extraction.ts +364 -0
  1026. package/src/urls/urls-function.ts +98 -0
  1027. package/src/urls.ts +1 -1282
  1028. package/src/use-loader.tsx +59 -69
  1029. package/src/vite/discovery/bundle-postprocess.ts +204 -0
  1030. package/src/vite/discovery/discover-routers.ts +318 -0
  1031. package/src/vite/discovery/prerender-collection.ts +368 -0
  1032. package/src/vite/discovery/route-types-writer.ts +258 -0
  1033. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1034. package/src/vite/discovery/state.ts +110 -0
  1035. package/src/vite/discovery/virtual-module-codegen.ts +200 -0
  1036. package/src/vite/index.ts +57 -1968
  1037. package/src/vite/plugin-types.ts +131 -0
  1038. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1039. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1040. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -51
  1041. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1042. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1043. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1044. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1045. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1046. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1047. package/src/vite/plugins/expose-internal-ids.ts +568 -0
  1048. package/src/vite/plugins/use-cache-transform.ts +235 -0
  1049. package/src/vite/plugins/version-injector.ts +83 -0
  1050. package/src/vite/plugins/version-plugin.ts +84 -0
  1051. package/src/vite/plugins/virtual-entries.ts +123 -0
  1052. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1053. package/src/vite/rango.ts +485 -0
  1054. package/src/vite/router-discovery.ts +712 -0
  1055. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1056. package/src/vite/utils/banner.ts +36 -0
  1057. package/src/vite/utils/bundle-analysis.ts +137 -0
  1058. package/src/vite/utils/manifest-utils.ts +70 -0
  1059. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1060. package/src/vite/utils/prerender-utils.ts +108 -0
  1061. package/src/vite/utils/shared-utils.ts +159 -0
  1062. package/src/browser/lru-cache.ts +0 -69
  1063. package/src/vite/expose-handle-id.ts +0 -209
  1064. package/src/vite/expose-loader-id.ts +0 -426
  1065. package/src/vite/expose-location-state-id.ts +0 -177
  1066. package/src/vite/expose-prerender-handler-id.ts +0 -429
  1067. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
package/CLAUDE.md CHANGED
@@ -1,43 +1,5 @@
1
1
  # @rangojs/router
2
2
 
3
- Run `/rango` first to understand the API. Skills are in `node_modules/@rangojs/router/skills/`.
3
+ A file-system based React Server Components router.
4
4
 
5
- ## Tree-Structure-Critical Files (DO NOT MODIFY without understanding)
6
-
7
- The following files control the React tree structure. Changing the tree structure
8
- (element types, nesting depth, or keys at any position) between SSR, navigation,
9
- and action renders will cause React to remount components, destroying client state
10
- like `useActionState`, refs, and local state. This is extremely hard to debug.
11
-
12
- **Protected files:**
13
-
14
- - `src/segment-system.tsx` - `renderSegments()` builds the React tree from segments.
15
- The `loading` property determines tree structure:
16
- - `undefined` / `null` -> OutletProvider directly (no boundary)
17
- - `false` -> LoaderBoundary + OutletProvider (boundary, no RouteContentWrapper)
18
- - truthy (ReactNode) -> LoaderBoundary + OutletProvider + RouteContentWrapper
19
-
20
- - `src/route-content-wrapper.tsx` - `LoaderBoundary` and `RouteContentWrapper`.
21
- These add structural depth (Suspense boundaries) to the React tree.
22
-
23
- - `src/browser/server-action-bridge.ts` - Merges server action segments with
24
- cached segments. Must preserve cached `loading` values to prevent tree drift.
25
-
26
- - `src/browser/partial-update.ts` - Merges navigation segments with cached segments.
27
-
28
- **Rules:**
29
-
30
- 1. Never change the conditional logic in `renderSegments()` that decides between
31
- LoaderBoundary/RouteContentWrapper/OutletProvider without verifying all three
32
- render paths (SSR, navigation, action) produce identical tree structures.
33
-
34
- 2. Never add or remove wrapper elements (Suspense, div, Fragment) around segment
35
- content without checking that the same wrappers exist in ALL render paths.
36
-
37
- 3. When merging segments (action bridge, partial update), always preserve the
38
- cached `loading` value if it differs from the server value. The server may
39
- return different `loading` values based on `isSSR` context.
40
-
41
- 4. Run `pnpm --filter @rangojs/router exec playwright test loader-behavior` after
42
- any changes to these files. The skipSSR action tests specifically catch tree
43
- structure regressions.
5
+ Run `/rango` to understand the API. Detailed guides for each feature are in the `skills/` directory (e.g. `node_modules/@rangojs/router/skills/loader`, `skills/caching`, `skills/middleware`, etc.).
package/README.md CHANGED
@@ -1,8 +1,22 @@
1
1
  # @rangojs/router
2
2
 
3
- > **Warning:** This package is experimental and under active development. APIs may change without notice.
3
+ Django-inspired RSC router with type-safe partial rendering for Vite.
4
4
 
5
- Type-safe RSC router with partial rendering support for Vite.
5
+ > **Experimental:** This package is under active development. APIs may change between releases. Install with `@experimental` tag.
6
+
7
+ ## Features
8
+
9
+ - **Composable URL patterns** — Django-style `urls()` DSL with `path`, `layout`, `include`
10
+ - **Named routes** — `reverse("blogPost", { slug })` for type-safe URL generation (Django-style)
11
+ - **Data loaders** — `createLoader()` with automatic streaming and Suspense integration
12
+ - **Layouts & nesting** — Nested layouts with `<Outlet />` and parallel routes
13
+ - **Segment-level caching** — `cache()` DSL with TTL/SWR and pluggable cache stores
14
+ - **Middleware** — Route-level middleware with cookie and header access
15
+ - **Pre-rendering** — `Prerender()` and `Static()` handlers for build-time rendering
16
+ - **Theme support** — Light/dark mode with FOUC prevention and system detection
17
+ - **Host routing** — Multi-app routing by domain/subdomain via `@rangojs/router/host`
18
+ - **Response routes** — `path.json()`, `path.text()`, `path.xml()` for API endpoints
19
+ - **CLI codegen** — `rango generate` for route type generation
6
20
 
7
21
  ## Installation
8
22
 
@@ -10,9 +24,608 @@ Type-safe RSC router with partial rendering support for Vite.
10
24
  npm install @rangojs/router@experimental
11
25
  ```
12
26
 
13
- ## Status
27
+ Peer dependencies:
28
+
29
+ ```bash
30
+ npm install react @vitejs/plugin-rsc
31
+ ```
32
+
33
+ For Cloudflare Workers:
34
+
35
+ ```bash
36
+ npm install @cloudflare/vite-plugin
37
+ ```
38
+
39
+ ## Quick Start
40
+
41
+ ### Vite Config
42
+
43
+ ```ts
44
+ // vite.config.ts
45
+ import react from "@vitejs/plugin-react";
46
+ import { defineConfig } from "vite";
47
+ import { rango } from "@rangojs/router/vite";
48
+
49
+ export default defineConfig({
50
+ plugins: [react(), rango({ preset: "cloudflare" })],
51
+ });
52
+ ```
53
+
54
+ ### Router
55
+
56
+ ```tsx
57
+ // src/router.tsx
58
+ import { createRouter, urls } from "@rangojs/router";
59
+ import { Document } from "./document";
60
+
61
+ const urlpatterns = urls(({ path, layout }) => [
62
+ layout(<MainLayout />, () => [
63
+ path("/", HomePage, { name: "home" }),
64
+ path("/about", AboutPage, { name: "about" }),
65
+ path("/blog/:slug", BlogPostPage, { name: "blogPost" }),
66
+ ]),
67
+ ]);
68
+
69
+ export const router = createRouter({ document: Document }).routes(urlpatterns);
70
+
71
+ // Export typed reverse function for URL generation by route name
72
+ export const reverse = router.reverse;
73
+ ```
74
+
75
+ ### Document
76
+
77
+ ```tsx
78
+ // src/document.tsx
79
+ "use client";
80
+
81
+ import type { ReactNode } from "react";
82
+ import { MetaTags } from "@rangojs/router/client";
83
+
84
+ export function Document({ children }: { children: ReactNode }) {
85
+ return (
86
+ <html lang="en">
87
+ <head>
88
+ <MetaTags />
89
+ </head>
90
+ <body>{children}</body>
91
+ </html>
92
+ );
93
+ }
94
+ ```
95
+
96
+ ## Defining Routes
97
+
98
+ ### Path Patterns
99
+
100
+ ```tsx
101
+ import { urls } from "@rangojs/router";
102
+
103
+ const urlpatterns = urls(({ path }) => [
104
+ path("/", HomePage, { name: "home" }),
105
+ path("/product/:slug", ProductPage, { name: "product" }),
106
+ path("/search/:query?", SearchPage, { name: "search" }),
107
+ path("/files/*", FilesPage, { name: "files" }),
108
+ ]);
109
+ ```
110
+
111
+ ### Typed Handlers
112
+
113
+ Route handlers receive a typed context with params, search params, and `reverse()`:
114
+
115
+ ```tsx
116
+ import type { Handler } from "@rangojs/router";
117
+
118
+ export const ProductPage: Handler<"product"> = (ctx) => {
119
+ const { slug } = ctx.params; // typed from pattern
120
+ const homeUrl = ctx.reverse("home"); // type-safe URL by route name
121
+ return <h1>Product: {slug}</h1>;
122
+ };
123
+ ```
124
+
125
+ ### Search Params
126
+
127
+ Define a search schema on the route for type-safe search parameters:
128
+
129
+ ```tsx
130
+ const urlpatterns = urls(({ path }) => [
131
+ path("/search", SearchPage, {
132
+ name: "search",
133
+ search: { q: "string", page: "number?", sort: "string?" },
134
+ }),
135
+ ]);
136
+
137
+ // Handler receives typed search params via ctx.search
138
+ const SearchPage: Handler<"search"> = (ctx) => {
139
+ const { q, page, sort } = ctx.search;
140
+ // q: string, page: number | undefined, sort: string | undefined
141
+ };
142
+ ```
143
+
144
+ ### Response Routes
145
+
146
+ Define API endpoints that bypass the RSC pipeline:
147
+
148
+ ```tsx
149
+ const urlpatterns = urls(({ path }) => [
150
+ path.json("/api/health", () => ({ status: "ok" }), { name: "health" }),
151
+ path.text("/robots.txt", () => "User-agent: *\nAllow: /", { name: "robots" }),
152
+ path.xml("/feed.xml", () => "<rss>...</rss>", { name: "feed" }),
153
+ ]);
154
+ ```
155
+
156
+ Response types available: `path.json()`, `path.text()`, `path.html()`, `path.xml()`, `path.image()`, `path.stream()`, `path.any()`.
157
+
158
+ ## Layouts & Nesting
159
+
160
+ ### Layouts with Outlet
161
+
162
+ ```tsx
163
+ import { urls } from "@rangojs/router";
164
+
165
+ const urlpatterns = urls(({ path, layout }) => [
166
+ layout(<MainLayout />, () => [
167
+ path("/", HomePage, { name: "home" }),
168
+ path("/about", AboutPage, { name: "about" }),
169
+ ]),
170
+ ]);
171
+ ```
172
+
173
+ ```tsx
174
+ "use client";
175
+ import { Outlet } from "@rangojs/router/client";
176
+
177
+ function MainLayout() {
178
+ return (
179
+ <div>
180
+ <nav>...</nav>
181
+ <Outlet />
182
+ </div>
183
+ );
184
+ }
185
+ ```
186
+
187
+ ### Loading Skeletons
188
+
189
+ ```tsx
190
+ const urlpatterns = urls(({ path, loading }) => [
191
+ path("/product/:slug", ProductPage, { name: "product" }, () => [
192
+ loading(<ProductSkeleton />),
193
+ ]),
194
+ ]);
195
+ ```
196
+
197
+ ### Parallel Routes
198
+
199
+ ```tsx
200
+ const urlpatterns = urls(({ path, layout, parallel, loader, loading }) => [
201
+ layout(BlogLayout, () => [
202
+ parallel({ "@sidebar": BlogSidebarHandler }, () => [
203
+ loader(BlogSidebarLoader),
204
+ loading(<SidebarSkeleton />),
205
+ ]),
206
+ path("/blog", BlogIndexPage, { name: "blog" }),
207
+ path("/blog/:slug", BlogPostPage, { name: "blogPost" }),
208
+ ]),
209
+ ]);
210
+ ```
211
+
212
+ ## Data Loaders
213
+
214
+ ### Creating a Loader
215
+
216
+ ```tsx
217
+ import { createLoader } from "@rangojs/router";
218
+
219
+ export const BlogSidebarLoader = createLoader(async (ctx) => {
220
+ const posts = await db.getRecentPosts();
221
+ return { posts, loadedAt: new Date().toISOString() };
222
+ });
223
+ ```
224
+
225
+ ### Using in Server Components (Handlers)
226
+
227
+ ```tsx
228
+ import type { HandlerContext } from "@rangojs/router";
229
+ import { BlogSidebarLoader } from "./loaders/blog";
230
+
231
+ async function BlogSidebarHandler(ctx: HandlerContext) {
232
+ const { posts } = await ctx.use(BlogSidebarLoader);
233
+ return (
234
+ <ul>
235
+ {posts.map((p) => (
236
+ <li key={p.slug}>{p.title}</li>
237
+ ))}
238
+ </ul>
239
+ );
240
+ }
241
+ ```
242
+
243
+ ### Using in Client Components
244
+
245
+ ```tsx
246
+ "use client";
247
+ import { useLoader } from "@rangojs/router/client";
248
+ import { BlogSidebarLoader } from "./loaders/blog";
249
+
250
+ function BlogSidebar() {
251
+ const { posts } = useLoader(BlogSidebarLoader);
252
+ return (
253
+ <ul>
254
+ {posts.map((p) => (
255
+ <li key={p.slug}>{p.title}</li>
256
+ ))}
257
+ </ul>
258
+ );
259
+ }
260
+ ```
261
+
262
+ ### Attaching Loaders to Routes
263
+
264
+ ```tsx
265
+ const urlpatterns = urls(({ path, loader }) => [
266
+ path("/blog", BlogIndexPage, { name: "blog" }, () => [
267
+ loader(BlogSidebarLoader),
268
+ ]),
269
+ ]);
270
+ ```
271
+
272
+ ## Navigation & Links
273
+
274
+ ### Named Routes with `reverse()` (Server Components)
275
+
276
+ In server components, use `reverse()` to generate URLs by route name:
277
+
278
+ ```tsx
279
+ import { Link } from "@rangojs/router/client";
280
+ import { reverse } from "./router";
281
+
282
+ function BlogIndex() {
283
+ return (
284
+ <nav>
285
+ <Link to={reverse("home")}>Home</Link>
286
+ <Link to={reverse("blogPost", { slug: "my-post" })}>My Post</Link>
287
+ <Link to={reverse("about")}>About</Link>
288
+ </nav>
289
+ );
290
+ }
291
+ ```
292
+
293
+ `reverse()` is type-safe — route names and required params are checked at compile time. Included routes use dotted names: `reverse("api.health")`.
294
+
295
+ Handlers also have `ctx.reverse()` directly on the context:
296
+
297
+ ```tsx
298
+ const BlogPostPage: Handler<"blogPost"> = (ctx) => {
299
+ const backUrl = ctx.reverse("blog");
300
+ return <Link to={backUrl}>Back to blog</Link>;
301
+ };
302
+ ```
303
+
304
+ ### `href()` for Path Validation (Client Components)
305
+
306
+ In client components, use `href()` for compile-time path validation:
307
+
308
+ ```tsx
309
+ "use client";
310
+ import { Link, href } from "@rangojs/router/client";
311
+
312
+ function Nav() {
313
+ return (
314
+ <nav>
315
+ <Link to={href("/")}>Home</Link>
316
+ <Link to={href("/blog")} prefetch="intent">
317
+ Blog
318
+ </Link>
319
+ <Link to={href("/about")}>About</Link>
320
+ </nav>
321
+ );
322
+ }
323
+ ```
324
+
325
+ `href()` validates that the path matches a registered route pattern at compile time (e.g. `/blog/my-post` matches `/blog/:slug`).
326
+
327
+ ### Navigation Hook
328
+
329
+ ```tsx
330
+ "use client";
331
+ import { useNavigation } from "@rangojs/router/client";
332
+
333
+ function SearchForm() {
334
+ const { navigate, isPending } = useNavigation();
335
+
336
+ function handleSubmit(query: string) {
337
+ navigate(`/search?q=${encodeURIComponent(query)}`);
338
+ }
339
+
340
+ return <form onSubmit={...}>{isPending && <Spinner />}</form>;
341
+ }
342
+ ```
343
+
344
+ ### Scroll Restoration
345
+
346
+ ```tsx
347
+ "use client";
348
+ import { ScrollRestoration } from "@rangojs/router/client";
349
+
350
+ function Document({ children }) {
351
+ return (
352
+ <html>
353
+ <body>
354
+ {children}
355
+ <ScrollRestoration />
356
+ </body>
357
+ </html>
358
+ );
359
+ }
360
+ ```
361
+
362
+ ## Includes (Composable Modules)
363
+
364
+ Split URL patterns into composable modules with `include()`:
365
+
366
+ ```tsx
367
+ // src/api/urls.tsx
368
+ import { urls } from "@rangojs/router";
369
+
370
+ export const apiPatterns = urls(({ path }) => [
371
+ path.json("/health", () => ({ status: "ok" }), { name: "health" }),
372
+ path.json("/products", getProducts, { name: "products" }),
373
+ ]);
374
+
375
+ // src/urls.tsx
376
+ import { urls } from "@rangojs/router";
377
+ import { apiPatterns } from "./api/urls";
378
+
379
+ export const urlpatterns = urls(({ path, include }) => [
380
+ path("/", HomePage, { name: "home" }),
381
+ include("/api", apiPatterns, { name: "api" }),
382
+ // Mounts apiPatterns under /api: /api/health, /api/products
383
+ ]);
384
+ ```
385
+
386
+ Included route names are prefixed with the include name: `reverse("api.health")`, `reverse("api.products")`.
387
+
388
+ ## Middleware
389
+
390
+ ```tsx
391
+ const urlpatterns = urls(({ path, middleware }) => [
392
+ middleware(
393
+ async (ctx, next) => {
394
+ const start = Date.now();
395
+ const response = await next();
396
+ console.log(
397
+ `${ctx.request.method} ${ctx.url.pathname} ${Date.now() - start}ms`,
398
+ );
399
+ return response;
400
+ },
401
+ () => [path("/dashboard", DashboardPage, { name: "dashboard" })],
402
+ ),
403
+ ]);
404
+ ```
405
+
406
+ ## Caching
407
+
408
+ ### Route-Level Caching
409
+
410
+ ```tsx
411
+ const urlpatterns = urls(({ path, cache }) => [
412
+ cache({ ttl: 60, swr: 300 }, () => [
413
+ path("/blog", BlogIndexPage, { name: "blog" }),
414
+ path("/blog/:slug", BlogPostPage, { name: "blogPost" }),
415
+ ]),
416
+ ]);
417
+ ```
418
+
419
+ ### Cache Store Configuration
420
+
421
+ ```tsx
422
+ import { createRouter } from "@rangojs/router";
423
+ import {
424
+ CFCacheStore,
425
+ createDocumentCacheMiddleware,
426
+ } from "@rangojs/router/cache";
427
+
428
+ export const router = createRouter({
429
+ document: Document,
430
+ cache: (env) => ({
431
+ store: new CFCacheStore({
432
+ defaults: { ttl: 60, swr: 300 },
433
+ ctx: env.ctx,
434
+ }),
435
+ }),
436
+ })
437
+ .use(createDocumentCacheMiddleware())
438
+ .routes(urlpatterns);
439
+ ```
440
+
441
+ Available cache stores:
442
+
443
+ - `CFCacheStore` — Cloudflare edge cache (production)
444
+ - `MemorySegmentCacheStore` — In-memory cache (development/testing)
445
+
446
+ ## Pre-rendering
447
+
448
+ Pre-rendering generates route segments at build time. The worker handles all requests — there are no static files served from assets.
449
+
450
+ ### Static Segments
451
+
452
+ Use `Static()` for segments rendered once at build time (no params). Works on `path()`, `layout()`, and `parallel()`:
453
+
454
+ ```tsx
455
+ import { Static } from "@rangojs/router";
456
+
457
+ export const AboutPage = Static(async () => {
458
+ return <article>...</article>;
459
+ });
460
+
461
+ export const DocsNav = Static(async () => {
462
+ const items = await readDocsNavItems();
463
+ return (
464
+ <nav>
465
+ {items.map((i) => (
466
+ <a key={i.slug} href={i.slug}>
467
+ {i.title}
468
+ </a>
469
+ ))}
470
+ </nav>
471
+ );
472
+ });
473
+ ```
474
+
475
+ ### Dynamic Routes with Prerender
476
+
477
+ Use `Prerender()` for route-scoped pre-rendering. With params, provide `getParams` first, handler second:
478
+
479
+ ```tsx
480
+ import { Prerender } from "@rangojs/router";
481
+
482
+ export const BlogPost = Prerender(
483
+ async () => {
484
+ const slugs = await getAllBlogSlugs();
485
+ return slugs.map((slug) => ({ slug }));
486
+ },
487
+ async (ctx) => {
488
+ const post = await getPost(ctx.params.slug);
489
+ return <article>{post.content}</article>;
490
+ },
491
+ );
492
+ ```
493
+
494
+ ### Passthrough for Unknown Params
495
+
496
+ ```tsx
497
+ import { Prerender } from "@rangojs/router";
498
+
499
+ export const ProductPage = Prerender(
500
+ async () => {
501
+ const featured = await db.getFeaturedProducts();
502
+ return featured.map((p) => ({ id: p.id }));
503
+ },
504
+ async (ctx) => {
505
+ const product = await db.getProduct(ctx.params.id);
506
+ return <Product data={product} />;
507
+ },
508
+ { passthrough: true },
509
+ );
510
+ ```
511
+
512
+ With `passthrough: true`, known params are served from the build-time cache and unknown params fall through to live rendering.
513
+
514
+ ## Theme
515
+
516
+ ### Router Configuration
517
+
518
+ ```tsx
519
+ export const router = createRouter({
520
+ document: Document,
521
+ theme: {
522
+ defaultTheme: "light",
523
+ themes: ["light", "dark", "system"],
524
+ attribute: "class",
525
+ enableSystem: true,
526
+ },
527
+ }).routes(urlpatterns);
528
+ ```
529
+
530
+ ### Theme Toggle
531
+
532
+ ```tsx
533
+ "use client";
534
+ import { useTheme } from "@rangojs/router/theme";
535
+
536
+ function ThemeToggle() {
537
+ const { theme, setTheme, themes } = useTheme();
538
+ return (
539
+ <select value={theme} onChange={(e) => setTheme(e.target.value)}>
540
+ {themes.map((t) => (
541
+ <option key={t}>{t}</option>
542
+ ))}
543
+ </select>
544
+ );
545
+ }
546
+ ```
547
+
548
+ ## Host Routing
549
+
550
+ Route requests to different apps based on domain/subdomain patterns using `@rangojs/router/host`:
551
+
552
+ ```tsx
553
+ // worker.rsc.tsx
554
+ import { createHostRouter } from "@rangojs/router/host";
555
+
556
+ const hostRouter = createHostRouter();
557
+
558
+ hostRouter.host(["*.localhost"]).map(() => import("./apps/admin/handler.js"));
559
+ hostRouter.host(["localhost"]).map(() => import("./apps/site/handler.js"));
560
+ hostRouter.fallback().map(() => import("./apps/site/handler.js"));
561
+
562
+ export default {
563
+ async fetch(request, env, ctx) {
564
+ return hostRouter.match(request, { env, ctx });
565
+ },
566
+ };
567
+ ```
568
+
569
+ Each sub-app has its own `createRouter()` and `urls()`. The host router lazily imports the matched app's handler. Patterns are matched in registration order — register more specific patterns (subdomains) before catch-alls.
570
+
571
+ ## Meta Tags
572
+
573
+ Accumulate meta tags across route segments using the built-in `Meta` handle:
574
+
575
+ ```tsx
576
+ import { Meta } from "@rangojs/router";
577
+ import type { HandlerContext } from "@rangojs/router";
578
+
579
+ export function BlogPostPage(ctx: HandlerContext) {
580
+ const meta = ctx.use(Meta);
581
+ meta({ title: "My Blog Post" });
582
+ meta({ name: "description", content: "A great blog post" });
583
+ meta({ property: "og:title", content: "My Blog Post" });
584
+
585
+ return <article>...</article>;
586
+ }
587
+ ```
588
+
589
+ Render collected tags in the document with `<MetaTags />` from `@rangojs/router/client`.
590
+
591
+ ## CLI: `rango generate`
592
+
593
+ Route types are generated automatically by the Vite plugin. The CLI is a manual fallback for generating types outside the dev server (e.g. in CI or for IDE support before first `pnpm dev`):
594
+
595
+ ```bash
596
+ npx rango generate src/router.tsx
597
+ npx rango generate src/ # recursive scan
598
+ npx rango generate src/urls.tsx src/api/ # mix files and directories
599
+ ```
600
+
601
+ Auto-detects file type:
602
+
603
+ - Files with `createRouter` → `*.named-routes.gen.ts` with global route map
604
+ - Files with `urls()` → `*.gen.ts` with per-module route names, params, and search types
605
+
606
+ ## Type Safety
607
+
608
+ The Vite plugin automatically generates a `router.named-routes.gen.ts` file that globally registers all route names, patterns, and search schemas. Type-safe `reverse()`, `Handler<"name">`, `href()`, and `RouteParams<"name">` work out of the box — no manual type registration needed. The gen file is updated on dev server startup, HMR, and production builds.
609
+
610
+ ## Subpath Exports
611
+
612
+ | Export | Description |
613
+ | ------------------------ | --------------------------------------------------------------------------------- |
614
+ | `@rangojs/router` | Core: `createRouter`, `urls`, `createLoader`, `Handler`, `Prerender`, `Meta` |
615
+ | `@rangojs/router/client` | Client: `Link`, `Outlet`, `href`, `useNavigation`, `useLoader`, `MetaTags` |
616
+ | `@rangojs/router/cache` | Cache: `CFCacheStore`, `MemorySegmentCacheStore`, `createDocumentCacheMiddleware` |
617
+ | `@rangojs/router/theme` | Theme: `useTheme`, `ThemeProvider`, `ThemeScript` |
618
+ | `@rangojs/router/host` | Host routing: `createHostRouter`, `defineHosts` |
619
+ | `@rangojs/router/vite` | Vite plugin: `rango()` |
620
+ | `@rangojs/router/server` | Server utilities |
621
+ | `@rangojs/router/build` | Build utilities |
622
+
623
+ ## Examples
624
+
625
+ See the `examples/` directory for full working applications:
14
626
 
15
- This package is in early experimental stages. It is not recommended for production use.
627
+ - [`cloudflare-basic`](../../examples/cloudflare-basic) Cloudflare Workers with caching, loaders, theme, and pre-rendering
628
+ - [`cloudflare-multi-router`](../../examples/cloudflare-multi-router) — Multi-app host routing
16
629
 
17
630
  ## License
18
631