@rangojs/router 0.0.0-experimental.c73f3e16 → 0.0.0-experimental.c7e2ee4c

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 (918) hide show
  1. package/README.md +112 -17
  2. package/dist/__internal.d.ts +83 -0
  3. package/dist/__internal.d.ts.map +1 -0
  4. package/dist/__internal.js +19 -0
  5. package/dist/__internal.js.map +1 -0
  6. package/dist/__mocks__/version.d.ts +7 -0
  7. package/dist/__mocks__/version.d.ts.map +1 -0
  8. package/dist/__mocks__/version.js +7 -0
  9. package/dist/__mocks__/version.js.map +1 -0
  10. package/dist/__tests__/client-href.test.d.ts +2 -0
  11. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  12. package/dist/__tests__/client-href.test.js +74 -0
  13. package/dist/__tests__/client-href.test.js.map +1 -0
  14. package/dist/__tests__/component-utils.test.d.ts +2 -0
  15. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  16. package/dist/__tests__/component-utils.test.js +51 -0
  17. package/dist/__tests__/component-utils.test.js.map +1 -0
  18. package/dist/__tests__/event-controller.test.d.ts +2 -0
  19. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  20. package/dist/__tests__/event-controller.test.js +538 -0
  21. package/dist/__tests__/event-controller.test.js.map +1 -0
  22. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  24. package/dist/__tests__/helpers/route-tree.js +374 -0
  25. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  26. package/dist/__tests__/match-result.test.d.ts +2 -0
  27. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  28. package/dist/__tests__/match-result.test.js +154 -0
  29. package/dist/__tests__/match-result.test.js.map +1 -0
  30. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  31. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  32. package/dist/__tests__/navigation-store.test.js +440 -0
  33. package/dist/__tests__/navigation-store.test.js.map +1 -0
  34. package/dist/__tests__/partial-update.test.d.ts +2 -0
  35. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  36. package/dist/__tests__/partial-update.test.js +1009 -0
  37. package/dist/__tests__/partial-update.test.js.map +1 -0
  38. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  39. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  40. package/dist/__tests__/reverse-types.test.js +656 -0
  41. package/dist/__tests__/reverse-types.test.js.map +1 -0
  42. package/dist/__tests__/route-definition.test.d.ts +2 -0
  43. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  44. package/dist/__tests__/route-definition.test.js +55 -0
  45. package/dist/__tests__/route-definition.test.js.map +1 -0
  46. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  47. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  48. package/dist/__tests__/router-helpers.test.js +377 -0
  49. package/dist/__tests__/router-helpers.test.js.map +1 -0
  50. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  52. package/dist/__tests__/router-integration-2.test.js +426 -0
  53. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  54. package/dist/__tests__/router-integration.test.d.ts +2 -0
  55. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  56. package/dist/__tests__/router-integration.test.js +1051 -0
  57. package/dist/__tests__/router-integration.test.js.map +1 -0
  58. package/dist/__tests__/search-params.test.d.ts +5 -0
  59. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  60. package/dist/__tests__/search-params.test.js +306 -0
  61. package/dist/__tests__/search-params.test.js.map +1 -0
  62. package/dist/__tests__/segment-system.test.d.ts +2 -0
  63. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  64. package/dist/__tests__/segment-system.test.js +627 -0
  65. package/dist/__tests__/segment-system.test.js.map +1 -0
  66. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  68. package/dist/__tests__/static-handler-types.test.js +63 -0
  69. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  70. package/dist/__tests__/urls.test.d.ts +2 -0
  71. package/dist/__tests__/urls.test.d.ts.map +1 -0
  72. package/dist/__tests__/urls.test.js +421 -0
  73. package/dist/__tests__/urls.test.js.map +1 -0
  74. package/dist/__tests__/use-mount.test.d.ts +2 -0
  75. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  76. package/dist/__tests__/use-mount.test.js +35 -0
  77. package/dist/__tests__/use-mount.test.js.map +1 -0
  78. package/dist/bin/rango.d.ts +2 -0
  79. package/dist/bin/rango.d.ts.map +1 -0
  80. package/dist/bin/rango.js.map +1 -0
  81. package/dist/browser/event-controller.d.ts +191 -0
  82. package/dist/browser/event-controller.d.ts.map +1 -0
  83. package/dist/browser/event-controller.js +559 -0
  84. package/dist/browser/event-controller.js.map +1 -0
  85. package/dist/browser/index.d.ts +2 -0
  86. package/dist/browser/index.d.ts.map +1 -0
  87. package/dist/browser/index.js +14 -0
  88. package/dist/browser/index.js.map +1 -0
  89. package/dist/browser/link-interceptor.d.ts +38 -0
  90. package/dist/browser/link-interceptor.d.ts.map +1 -0
  91. package/dist/browser/link-interceptor.js +99 -0
  92. package/dist/browser/link-interceptor.js.map +1 -0
  93. package/dist/browser/logging.d.ts +10 -0
  94. package/dist/browser/logging.d.ts.map +1 -0
  95. package/dist/browser/logging.js +29 -0
  96. package/dist/browser/logging.js.map +1 -0
  97. package/dist/browser/lru-cache.d.ts +17 -0
  98. package/dist/browser/lru-cache.d.ts.map +1 -0
  99. package/dist/browser/lru-cache.js +50 -0
  100. package/dist/browser/lru-cache.js.map +1 -0
  101. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  102. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  103. package/dist/browser/merge-segment-loaders.js +102 -0
  104. package/dist/browser/merge-segment-loaders.js.map +1 -0
  105. package/dist/browser/navigation-bridge.d.ts +102 -0
  106. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  107. package/dist/browser/navigation-bridge.js +708 -0
  108. package/dist/browser/navigation-bridge.js.map +1 -0
  109. package/dist/browser/navigation-client.d.ts +25 -0
  110. package/dist/browser/navigation-client.d.ts.map +1 -0
  111. package/dist/browser/navigation-client.js +157 -0
  112. package/dist/browser/navigation-client.js.map +1 -0
  113. package/dist/browser/navigation-store.d.ts +101 -0
  114. package/dist/browser/navigation-store.d.ts.map +1 -0
  115. package/dist/browser/navigation-store.js +625 -0
  116. package/dist/browser/navigation-store.js.map +1 -0
  117. package/dist/browser/partial-update.d.ts +75 -0
  118. package/dist/browser/partial-update.d.ts.map +1 -0
  119. package/dist/browser/partial-update.js +426 -0
  120. package/dist/browser/partial-update.js.map +1 -0
  121. package/dist/browser/react/Link.d.ts +86 -0
  122. package/dist/browser/react/Link.d.ts.map +1 -0
  123. package/dist/browser/react/Link.js +128 -0
  124. package/dist/browser/react/Link.js.map +1 -0
  125. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  126. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  127. package/dist/browser/react/NavigationProvider.js +216 -0
  128. package/dist/browser/react/NavigationProvider.js.map +1 -0
  129. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.js +57 -0
  132. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  133. package/dist/browser/react/context.d.ts +46 -0
  134. package/dist/browser/react/context.d.ts.map +1 -0
  135. package/dist/browser/react/context.js +10 -0
  136. package/dist/browser/react/context.js.map +1 -0
  137. package/dist/browser/react/index.d.ts +11 -0
  138. package/dist/browser/react/index.d.ts.map +1 -0
  139. package/dist/browser/react/index.js +22 -0
  140. package/dist/browser/react/index.js.map +1 -0
  141. package/dist/browser/react/location-state-shared.d.ts +63 -0
  142. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  143. package/dist/browser/react/location-state-shared.js +81 -0
  144. package/dist/browser/react/location-state-shared.js.map +1 -0
  145. package/dist/browser/react/location-state.d.ts +23 -0
  146. package/dist/browser/react/location-state.d.ts.map +1 -0
  147. package/dist/browser/react/location-state.js +29 -0
  148. package/dist/browser/react/location-state.js.map +1 -0
  149. package/dist/browser/react/mount-context.d.ts +24 -0
  150. package/dist/browser/react/mount-context.d.ts.map +1 -0
  151. package/dist/browser/react/mount-context.js +24 -0
  152. package/dist/browser/react/mount-context.js.map +1 -0
  153. package/dist/browser/react/use-action.d.ts +64 -0
  154. package/dist/browser/react/use-action.d.ts.map +1 -0
  155. package/dist/browser/react/use-action.js +134 -0
  156. package/dist/browser/react/use-action.js.map +1 -0
  157. package/dist/browser/react/use-client-cache.d.ts +41 -0
  158. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  159. package/dist/browser/react/use-client-cache.js +39 -0
  160. package/dist/browser/react/use-client-cache.js.map +1 -0
  161. package/dist/browser/react/use-handle.d.ts +31 -0
  162. package/dist/browser/react/use-handle.d.ts.map +1 -0
  163. package/dist/browser/react/use-handle.js +144 -0
  164. package/dist/browser/react/use-handle.js.map +1 -0
  165. package/dist/browser/react/use-href.d.ts +33 -0
  166. package/dist/browser/react/use-href.d.ts.map +1 -0
  167. package/dist/browser/react/use-href.js +39 -0
  168. package/dist/browser/react/use-href.js.map +1 -0
  169. package/dist/browser/react/use-link-status.d.ts +37 -0
  170. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  171. package/dist/browser/react/use-link-status.js +99 -0
  172. package/dist/browser/react/use-link-status.js.map +1 -0
  173. package/dist/browser/react/use-mount.d.ts +25 -0
  174. package/dist/browser/react/use-mount.d.ts.map +1 -0
  175. package/dist/browser/react/use-mount.js +30 -0
  176. package/dist/browser/react/use-mount.js.map +1 -0
  177. package/dist/browser/react/use-navigation.d.ts +27 -0
  178. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  179. package/dist/browser/react/use-navigation.js +87 -0
  180. package/dist/browser/react/use-navigation.js.map +1 -0
  181. package/dist/browser/react/use-segments.d.ts +38 -0
  182. package/dist/browser/react/use-segments.d.ts.map +1 -0
  183. package/dist/browser/react/use-segments.js +130 -0
  184. package/dist/browser/react/use-segments.js.map +1 -0
  185. package/dist/browser/request-controller.d.ts +26 -0
  186. package/dist/browser/request-controller.d.ts.map +1 -0
  187. package/dist/browser/request-controller.js +147 -0
  188. package/dist/browser/request-controller.js.map +1 -0
  189. package/dist/browser/rsc-router.d.ts +129 -0
  190. package/dist/browser/rsc-router.d.ts.map +1 -0
  191. package/dist/browser/rsc-router.js +195 -0
  192. package/dist/browser/rsc-router.js.map +1 -0
  193. package/dist/browser/scroll-restoration.d.ts +93 -0
  194. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  195. package/dist/browser/scroll-restoration.js +321 -0
  196. package/dist/browser/scroll-restoration.js.map +1 -0
  197. package/dist/browser/segment-structure-assert.d.ts +17 -0
  198. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  199. package/dist/browser/segment-structure-assert.js +59 -0
  200. package/dist/browser/segment-structure-assert.js.map +1 -0
  201. package/dist/browser/server-action-bridge.d.ts +26 -0
  202. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  203. package/dist/browser/server-action-bridge.js +668 -0
  204. package/dist/browser/server-action-bridge.js.map +1 -0
  205. package/dist/browser/shallow.d.ts +12 -0
  206. package/dist/browser/shallow.d.ts.map +1 -0
  207. package/dist/browser/shallow.js +34 -0
  208. package/dist/browser/shallow.js.map +1 -0
  209. package/dist/browser/types.d.ts +369 -0
  210. package/dist/browser/types.d.ts.map +1 -0
  211. package/dist/browser/types.js +2 -0
  212. package/dist/browser/types.js.map +1 -0
  213. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.js +237 -0
  216. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  217. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  220. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  221. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  224. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  225. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  229. package/dist/build/generate-manifest.d.ts +81 -0
  230. package/dist/build/generate-manifest.d.ts.map +1 -0
  231. package/dist/build/generate-manifest.js +276 -0
  232. package/dist/build/generate-manifest.js.map +1 -0
  233. package/dist/build/generate-route-types.d.ts +115 -0
  234. package/dist/build/generate-route-types.d.ts.map +1 -0
  235. package/dist/build/generate-route-types.js +740 -0
  236. package/dist/build/generate-route-types.js.map +1 -0
  237. package/dist/build/index.d.ts +21 -0
  238. package/dist/build/index.d.ts.map +1 -0
  239. package/dist/build/index.js +21 -0
  240. package/dist/build/index.js.map +1 -0
  241. package/dist/build/route-trie.d.ts +71 -0
  242. package/dist/build/route-trie.d.ts.map +1 -0
  243. package/dist/build/route-trie.js +175 -0
  244. package/dist/build/route-trie.js.map +1 -0
  245. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  248. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  249. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.js +345 -0
  252. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  253. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  257. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.js +367 -0
  260. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  261. package/dist/cache/cache-scope.d.ts +102 -0
  262. package/dist/cache/cache-scope.d.ts.map +1 -0
  263. package/dist/cache/cache-scope.js +440 -0
  264. package/dist/cache/cache-scope.js.map +1 -0
  265. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  269. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.js +242 -0
  272. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  273. package/dist/cache/cf/index.d.ts +14 -0
  274. package/dist/cache/cf/index.d.ts.map +1 -0
  275. package/dist/cache/cf/index.js +17 -0
  276. package/dist/cache/cf/index.js.map +1 -0
  277. package/dist/cache/document-cache.d.ts +64 -0
  278. package/dist/cache/document-cache.d.ts.map +1 -0
  279. package/dist/cache/document-cache.js +228 -0
  280. package/dist/cache/document-cache.js.map +1 -0
  281. package/dist/cache/index.d.ts +19 -0
  282. package/dist/cache/index.d.ts.map +1 -0
  283. package/dist/cache/index.js +21 -0
  284. package/dist/cache/index.js.map +1 -0
  285. package/dist/cache/memory-segment-store.d.ts +110 -0
  286. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  287. package/dist/cache/memory-segment-store.js +117 -0
  288. package/dist/cache/memory-segment-store.js.map +1 -0
  289. package/dist/cache/memory-store.d.ts +41 -0
  290. package/dist/cache/memory-store.d.ts.map +1 -0
  291. package/dist/cache/memory-store.js +191 -0
  292. package/dist/cache/memory-store.js.map +1 -0
  293. package/dist/cache/types.d.ts +317 -0
  294. package/dist/cache/types.d.ts.map +1 -0
  295. package/dist/cache/types.js +12 -0
  296. package/dist/cache/types.js.map +1 -0
  297. package/dist/client.d.ts +248 -0
  298. package/dist/client.d.ts.map +1 -0
  299. package/dist/client.js +367 -0
  300. package/dist/client.js.map +1 -0
  301. package/dist/client.rsc.d.ts +26 -0
  302. package/dist/client.rsc.d.ts.map +1 -0
  303. package/dist/client.rsc.js +46 -0
  304. package/dist/client.rsc.js.map +1 -0
  305. package/dist/component-utils.d.ts +36 -0
  306. package/dist/component-utils.d.ts.map +1 -0
  307. package/dist/component-utils.js +61 -0
  308. package/dist/component-utils.js.map +1 -0
  309. package/dist/components/DefaultDocument.d.ts +13 -0
  310. package/dist/components/DefaultDocument.d.ts.map +1 -0
  311. package/dist/components/DefaultDocument.js +15 -0
  312. package/dist/components/DefaultDocument.js.map +1 -0
  313. package/dist/debug.d.ts +58 -0
  314. package/dist/debug.d.ts.map +1 -0
  315. package/dist/debug.js +157 -0
  316. package/dist/debug.js.map +1 -0
  317. package/dist/default-error-boundary.d.ts +11 -0
  318. package/dist/default-error-boundary.d.ts.map +1 -0
  319. package/dist/default-error-boundary.js +45 -0
  320. package/dist/default-error-boundary.js.map +1 -0
  321. package/dist/deps/browser.d.ts +2 -0
  322. package/dist/deps/browser.d.ts.map +1 -0
  323. package/dist/deps/browser.js +3 -0
  324. package/dist/deps/browser.js.map +1 -0
  325. package/dist/deps/html-stream-client.d.ts +2 -0
  326. package/dist/deps/html-stream-client.d.ts.map +1 -0
  327. package/dist/deps/html-stream-client.js +3 -0
  328. package/dist/deps/html-stream-client.js.map +1 -0
  329. package/dist/deps/html-stream-server.d.ts +2 -0
  330. package/dist/deps/html-stream-server.d.ts.map +1 -0
  331. package/dist/deps/html-stream-server.js +3 -0
  332. package/dist/deps/html-stream-server.js.map +1 -0
  333. package/dist/deps/rsc.d.ts +2 -0
  334. package/dist/deps/rsc.d.ts.map +1 -0
  335. package/dist/deps/rsc.js +4 -0
  336. package/dist/deps/rsc.js.map +1 -0
  337. package/dist/deps/ssr.d.ts +2 -0
  338. package/dist/deps/ssr.d.ts.map +1 -0
  339. package/dist/deps/ssr.js +3 -0
  340. package/dist/deps/ssr.js.map +1 -0
  341. package/dist/errors.d.ts +174 -0
  342. package/dist/errors.d.ts.map +1 -0
  343. package/dist/errors.js +241 -0
  344. package/dist/errors.js.map +1 -0
  345. package/dist/handle.d.ts +78 -0
  346. package/dist/handle.d.ts.map +1 -0
  347. package/dist/handle.js +82 -0
  348. package/dist/handle.js.map +1 -0
  349. package/dist/handles/MetaTags.d.ts +14 -0
  350. package/dist/handles/MetaTags.d.ts.map +1 -0
  351. package/dist/handles/MetaTags.js +136 -0
  352. package/dist/handles/MetaTags.js.map +1 -0
  353. package/dist/handles/index.d.ts +6 -0
  354. package/dist/handles/index.d.ts.map +1 -0
  355. package/dist/handles/index.js +6 -0
  356. package/dist/handles/index.js.map +1 -0
  357. package/dist/handles/meta.d.ts +39 -0
  358. package/dist/handles/meta.d.ts.map +1 -0
  359. package/dist/handles/meta.js +202 -0
  360. package/dist/handles/meta.js.map +1 -0
  361. package/dist/host/__tests__/errors.test.d.ts +2 -0
  362. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  363. package/dist/host/__tests__/errors.test.js +76 -0
  364. package/dist/host/__tests__/errors.test.js.map +1 -0
  365. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  369. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  373. package/dist/host/__tests__/router.test.d.ts +2 -0
  374. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  375. package/dist/host/__tests__/router.test.js +241 -0
  376. package/dist/host/__tests__/router.test.js.map +1 -0
  377. package/dist/host/__tests__/testing.test.d.ts +2 -0
  378. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  379. package/dist/host/__tests__/testing.test.js +64 -0
  380. package/dist/host/__tests__/testing.test.js.map +1 -0
  381. package/dist/host/__tests__/utils.test.d.ts +2 -0
  382. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  383. package/dist/host/__tests__/utils.test.js +29 -0
  384. package/dist/host/__tests__/utils.test.js.map +1 -0
  385. package/dist/host/cookie-handler.d.ts +34 -0
  386. package/dist/host/cookie-handler.d.ts.map +1 -0
  387. package/dist/host/cookie-handler.js +124 -0
  388. package/dist/host/cookie-handler.js.map +1 -0
  389. package/dist/host/errors.d.ts +56 -0
  390. package/dist/host/errors.d.ts.map +1 -0
  391. package/dist/host/errors.js +79 -0
  392. package/dist/host/errors.js.map +1 -0
  393. package/dist/host/index.d.ts +29 -0
  394. package/dist/host/index.d.ts.map +1 -0
  395. package/dist/host/index.js +32 -0
  396. package/dist/host/index.js.map +1 -0
  397. package/dist/host/pattern-matcher.d.ts +36 -0
  398. package/dist/host/pattern-matcher.d.ts.map +1 -0
  399. package/dist/host/pattern-matcher.js +172 -0
  400. package/dist/host/pattern-matcher.js.map +1 -0
  401. package/dist/host/router.d.ts +26 -0
  402. package/dist/host/router.d.ts.map +1 -0
  403. package/dist/host/router.js +218 -0
  404. package/dist/host/router.js.map +1 -0
  405. package/dist/host/testing.d.ts +36 -0
  406. package/dist/host/testing.d.ts.map +1 -0
  407. package/dist/host/testing.js +55 -0
  408. package/dist/host/testing.js.map +1 -0
  409. package/dist/host/types.d.ts +115 -0
  410. package/dist/host/types.d.ts.map +1 -0
  411. package/dist/host/types.js +7 -0
  412. package/dist/host/types.js.map +1 -0
  413. package/dist/host/utils.d.ts +21 -0
  414. package/dist/host/utils.d.ts.map +1 -0
  415. package/dist/host/utils.js +23 -0
  416. package/dist/host/utils.js.map +1 -0
  417. package/dist/href-client.d.ts +131 -0
  418. package/dist/href-client.d.ts.map +1 -0
  419. package/dist/href-client.js +64 -0
  420. package/dist/href-client.js.map +1 -0
  421. package/dist/href-context.d.ts +29 -0
  422. package/dist/href-context.d.ts.map +1 -0
  423. package/dist/href-context.js +21 -0
  424. package/dist/href-context.js.map +1 -0
  425. package/dist/index.d.ts +73 -0
  426. package/dist/index.d.ts.map +1 -0
  427. package/dist/index.js +91 -0
  428. package/dist/index.js.map +1 -0
  429. package/dist/index.rsc.d.ts +32 -0
  430. package/dist/index.rsc.d.ts.map +1 -0
  431. package/dist/index.rsc.js +40 -0
  432. package/dist/index.rsc.js.map +1 -0
  433. package/dist/internal-debug.d.ts +2 -0
  434. package/dist/internal-debug.d.ts.map +1 -0
  435. package/dist/internal-debug.js +5 -0
  436. package/dist/internal-debug.js.map +1 -0
  437. package/dist/loader.d.ts +14 -0
  438. package/dist/loader.d.ts.map +1 -0
  439. package/dist/loader.js +20 -0
  440. package/dist/loader.js.map +1 -0
  441. package/dist/loader.rsc.d.ts +19 -0
  442. package/dist/loader.rsc.d.ts.map +1 -0
  443. package/dist/loader.rsc.js +99 -0
  444. package/dist/loader.rsc.js.map +1 -0
  445. package/dist/network-error-thrower.d.ts +17 -0
  446. package/dist/network-error-thrower.d.ts.map +1 -0
  447. package/dist/network-error-thrower.js +14 -0
  448. package/dist/network-error-thrower.js.map +1 -0
  449. package/dist/outlet-context.d.ts +13 -0
  450. package/dist/outlet-context.d.ts.map +1 -0
  451. package/dist/outlet-context.js +3 -0
  452. package/dist/outlet-context.js.map +1 -0
  453. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  456. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  457. package/dist/prerender/param-hash.d.ts +16 -0
  458. package/dist/prerender/param-hash.d.ts.map +1 -0
  459. package/dist/prerender/param-hash.js +36 -0
  460. package/dist/prerender/param-hash.js.map +1 -0
  461. package/dist/prerender/store.d.ts +38 -0
  462. package/dist/prerender/store.d.ts.map +1 -0
  463. package/dist/prerender/store.js +61 -0
  464. package/dist/prerender/store.js.map +1 -0
  465. package/dist/prerender.d.ts +66 -0
  466. package/dist/prerender.d.ts.map +1 -0
  467. package/dist/prerender.js +57 -0
  468. package/dist/prerender.js.map +1 -0
  469. package/dist/reverse.d.ts +196 -0
  470. package/dist/reverse.d.ts.map +1 -0
  471. package/dist/reverse.js +78 -0
  472. package/dist/reverse.js.map +1 -0
  473. package/dist/root-error-boundary.d.ts +33 -0
  474. package/dist/root-error-boundary.d.ts.map +1 -0
  475. package/dist/root-error-boundary.js +165 -0
  476. package/dist/root-error-boundary.js.map +1 -0
  477. package/dist/route-content-wrapper.d.ts +46 -0
  478. package/dist/route-content-wrapper.d.ts.map +1 -0
  479. package/dist/route-content-wrapper.js +77 -0
  480. package/dist/route-content-wrapper.js.map +1 -0
  481. package/dist/route-definition.d.ts +421 -0
  482. package/dist/route-definition.d.ts.map +1 -0
  483. package/dist/route-definition.js +868 -0
  484. package/dist/route-definition.js.map +1 -0
  485. package/dist/route-map-builder.d.ts +155 -0
  486. package/dist/route-map-builder.d.ts.map +1 -0
  487. package/dist/route-map-builder.js +237 -0
  488. package/dist/route-map-builder.js.map +1 -0
  489. package/dist/route-types.d.ts +165 -0
  490. package/dist/route-types.d.ts.map +1 -0
  491. package/dist/route-types.js +7 -0
  492. package/dist/route-types.js.map +1 -0
  493. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.js +65 -0
  496. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  497. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  501. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  502. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  503. package/dist/router/__tests__/match-context.test.js +92 -0
  504. package/dist/router/__tests__/match-context.test.js.map +1 -0
  505. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  508. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  509. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  510. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  511. package/dist/router/__tests__/match-result.test.js +457 -0
  512. package/dist/router/__tests__/match-result.test.js.map +1 -0
  513. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  514. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  515. package/dist/router/__tests__/on-error.test.js +678 -0
  516. package/dist/router/__tests__/on-error.test.js.map +1 -0
  517. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  520. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  521. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  525. package/dist/router/error-handling.d.ts +77 -0
  526. package/dist/router/error-handling.d.ts.map +1 -0
  527. package/dist/router/error-handling.js +202 -0
  528. package/dist/router/error-handling.js.map +1 -0
  529. package/dist/router/handler-context.d.ts +20 -0
  530. package/dist/router/handler-context.d.ts.map +1 -0
  531. package/dist/router/handler-context.js +198 -0
  532. package/dist/router/handler-context.js.map +1 -0
  533. package/dist/router/intercept-resolution.d.ts +66 -0
  534. package/dist/router/intercept-resolution.d.ts.map +1 -0
  535. package/dist/router/intercept-resolution.js +246 -0
  536. package/dist/router/intercept-resolution.js.map +1 -0
  537. package/dist/router/loader-resolution.d.ts +64 -0
  538. package/dist/router/loader-resolution.d.ts.map +1 -0
  539. package/dist/router/loader-resolution.js +284 -0
  540. package/dist/router/loader-resolution.js.map +1 -0
  541. package/dist/router/logging.d.ts +15 -0
  542. package/dist/router/logging.d.ts.map +1 -0
  543. package/dist/router/logging.js +99 -0
  544. package/dist/router/logging.js.map +1 -0
  545. package/dist/router/manifest.d.ts +22 -0
  546. package/dist/router/manifest.d.ts.map +1 -0
  547. package/dist/router/manifest.js +181 -0
  548. package/dist/router/manifest.js.map +1 -0
  549. package/dist/router/match-api.d.ts +35 -0
  550. package/dist/router/match-api.d.ts.map +1 -0
  551. package/dist/router/match-api.js +406 -0
  552. package/dist/router/match-api.js.map +1 -0
  553. package/dist/router/match-context.d.ts +206 -0
  554. package/dist/router/match-context.d.ts.map +1 -0
  555. package/dist/router/match-context.js +17 -0
  556. package/dist/router/match-context.js.map +1 -0
  557. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.js +75 -0
  560. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  561. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.js +257 -0
  564. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  565. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  566. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  567. package/dist/router/match-middleware/cache-store.js +108 -0
  568. package/dist/router/match-middleware/cache-store.js.map +1 -0
  569. package/dist/router/match-middleware/index.d.ts +81 -0
  570. package/dist/router/match-middleware/index.d.ts.map +1 -0
  571. package/dist/router/match-middleware/index.js +80 -0
  572. package/dist/router/match-middleware/index.js.map +1 -0
  573. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  576. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  577. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.js +53 -0
  580. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  581. package/dist/router/match-pipelines.d.ts +147 -0
  582. package/dist/router/match-pipelines.d.ts.map +1 -0
  583. package/dist/router/match-pipelines.js +82 -0
  584. package/dist/router/match-pipelines.js.map +1 -0
  585. package/dist/router/match-result.d.ts +126 -0
  586. package/dist/router/match-result.d.ts.map +1 -0
  587. package/dist/router/match-result.js +93 -0
  588. package/dist/router/match-result.js.map +1 -0
  589. package/dist/router/metrics.d.ts +20 -0
  590. package/dist/router/metrics.d.ts.map +1 -0
  591. package/dist/router/metrics.js +47 -0
  592. package/dist/router/metrics.js.map +1 -0
  593. package/dist/router/middleware.d.ts +249 -0
  594. package/dist/router/middleware.d.ts.map +1 -0
  595. package/dist/router/middleware.js +434 -0
  596. package/dist/router/middleware.js.map +1 -0
  597. package/dist/router/middleware.test.d.ts +2 -0
  598. package/dist/router/middleware.test.d.ts.map +1 -0
  599. package/dist/router/middleware.test.js +816 -0
  600. package/dist/router/middleware.test.js.map +1 -0
  601. package/dist/router/pattern-matching.d.ts +149 -0
  602. package/dist/router/pattern-matching.d.ts.map +1 -0
  603. package/dist/router/pattern-matching.js +349 -0
  604. package/dist/router/pattern-matching.js.map +1 -0
  605. package/dist/router/revalidation.d.ts +44 -0
  606. package/dist/router/revalidation.d.ts.map +1 -0
  607. package/dist/router/revalidation.js +147 -0
  608. package/dist/router/revalidation.js.map +1 -0
  609. package/dist/router/router-context.d.ts +135 -0
  610. package/dist/router/router-context.d.ts.map +1 -0
  611. package/dist/router/router-context.js +36 -0
  612. package/dist/router/router-context.js.map +1 -0
  613. package/dist/router/segment-resolution.d.ts +127 -0
  614. package/dist/router/segment-resolution.d.ts.map +1 -0
  615. package/dist/router/segment-resolution.js +919 -0
  616. package/dist/router/segment-resolution.js.map +1 -0
  617. package/dist/router/trie-matching.d.ts +40 -0
  618. package/dist/router/trie-matching.d.ts.map +1 -0
  619. package/dist/router/trie-matching.js +127 -0
  620. package/dist/router/trie-matching.js.map +1 -0
  621. package/dist/router/types.d.ts +136 -0
  622. package/dist/router/types.d.ts.map +1 -0
  623. package/dist/router/types.js +7 -0
  624. package/dist/router/types.js.map +1 -0
  625. package/dist/router.d.ts +753 -0
  626. package/dist/router.d.ts.map +1 -0
  627. package/dist/router.gen.d.ts +6 -0
  628. package/dist/router.gen.d.ts.map +1 -0
  629. package/dist/router.gen.js +6 -0
  630. package/dist/router.gen.js.map +1 -0
  631. package/dist/router.js +1304 -0
  632. package/dist/router.js.map +1 -0
  633. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.js +140 -0
  636. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  637. package/dist/rsc/handler.d.ts +45 -0
  638. package/dist/rsc/handler.d.ts.map +1 -0
  639. package/dist/rsc/handler.js +1172 -0
  640. package/dist/rsc/handler.js.map +1 -0
  641. package/dist/rsc/helpers.d.ts +16 -0
  642. package/dist/rsc/helpers.d.ts.map +1 -0
  643. package/dist/rsc/helpers.js +55 -0
  644. package/dist/rsc/helpers.js.map +1 -0
  645. package/dist/rsc/index.d.ts +22 -0
  646. package/dist/rsc/index.d.ts.map +1 -0
  647. package/dist/rsc/index.js +23 -0
  648. package/dist/rsc/index.js.map +1 -0
  649. package/dist/rsc/nonce.d.ts +9 -0
  650. package/dist/rsc/nonce.d.ts.map +1 -0
  651. package/dist/rsc/nonce.js +18 -0
  652. package/dist/rsc/nonce.js.map +1 -0
  653. package/dist/rsc/types.d.ts +206 -0
  654. package/dist/rsc/types.d.ts.map +1 -0
  655. package/dist/rsc/types.js +8 -0
  656. package/dist/rsc/types.js.map +1 -0
  657. package/dist/search-params.d.ts +103 -0
  658. package/dist/search-params.d.ts.map +1 -0
  659. package/dist/search-params.js +74 -0
  660. package/dist/search-params.js.map +1 -0
  661. package/dist/segment-system.d.ts +75 -0
  662. package/dist/segment-system.d.ts.map +1 -0
  663. package/dist/segment-system.js +336 -0
  664. package/dist/segment-system.js.map +1 -0
  665. package/dist/server/context.d.ts +245 -0
  666. package/dist/server/context.d.ts.map +1 -0
  667. package/dist/server/context.js +197 -0
  668. package/dist/server/context.js.map +1 -0
  669. package/dist/server/fetchable-loader-store.d.ts +18 -0
  670. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  671. package/dist/server/fetchable-loader-store.js +18 -0
  672. package/dist/server/fetchable-loader-store.js.map +1 -0
  673. package/dist/server/handle-store.d.ts +85 -0
  674. package/dist/server/handle-store.d.ts.map +1 -0
  675. package/dist/server/handle-store.js +142 -0
  676. package/dist/server/handle-store.js.map +1 -0
  677. package/dist/server/loader-registry.d.ts +55 -0
  678. package/dist/server/loader-registry.d.ts.map +1 -0
  679. package/dist/server/loader-registry.js +132 -0
  680. package/dist/server/loader-registry.js.map +1 -0
  681. package/dist/server/request-context.d.ts +226 -0
  682. package/dist/server/request-context.d.ts.map +1 -0
  683. package/dist/server/request-context.js +290 -0
  684. package/dist/server/request-context.js.map +1 -0
  685. package/dist/server/root-layout.d.ts +4 -0
  686. package/dist/server/root-layout.d.ts.map +1 -0
  687. package/dist/server/root-layout.js +5 -0
  688. package/dist/server/root-layout.js.map +1 -0
  689. package/dist/server.d.ts +15 -0
  690. package/dist/server.d.ts.map +1 -0
  691. package/dist/server.js +20 -0
  692. package/dist/server.js.map +1 -0
  693. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  697. package/dist/ssr/index.d.ts +98 -0
  698. package/dist/ssr/index.d.ts.map +1 -0
  699. package/dist/ssr/index.js +158 -0
  700. package/dist/ssr/index.js.map +1 -0
  701. package/dist/static-handler.d.ts +50 -0
  702. package/dist/static-handler.d.ts.map +1 -0
  703. package/dist/static-handler.gen.d.ts +5 -0
  704. package/dist/static-handler.gen.d.ts.map +1 -0
  705. package/dist/static-handler.gen.js +5 -0
  706. package/dist/static-handler.gen.js.map +1 -0
  707. package/dist/static-handler.js +29 -0
  708. package/dist/static-handler.js.map +1 -0
  709. package/dist/theme/ThemeProvider.d.ts +20 -0
  710. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  711. package/dist/theme/ThemeProvider.js +240 -0
  712. package/dist/theme/ThemeProvider.js.map +1 -0
  713. package/dist/theme/ThemeScript.d.ts +48 -0
  714. package/dist/theme/ThemeScript.d.ts.map +1 -0
  715. package/dist/theme/ThemeScript.js +13 -0
  716. package/dist/theme/ThemeScript.js.map +1 -0
  717. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  718. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  719. package/dist/theme/__tests__/theme.test.js +103 -0
  720. package/dist/theme/__tests__/theme.test.js.map +1 -0
  721. package/dist/theme/constants.d.ts +29 -0
  722. package/dist/theme/constants.d.ts.map +1 -0
  723. package/dist/theme/constants.js +48 -0
  724. package/dist/theme/constants.js.map +1 -0
  725. package/dist/theme/index.d.ts +31 -0
  726. package/dist/theme/index.d.ts.map +1 -0
  727. package/dist/theme/index.js +36 -0
  728. package/dist/theme/index.js.map +1 -0
  729. package/dist/theme/theme-context.d.ts +40 -0
  730. package/dist/theme/theme-context.d.ts.map +1 -0
  731. package/dist/theme/theme-context.js +60 -0
  732. package/dist/theme/theme-context.js.map +1 -0
  733. package/dist/theme/theme-script.d.ts +27 -0
  734. package/dist/theme/theme-script.d.ts.map +1 -0
  735. package/dist/theme/theme-script.js +147 -0
  736. package/dist/theme/theme-script.js.map +1 -0
  737. package/dist/theme/types.d.ts +163 -0
  738. package/dist/theme/types.d.ts.map +1 -0
  739. package/dist/theme/types.js +11 -0
  740. package/dist/theme/types.js.map +1 -0
  741. package/dist/theme/use-theme.d.ts +12 -0
  742. package/dist/theme/use-theme.d.ts.map +1 -0
  743. package/dist/theme/use-theme.js +40 -0
  744. package/dist/theme/use-theme.js.map +1 -0
  745. package/dist/types.d.ts +1479 -0
  746. package/dist/types.d.ts.map +1 -0
  747. package/dist/types.js +10 -0
  748. package/dist/types.js.map +1 -0
  749. package/dist/urls.d.ts +441 -0
  750. package/dist/urls.d.ts.map +1 -0
  751. package/dist/urls.gen.d.ts +8 -0
  752. package/dist/urls.gen.d.ts.map +1 -0
  753. package/dist/urls.gen.js +8 -0
  754. package/dist/urls.gen.js.map +1 -0
  755. package/dist/urls.js +443 -0
  756. package/dist/urls.js.map +1 -0
  757. package/dist/use-loader.d.ts +127 -0
  758. package/dist/use-loader.d.ts.map +1 -0
  759. package/dist/use-loader.js +237 -0
  760. package/dist/use-loader.js.map +1 -0
  761. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  765. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  769. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  773. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  774. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  776. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  777. package/dist/vite/ast-handler-extract.d.ts +49 -0
  778. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  779. package/dist/vite/ast-handler-extract.js +249 -0
  780. package/dist/vite/ast-handler-extract.js.map +1 -0
  781. package/dist/vite/expose-action-id.d.ts +19 -0
  782. package/dist/vite/expose-action-id.d.ts.map +1 -0
  783. package/dist/vite/expose-action-id.js +250 -0
  784. package/dist/vite/expose-action-id.js.map +1 -0
  785. package/dist/vite/expose-id-utils.d.ts +69 -0
  786. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  787. package/dist/vite/expose-id-utils.js +289 -0
  788. package/dist/vite/expose-id-utils.js.map +1 -0
  789. package/dist/vite/expose-internal-ids.d.ts +22 -0
  790. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  791. package/dist/vite/expose-internal-ids.js +886 -0
  792. package/dist/vite/expose-internal-ids.js.map +1 -0
  793. package/dist/vite/index.d.ts +149 -0
  794. package/dist/vite/index.d.ts.map +1 -0
  795. package/dist/vite/index.js +1338 -462
  796. package/dist/vite/index.js.bak +5448 -0
  797. package/dist/vite/index.js.map +1 -0
  798. package/dist/vite/index.named-routes.gen.ts +103 -0
  799. package/dist/vite/package-resolution.d.ts +43 -0
  800. package/dist/vite/package-resolution.d.ts.map +1 -0
  801. package/dist/vite/package-resolution.js +112 -0
  802. package/dist/vite/package-resolution.js.map +1 -0
  803. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -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 +7 -5
  809. package/skills/breadcrumbs/SKILL.md +3 -1
  810. package/skills/handler-use/SKILL.md +362 -0
  811. package/skills/hooks/SKILL.md +33 -20
  812. package/skills/i18n/SKILL.md +276 -0
  813. package/skills/intercept/SKILL.md +20 -0
  814. package/skills/layout/SKILL.md +22 -0
  815. package/skills/links/SKILL.md +90 -16
  816. package/skills/loader/SKILL.md +70 -3
  817. package/skills/middleware/SKILL.md +34 -3
  818. package/skills/migrate-nextjs/SKILL.md +562 -0
  819. package/skills/migrate-react-router/SKILL.md +769 -0
  820. package/skills/parallel/SKILL.md +66 -0
  821. package/skills/rango/SKILL.md +26 -22
  822. package/skills/response-routes/SKILL.md +8 -0
  823. package/skills/route/SKILL.md +44 -0
  824. package/skills/server-actions/SKILL.md +739 -0
  825. package/skills/streams-and-websockets/SKILL.md +283 -0
  826. package/skills/typesafety/SKILL.md +9 -1
  827. package/src/browser/app-shell.ts +52 -0
  828. package/src/browser/event-controller.ts +44 -4
  829. package/src/browser/navigation-bridge.ts +80 -5
  830. package/src/browser/navigation-client.ts +64 -13
  831. package/src/browser/navigation-store.ts +25 -1
  832. package/src/browser/partial-update.ts +57 -9
  833. package/src/browser/prefetch/cache.ts +129 -21
  834. package/src/browser/prefetch/fetch.ts +148 -16
  835. package/src/browser/prefetch/queue.ts +36 -5
  836. package/src/browser/rango-state.ts +53 -13
  837. package/src/browser/react/Link.tsx +30 -2
  838. package/src/browser/react/NavigationProvider.tsx +70 -18
  839. package/src/browser/react/filter-segment-order.ts +51 -7
  840. package/src/browser/react/use-navigation.ts +22 -2
  841. package/src/browser/react/use-params.ts +17 -4
  842. package/src/browser/react/use-router.ts +8 -1
  843. package/src/browser/react/use-segments.ts +11 -8
  844. package/src/browser/rsc-router.tsx +34 -6
  845. package/src/browser/segment-reconciler.ts +36 -14
  846. package/src/browser/types.ts +19 -0
  847. package/src/build/route-trie.ts +52 -25
  848. package/src/cache/cf/cf-cache-store.ts +5 -7
  849. package/src/client.tsx +82 -174
  850. package/src/index.rsc.ts +3 -0
  851. package/src/index.ts +40 -9
  852. package/src/outlet-context.ts +1 -1
  853. package/src/response-utils.ts +28 -0
  854. package/src/reverse.ts +8 -3
  855. package/src/route-definition/dsl-helpers.ts +175 -23
  856. package/src/route-definition/helpers-types.ts +63 -14
  857. package/src/route-definition/resolve-handler-use.ts +6 -0
  858. package/src/route-types.ts +7 -0
  859. package/src/router/handler-context.ts +25 -4
  860. package/src/router/lazy-includes.ts +6 -6
  861. package/src/router/loader-resolution.ts +3 -0
  862. package/src/router/manifest.ts +22 -13
  863. package/src/router/match-api.ts +4 -3
  864. package/src/router/match-handlers.ts +1 -0
  865. package/src/router/match-middleware/cache-lookup.ts +2 -1
  866. package/src/router/match-result.ts +101 -4
  867. package/src/router/middleware-types.ts +14 -25
  868. package/src/router/middleware.ts +54 -7
  869. package/src/router/pattern-matching.ts +101 -17
  870. package/src/router/revalidation.ts +15 -1
  871. package/src/router/segment-resolution/fresh.ts +13 -0
  872. package/src/router/segment-resolution/revalidation.ts +134 -104
  873. package/src/router/trie-matching.ts +18 -13
  874. package/src/router/url-params.ts +49 -0
  875. package/src/router.ts +1 -2
  876. package/src/rsc/handler.ts +8 -4
  877. package/src/rsc/helpers.ts +69 -41
  878. package/src/rsc/progressive-enhancement.ts +4 -0
  879. package/src/rsc/response-route-handler.ts +14 -1
  880. package/src/rsc/rsc-rendering.ts +10 -0
  881. package/src/rsc/server-action.ts +4 -0
  882. package/src/rsc/types.ts +6 -0
  883. package/src/segment-content-promise.ts +67 -0
  884. package/src/segment-loader-promise.ts +122 -0
  885. package/src/segment-system.tsx +33 -69
  886. package/src/server/context.ts +26 -3
  887. package/src/server/request-context.ts +10 -42
  888. package/src/ssr/index.tsx +5 -1
  889. package/src/types/handler-context.ts +12 -39
  890. package/src/types/loader-types.ts +5 -6
  891. package/src/types/request-scope.ts +126 -0
  892. package/src/types/route-entry.ts +11 -0
  893. package/src/types/segments.ts +18 -1
  894. package/src/urls/include-helper.ts +24 -14
  895. package/src/urls/path-helper-types.ts +30 -4
  896. package/src/urls/response-types.ts +2 -10
  897. package/src/vite/debug.ts +184 -0
  898. package/src/vite/discovery/discover-routers.ts +31 -3
  899. package/src/vite/discovery/gate-state.ts +171 -0
  900. package/src/vite/discovery/prerender-collection.ts +48 -1
  901. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  902. package/src/vite/plugins/cjs-to-esm.ts +5 -0
  903. package/src/vite/plugins/client-ref-dedup.ts +16 -0
  904. package/src/vite/plugins/client-ref-hashing.ts +16 -4
  905. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  906. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  907. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  908. package/src/vite/plugins/expose-action-id.ts +52 -28
  909. package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
  910. package/src/vite/plugins/expose-internal-ids.ts +516 -486
  911. package/src/vite/plugins/performance-tracks.ts +17 -9
  912. package/src/vite/plugins/use-cache-transform.ts +56 -43
  913. package/src/vite/plugins/version-injector.ts +37 -11
  914. package/src/vite/rango.ts +49 -14
  915. package/src/vite/router-discovery.ts +558 -53
  916. package/src/vite/utils/banner.ts +1 -1
  917. package/src/vite/utils/package-resolution.ts +41 -1
  918. package/src/vite/utils/prerender-utils.ts +21 -6
