@rangojs/router 0.0.0-experimental.10 → 0.0.0-experimental.101

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 (1132) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +1037 -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 +1634 -157
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/dist/browser/react/use-client-cache.js +39 -0
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +5823 -2295
  798. package/dist/vite/index.js.bak +5448 -0
  799. package/dist/vite/index.js.map +1 -0
  800. package/dist/vite/index.named-routes.gen.ts +103 -0
  801. package/dist/vite/package-resolution.d.ts +43 -0
  802. package/dist/vite/package-resolution.d.ts.map +1 -0
  803. package/{src/vite/package-resolution.ts → dist/vite/package-resolution.js} +53 -66
  804. package/dist/vite/package-resolution.js.map +1 -0
  805. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  806. package/dist/vite/virtual-entries.d.ts +25 -0
  807. package/dist/vite/virtual-entries.d.ts.map +1 -0
  808. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +71 -63
  811. package/skills/breadcrumbs/SKILL.md +252 -0
  812. package/skills/cache-guide/SKILL.md +294 -0
  813. package/skills/caching/SKILL.md +93 -23
  814. package/skills/composability/SKILL.md +172 -0
  815. package/skills/debug-manifest/SKILL.md +12 -8
  816. package/skills/document-cache/SKILL.md +18 -16
  817. package/skills/fonts/SKILL.md +6 -4
  818. package/skills/handler-use/SKILL.md +364 -0
  819. package/skills/hooks/SKILL.md +408 -71
  820. package/skills/host-router/SKILL.md +218 -0
  821. package/skills/i18n/SKILL.md +276 -0
  822. package/skills/intercept/SKILL.md +176 -8
  823. package/skills/layout/SKILL.md +124 -3
  824. package/skills/links/SKILL.md +304 -25
  825. package/skills/loader/SKILL.md +481 -47
  826. package/skills/middleware/SKILL.md +207 -37
  827. package/skills/migrate-nextjs/SKILL.md +562 -0
  828. package/skills/migrate-react-router/SKILL.md +769 -0
  829. package/skills/mime-routes/SKILL.md +15 -11
  830. package/skills/parallel/SKILL.md +272 -1
  831. package/skills/prerender/SKILL.md +467 -65
  832. package/skills/rango/SKILL.md +89 -21
  833. package/skills/response-routes/SKILL.md +152 -91
  834. package/skills/route/SKILL.md +305 -14
  835. package/skills/router-setup/SKILL.md +210 -32
  836. package/skills/server-actions/SKILL.md +739 -0
  837. package/skills/streams-and-websockets/SKILL.md +283 -0
  838. package/skills/theme/SKILL.md +9 -8
  839. package/skills/typesafety/SKILL.md +333 -86
  840. package/skills/use-cache/SKILL.md +324 -0
  841. package/skills/view-transitions/SKILL.md +212 -0
  842. package/src/__internal.ts +102 -4
  843. package/src/bin/rango.ts +312 -15
  844. package/src/browser/action-coordinator.ts +97 -0
  845. package/src/browser/action-response-classifier.ts +99 -0
  846. package/src/browser/app-shell.ts +52 -0
  847. package/src/browser/app-version.ts +14 -0
  848. package/src/browser/event-controller.ts +136 -68
  849. package/src/browser/history-state.ts +80 -0
  850. package/src/browser/intercept-utils.ts +52 -0
  851. package/src/browser/link-interceptor.ts +24 -4
  852. package/src/browser/logging.ts +55 -0
  853. package/src/browser/merge-segment-loaders.ts +20 -12
  854. package/src/browser/navigation-bridge.ts +374 -561
  855. package/src/browser/navigation-client.ts +228 -70
  856. package/src/browser/navigation-store.ts +97 -55
  857. package/src/browser/navigation-transaction.ts +297 -0
  858. package/src/browser/network-error-handler.ts +61 -0
  859. package/src/browser/partial-update.ts +376 -315
  860. package/src/browser/prefetch/cache.ts +314 -0
  861. package/src/browser/prefetch/fetch.ts +282 -0
  862. package/src/browser/prefetch/observer.ts +65 -0
  863. package/src/browser/prefetch/policy.ts +48 -0
  864. package/src/browser/prefetch/queue.ts +191 -0
  865. package/src/browser/prefetch/resource-ready.ts +77 -0
  866. package/src/browser/rango-state.ts +152 -0
  867. package/src/browser/react/Link.tsx +255 -71
  868. package/src/browser/react/NavigationProvider.tsx +152 -24
  869. package/src/browser/react/context.ts +11 -0
  870. package/src/browser/react/filter-segment-order.ts +55 -0
  871. package/src/browser/react/index.ts +15 -12
  872. package/src/browser/react/location-state-shared.ts +95 -53
  873. package/src/browser/react/location-state.ts +60 -15
  874. package/src/browser/react/mount-context.ts +6 -1
  875. package/src/browser/react/nonce-context.ts +23 -0
  876. package/src/browser/react/shallow-equal.ts +27 -0
  877. package/src/browser/react/use-action.ts +29 -51
  878. package/src/browser/react/use-client-cache.ts +5 -3
  879. package/src/browser/react/use-handle.ts +30 -120
  880. package/src/browser/react/use-link-status.ts +6 -5
  881. package/src/browser/react/use-navigation.ts +44 -65
  882. package/src/browser/react/use-params.ts +78 -0
  883. package/src/browser/react/use-pathname.ts +47 -0
  884. package/src/browser/react/use-reverse.ts +99 -0
  885. package/src/browser/react/use-router.ts +83 -0
  886. package/src/browser/react/use-search-params.ts +56 -0
  887. package/src/browser/react/use-segments.ts +85 -99
  888. package/src/browser/response-adapter.ts +73 -0
  889. package/src/browser/rsc-router.tsx +246 -64
  890. package/src/browser/scroll-restoration.ts +132 -49
  891. package/src/browser/segment-reconciler.ts +243 -0
  892. package/src/browser/segment-structure-assert.ts +16 -0
  893. package/src/browser/server-action-bridge.ts +510 -603
  894. package/src/browser/shallow.ts +6 -1
  895. package/src/browser/types.ts +158 -48
  896. package/src/browser/validate-redirect-origin.ts +29 -0
  897. package/src/build/generate-manifest.ts +84 -23
  898. package/src/build/generate-route-types.ts +39 -828
  899. package/src/build/index.ts +4 -5
  900. package/src/build/route-trie.ts +85 -32
  901. package/src/build/route-types/ast-helpers.ts +25 -0
  902. package/src/build/route-types/ast-route-extraction.ts +98 -0
  903. package/src/build/route-types/codegen.ts +102 -0
  904. package/src/build/route-types/include-resolution.ts +418 -0
  905. package/src/build/route-types/param-extraction.ts +48 -0
  906. package/src/build/route-types/per-module-writer.ts +128 -0
  907. package/src/build/route-types/router-processing.ts +618 -0
  908. package/src/build/route-types/scan-filter.ts +85 -0
  909. package/src/build/runtime-discovery.ts +231 -0
  910. package/src/cache/background-task.ts +34 -0
  911. package/src/cache/cache-key-utils.ts +44 -0
  912. package/src/cache/cache-policy.ts +125 -0
  913. package/src/cache/cache-runtime.ts +342 -0
  914. package/src/cache/cache-scope.ts +167 -307
  915. package/src/cache/cf/cf-cache-store.ts +573 -21
  916. package/src/cache/cf/index.ts +13 -3
  917. package/src/cache/document-cache.ts +116 -77
  918. package/src/cache/handle-capture.ts +81 -0
  919. package/src/cache/handle-snapshot.ts +41 -0
  920. package/src/cache/index.ts +1 -15
  921. package/src/cache/memory-segment-store.ts +191 -13
  922. package/src/cache/profile-registry.ts +73 -0
  923. package/src/cache/read-through-swr.ts +134 -0
  924. package/src/cache/segment-codec.ts +256 -0
  925. package/src/cache/taint.ts +153 -0
  926. package/src/cache/types.ts +72 -122
  927. package/src/client.rsc.tsx +6 -1
  928. package/src/client.tsx +118 -302
  929. package/src/component-utils.ts +4 -4
  930. package/src/components/DefaultDocument.tsx +5 -1
  931. package/src/context-var.ts +156 -0
  932. package/src/debug.ts +19 -9
  933. package/src/errors.ts +77 -7
  934. package/src/handle.ts +55 -10
  935. package/src/handles/MetaTags.tsx +73 -20
  936. package/src/handles/breadcrumbs.ts +66 -0
  937. package/src/handles/index.ts +1 -0
  938. package/src/handles/meta.ts +30 -13
  939. package/src/host/cookie-handler.ts +21 -15
  940. package/src/host/errors.ts +8 -8
  941. package/src/host/index.ts +4 -7
  942. package/src/host/pattern-matcher.ts +27 -27
  943. package/src/host/router.ts +61 -39
  944. package/src/host/testing.ts +8 -8
  945. package/src/host/types.ts +15 -7
  946. package/src/host/utils.ts +1 -1
  947. package/src/href-client.ts +69 -46
  948. package/src/index.rsc.ts +138 -21
  949. package/src/index.ts +206 -51
  950. package/src/internal-debug.ts +11 -0
  951. package/src/loader-store.ts +202 -0
  952. package/src/loader.rsc.ts +25 -143
  953. package/src/loader.ts +27 -10
  954. package/src/network-error-thrower.tsx +3 -1
  955. package/src/outlet-context.ts +1 -1
  956. package/src/outlet-provider.tsx +45 -0
  957. package/src/prerender/param-hash.ts +4 -2
  958. package/src/prerender/store.ts +159 -13
  959. package/src/prerender.ts +397 -29
  960. package/src/response-utils.ts +28 -0
  961. package/src/reverse.ts +231 -121
  962. package/src/root-error-boundary.tsx +41 -29
  963. package/src/route-content-wrapper.tsx +7 -4
  964. package/src/route-definition/dsl-helpers.ts +1134 -0
  965. package/src/route-definition/helper-factories.ts +200 -0
  966. package/src/route-definition/helpers-types.ts +483 -0
  967. package/src/route-definition/index.ts +55 -0
  968. package/src/route-definition/redirect.ts +101 -0
  969. package/src/route-definition/resolve-handler-use.ts +155 -0
  970. package/src/route-definition.ts +1 -1431
  971. package/src/route-map-builder.ts +162 -123
  972. package/src/route-name.ts +53 -0
  973. package/src/route-types.ts +66 -9
  974. package/src/router/content-negotiation.ts +215 -0
  975. package/src/router/debug-manifest.ts +72 -0
  976. package/src/router/error-handling.ts +9 -9
  977. package/src/router/find-match.ts +160 -0
  978. package/src/router/handler-context.ts +418 -86
  979. package/src/router/intercept-resolution.ts +35 -20
  980. package/src/router/lazy-includes.ts +237 -0
  981. package/src/router/loader-resolution.ts +359 -128
  982. package/src/router/logging.ts +251 -0
  983. package/src/router/manifest.ts +98 -32
  984. package/src/router/match-api.ts +196 -261
  985. package/src/router/match-context.ts +4 -2
  986. package/src/router/match-handlers.ts +441 -0
  987. package/src/router/match-middleware/background-revalidation.ts +108 -93
  988. package/src/router/match-middleware/cache-lookup.ts +415 -86
  989. package/src/router/match-middleware/cache-store.ts +91 -29
  990. package/src/router/match-middleware/intercept-resolution.ts +48 -21
  991. package/src/router/match-middleware/segment-resolution.ts +73 -9
  992. package/src/router/match-pipelines.ts +10 -45
  993. package/src/router/match-result.ts +154 -35
  994. package/src/router/metrics.ts +240 -15
  995. package/src/router/middleware-cookies.ts +55 -0
  996. package/src/router/middleware-types.ts +209 -0
  997. package/src/router/middleware.ts +373 -371
  998. package/src/router/navigation-snapshot.ts +182 -0
  999. package/src/router/pattern-matching.ts +292 -52
  1000. package/src/router/prerender-match.ts +502 -0
  1001. package/src/router/preview-match.ts +98 -0
  1002. package/src/router/request-classification.ts +310 -0
  1003. package/src/router/revalidation.ts +152 -39
  1004. package/src/router/route-snapshot.ts +245 -0
  1005. package/src/router/router-context.ts +41 -21
  1006. package/src/router/router-interfaces.ts +484 -0
  1007. package/src/router/router-options.ts +618 -0
  1008. package/src/router/router-registry.ts +24 -0
  1009. package/src/router/segment-resolution/fresh.ts +756 -0
  1010. package/src/router/segment-resolution/helpers.ts +268 -0
  1011. package/src/router/segment-resolution/loader-cache.ts +199 -0
  1012. package/src/router/segment-resolution/revalidation.ts +1407 -0
  1013. package/src/router/segment-resolution/static-store.ts +67 -0
  1014. package/src/router/segment-resolution.ts +21 -1315
  1015. package/src/router/segment-wrappers.ts +291 -0
  1016. package/src/router/substitute-pattern-params.ts +56 -0
  1017. package/src/router/telemetry-otel.ts +299 -0
  1018. package/src/router/telemetry.ts +300 -0
  1019. package/src/router/timeout.ts +148 -0
  1020. package/src/router/trie-matching.ts +111 -39
  1021. package/src/router/types.ts +17 -9
  1022. package/src/router/url-params.ts +49 -0
  1023. package/src/router.ts +642 -2011
  1024. package/src/rsc/handler-context.ts +45 -0
  1025. package/src/rsc/handler.ts +864 -1114
  1026. package/src/rsc/helpers.ts +181 -19
  1027. package/src/rsc/index.ts +0 -20
  1028. package/src/rsc/loader-fetch.ts +229 -0
  1029. package/src/rsc/manifest-init.ts +90 -0
  1030. package/src/rsc/nonce.ts +14 -0
  1031. package/src/rsc/origin-guard.ts +141 -0
  1032. package/src/rsc/progressive-enhancement.ts +395 -0
  1033. package/src/rsc/response-error.ts +37 -0
  1034. package/src/rsc/response-route-handler.ts +360 -0
  1035. package/src/rsc/rsc-rendering.ts +256 -0
  1036. package/src/rsc/runtime-warnings.ts +42 -0
  1037. package/src/rsc/server-action.ts +360 -0
  1038. package/src/rsc/ssr-setup.ts +128 -0
  1039. package/src/rsc/types.ts +52 -11
  1040. package/src/search-params.ts +230 -0
  1041. package/src/segment-content-promise.ts +67 -0
  1042. package/src/segment-loader-promise.ts +122 -0
  1043. package/src/segment-system.tsx +187 -38
  1044. package/src/server/context.ts +333 -59
  1045. package/src/server/cookie-store.ts +190 -0
  1046. package/src/server/fetchable-loader-store.ts +37 -0
  1047. package/src/server/handle-store.ts +113 -15
  1048. package/src/server/loader-registry.ts +24 -64
  1049. package/src/server/request-context.ts +603 -109
  1050. package/src/server.ts +35 -155
  1051. package/src/ssr/index.tsx +107 -30
  1052. package/src/static-handler.ts +126 -0
  1053. package/src/theme/ThemeProvider.tsx +21 -15
  1054. package/src/theme/ThemeScript.tsx +5 -5
  1055. package/src/theme/constants.ts +5 -2
  1056. package/src/theme/index.ts +4 -14
  1057. package/src/theme/theme-context.ts +4 -30
  1058. package/src/theme/theme-script.ts +21 -18
  1059. package/src/types/boundaries.ts +158 -0
  1060. package/src/types/cache-types.ts +198 -0
  1061. package/src/types/error-types.ts +192 -0
  1062. package/src/types/global-namespace.ts +100 -0
  1063. package/src/types/handler-context.ts +764 -0
  1064. package/src/types/index.ts +88 -0
  1065. package/src/types/loader-types.ts +209 -0
  1066. package/src/types/request-scope.ts +126 -0
  1067. package/src/types/route-config.ts +170 -0
  1068. package/src/types/route-entry.ts +120 -0
  1069. package/src/types/segments.ts +167 -0
  1070. package/src/types.ts +1 -1757
  1071. package/src/urls/include-helper.ts +207 -0
  1072. package/src/urls/index.ts +53 -0
  1073. package/src/urls/path-helper-types.ts +372 -0
  1074. package/src/urls/path-helper.ts +364 -0
  1075. package/src/urls/pattern-types.ts +107 -0
  1076. package/src/urls/response-types.ts +108 -0
  1077. package/src/urls/type-extraction.ts +372 -0
  1078. package/src/urls/urls-function.ts +98 -0
  1079. package/src/urls.ts +1 -1282
  1080. package/src/use-loader.tsx +327 -103
  1081. package/src/vite/debug.ts +184 -0
  1082. package/src/vite/discovery/bundle-postprocess.ts +181 -0
  1083. package/src/vite/discovery/discover-routers.ts +376 -0
  1084. package/src/vite/discovery/gate-state.ts +171 -0
  1085. package/src/vite/discovery/prerender-collection.ts +486 -0
  1086. package/src/vite/discovery/route-types-writer.ts +258 -0
  1087. package/src/vite/discovery/self-gen-tracking.ts +73 -0
  1088. package/src/vite/discovery/state.ts +126 -0
  1089. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1090. package/src/vite/index.ts +15 -2063
  1091. package/src/vite/plugin-types.ts +103 -0
  1092. package/src/vite/plugins/cjs-to-esm.ts +98 -0
  1093. package/src/vite/plugins/client-ref-dedup.ts +131 -0
  1094. package/src/vite/plugins/client-ref-hashing.ts +117 -0
  1095. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1096. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1097. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  1098. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +107 -64
  1099. package/src/vite/plugins/expose-id-utils.ts +299 -0
  1100. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1101. package/src/vite/plugins/expose-ids/handler-transform.ts +209 -0
  1102. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1103. package/src/vite/plugins/expose-ids/router-transform.ts +127 -0
  1104. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1105. package/src/vite/plugins/expose-internal-ids.ts +816 -0
  1106. package/src/vite/plugins/performance-tracks.ts +96 -0
  1107. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1108. package/src/vite/plugins/use-cache-transform.ts +336 -0
  1109. package/src/vite/plugins/version-injector.ts +109 -0
  1110. package/src/vite/plugins/version-plugin.ts +323 -0
  1111. package/src/vite/plugins/virtual-entries.ts +123 -0
  1112. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1113. package/src/vite/rango.ts +497 -0
  1114. package/src/vite/router-discovery.ts +1482 -0
  1115. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1116. package/src/vite/utils/banner.ts +36 -0
  1117. package/src/vite/utils/bundle-analysis.ts +137 -0
  1118. package/src/vite/utils/manifest-utils.ts +70 -0
  1119. package/src/vite/utils/package-resolution.ts +161 -0
  1120. package/src/vite/utils/prerender-utils.ts +222 -0
  1121. package/src/vite/utils/shared-utils.ts +170 -0
  1122. package/CLAUDE.md +0 -43
  1123. package/src/browser/lru-cache.ts +0 -69
  1124. package/src/browser/request-controller.ts +0 -164
  1125. package/src/cache/memory-store.ts +0 -253
  1126. package/src/router.gen.ts +0 -6
  1127. package/src/urls.gen.ts +0 -8
  1128. package/src/vite/expose-handle-id.ts +0 -209
  1129. package/src/vite/expose-loader-id.ts +0 -426
  1130. package/src/vite/expose-location-state-id.ts +0 -177
  1131. package/src/vite/expose-prerender-handler-id.ts +0 -429
  1132. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -1,21 +1,27 @@
1
1
  ---
2
2
  name: loader
3
3
  description: Define data loaders for fetching data in routes with createLoader
4
- argument-hint: [name]
4
+ argument-hint: [loader]
5
5
  ---
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
 
13
16
  ```typescript
14
17
  import { createLoader } from "@rangojs/router";
15
18
 
16
- export const ProductLoader = createLoader("product", async (ctx) => {
17
- const product = await ctx.env.Bindings.DB
18
- .prepare("SELECT * FROM products WHERE slug = ?")
19
+ export const ProductLoader = createLoader(async (ctx) => {
20
+ "use server";
21
+
22
+ const product = await ctx.env.DB.prepare(
23
+ "SELECT * FROM products WHERE slug = ?",
24
+ )
19
25
  .bind(ctx.params.slug)
20
26
  .first();
21
27
 
@@ -23,6 +29,30 @@ export const ProductLoader = createLoader("product", async (ctx) => {
23
29
  });
24
30
  ```
25
31
 
32
+ ### Supported export patterns
33
+
34
+ All of the following are equivalent and fully supported by the Vite transform:
35
+
36
+ ```typescript
37
+ // Direct export (most common)
38
+ export const ProductLoader = createLoader(handler);
39
+
40
+ // Separate declaration + named export
41
+ const ProductLoader = createLoader(handler);
42
+ export { ProductLoader };
43
+
44
+ // Aliased export
45
+ const InternalLoader = createLoader(handler);
46
+ export { InternalLoader as ProductLoader };
47
+
48
+ // Aliased import
49
+ import { createLoader as cl } from "@rangojs/router";
50
+ export const ProductLoader = cl(handler);
51
+ ```
52
+
53
+ The `export const` form and the `const + export { }` form both work for
54
+ client stubs, ID injection, and loader manifest tracking.
55
+
26
56
  ## Using Loaders in Routes