@@ -0,0 +1,276 @@
1
+ ---
2
+ name: i18n
3
+ description: Locale-aware routing with `include("/:locale?", ...)`, locale resolution chains, and react-intl integration
4
+ argument-hint: "[topic]"
5
+ ---
6
+
7
+ # Internationalization (i18n) and Locale Routing
8
+
9
+ Rango doesn't ship an i18n module. The router gives you the URL primitives
10
+ (optional include prefixes, constraints, typed reverse) and you compose
11
+ them with whatever message library you use — `react-intl`, `lingui`,
12
+ `@formatjs/intl`, or hand-rolled.
13
+
14
+ This skill covers:
15
+
16
+ - Mounting routes under an optional locale prefix (`/`, `/en`, `/gb`)
17
+ - Constraining the prefix to a known locale set
18
+ - Resolving the active locale (URL → cookie → `Accept-Language` → default)
19
+ - Generating localized URLs via `reverse()` round-trip
20
+ - Wiring `react-intl` into an RSC route tree
21
+
22
+ ## URL Shape: Optional Locale Prefix
23
+
24
+ Mount your localized routes under an optional include prefix so the
25
+ default locale lives at the bare URL and other locales get a prefix:
26
+
27
+ ```typescript
28
+ // urls.tsx
29
+ import { urls } from "@rangojs/router";
30
+ import { menuRoutes } from "./menu";
31
+
32
+ export const urlpatterns = urls(({ include }) => [
33
+ include("/:locale?", menuRoutes, { name: "menu" }),
34
+ ]);
35
+ ```
36
+
37
+ URLs that match:
38
+
39
+ | URL | Matched route | `ctx.params.locale` |
40
+ | -------------- | --------------- | ------------------- |
41
+ | `/` | `menu.index` | `undefined` |
42
+ | `/en` | `menu.index` | `"en"` |
43
+ | `/c/breads` | `menu.category` | `undefined` |
44
+ | `/en/c/breads` | `menu.category` | `"en"` |
45
+
46
+ > **Constrain to known locales** when you want unknown locales to fall
47
+ > through to other routes (or 404) instead of being treated as a slug:
48
+ >
49
+ > ```typescript
50
+ > include("/:locale(en|gb|fr)?", menuRoutes, { name: "menu" });
51
+ > ```
52
+ >
53
+ > `/de` now 404s (constraint rejects `de`), and `/c/breads` continues to
54
+ > match `menu.category` with `locale: undefined`. Without the constraint,
55
+ > `/de` would match `menu.index` with `locale: "de"`.
56
+
57
+ ## Reading the Locale in Handlers
58
+
59
+ Absent optionals are `undefined` (not `""`), so `??` coalesces correctly:
60
+
61
+ ```typescript
62
+ import { Handler } from "@rangojs/router";
63
+
64
+ export const MenuIndex: Handler<"menu.index"> = (ctx) => {
65
+ // ctx.params.locale is `string | undefined`
66
+ const locale = resolveLocale(ctx);
67
+ return <Welcome locale={locale} />;
68
+ };
69
+ ```
70
+
71
+ The `resolveLocale` helper below implements a typical fallback chain.
72
+
73
+ ## Locale Resolution
74
+
75
+ URL is the strongest signal but you usually want a fallback chain:
76
+
77
+ 1. **URL prefix** — if the user navigates to `/gb/...`, honor it
78
+ 2. **Cookie** — sticky preference set by a previous language switcher
79
+ 3. **`Accept-Language`** — browser hint
80
+ 4. **Default** — your app default
81
+
82
+ Put it in a small helper that every locale-aware handler calls:
83
+
84
+ ```typescript
85
+ // lib/locale.ts
86
+ import { cookies, headers } from "@rangojs/router";
87
+
88
+ export const SUPPORTED_LOCALES = ["en", "gb", "fr"] as const;
89
+ export type Locale = (typeof SUPPORTED_LOCALES)[number];
90
+ const DEFAULT_LOCALE: Locale = "en";
91
+
92
+ const isSupported = (v: string): v is Locale =>
93
+ (SUPPORTED_LOCALES as readonly string[]).includes(v);
94
+
95
+ export function resolveLocale(ctx: {
96
+ params: Record<string, string | undefined>;
97
+ }): Locale {
98
+ const fromUrl = ctx.params.locale;
99
+ if (fromUrl && isSupported(fromUrl)) return fromUrl;
100
+
101
+ const fromCookie = cookies().get("locale")?.value;
102
+ if (fromCookie && isSupported(fromCookie)) return fromCookie;
103
+
104
+ const accept = headers().get("accept-language") ?? "";
105
+ for (const tag of accept.split(",")) {
106
+ const code = tag.split(";")[0].trim().split("-")[0];
107
+ if (isSupported(code)) return code as Locale;
108
+ }
109
+ return DEFAULT_LOCALE;
110
+ }
111
+ ```
112
+
113
+ If you want to redirect to the canonical URL when the resolved locale
114
+ doesn't match the URL (e.g., user has `gb` cookie but visits `/`), do
115
+ that in a global middleware so it covers actions too:
116
+
117
+ ```typescript
118
+ import { redirect } from "@rangojs/router";
119
+
120
+ router.use("/*", async (ctx, next) => {
121
+ const fromUrl = ctx.params.locale;
122
+ const resolved = resolveLocale(ctx);
123
+ if (resolved !== DEFAULT_LOCALE && !fromUrl) {
124
+ return redirect(`/${resolved}${ctx.url.pathname}`);
125
+ }
126
+ await next();
127
+ });
128
+ ```
129
+
130
+ ## Generating Localized URLs
131
+
132
+ `reverse()` treats `undefined` and `""` for an optional param as "absent"
133
+ and collapses the segment cleanly. The round-trip is symmetric with the
134
+ matcher:
135
+
136
+ ```typescript
137
+ ctx.reverse("menu.index", { locale: "" }); // → "/"
138
+ ctx.reverse("menu.index", { locale: undefined }); // → "/"
139
+ ctx.reverse("menu.index", { locale: "en" }); // → "/en"
140
+ ctx.reverse("menu.category", { locale: "en", slug: "breads" }); // → "/en/c/breads"
141
+ ctx.reverse("menu.category", { slug: "breads" }); // → "/c/breads"
142
+ ```
143
+
144
+ If the active locale is the app default and your URL strategy hides it
145
+ (`"en"` → `/`, others → `/<locale>`), normalize before calling reverse:
146
+
147
+ ```typescript
148
+ const normalized = locale === DEFAULT_LOCALE ? undefined : locale;
149
+ const href = ctx.reverse("menu.category", { locale: normalized, slug });
150
+ ```
151
+
152
+ ## react-intl Integration
153
+
154
+ `react-intl` needs a `<IntlProvider>` wrapping the tree, with `locale`
155
+ and `messages` props. The cleanest split: load messages on the server
156
+ (handler or layout), pass them through to a client provider component.
157
+
158
+ ### Messages loader
159
+
160
+ Load message bundles per locale. Keep them server-side so they stream
161
+ through the RSC payload and don't bloat the client bundle:
162
+
163
+ ```typescript
164
+ // lib/messages.ts
165
+ import type { Locale } from "./locale";
166
+
167
+ const loaders: Record<Locale, () => Promise<Record<string, string>>> = {
168
+ en: () => import("../messages/en.json").then((m) => m.default),
169
+ gb: () => import("../messages/gb.json").then((m) => m.default),
170
+ fr: () => import("../messages/fr.json").then((m) => m.default),
171
+ };
172
+
173
+ export async function loadMessages(locale: Locale) {
174
+ return loaders[locale]();
175
+ }
176
+ ```
177
+
178
+ ### Server layout: hand off to the client provider
179
+
180
+ ```tsx
181
+ // layouts/intl-layout.tsx (server component)
182
+ import type { ReactNode } from "react";
183
+ import { resolveLocale } from "../lib/locale";
184
+ import { loadMessages } from "../lib/messages";
185
+ import { IntlClientProvider } from "../components/intl-client-provider";
186
+
187
+ export async function IntlLayout({
188
+ ctx,
189
+ children,
190
+ }: {
191
+ ctx: any;
192
+ children: ReactNode;
193
+ }) {
194
+ const locale = resolveLocale(ctx);
195
+ const messages = await loadMessages(locale);
196
+ return (
197
+ <IntlClientProvider locale={locale} messages={messages}>
198
+ {children}
199
+ </IntlClientProvider>
200
+ );
201
+ }
202
+ ```
203
+
204
+ ### Client provider
205
+
206
+ ```tsx
207
+ // components/intl-client-provider.tsx
208
+ "use client";
209
+
210
+ import { IntlProvider } from "react-intl";
211
+ import type { ReactNode } from "react";
212
+
213
+ export function IntlClientProvider({
214
+ locale,
215
+ messages,
216
+ children,
217
+ }: {
218
+ locale: string;
219
+ messages: Record<string, string>;
220
+ children: ReactNode;
221
+ }) {
222
+ return (
223
+ <IntlProvider
224
+ locale={locale}
225
+ defaultLocale="en"
226
+ messages={messages}
227
+ onError={(err) => {
228
+ if (err.code === "MISSING_TRANSLATION") return; // common, log only
229
+ console.error(err);
230
+ }}
231
+ >
232
+ {children}
233
+ </IntlProvider>
234
+ );
235
+ }
236
+ ```
237
+
238
+ ### Mounting
239
+
240
+ Wrap your localized routes with the layout:
241
+
242
+ ```typescript
243
+ import { urls } from "@rangojs/router";
244
+ import { IntlLayout } from "./layouts/intl-layout";
245
+ import { menuRoutes } from "./menu";
246
+
247
+ export const urlpatterns = urls(({ layout, include }) => [
248
+ layout(IntlLayout, () => [
249
+ include("/:locale?", menuRoutes, { name: "menu" }),
250
+ ]),
251
+ ]);
252
+ ```
253
+
254
+ `<FormattedMessage>`, `useIntl()`, etc. work in any client component
255
+ under the layout. Server components can use `formatjs`'s `createIntl()`
256
+ directly with the same `messages` map for static text.
257
+
258
+ ## Common Pitfalls
259
+
260
+ | Pitfall | Fix |
261
+ | ------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
262
+ | `ctx.params.locale === ""` returns `false` | Absent optionals are `undefined`, not `""`. Use `=== undefined` or `??`. |
263
+ | `ctx.params.locale ?? "en"` returns `""` | Pre-fix behavior. After the include-prefix fix this works correctly. |
264
+ | Bare `/` 404s when mounted via `include("/:locale?", routes)` | Requires the all-optional pattern fix in `compilePattern` (shipped). |
265
+ | Unknown locale (e.g. `/de`) matches as `locale: "de"` | Add a constraint: `:locale(en\|gb\|fr)?`. Unknown values now 404. |
266
+ | Reverse produces `//c/breads` for absent locale | `reverse()` collapses `undefined`/`""` segments — should not happen. File a bug. |
267
+ | Locale switcher loses search params | Read `ctx.url.search` and pass to `reverse(..., undefined, parsedSearch)`. |
268
+ | Action middleware can't read `ctx.params.locale` | Route middleware doesn't wrap action execution. Use global `router.use()` for actions. |
269
+
270
+ ## Cross-references
271
+
272
+ - `/route` — optional URL param syntax and runtime contract
273
+ - `/typesafety` — `RouteParams<"name">` typing for optionals
274
+ - `/middleware` — global vs route middleware scope (matters for actions)
275
+ - `/server-actions` — actions and the global-vs-route middleware boundary
276
+ - `/links` — `ctx.reverse()` and locale-aware URL generation
@@ -311,3 +311,23 @@ export const shopPatterns = urls(({
311
311
  ]),
312
312
  ]);