27
57
 
28
58
  ```typescript
@@ -38,53 +68,165 @@ export const urlpatterns = urls(({ path, loader }) => [
38
68
 
39
69
  ## Consuming Loader Data
40
70
 
41
- ### In Server Components
71
+ Register loaders with `loader()` in the DSL and consume them in client
72
+ components with `useLoader()`. This is the recommended pattern — it keeps
73
+ data fetching on the server and consumption on the client, with a clean
74
+ separation that works correctly with `cache()`.
42
75
 
43
76
  ```typescript
44
- import { useLoader } from "@rangojs/router";
77
+ "use client";
78
+ import { useLoader } from "@rangojs/router/client";
45
79
  import { ProductLoader } from "./loaders/product";
46
80
 
47
- async function ProductPage() {
48
- const { product } = await useLoader(ProductLoader);
49
- return <h1>{product.name}</h1>;
81
+ function ProductDetails() {
82
+ const { data } = useLoader(ProductLoader);
83
+ return <div>{data.product.description}</div>;
50
84
  }
51
85
  ```
52
86
 
53
- ### In Client Components
54
-
55
87
  ```typescript
56
- "use client";
57
- import { useLoaderData } from "@rangojs/router/client";
58
- import { ProductLoader } from "./loaders/product";
88
+ // Route definition — loader() registration required
89
+ path("/product/:slug", ProductPage, { name: "product" }, () => [
90
+ loader(ProductLoader),
91
+ ]);
92
+ ```
59
93
 
60
- function ProductDetails() {
61
- const { product } = useLoaderData(ProductLoader);
62
- return <div>{product.description}</div>;
63
- }
94
+ DSL loaders are the **live data layer** — they resolve fresh on every
95
+ request, even when the route is inside a `cache()` boundary. The router
96
+ excludes them from the segment cache at storage time and re-resolves them
97
+ on retrieval. This means `cache()` gives you cached UI + fresh data by
98
+ default.
99
+
100
+ ### Cache safety
101
+
102
+ DSL loaders can safely read `createVar({ cache: false })` variables
103
+ because they are always resolved fresh. The read guard is bypassed for
104
+ loader functions — they never produce stale data.
105
+
106
+ ### ctx.use(Loader) — escape hatch
107
+
108
+ For cases where you need loader data in the server handler itself (e.g.,
109
+ to set ctx variables or make routing decisions), use `ctx.use(Loader)`:
110
+
111
+ ```typescript
112
+ path("/product/:slug", async (ctx) => {
113
+ const { product } = await ctx.use(ProductLoader);
114
+ ctx.set(Product, product); // make available to children
115
+ return <ProductPage />;
116
+ }, { name: "product" }, () => [
117
+ loader(ProductLoader), // still register for client consumption
118
+ ])
64
119
  ```
65
120
 
121
+ When you register with `loader()` in the DSL, `ctx.use()` returns the
122
+ same memoized result — loaders never run twice per request.
123
+
124
+ **Limitations of ctx.use(Loader):**
125
+
126
+ - The handler output depends on the loader data. If the route is inside
127
+ `cache()`, the handler is cached with the loader result baked in —
128
+ defeating the live data guarantee.
129
+ - Non-cacheable variable reads (`createVar({ cache: false })`) inside the
130
+ handler still throw, even if the data came from a loader.
131
+ - Prefer DSL `loader()` + client `useLoader()` for data that depends on
132
+ non-cacheable context variables.
133
+
134
+ **Never use `useLoader()` in server components** — it is a client-only API.
135
+
136
+ ### Summary
137
+
138
+ | Pattern | API | Cache-safe | Recommended |
139
+ | ---------------------- | ------------------- | ---------- | ----------- |
140
+ | DSL + client component | `useLoader(Loader)` | Yes | Yes |
141
+ | Handler escape hatch | `ctx.use(Loader)` | No | When needed |
142
+
66
143
  ## Loader Context
67
144
 
68
- 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
69
168
 
70
169
  ```typescript
71
- export const ProductLoader = createLoader("product", async (ctx) => {
72
- // URL params
170
+ export const ProductLoader = createLoader(async (ctx) => {
171
+ "use server";
172
+
173
+ // URL params (may include client-provided overrides for fetchable loaders)
73
174
  const { slug } = ctx.params;
74
175
 
176
+ // Server-trusted route params (from URL pattern matching, cannot be overridden)
177
+ const { slug: trustedSlug } = ctx.routeParams;
178
+
75
179
  // Query params
76
180
  const variant = ctx.url.searchParams.get("variant");
77
181
 
78
- // Environment (DB, KV, etc.)
79
- const db = ctx.env.Bindings.DB;
182
+ // Platform bindings (DB, KV, etc.) — plain bindings from createRouter<TEnv>()
183
+ const db = ctx.env.DB;
80
184
 
81
185
  // Request headers
82
186
  const auth = ctx.request.headers.get("Authorization");
83
187
 
84
- // Variables set by middleware
85
- const user = ctx.env.Variables.user;
188
+ // Variables set by middleware (from RSCRouter.Vars augmentation)
189
+ const user = ctx.get("user");
190
+
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 });
86
195
 
87
- return { product: await fetchProduct(slug) };
196
+ return {
197
+ product: await fetchProduct(slug),
198
+ links: { self: detailUrl },
199
+ };
200
+ });
201
+ ```
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
+
206
+ ### params vs routeParams
207
+
208
+ - `ctx.params` — merged route params + explicit loader params. For fetchable
209
+ loaders called with `load(Loader, { params: { ... } })`, explicit params
210
+ override route-matched params.
211
+ - `ctx.routeParams` — server-trusted route params from URL pattern matching.
212
+ Cannot be overridden by client-provided params.
213
+
214
+ Use `ctx.routeParams` when you need trusted route identity for authorization
215
+ or resource scoping:
216
+
217
+ ```typescript
218
+ export const OrderLoader = createLoader(async (ctx) => {
219
+ "use server";
220
+
221
+ // Use routeParams for auth checks — client cannot spoof the URL-matched ID
222
+ const { orderId } = ctx.routeParams;
223
+ const user = ctx.get("user");
224
+
225
+ const order = await db.orders.get(orderId);
226
+ if (order.userId !== user.id)
227
+ throw new Response("Forbidden", { status: 403 });
228
+
229
+ return { order };
88
230
  });
89
231
  ```
90
232
 
@@ -95,22 +237,202 @@ Add caching or revalidation to specific loaders:
95
237
  ```typescript
96
238
  path("/product/:slug", ProductPage, { name: "product" }, () => [
97
239
  // Cached loader
98
- loader(ProductLoader, () => [
99
- cache({ ttl: 300 }),
100
- ]),
240
+ loader(ProductLoader, () => [cache({ ttl: 300 })]),
101
241
 
102
242
  // Loader with revalidation control
103
243
  loader(RelatedProductsLoader, () => [
104
- revalidate(() => false), // Never revalidate
244
+ revalidate(() => false), // Never revalidate
105
245
  ]),
106
246
 
107
247
  // Loader that revalidates after cart actions
108
248
  loader(CartLoader, () => [
109
249
  revalidate(({ actionId }) => actionId?.includes("Cart") ?? false),
110
250
  ]),
111
- ])
251
+ ]);
252
+ ```
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
+
285
+ ### Revalidation Contracts for Loader Dependencies
286
+
287
+ If a loader reads `ctx.get()` data produced by an outer handler/layout, share
288
+ the same named revalidation contract across producer and consumer segments.
289
+
290
+ ```typescript
291
+ // revalidation-contracts.ts
292
+ export const revalidateAccountScope = ({ actionId }) =>
293
+ actionId?.includes("src/actions/account.ts#") ?? false;
294
+
295
+ layout(AccountLayout, () => [
296
+ revalidate(revalidateAccountScope), // producer reruns
297
+ path("/account/orders", OrdersPage, { name: "account.orders" }, () => [
298
+ loader(OrdersLoader, () => [
299
+ revalidate(revalidateAccountScope), // consumer reruns
300
+ ]),
301
+ ]),
302
+ ]);
303
+ ```
304
+
305
+ For segments that depend on multiple upstream domains, compose multiple
306
+ contracts on both sides.
307
+
308
+ To keep loader route trees concise, export helper wrappers:
309
+
310
+ ```typescript
311
+ import { revalidate } from "@rangojs/router";
312
+
313
+ export const revalidateAccount = () => [revalidate(revalidateAccountScope)];
314
+
315
+ layout(AccountLayout, () => [
316
+ revalidateAccount(),
317
+ path("/account/orders", OrdersPage, { name: "account.orders" }, () => [
318
+ loader(OrdersLoader, () => [revalidateAccount()]),
319
+ ]),
320
+ ]);
112
321
  ```
113
322
 
323
+ ## Loaders: The Live Data Layer
324
+
325
+ Loaders are the live data layer of the router. They resolve fresh on every
326
+ request, even when the route's UI segments are served from cache. This is a
327
+ core design principle — route-level `cache()` caches rendered components but
328
+ never caches loader data. Loaders are excluded at storage time and re-resolved
329
+ on retrieval.
330
+
331
+ This means `cache()` gives you cached UI + fresh data by default. Pre-rendering
332
+ follows the same rule: at build time, loaders are skipped entirely (there is no
333
+ real request context), and at runtime the worker resolves them fresh against
334
+ the live database.
335
+
336
+ ### Opting a Loader into Caching
337
+
338
+ To cache a specific loader's data, attach a `cache()` child:
339
+
340
+ ```typescript
341
+ loader(ProductLoader, () => [cache({ ttl: 300 })]),
342
+ ```
343
+
344
+ The loader's data is cached independently from the route's segment cache,
345
+ using the same `SegmentCacheStore` (app-level or per-loader override).
346
+
347
+ Values are serialized through RSC Flight, so loaders can return ReactNode,
348
+ Promises, null, and any RSC-serializable type — all round-trip correctly
349
+ through the cache.
350
+
351
+ ### Cache Key
352
+
353
+ The default cache key is `loader:{loaderId}:{pathname}:{sortedParams}`.
354
+ This can be customized at two levels:
355
+
356
+ ```typescript
357
+ // Full override — key function replaces the default entirely
358
+ loader(ProductLoader, () => [
359
+ cache({
360
+ ttl: 300,
361
+ key: (ctx) => `product:${ctx.params.slug}:${cookies().get("locale")?.value ?? "en"}`,
362
+ }),
363
+ ]),
364
+
365
+ // Store-level keyGenerator — modifies the default key (e.g., adds a region prefix)
366
+ // Set in the store configuration, applies to all entries in that store
367
+ ```
368
+
369
+ Resolution priority (same as route-level `cache()`):
370
+
371
+ 1. `key(ctx)` from cache options — full override
372
+ 2. `store.keyGenerator(ctx, defaultKey)` — store-level modification
373
+ 3. Default key — `loader:{id}:{pathname}:{params}`
374
+
375
+ If a custom key function throws, it falls back to the default key silently
376
+ (logged to console.error).
377
+
378
+ ### Tags for Invalidation
379
+
380
+ ```typescript
381
+ // Static tags
382
+ loader(ProductLoader, () => [
383
+ cache({ ttl: 300, tags: ["products", "catalog"] }),
384
+ ]),
385
+
386
+ // Dynamic tags
387
+ loader(ProductLoader, () => [
388
+ cache({
389
+ ttl: 300,
390
+ tags: (ctx) => [`product:${ctx.params.slug}`, "products"],
391
+ }),
392
+ ]),
393
+ ```
394
+
395
+ ### Stale-While-Revalidate
396
+
397
+ ```typescript
398
+ loader(ProductLoader, () => [
399
+ cache({ ttl: 60, swr: 300 }),
400
+ ]),
401
+ ```
402
+
403
+ During the SWR window (60-360s), stale data is returned immediately while
404
+ fresh data is fetched in the background via `waitUntil`. After the SWR window
405
+ expires (360s+), the entry is treated as a cache miss.
406
+
407
+ ### Conditional Caching
408
+
409
+ Skip the cache at runtime based on request properties:
410
+
411
+ ```typescript
412
+ loader(ProductLoader, () => [
413
+ cache({
414
+ ttl: 300,
415
+ condition: (ctx) => !ctx.request.headers.has("authorization"),
416
+ }),
417
+ ]),
418
+ ```
419
+
420
+ When `condition` returns false, the loader runs fresh and the cache is bypassed
421
+ entirely (no read, no write).
422
+
423
+ ### Per-Loader Store Override
424
+
425
+ ```typescript
426
+ const hotStore = new MemorySegmentCacheStore({ defaults: { ttl: 10 } });
427
+
428
+ loader(PricingLoader, () => [
429
+ cache({ store: hotStore }),
430
+ ]),
431
+ ```
432
+
433
+ Without an explicit store, the loader uses the app-level store from the
434
+ handler config (`cache.store`).
435
+
114
436
  ## Multiple Loaders
115
437
 
116
438
  Routes can have multiple loaders that run in parallel:
@@ -120,7 +442,7 @@ path("/product/:slug", ProductPage, { name: "product" }, () => [
120
442
  loader(ProductLoader),
121
443
  loader(RelatedProductsLoader),
122
444
  loader(ReviewsLoader),
123
- ])
445
+ ]);
124
446
  ```
125
447
 
126
448
  ## Layout Loaders
@@ -186,37 +508,145 @@ function ProductPage() {
186
508
  }
187
509
  ```
188
510
 
511
+ ## Fetchable Loaders
512
+
513
+ By default, loaders only run during SSR and navigation. Pass `true` as the second
514
+ argument to `createLoader` to make a loader **fetchable** — callable from the client
515
+ via `useFetchLoader()` and `load()`:
516
+
517
+ ```typescript
518
+ import { createLoader } from "@rangojs/router";
519
+
520
+ export const SearchLoader = createLoader(async (ctx) => {
521
+ "use server";
522
+
523
+ const query = ctx.params.query ?? "";
524
+ const results = await ctx.env.DB.prepare(
525
+ "SELECT * FROM products WHERE name LIKE ?",
526
+ )
527
+ .bind(`%${query}%`)
528
+ .all();
529
+
530
+ return { results: results.results ?? [] };
531
+ }, true); // true = fetchable
532
+ ```
533
+
534
+ ### Fetchable Loader with Middleware
535
+
536
+ Pass an options object instead of `true` to attach per-loader middleware.
537
+ This middleware runs only on `_rsc_loader` fetch requests (client-side
538
+ `load()` / `useFetchLoader()` calls), not during SSR `ctx.use()` execution:
539
+
540
+ ```typescript
541
+ import { createLoader } from "@rangojs/router";
542
+ import { authMiddleware } from "../middleware/auth";
543
+ import { rateLimitMiddleware } from "../middleware/rate-limit";
544
+
545
+ export const ProtectedLoader = createLoader(
546
+ async (ctx) => {
547
+ "use server";
548
+
549
+ const user = ctx.get("user");
550
+ return { orders: await db.orders.list(user.id) };
551
+ },
552
+ { middleware: [authMiddleware, rateLimitMiddleware] },
553
+ );
554
+ ```
555
+
556
+ The middleware uses the same `MiddlewareFn` signature as route/app middleware,
557
+ so you can reuse existing middleware functions directly.
558
+
559
+ Fetchable loaders support both GET and POST (PUT, PATCH, DELETE) from the client.
560
+ The `load()` function auto-detects the body type:
561
+
562
+ - **JSON body** (`body: { ... }`) — sent as `application/json`, available as `ctx.body`
563
+ - **FormData body** (`body: formData`) — sent as `multipart/form-data`, available as `ctx.formData`
564
+
565
+ ### Mutation Context
566
+
567
+ When a fetchable loader receives a POST/PUT/PATCH/DELETE request, the context
568
+ includes additional fields depending on the body type:
569
+
570
+ ```typescript
571
+ export const MutationLoader = createLoader(async (ctx) => {
572
+ "use server";
573
+
574
+ // JSON body — available as ctx.body (parsed object)
575
+ const data = ctx.body as { name: string; email: string };
576
+
577
+ // FormData body — available as ctx.formData
578
+ const file = ctx.formData?.get("file") as File | null;
579
+ const name = ctx.formData?.get("name") as string | null;
580
+
581
+ // Route params are always available
582
+ const { slug } = ctx.params;
583
+
584
+ return { success: true };
585
+ }, true);
586
+ ```
587
+
588
+ ### File Upload Example
589
+
590
+ ```typescript
591
+ // loaders/upload.ts
592
+ import { createLoader } from "@rangojs/router";
593
+
594
+ export const FileUploadLoader = createLoader(async (ctx) => {
595
+ "use server";
596
+
597
+ const file = ctx.formData?.get("file") as File | null;
598
+ if (file && file.size > 0) {
599
+ // Save to R2, D1, etc.
600
+ await ctx.env.BUCKET.put(file.name, file.stream());
601
+ return { uploaded: { name: file.name, size: file.size, type: file.type } };
602
+ }
603
+ return { uploaded: null };
604
+ }, true);
605
+ ```
606
+
607
+ Client usage — see `/hooks useFetchLoader` for the full client-side pattern.
608
+
609
+ > **Refetch sharing**: when the loader is registered on the route via
610
+ > `loader()`, a plain `load()` call (no `params`, no `body`) broadcasts
611
+ > the new value to every component reading the same loader id —
612
+ > `useLoader` reads in layouts, pages, and parallel slots all converge.
613
+ > Calls with `params` or a non-GET method stay local to the call site.
614
+ > See `/hooks` → "Shared refetch behavior" for the full contract.
615
+
189
616
  ## Complete Example
190
617
 
191
618
  ```typescript