313
313
  ```
314
+
315
+ ## Handler-attached `.use`
316
+
317
+ Intercept handlers can carry their own middleware, loaders, loading state, error/notFound boundaries, and even nested `layout`/`route`/`when` defaults via `.use` — useful for self-contained modal components that travel with their own data and chrome.
318
+
319
+ ```typescript
320
+ const QuickViewModal: Handler = async (ctx) => {
321
+ const product = await ctx.use(ProductLoader);
322
+ return <QuickView product={product} />;
323
+ };
324
+ QuickViewModal.use = () => [
325
+ loader(ProductLoader),
326
+ loading(<QuickViewSkeleton />),
327
+ layout(<ModalChrome />),
328
+ ];
329
+
330
+ intercept("@modal", "product", QuickViewModal);
331
+ ```
332
+
333
+ Explicit `use()` at the mount site merges with `handler.use` (handler defaults first, explicit second). See [skills/handler-use](../handler-use/SKILL.md) for merge order and the per-mount-site allowed-types table.
@@ -308,3 +308,25 @@ export const shopPatterns = urls(({ path, layout, parallel, loader, revalidate }
308
308
  ]),
309
309
  ]);
310
310
  ```
311
+
312
+ ## Handler-attached `.use`
313
+
314
+ Layout handlers can carry their own middleware, default parallels, and includes via `.use` so a layout becomes a self-contained unit reusable across mount sites.
315
+
316
+ ```typescript
317
+ const AdminLayout: Handler = (ctx) => {
318
+ const user = ctx.get(CurrentUser);
319
+ return <Admin user={user} />;
320
+ };
321
+ AdminLayout.use = () => [
322
+ middleware(requireAdmin),
323
+ parallel({ "@adminNotifs": AdminNotifsSlot }),
324
+ ];
325
+
326
+ // Mount site declares structure only; defaults travel with the layout.
327
+ layout(AdminLayout, () => [
328
+ path("/admin", AdminIndex, { name: "admin.index" }),
329
+ ]);
330
+ ```
331
+
332
+ Allowed item types in a layout's `.use` mirror the layout `use()` callback (the broadest set). Explicit `use()` at the mount site merges with `handler.use` (handler defaults first, explicit second). See [skills/handler-use](../handler-use/SKILL.md) for merge order and per-mount-site allowed types.
@@ -1,16 +1,20 @@
1
1
  ---
2
2
  name: links
3
- description: URL generation with ctx.reverse (server), href (client), useHref (mounted), useMount, and scopedReverse
4
- argument-hint: [href|useHref|useMount|scopedReverse]
3
+ description: URL generation with ctx.reverse (server default), href (client), useHref (mounted), useMount, and scopedReverse
4
+ argument-hint: [ctx.reverse|href|useHref|useMount|scopedReverse]
5
5
  ---
6
6
 
7
7
  # Links & URL Generation
8
8
 
9
9
  @rangojs/router provides different href APIs for server and client contexts.
10
10
 
11
+ **Default server API: `ctx.reverse()`.** Generate URLs from the handler context — it's typed, auto-fills mount params, and resolves local (`.name`) and absolute (`name.sub`) names.
12
+
13
+ **`reverse()` is server-only.** It depends on the route manifest and handler context, neither of which are available in the browser. Client components receive URLs as props, loader data, or server-action return values — they never call `reverse` directly.
14
+
11
15
  ## Server: ctx.reverse()
12
16
 
13
- Available in route handlers via HandlerContext. Resolves named routes using the full route map.
17
+ Available in route handlers via HandlerContext. Resolves named routes using the full route map. This is the default way to generate URLs on the server.
14
18
 
15
19
  ```typescript
16
20
  import { urls, scopedReverse } from "@rangojs/router";
@@ -103,7 +107,7 @@ path("/search", (ctx) => {
103
107
 
104
108
  ### scopedReverse() - type-safe ctx.reverse
105
109
 
106
- Wraps `ctx.reverse` with local route type information for autocomplete and validation:
110
+ Wraps `ctx.reverse` with local route type information for autocomplete and validation. Runtime behavior is identical to `ctx.reverse` — `scopedReverse` is a type-only cast. The same dot-prefix rule applies: local names use `.name`, global names use `name.sub`.
107
111
 
108
112
  ```typescript