192
619
  // loaders/shop.ts
193
620
  import { createLoader } from "@rangojs/router";
194
621
 
195
- export const ProductLoader = createLoader("product", async (ctx) => {
196
- const product = await ctx.env.Bindings.DB
622
+ export const ProductLoader = createLoader(async (ctx) => {
623
+ "use server";
624
+
625
+ const product = await ctx.env.DB
197
626
  .prepare("SELECT * FROM products WHERE slug = ?")
198
627
  .bind(ctx.params.slug)
199
628
  .first();
200
629
 
201
630
  if (!product) {
202
- throw new Response("Product not found", { status: 404 });
631
+ notFound("Product not found");
203
632
  }
204
633
 
205
634
  return { product };
206
635
  });
207
636
 
208
- export const CartLoader = createLoader("cart", async (ctx) => {
209
- const user = ctx.env.Variables.user;
637
+ export const CartLoader = createLoader(async (ctx) => {
638
+ "use server";
639
+
640
+ const user = ctx.get("user");
210
641
  if (!user) return { cart: null };
211
642
 
212
- const cart = await ctx.env.Bindings.KV.get(`cart:${user.id}`, "json");
643
+ const cart = await ctx.env.KV.get(`cart:${user.id}`, "json");
213
644
  return { cart };
214
645
  });
215
646
 
216
- // urls.tsx
647
+ // urls.tsx — register loaders in the DSL
217
648
  export const urlpatterns = urls(({ path, layout, loader, loading, cache, revalidate }) => [
218
649
  layout(<ShopLayout />, () => [
219
- // Shared cart loader for all shop routes
220
650
  loader(CartLoader, () => [
221
651
  revalidate(({ actionId }) => actionId?.includes("Cart") ?? false),
222
652
  ]),
@@ -228,18 +658,22 @@ export const urlpatterns = urls(({ path, layout, loader, loading, cache, revalid
228
658
  ]),
229
659
  ]);
230
660
 
231
- // pages/product.tsx
232
- import { useLoader } from "@rangojs/router";
661
+ // components/ProductDetails.tsx — consume in client component
662
+ "use client";
663
+ import { useLoader } from "@rangojs/router/client";
233
664
  import { ProductLoader, CartLoader } from "./loaders/shop";
234
665
 
235
- async function ProductPage() {
236
- const { product } = await useLoader(ProductLoader);
237
- const { cart } = await useLoader(CartLoader);
666
+ function ProductDetails() {
667
+ const { data: { product } } = useLoader(ProductLoader);
668
+ const { data: { cart } } = useLoader(CartLoader);
238
669
 
239
670
  return (
240
671
  <div>
241
672
  <h1>{product.name}</h1>
242
- <AddToCartButton productId={product.id} inCart={cart?.items.includes(product.id)} />
673
+ <AddToCartButton
674
+ productId={product.id}
675
+ inCart={cart?.items.includes(product.id)}
676
+ />
243
677
  </div>
244
678
  );
245
679
  }