109
113
  import { scopedReverse } from "@rangojs/router";
@@ -111,18 +115,85 @@ import { scopedReverse } from "@rangojs/router";
111
115
  path("/product/:slug", (ctx) => {
112
116
  const reverse = scopedReverse<typeof shopPatterns>(ctx.reverse);
113
117
 
114
- reverse("cart"); // Type-safe local name
115
- reverse("product", { slug: "widget" }); // Type-safe with params
116
- reverse("blog.post"); // Absolute names (dot notation) always allowed
117
- reverse("/about"); // Path-based always allowed
118
+ reverse(".cart"); // Local name (dot-prefixed) resolves in include scope
119
+ reverse(".product", { slug: "widget" }); // Local name with params
120
+ reverse("blog.post", { slug: "hi" }); // Global name (dotted) full route map
118
121
 
119
122
  return <ProductPage slug={ctx.params.slug} />;
120
123
  }, { name: "product" })
121
124
  ```
122
125
 
126
+ `reverse()` does not accept raw path strings (`"/about"`). For static paths in client components, use `href("/about")`; on the server, look up the route by name.
127
+
128
+ ## Client components: receive URLs as props
129
+
130
+ `reverse()` is not available inside `"use client"` modules — there is no handler context and no route manifest in the browser bundle. Generate the URL on the server and hand it to the client component.
131
+
132
+ Three patterns, in order of preference:
133
+
134
+ 1. Pass as a prop from a server component:
135
+
136
+ ```tsx
137
+ // server
138
+ function BlogPostPage(ctx: HandlerContext) {
139
+ return <ShareButton url={ctx.reverse(".post", { slug: ctx.params.slug })} />;
140
+ }
141
+ ```
142
+
143
+ ```tsx
144
+ "use client";
145
+
146
+ export function ShareButton({ url }: { url: string }) {
147
+ return (
148
+ <button onClick={() => navigator.clipboard.writeText(url)}>Share</button>
149
+ );
150
+ }
151
+ ```
152
+
153
+ 2. Return from a loader (attached to the route via the DSL):
154
+
155
+ ```tsx
156
+ // server — loaders/nav.ts
157
+ export const NavLoader = createLoader((ctx) => ({
158
+ home: ctx.reverse("home"),
159
+ blog: ctx.reverse("blog.index"),
160
+ }));
161
+
162
+ // server — urls.tsx: attach the loader so useLoader has data in context
163
+ const urlpatterns = urls(({ path, loader }) => [
164
+ path("/", HomePage, { name: "home" }, () => [loader(NavLoader)]),
165
+ ]);
166
+ ```
167
+
168
+ ```tsx
169
+ "use client";
170
+
171
+ function Nav() {
172
+ const { data } = useLoader(NavLoader);
173
+ return <Link to={data.home}>Home</Link>;
174
+ }
175
+ ```
176
+
177
+ `useLoader()` requires the loader to be attached to an active route. If you need on-demand fetching instead, use `useFetchLoader()`.
178
+
179
+ 3. Return from a server action:
180
+
181
+ ```tsx
182
+ "use server";
183
+
184
+ export async function getProductUrl(slug: string) {
185
+ const ctx = getRequestContext();
186
+ return ctx.reverse("product", { slug });
187
+ }
188
+ ```
189
+
190
+ See `/server-actions` for the full action surface (`getRequestContext()` is the same context middleware and handlers use).
191
+
192
+ For static path strings (not named routes), client components can use `href()` — see below.
193
+
123
194
  ## Client: href()
124
195
 
125
- Plain function for absolute path-based URLs. No hook needed - works anywhere.
196
+ Plain function for absolute path-based URLs. No hook needed - works anywhere in client components. `href()` validates paths at compile time, but does **not** resolve named routes — for named routes, use one of the patterns above.
126
197
 
127
198
  ```typescript
128
199
  "use client";
@@ -187,13 +258,16 @@ function MountInfo() {
187
258
 
188
259
  ## When to use what
189
260
 
190
- | Context | API | Resolves | Use for |
191
- | ---------------- | ------------------------------- | ------------------------------- | ----------------------------------- |
192
- | Server handler | `ctx.reverse("name")` | Named routes (local + absolute) | Server-side URL generation |
193
- | Server handler | `scopedReverse<T>(ctx.reverse)` | Same, with type safety | Type-safe server URLs |
194
- | Client component | `href("/path")` | Absolute paths | Global navigation |
195
- | Client component | `useHref()` | Mount-prefixed paths | Local navigation inside `include()` |
196
- | Client component | `useMount()` | Raw mount path | Custom mount-aware logic |
261
+ | Context | API | Resolves | Use for |
262
+ | ---------------- | -------------------------------------------------- | ------------------------------- | ---------------------------------------------------------------- |
263
+ | Server handler | `ctx.reverse("name")` | Named routes (local + absolute) | **Default** server-side URL generation |
264
+ | Server handler | `scopedReverse<T>(ctx.reverse)` | Same, with type safety | Type-safe server URLs |
265
+ | Client component | (URL passed as prop / loader data / action return) | Named routes | Any URL derived from a named route — generate on server, pass in |
266
+ | Client component | `href("/path")` | Absolute paths (static strings) | Static navigation where no named-route lookup is needed |
267
+ | Client component | `useHref()` | Mount-prefixed paths | Local navigation inside `include()` |
268
+ | Client component | `useMount()` | Raw mount path | Custom mount-aware logic |
269
+
270
+ > `reverse()` is server-only. Client components never import or call it — they receive the already-resolved string.
197
271
 
198
272
  ## Complete example: mounted module
199
273
 
@@ -6,7 +6,10 @@ argument-hint: [loader]
6
6
 
7
7
  # Data Loaders with loader()
8
8
 
9
- Loaders fetch data on the server and stream it to the client.
9
+ Loaders fetch data on the server and stream it to the client. For mutations
10
+ (writes triggered by forms or buttons), use server actions instead — see
11
+ `/server-actions`. Loaders re-resolve after an action runs, so the typical
12
+ flow is _action mutates → loader re-reads → UI updates_.
10
13
 
11
14
  ## Creating a Loader
12
15
 
@@ -139,7 +142,29 @@ same memoized result — loaders never run twice per request.
139
142
 
140
143
  ## Loader Context
141
144
 
142
- Loaders receive the same context as route handlers:
145
+ Loaders receive the same context shape as route handlers.
146
+
147
+ ### Full field surface
148
+
149
+ | Field | Type | Notes |
150
+ | -------------- | ------------------------------ | --------------------------------------------------------------------------------------------------- |
151
+ | `params` | `TParams` | Merged route + explicit loader params; overridable by fetchable `load({ params })`. |
152
+ | `routeParams` | `Record<string, string>` | Server-trusted route params from URL pattern matching; cannot be overridden. |
153
+ | `request` | `Request` | The incoming `Request` (headers, method, body, `signal` for abort). |
154
+ | `url` | `URL` | Parsed request URL. |
155
+ | `pathname` | `string` | URL pathname (shortcut for `ctx.url.pathname`). |
156
+ | `searchParams` | `URLSearchParams` | Shortcut for `ctx.url.searchParams`. |
157
+ | `search` | `ResolveSearchSchema<TSearch>` | Typed query params when a search schema is declared on the route; `{}` otherwise. |
158
+ | `env` | `TEnv` | Plain bindings from `createRouter<TEnv>()` (DB, KV, secrets, etc.). |
159
+ | `get` | `(key \| ContextVar) => value` | Reads variables/context-vars set by middleware. |
160
+ | `use` | `(loader \| handle) => T` | Access another loader's data (Promise) or a handle's collected data (after `await ctx.rendered()`). |
161
+ | `rendered` | `() => Promise<void>` | **Experimental.** DSL loaders only — waits for non-loader segments before reading handle data. |
162
+ | `method` | `string` | HTTP method. `"GET"` for SSR loader runs; reflects real method for fetchable loaders. |
163
+ | `body` | `TBody \| undefined` | Parsed request body for fetchable POST/PUT/PATCH/DELETE calls. |
164
+ | `formData` | `FormData \| undefined` | Present when a fetchable loader is invoked via form submission. |
165
+ | `reverse` | `ScopedReverseFunction` | Generate type-checked URLs from route names (same scoped semantics as route handlers). |
166
+
167
+ ### Example
143
168
 
144
169
  ```typescript
145
170
  export const ProductLoader = createLoader(async (ctx) => {
@@ -163,10 +188,21 @@ export const ProductLoader = createLoader(async (ctx) => {
163
188
  // Variables set by middleware (from RSCRouter.Vars augmentation)
164
189
  const user = ctx.get("user");
165
190
 
166
- return { product: await fetchProduct(slug) };
191
+ // Type-checked URLs for payloads. `.name` resolves within the current
192
+ // include() scope; a bare `name` resolves globally. See /route and
193
+ // /typesafety for scope rules and route-name autocomplete.
194
+ const detailUrl = ctx.reverse(".detail", { slug });
195
+
196
+ return {
197
+ product: await fetchProduct(slug),
198
+ links: { self: detailUrl },
199
+ };
167
200
  });
168
201
  ```
169
202
 
203
+ See `/route` for the full handler-context contract (shared with loaders) and
204
+ `/typesafety` for route-name typing that powers `ctx.reverse` autocomplete.
205
+
170
206
  ### params vs routeParams
171
207
 
172
208
  - `ctx.params` — merged route params + explicit loader params. For fetchable
@@ -215,6 +251,37 @@ path("/product/:slug", ProductPage, { name: "product" }, () => [
215
251
  ]);
216
252
  ```
217
253
 
254
+ ### `revalidate()` return shapes
255
+
256
+ A `revalidate(fn)` callback can return one of four shapes. The chain
257
+ processes revalidators in order; each call's return controls how the
258
+ chain continues:
259
+
260
+ ```typescript
261
+ // 1) Hard decision — short-circuits the chain, used as the final answer.
262
+ revalidate(() => true);
263
+ revalidate(({ actionId }) => actionId?.includes("Cart") ?? false);
264
+
265
+ // 2) Soft decision — updates the running suggestion for downstream
266
+ // revalidators on the same segment, chain continues.
267
+ revalidate(({ defaultShouldRevalidate }) => ({
268
+ defaultShouldRevalidate: !defaultShouldRevalidate,
269
+ }));
270
+
271
+ // 3) Defer (no opinion) — leaves the running suggestion unchanged and
272
+ // continues to the next revalidator. Implicit return / null /
273
+ // undefined are all equivalent and consumer-friendly.
274
+ revalidate(({ actionId }) => {
275
+ if (actionId?.includes("Cart")) return true; // hard for this branch only
276
+ // implicit return — let downstream revalidators or the segment default decide
277
+ });
278
+ revalidate(() => undefined); // explicit defer
279
+ revalidate(() => null); // explicit defer
280
+ ```
281
+
282
+ If every revalidator on a segment defers, the segment-type default
283
+ (e.g. params-changed for routes, `false` for parallels) is used.
284
+
218
285
  ### Revalidation Contracts for Loader Dependencies
219
286
 
220
287
  If a loader reads `ctx.get()` data produced by an outer handler/layout, share
@@ -32,6 +32,8 @@ When the router has a `basename`, pattern-scoped `.use()` patterns are automatic
32
32
 
33
33
  Registered inside `urls()` callback. Wraps **rendering only** -- it does NOT wrap server action execution. Actions run before route middleware, so when route middleware executes during post-action revalidation, it can observe state that the action set (cookies, context variables, headers).
34
34
 
35
+ > **Implication for auth:** route middleware cannot guard server actions. Use `router.use("/admin/*", requireAuth)` (global, scoped) for action protection, or check inside the action body. See `/server-actions` for action-side auth patterns.
36
+
35
37
  ```
36
38
  Request flow (with action):
37
39
  global mw -> action executes -> route mw -> layout -> handler -> loaders
@@ -137,17 +139,46 @@ export const urlpatterns = urls(({ path, layout, middleware }) => [
137
139
  ## Middleware with Multiple Handlers
138
140
 
139
141
  ```typescript
140
- // Spread multiple middleware from a single export
142
+ // Group multiple middleware in an array
141
143
  export const shopMiddleware = [loggerMiddleware, mockAuthMiddleware];
142
144
 
143
- // In routes
145
+ // In routes — pass the array directly
144
146
  layout(<ShopLayout />, () => [
145
- middleware(...shopMiddleware),
147
+ middleware(shopMiddleware),
146
148
 
147
149
  path("/shop", ShopIndex, { name: "shop" }),
148
150
  ])
149
151
  ```
150
152
 
153
+ ## Wrapping Middleware (Scoped to Children)
154
+
155
+ Use the wrapping form to scope middleware to a subset of routes without
156
+ introducing a visible layout:
157
+
158
+ ```typescript
159
+ urls(({ path, middleware }) => [
160
+ // authMw only applies to /admin and /admin/settings
161
+ middleware(authMw, () => [
162
+ path("/admin", AdminPage, { name: "admin" }),
163
+ path("/admin/settings", SettingsPage, { name: "settings" }),
164
+ ]),
165
+
166
+ // Public route — no authMw
167
+ path("/", HomePage, { name: "home" }),
168
+ ]);
169
+ ```
170
+
171
+ Multiple middleware with wrapping:
172
+
173
+ ```typescript
174
+ middleware([authMw, loggingMw], () => [
175
+ path("/admin", AdminPage, { name: "admin" }),
176
+ ]);
177
+ ```
178
+
179
+ This creates a transparent layout (`<Outlet />`) that carries the middleware.
180
+ The middleware does not affect sibling routes outside the callback.
181
+
151
182
  ## Middleware Context
152
183
 
153
184
  ```typescript