@rangojs/router 0.0.0-experimental.2 → 0.0.0-experimental.21

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 (1118) hide show
  1. package/AGENTS.md +5 -0
  2. package/README.md +850 -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/{src/__mocks__/version.ts → dist/__mocks__/version.js} +1 -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 +1601 -0
  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 +4630 -749
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +18 -17
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +82 -46
  809. package/skills/cache-guide/SKILL.md +262 -0
  810. package/skills/caching/SKILL.md +139 -238
  811. package/skills/composability/SKILL.md +172 -0
  812. package/skills/debug-manifest/SKILL.md +112 -0
  813. package/skills/document-cache/SKILL.md +87 -57
  814. package/skills/fonts/SKILL.md +167 -0
  815. package/skills/hooks/SKILL.md +403 -60
  816. package/skills/intercept/SKILL.md +224 -203
  817. package/skills/layout/SKILL.md +243 -149
  818. package/skills/links/SKILL.md +239 -0
  819. package/skills/loader/SKILL.md +444 -253
  820. package/skills/middleware/SKILL.md +222 -325
  821. package/skills/mime-routes/SKILL.md +128 -0
  822. package/skills/parallel/SKILL.md +220 -170
  823. package/skills/prerender/SKILL.md +643 -0
  824. package/skills/rango/SKILL.md +119 -0
  825. package/skills/response-routes/SKILL.md +411 -0
  826. package/skills/route/SKILL.md +334 -89
  827. package/skills/router-setup/SKILL.md +305 -274
  828. package/skills/tailwind/SKILL.md +129 -0
  829. package/skills/testing/SKILL.md +226 -0
  830. package/skills/theme/SKILL.md +36 -11
  831. package/skills/typesafety/SKILL.md +437 -168
  832. package/skills/use-cache/SKILL.md +324 -0
  833. package/src/__internal.ts +181 -0
  834. package/src/bin/rango.ts +321 -0
  835. package/src/browser/action-coordinator.ts +97 -0
  836. package/src/browser/action-response-classifier.ts +99 -0
  837. package/src/browser/event-controller.ts +87 -64
  838. package/src/browser/history-state.ts +80 -0
  839. package/src/browser/intercept-utils.ts +52 -0
  840. package/src/browser/link-interceptor.ts +20 -4
  841. package/src/browser/logging.ts +55 -0
  842. package/src/browser/merge-segment-loaders.ts +20 -12
  843. package/src/browser/navigation-bridge.ts +217 -549
  844. package/src/browser/navigation-client.ts +74 -46
  845. package/src/browser/navigation-store.ts +33 -50
  846. package/src/browser/navigation-transaction.ts +295 -0
  847. package/src/browser/network-error-handler.ts +61 -0
  848. package/src/browser/partial-update.ts +288 -297
  849. package/src/browser/prefetch/cache.ts +67 -0
  850. package/src/browser/prefetch/fetch.ts +137 -0
  851. package/src/browser/prefetch/observer.ts +65 -0
  852. package/src/browser/prefetch/policy.ts +42 -0
  853. package/src/browser/prefetch/queue.ts +88 -0
  854. package/src/browser/rango-state.ts +112 -0
  855. package/src/browser/react/Link.tsx +173 -73
  856. package/src/browser/react/NavigationProvider.tsx +138 -27
  857. package/src/browser/react/context.ts +6 -0
  858. package/src/browser/react/filter-segment-order.ts +11 -0
  859. package/src/browser/react/index.ts +12 -12
  860. package/src/browser/react/location-state-shared.ts +95 -53
  861. package/src/browser/react/location-state.ts +60 -15
  862. package/src/browser/react/mount-context.ts +37 -0
  863. package/src/browser/react/nonce-context.ts +23 -0
  864. package/src/browser/react/shallow-equal.ts +27 -0
  865. package/src/browser/react/use-action.ts +29 -51
  866. package/src/browser/react/use-client-cache.ts +5 -3
  867. package/src/browser/react/use-handle.ts +49 -65
  868. package/src/browser/react/use-href.tsx +20 -188
  869. package/src/browser/react/use-link-status.ts +6 -5
  870. package/src/browser/react/use-mount.ts +31 -0
  871. package/src/browser/react/use-navigation.ts +27 -78
  872. package/src/browser/react/use-params.ts +65 -0
  873. package/src/browser/react/use-pathname.ts +47 -0
  874. package/src/browser/react/use-router.ts +63 -0
  875. package/src/browser/react/use-search-params.ts +56 -0
  876. package/src/browser/react/use-segments.ts +80 -97
  877. package/src/browser/response-adapter.ts +73 -0
  878. package/src/browser/rsc-router.tsx +104 -34
  879. package/src/browser/scroll-restoration.ts +92 -16
  880. package/src/browser/segment-reconciler.ts +216 -0
  881. package/src/browser/segment-structure-assert.ts +83 -0
  882. package/src/browser/server-action-bridge.ts +504 -584
  883. package/src/browser/shallow.ts +6 -1
  884. package/src/browser/types.ts +107 -57
  885. package/src/browser/validate-redirect-origin.ts +29 -0
  886. package/src/build/generate-manifest.ts +438 -0
  887. package/src/build/generate-route-types.ts +36 -0
  888. package/src/build/index.ts +35 -0
  889. package/src/build/route-trie.ts +249 -0
  890. package/src/build/route-types/ast-helpers.ts +25 -0
  891. package/src/build/route-types/ast-route-extraction.ts +98 -0
  892. package/src/build/route-types/codegen.ts +102 -0
  893. package/src/build/route-types/include-resolution.ts +411 -0
  894. package/src/build/route-types/param-extraction.ts +48 -0
  895. package/src/build/route-types/per-module-writer.ts +128 -0
  896. package/src/build/route-types/router-processing.ts +469 -0
  897. package/src/build/route-types/scan-filter.ts +78 -0
  898. package/src/build/runtime-discovery.ts +231 -0
  899. package/src/cache/background-task.ts +34 -0
  900. package/src/cache/cache-key-utils.ts +44 -0
  901. package/src/cache/cache-policy.ts +125 -0
  902. package/src/cache/cache-runtime.ts +338 -0
  903. package/src/cache/cache-scope.ts +120 -303
  904. package/src/cache/cf/cf-cache-store.ts +119 -7
  905. package/src/cache/cf/index.ts +8 -2
  906. package/src/cache/document-cache.ts +101 -72
  907. package/src/cache/handle-capture.ts +81 -0
  908. package/src/cache/handle-snapshot.ts +41 -0
  909. package/src/cache/index.ts +0 -15
  910. package/src/cache/memory-segment-store.ts +191 -13
  911. package/src/cache/profile-registry.ts +73 -0
  912. package/src/cache/read-through-swr.ts +134 -0
  913. package/src/cache/segment-codec.ts +256 -0
  914. package/src/cache/taint.ts +98 -0
  915. package/src/cache/types.ts +76 -121
  916. package/src/client.rsc.tsx +10 -14
  917. package/src/client.tsx +114 -89
  918. package/src/component-utils.ts +4 -4
  919. package/src/components/DefaultDocument.tsx +6 -2
  920. package/src/context-var.ts +86 -0
  921. package/src/debug.ts +243 -0
  922. package/src/errors.ts +108 -2
  923. package/src/handle.ts +34 -19
  924. package/src/handles/MetaTags.tsx +76 -23
  925. package/src/handles/meta.ts +32 -15
  926. package/src/host/cookie-handler.ts +165 -0
  927. package/src/host/errors.ts +97 -0
  928. package/src/host/index.ts +56 -0
  929. package/src/host/pattern-matcher.ts +214 -0
  930. package/src/host/router.ts +352 -0
  931. package/src/host/testing.ts +79 -0
  932. package/src/host/types.ts +146 -0
  933. package/src/host/utils.ts +25 -0
  934. package/src/href-client.ts +141 -47
  935. package/src/index.rsc.ts +209 -23
  936. package/src/index.ts +256 -32
  937. package/src/internal-debug.ts +11 -0
  938. package/src/loader.rsc.ts +27 -142
  939. package/src/loader.ts +27 -10
  940. package/src/network-error-thrower.tsx +3 -1
  941. package/src/outlet-provider.tsx +45 -0
  942. package/src/prerender/param-hash.ts +37 -0
  943. package/src/prerender/store.ts +185 -0
  944. package/src/prerender.ts +463 -0
  945. package/src/reverse.ts +330 -0
  946. package/src/root-error-boundary.tsx +41 -29
  947. package/src/route-content-wrapper.tsx +9 -11
  948. package/src/route-definition/dsl-helpers.ts +934 -0
  949. package/src/route-definition/helper-factories.ts +200 -0
  950. package/src/route-definition/helpers-types.ts +430 -0
  951. package/src/route-definition/index.ts +55 -0
  952. package/src/route-definition/redirect.ts +93 -0
  953. package/src/route-definition/route-function.ts +119 -0
  954. package/src/route-definition.ts +1 -1371
  955. package/src/route-map-builder.ts +241 -112
  956. package/src/route-name.ts +53 -0
  957. package/src/route-types.ts +70 -9
  958. package/src/router/content-negotiation.ts +116 -0
  959. package/src/router/debug-manifest.ts +72 -0
  960. package/src/router/error-handling.ts +9 -9
  961. package/src/router/find-match.ts +158 -0
  962. package/src/router/handler-context.ts +348 -82
  963. package/src/router/intercept-resolution.ts +395 -0
  964. package/src/router/lazy-includes.ts +234 -0
  965. package/src/router/loader-resolution.ts +215 -121
  966. package/src/router/logging.ts +248 -0
  967. package/src/router/manifest.ts +172 -43
  968. package/src/router/match-api.ts +620 -0
  969. package/src/router/match-context.ts +6 -4
  970. package/src/router/match-handlers.ts +440 -0
  971. package/src/router/match-middleware/background-revalidation.ts +80 -93
  972. package/src/router/match-middleware/cache-lookup.ts +382 -9
  973. package/src/router/match-middleware/cache-store.ts +51 -22
  974. package/src/router/match-middleware/intercept-resolution.ts +55 -17
  975. package/src/router/match-middleware/segment-resolution.ts +24 -6
  976. package/src/router/match-pipelines.ts +10 -45
  977. package/src/router/match-result.ts +34 -20
  978. package/src/router/metrics.ts +3 -3
  979. package/src/router/middleware-cookies.ts +55 -0
  980. package/src/router/middleware-types.ts +179 -0
  981. package/src/router/middleware.ts +239 -328
  982. package/src/router/pattern-matching.ts +302 -26
  983. package/src/router/prerender-match.ts +398 -0
  984. package/src/router/preview-match.ts +170 -0
  985. package/src/router/revalidation.ts +112 -33
  986. package/src/router/router-context.ts +40 -23
  987. package/src/router/router-interfaces.ts +439 -0
  988. package/src/router/router-options.ts +587 -0
  989. package/src/router/router-registry.ts +24 -0
  990. package/src/router/segment-resolution/fresh.ts +552 -0
  991. package/src/router/segment-resolution/helpers.ts +263 -0
  992. package/src/router/segment-resolution/loader-cache.ts +198 -0
  993. package/src/router/segment-resolution/revalidation.ts +1226 -0
  994. package/src/router/segment-resolution/static-store.ts +67 -0
  995. package/src/router/segment-resolution.ts +21 -0
  996. package/src/router/segment-wrappers.ts +289 -0
  997. package/src/router/telemetry-otel.ts +299 -0
  998. package/src/router/telemetry.ts +300 -0
  999. package/src/router/timeout.ts +148 -0
  1000. package/src/router/trie-matching.ts +221 -0
  1001. package/src/router/types.ts +78 -4
  1002. package/src/router.ts +672 -3566
  1003. package/src/rsc/handler-context.ts +45 -0
  1004. package/src/rsc/handler.ts +691 -757
  1005. package/src/rsc/helpers.ts +140 -6
  1006. package/src/rsc/index.ts +5 -5
  1007. package/src/rsc/loader-fetch.ts +209 -0
  1008. package/src/rsc/manifest-init.ts +86 -0
  1009. package/src/rsc/nonce.ts +14 -0
  1010. package/src/rsc/origin-guard.ts +141 -0
  1011. package/src/rsc/progressive-enhancement.ts +366 -0
  1012. package/src/rsc/response-error.ts +37 -0
  1013. package/src/rsc/response-route-handler.ts +347 -0
  1014. package/src/rsc/rsc-rendering.ts +250 -0
  1015. package/src/rsc/runtime-warnings.ts +42 -0
  1016. package/src/rsc/server-action.ts +344 -0
  1017. package/src/rsc/types.ts +38 -14
  1018. package/src/search-params.ts +227 -0
  1019. package/src/segment-system.tsx +59 -61
  1020. package/src/server/context.ts +217 -49
  1021. package/src/server/cookie-store.ts +190 -0
  1022. package/src/server/fetchable-loader-store.ts +37 -0
  1023. package/src/server/handle-store.ts +98 -20
  1024. package/src/server/loader-registry.ts +15 -56
  1025. package/src/server/request-context.ts +406 -65
  1026. package/src/server.ts +32 -133
  1027. package/src/ssr/index.tsx +157 -26
  1028. package/src/static-handler.ts +114 -0
  1029. package/src/theme/ThemeProvider.tsx +21 -15
  1030. package/src/theme/ThemeScript.tsx +5 -5
  1031. package/src/theme/constants.ts +11 -4
  1032. package/src/theme/index.ts +6 -7
  1033. package/src/theme/theme-context.ts +5 -31
  1034. package/src/theme/theme-script.ts +21 -18
  1035. package/src/theme/types.ts +1 -1
  1036. package/src/types/boundaries.ts +158 -0
  1037. package/src/types/cache-types.ts +198 -0
  1038. package/src/types/error-types.ts +192 -0
  1039. package/src/types/global-namespace.ts +100 -0
  1040. package/src/types/handler-context.ts +691 -0
  1041. package/src/types/index.ts +88 -0
  1042. package/src/types/loader-types.ts +183 -0
  1043. package/src/types/route-config.ts +161 -0
  1044. package/src/types/route-entry.ts +102 -0
  1045. package/src/types/segments.ts +153 -0
  1046. package/src/types.ts +1 -1561
  1047. package/src/urls/include-helper.ts +197 -0
  1048. package/src/urls/index.ts +53 -0
  1049. package/src/urls/path-helper-types.ts +339 -0
  1050. package/src/urls/path-helper.ts +329 -0
  1051. package/src/urls/pattern-types.ts +95 -0
  1052. package/src/urls/response-types.ts +106 -0
  1053. package/src/urls/type-extraction.ts +372 -0
  1054. package/src/urls/urls-function.ts +98 -0
  1055. package/src/urls.ts +1 -726
  1056. package/src/use-loader.tsx +85 -77
  1057. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  1058. package/src/vite/discovery/discover-routers.ts +345 -0
  1059. package/src/vite/discovery/prerender-collection.ts +385 -0
  1060. package/src/vite/discovery/route-types-writer.ts +258 -0
  1061. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1062. package/src/vite/discovery/state.ts +110 -0
  1063. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1064. package/src/vite/index.ts +10 -782
  1065. package/src/vite/plugin-types.ts +131 -0
  1066. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1067. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1068. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1069. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -51
  1070. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1071. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1072. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1073. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1074. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1075. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1076. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  1077. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1078. package/src/vite/plugins/version-injector.ts +83 -0
  1079. package/src/vite/plugins/version-plugin.ts +254 -0
  1080. package/src/vite/plugins/virtual-entries.ts +123 -0
  1081. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1082. package/src/vite/rango.ts +510 -0
  1083. package/src/vite/router-discovery.ts +785 -0
  1084. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1085. package/src/vite/utils/banner.ts +36 -0
  1086. package/src/vite/utils/bundle-analysis.ts +137 -0
  1087. package/src/vite/utils/manifest-utils.ts +70 -0
  1088. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1089. package/src/vite/utils/prerender-utils.ts +189 -0
  1090. package/src/vite/utils/shared-utils.ts +169 -0
  1091. package/CLAUDE.md +0 -7
  1092. package/src/__tests__/component-utils.test.ts +0 -76
  1093. package/src/__tests__/route-definition.test.ts +0 -63
  1094. package/src/__tests__/urls.test.tsx +0 -436
  1095. package/src/browser/lru-cache.ts +0 -69
  1096. package/src/browser/request-controller.ts +0 -164
  1097. package/src/cache/__tests__/document-cache.test.ts +0 -522
  1098. package/src/cache/__tests__/memory-segment-store.test.ts +0 -487
  1099. package/src/cache/__tests__/memory-store.test.ts +0 -484
  1100. package/src/cache/cf/__tests__/cf-cache-store.test.ts +0 -428
  1101. package/src/cache/memory-store.ts +0 -253
  1102. package/src/href.ts +0 -177
  1103. package/src/route-utils.ts +0 -89
  1104. package/src/router/__tests__/match-context.test.ts +0 -104
  1105. package/src/router/__tests__/match-pipelines.test.ts +0 -537
  1106. package/src/router/__tests__/match-result.test.ts +0 -566
  1107. package/src/router/__tests__/on-error.test.ts +0 -935
  1108. package/src/router/__tests__/pattern-matching.test.ts +0 -577
  1109. package/src/router/middleware.test.ts +0 -1355
  1110. package/src/rsc/__tests__/helpers.test.ts +0 -175
  1111. package/src/server/__tests__/request-context.test.ts +0 -171
  1112. package/src/ssr/__tests__/ssr-handler.test.tsx +0 -188
  1113. package/src/theme/__tests__/theme.test.ts +0 -120
  1114. package/src/vite/__tests__/expose-loader-id.test.ts +0 -117
  1115. package/src/vite/expose-handle-id.ts +0 -209
  1116. package/src/vite/expose-loader-id.ts +0 -357
  1117. package/src/vite/expose-location-state-id.ts +0 -177
  1118. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -13,13 +13,27 @@
13
13
  import { AsyncLocalStorage } from "node:async_hooks";
14
14
  import type { CookieOptions } from "../router/middleware.js";
15
15
  import type { LoaderDefinition, LoaderContext } from "../types.js";
16
+ import type { ScopedReverseFunction } from "../reverse.js";
17
+ import type {
18
+ DefaultEnv,
19
+ DefaultReverseRouteMap,
20
+ DefaultRouteName,
21
+ } from "../types/global-namespace.js";
16
22
  import type { Handle } from "../handle.js";
23
+ import { type ContextVar, contextGet, contextSet } from "../context-var.js";
17
24
  import { createHandleStore, type HandleStore } from "./handle-store.js";
18
25
  import { isHandle } from "../handle.js";
19
26
  import { track } from "./context.js";
27
+ import { getFetchableLoader } from "./fetchable-loader-store.js";
20
28
  import type { SegmentCacheStore } from "../cache/types.js";
21
29
  import type { Theme, ResolvedThemeConfig } from "../theme/types.js";
22
30
  import { THEME_COOKIE } from "../theme/constants.js";
31
+ import type { LocationStateEntry } from "../browser/react/location-state-shared.js";
32
+ import { NOCACHE_SYMBOL, assertNotInsideCacheExec } from "../cache/taint.js";
33
+ import { createReverseFunction } from "../router/handler-context.js";
34
+ import { getGlobalRouteMap, isRouteRootScoped } from "../route-map-builder.js";
35
+ import { invariant } from "../errors.js";
36
+ import { isAutoGeneratedRouteName } from "../route-name.js";
23
37
 
24
38
  /**
25
39
  * Unified request context available via getRequestContext()
@@ -28,7 +42,7 @@ import { THEME_COOKIE } from "../theme/constants.js";
28
42
  * Use this when you need access to request data outside of route handlers.
29
43
  */
30
44
  export interface RequestContext<
31
- TEnv = unknown,
45
+ TEnv = DefaultEnv,
32
46
  TParams = Record<string, string>,
33
47
  > {
34
48
  /** Platform bindings (Cloudflare env, etc.) */
@@ -44,30 +58,43 @@ export interface RequestContext<
44
58
  /** Variables set by middleware (same as ctx.var) */
45
59
  var: Record<string, any>;
46
60
  /** Get a variable set by middleware */
47
- get: <K extends string>(key: K) => any;
61
+ get: {
62
+ <T>(contextVar: ContextVar<T>): T | undefined;
63
+ <K extends string>(key: K): any;
64
+ };
48
65
  /** Set a variable (shared with middleware and handlers) */
49
- set: <K extends string>(key: K, value: any) => void;
66
+ set: {
67
+ <T>(contextVar: ContextVar<T>, value: T): void;
68
+ <K extends string>(key: K, value: any): void;
69
+ };
50
70
  /**
51
71
  * Route params (populated after route matching)
52
72
  * Initially empty, then set to matched params
53
73
  */
54
74
  params: TParams;
55
75
  /**
56
- * Stub response for setting headers/cookies
57
- * Headers set here are merged into the final response
76
+ * Stub response for setting headers/cookies (read-only).
77
+ * Headers set here are merged into the final response.
78
+ * Use header() or setStatus() to mutate response headers/status.
79
+ * Use cookies().set()/cookies().delete() for cookie mutations.
58
80
  */
59
- res: Response;
81
+ readonly res: Response;
60
82
 
61
- /** Get a cookie value from the request */
83
+ /** @internal Get a cookie value (effective: request + response mutations). Use cookies().get() instead. */
62
84
  cookie(name: string): string | undefined;
63
- /** Get all cookies from the request */
85
+ /** @internal Get all cookies (effective merged view). Use cookies().getAll() instead. */
64
86
  cookies(): Record<string, string>;
65
- /** Set a cookie on the response */
87
+ /** @internal Set a cookie on the response. Use cookies().set() instead. */
66
88
  setCookie(name: string, value: string, options?: CookieOptions): void;
67
- /** Delete a cookie */
68
- deleteCookie(name: string, options?: Pick<CookieOptions, "domain" | "path">): void;
89
+ /** @internal Delete a cookie. Use cookies().delete() instead. */
90
+ deleteCookie(
91
+ name: string,
92
+ options?: Pick<CookieOptions, "domain" | "path">,
93
+ ): void;
69
94
  /** Set a response header */
70
95
  header(name: string, value: string): void;
96
+ /** Set the response status code */
97
+ setStatus(status: number): void;
71
98
 
72
99
  /**
73
100
  * Access loader data or push handle data.
@@ -89,10 +116,12 @@ export interface RequestContext<
89
116
  * ```
90
117
  */
91
118
  use: {
92
- <T, TLoaderParams = any>(loader: LoaderDefinition<T, TLoaderParams>): Promise<T>;
93
- <TData, TAccumulated = TData[]>(handle: Handle<TData, TAccumulated>): (
94
- data: TData | Promise<TData> | (() => Promise<TData>)
95
- ) => void;
119
+ <T, TLoaderParams = any>(
120
+ loader: LoaderDefinition<T, TLoaderParams>,
121
+ ): Promise<T>;
122
+ <TData, TAccumulated = TData[]>(
123
+ handle: Handle<TData, TAccumulated>,
124
+ ): (data: TData | Promise<TData> | (() => Promise<TData>)) => void;
96
125
  };
97
126
 
98
127
  /** HTTP method (GET, POST, PUT, PATCH, DELETE, etc.) */
@@ -104,6 +133,12 @@ export interface RequestContext<
104
133
  /** @internal Cache store for segment caching (optional, used by CacheScope) */
105
134
  _cacheStore?: SegmentCacheStore;
106
135
 
136
+ /** @internal Cache profiles for "use cache" profile resolution (per-router) */
137
+ _cacheProfiles?: Record<
138
+ string,
139
+ import("../cache/profile-registry.js").CacheProfile
140
+ >;
141
+
107
142
  /**
108
143
  * Schedule work to run after the response is sent.
109
144
  * On Cloudflare Workers, uses ctx.waitUntil().
@@ -177,8 +212,89 @@ export interface RequestContext<
177
212
 
178
213
  /** @internal Theme configuration (null if theme not enabled) */
179
214
  _themeConfig?: ResolvedThemeConfig | null;
215
+
216
+ /**
217
+ * Attach location state entries to the current response.
218
+ *
219
+ * For partial (SPA) requests, the state is included in the RSC payload
220
+ * metadata and merged into history.pushState on the client. For redirect
221
+ * responses, the state travels through the redirect payload so the target
222
+ * page can read it via useLocationState.
223
+ *
224
+ * Multiple calls accumulate entries.
225
+ *
226
+ * @example
227
+ * ```typescript
228
+ * ctx.setLocationState(Flash({ text: "Item saved!" }));
229
+ * ```
230
+ */
231
+ setLocationState(entries: LocationStateEntry | LocationStateEntry[]): void;
232
+
233
+ /** @internal Accumulated location state entries */
234
+ _locationState?: LocationStateEntry[];
235
+
236
+ /**
237
+ * The matched route name, if the route has an explicit name.
238
+ * Undefined before route matching or for unnamed routes.
239
+ * Includes the namespace prefix from include() (e.g., "blog.post").
240
+ */
241
+ routeName?: DefaultRouteName;
242
+
243
+ /**
244
+ * Generate URLs from route names.
245
+ * Uses the global route map. After route matching, scoped (`.name`) resolution
246
+ * works within the matched include() scope.
247
+ */
248
+ reverse: ScopedReverseFunction<
249
+ Record<string, string>,
250
+ DefaultReverseRouteMap
251
+ >;
252
+
253
+ /** @internal Route name from route matching, used for scoped reverse resolution */
254
+ _routeName?: string;
255
+
256
+ /** @internal Previous route key (from the navigation source), used for revalidation */
257
+ _prevRouteKey?: string;
258
+
259
+ /** @internal Per-request error dedup set for onError reporting */
260
+ _reportedErrors: WeakSet<object>;
261
+
262
+ /**
263
+ * @internal Report a non-fatal background error through the router's
264
+ * onError callback. Wired by the RSC handler / router during request
265
+ * creation. Cache-runtime and other subsystems call this to surface
266
+ * errors without failing the response.
267
+ */
268
+ _reportBackgroundError?: (error: unknown, category: string) => void;
180
269
  }
181
270
 
271
+ /**
272
+ * Public view of RequestContext, without internal methods and fields.
273
+ *
274
+ * This is the type exported to library consumers. Internal code should
275
+ * use the full RequestContext interface directly.
276
+ */
277
+ export type PublicRequestContext<
278
+ TEnv = DefaultEnv,
279
+ TParams = Record<string, string>,
280
+ > = Omit<
281
+ RequestContext<TEnv, TParams>,
282
+ | "cookie"
283
+ | "cookies"
284
+ | "setCookie"
285
+ | "deleteCookie"
286
+ | "_handleStore"
287
+ | "_cacheStore"
288
+ | "_cacheProfiles"
289
+ | "_onResponseCallbacks"
290
+ | "_themeConfig"
291
+ | "_locationState"
292
+ | "_routeName"
293
+ | "_prevRouteKey"
294
+ | "_reportedErrors"
295
+ | "_reportBackgroundError"
296
+ >;
297
+
182
298
  // AsyncLocalStorage instance for request context
183
299
  const requestContextStorage = new AsyncLocalStorage<RequestContext<any>>();
184
300
 
@@ -188,16 +304,33 @@ const requestContextStorage = new AsyncLocalStorage<RequestContext<any>>();
188
304
  */
189
305
  export function runWithRequestContext<TEnv, T>(
190
306
  context: RequestContext<TEnv>,
191
- fn: () => T
307
+ fn: () => T,
192
308
  ): T {
193
309
  return requestContextStorage.run(context, fn);
194
310
  }
195
311
 
196
312
  /**
197
313
  * Get the current request context
198
- * Returns undefined if not running within a request context
314
+ * Throws if called outside of a request context
315
+ */
316
+ export function getRequestContext<TEnv = DefaultEnv>(): RequestContext<TEnv> {
317
+ const ctx = requestContextStorage.getStore() as
318
+ | RequestContext<TEnv>
319
+ | undefined;
320
+ invariant(
321
+ ctx,
322
+ "getRequestContext() called outside of a request context. " +
323
+ "This function must be called from within a route handler, loader, middleware, " +
324
+ "server action, or server component.",
325
+ );
326
+ return ctx;
327
+ }
328
+
329
+ /**
330
+ * @internal Get the request context without throwing — for internal code that
331
+ * may run outside a request context (cache stores, optional handle lookups, etc.)
199
332
  */
200
- export function getRequestContext<TEnv = unknown>():
333
+ export function _getRequestContext<TEnv = DefaultEnv>():
201
334
  | RequestContext<TEnv>
202
335
  | undefined {
203
336
  return requestContextStorage.getStore() as RequestContext<TEnv> | undefined;
@@ -205,28 +338,67 @@ export function getRequestContext<TEnv = unknown>():
205
338
 
206
339
  /**
207
340
  * Update params on the current request context
208
- * Called after route matching to populate route params
341
+ * Called after route matching to populate route params and route name
209
342
  */
210
- export function setRequestContextParams(params: Record<string, string>): void {
343
+ export function setRequestContextParams(
344
+ params: Record<string, string>,
345
+ routeName?: string,
346
+ ): void {
211
347
  const ctx = requestContextStorage.getStore();
212
348
  if (ctx) {
213
349
  ctx.params = params;
350
+ if (routeName !== undefined) {
351
+ ctx._routeName = routeName;
352
+ ctx.routeName = (
353
+ routeName && !isAutoGeneratedRouteName(routeName)
354
+ ? routeName
355
+ : undefined
356
+ ) as DefaultRouteName | undefined;
357
+ }
358
+ // Update reverse with scoped resolution now that route is known
359
+ ctx.reverse = createReverseFunction(
360
+ getGlobalRouteMap(),
361
+ routeName,
362
+ params,
363
+ routeName ? isRouteRootScoped(routeName) : undefined,
364
+ );
214
365
  }
215
366
  }
216
367
 
217
368
  /**
218
- * Get the current request context, throwing if not available
219
- * Use this when context is required (e.g., in loader actions)
369
+ * Store the previous route key on the request context.
370
+ * Called during partial-match context creation to make the navigation source
371
+ * route key available for revalidation and intercept evaluation.
372
+ * @internal
220
373
  */
221
- export function requireRequestContext<TEnv = unknown>(): RequestContext<TEnv> {
222
- const ctx = getRequestContext<TEnv>();
223
- if (!ctx) {
224
- throw new Error(
225
- "Request context not available. This function must be called from within a server action " +
226
- "executed through the RSC handler."
227
- );
374
+ export function setRequestContextPrevRouteKey(
375
+ prevRouteKey: string | undefined,
376
+ ): void {
377
+ const ctx = requestContextStorage.getStore();
378
+ if (ctx && prevRouteKey !== undefined) {
379
+ ctx._prevRouteKey = prevRouteKey;
228
380
  }
229
- return ctx;
381
+ }
382
+
383
+ /**
384
+ * Get accumulated location state entries from the current request context.
385
+ * Returns undefined if no state has been set.
386
+ *
387
+ * @internal Used by the RSC handler to include state in payload metadata.
388
+ */
389
+ export function getLocationState(): LocationStateEntry[] | undefined {
390
+ const ctx = getRequestContext();
391
+ return ctx?._locationState;
392
+ }
393
+
394
+ /**
395
+ * Get the current request context, throwing if not available
396
+ * @deprecated Use getRequestContext() directly — it now throws if outside context
397
+ */
398
+ export function requireRequestContext<
399
+ TEnv = DefaultEnv,
400
+ >(): RequestContext<TEnv> {
401
+ return getRequestContext<TEnv>();
230
402
  }
231
403
 
232
404
  /**
@@ -245,8 +417,15 @@ export interface CreateRequestContextOptions<TEnv> {
245
417
  request: Request;
246
418
  url: URL;
247
419
  variables: Record<string, any>;
420
+ /** Optional initial response stub headers/status to seed effective cookie reads */
421
+ initialResponse?: Response;
248
422
  /** Optional cache store for segment caching (used by CacheScope) */
249
423
  cacheStore?: SegmentCacheStore;
424
+ /** Optional cache profiles for "use cache" resolution (per-router) */
425
+ cacheProfiles?: Record<
426
+ string,
427
+ import("../cache/profile-registry.js").CacheProfile
428
+ >;
250
429
  /** Optional Cloudflare execution context for waitUntil support */
251
430
  executionContext?: ExecutionContext;
252
431
  /** Optional theme configuration (enables ctx.theme and ctx.setTheme) */
@@ -262,20 +441,37 @@ export interface CreateRequestContextOptions<TEnv> {
262
441
  * - Passed to handlers as ctx
263
442
  */
264
443
  export function createRequestContext<TEnv>(
265
- options: CreateRequestContextOptions<TEnv>
444
+ options: CreateRequestContextOptions<TEnv>,
266
445
  ): RequestContext<TEnv> {
267
- const { env, request, url, variables, cacheStore, executionContext, themeConfig } = options;
446
+ const {
447
+ env,
448
+ request,
449
+ url,
450
+ variables,
451
+ initialResponse,
452
+ cacheStore,
453
+ cacheProfiles,
454
+ executionContext,
455
+ themeConfig,
456
+ } = options;
268
457
  const cookieHeader = request.headers.get("Cookie");
269
458
  let parsedCookies: Record<string, string> | null = null;
270
459
 
271
- // Create stub response for collecting headers/cookies
272
- const stubResponse = new Response(null, { status: 200 });
460
+ // Create stub response for collecting headers/cookies.
461
+ // All cookie/header mutations go here; cookie reads derive from it.
462
+ let stubResponse = initialResponse
463
+ ? new Response(null, {
464
+ status: initialResponse.status,
465
+ statusText: initialResponse.statusText,
466
+ headers: new Headers(initialResponse.headers),
467
+ })
468
+ : new Response(null, { status: 200 });
273
469
 
274
470
  // Create handle store and loader memoization for this request
275
471
  const handleStore = createHandleStore();
276
472
  const loaderPromises = new Map<string, Promise<any>>();
277
473
 
278
- // Lazy parse cookies
474
+ // Lazy parse cookies from the original Cookie header
279
475
  const getParsedCookies = (): Record<string, string> => {
280
476
  if (!parsedCookies) {
281
477
  parsedCookies = parseCookiesFromHeader(cookieHeader);
@@ -283,11 +479,35 @@ export function createRequestContext<TEnv>(
283
479
  return parsedCookies;
284
480
  };
285
481
 
482
+ // Cached response cookie mutations — invalidated on setCookie/deleteCookie/setTheme
483
+ let responseCookieCache: Map<string, string | null> | null = null;
484
+ const getResponseCookies = (): Map<string, string | null> => {
485
+ if (!responseCookieCache) {
486
+ responseCookieCache = parseResponseCookies(stubResponse);
487
+ }
488
+ return responseCookieCache;
489
+ };
490
+ const invalidateResponseCookieCache = () => {
491
+ responseCookieCache = null;
492
+ };
493
+
494
+ // Effective cookie read: response stub Set-Cookie wins, then original header.
495
+ // The stub IS the source of truth for same-request mutations.
496
+ const effectiveCookie = (name: string): string | undefined => {
497
+ const mutations = getResponseCookies();
498
+ if (mutations.has(name)) {
499
+ const v = mutations.get(name);
500
+ return v === null ? undefined : v;
501
+ }
502
+ return getParsedCookies()[name];
503
+ };
504
+
286
505
  // Theme helpers (only used when themeConfig is provided)
287
506
  const getTheme = (): Theme | undefined => {
288
507
  if (!themeConfig) return undefined;
289
508
 
290
- const stored = getParsedCookies()[themeConfig.storageKey];
509
+ // Use overlay-aware read so setTheme() in the same request is reflected
510
+ const stored = effectiveCookie(themeConfig.storageKey);
291
511
  if (stored) {
292
512
  // Validate stored value
293
513
  if (stored === "system" && themeConfig.enableSystem) {
@@ -305,19 +525,22 @@ export function createRequestContext<TEnv>(
305
525
 
306
526
  // Validate theme value
307
527
  if (theme !== "system" && !themeConfig.themes.includes(theme)) {
308
- console.warn(`[Theme] Invalid theme value: "${theme}". Valid values: system, ${themeConfig.themes.join(", ")}`);
528
+ console.warn(
529
+ `[Theme] Invalid theme value: "${theme}". Valid values: system, ${themeConfig.themes.join(", ")}`,
530
+ );
309
531
  return;
310
532
  }
311
533
 
312
- // Set cookie
534
+ // Write to stub — effectiveCookie() will pick it up on next read
313
535
  stubResponse.headers.append(
314
536
  "Set-Cookie",
315
537
  serializeCookieValue(themeConfig.storageKey, theme, {
316
538
  path: THEME_COOKIE.path,
317
539
  maxAge: THEME_COOKIE.maxAge,
318
540
  sameSite: THEME_COOKIE.sameSite,
319
- })
541
+ }),
320
542
  );
543
+ invalidateResponseCookieCache();
321
544
  };
322
545
 
323
546
  // Build the context object first (without use), then add use
@@ -328,42 +551,82 @@ export function createRequestContext<TEnv>(
328
551
  pathname: url.pathname,
329
552
  searchParams: url.searchParams,
330
553
  var: variables,
331
- get: <K extends string>(key: K) => variables[key],
332
- set: <K extends string>(key: K, value: any) => {
333
- variables[key] = value;
334
- },
554
+ get: ((keyOrVar: any) =>
555
+ contextGet(variables, keyOrVar)) as RequestContext<TEnv>["get"],
556
+ set: ((keyOrVar: any, value: any) => {
557
+ assertNotInsideCacheExec(ctx, "set");
558
+ contextSet(variables, keyOrVar, value);
559
+ }) as RequestContext<TEnv>["set"],
335
560
  params: {} as Record<string, string>,
336
- res: stubResponse,
561
+
562
+ get res(): Response {
563
+ return stubResponse;
564
+ },
565
+ set res(_: Response) {
566
+ throw new Error(
567
+ "ctx.res is read-only. Use ctx.header() to set response headers, or cookies() for cookie mutations.",
568
+ );
569
+ },
337
570
 
338
571
  cookie(name: string): string | undefined {
339
- return getParsedCookies()[name];
572
+ return effectiveCookie(name);
340
573
  },
341
574
 
342
575
  cookies(): Record<string, string> {
343
- return { ...getParsedCookies() };
576
+ const parsed = getParsedCookies();
577
+ const mutations = getResponseCookies();
578
+ if (mutations.size === 0) return { ...parsed };
579
+ // Build result without delete (avoids V8 dictionary-mode de-opt)
580
+ const deleted = new Set<string>();
581
+ for (const [k, v] of mutations) {
582
+ if (v === null) deleted.add(k);
583
+ }
584
+ const result: Record<string, string> = {};
585
+ for (const key of Object.keys(parsed)) {
586
+ if (!deleted.has(key)) result[key] = parsed[key];
587
+ }
588
+ for (const [k, v] of mutations) {
589
+ if (v !== null) result[k] = v;
590
+ }
591
+ return result;
344
592
  },
345
593
 
346
594
  setCookie(name: string, value: string, options?: CookieOptions): void {
595
+ assertNotInsideCacheExec(ctx, "setCookie");
347
596
  stubResponse.headers.append(
348
597
  "Set-Cookie",
349
- serializeCookieValue(name, value, options)
598
+ serializeCookieValue(name, value, options),
350
599
  );
600
+ invalidateResponseCookieCache();
351
601
  },
352
602
 
353
603
  deleteCookie(
354
604
  name: string,
355
- options?: Pick<CookieOptions, "domain" | "path">
605
+ options?: Pick<CookieOptions, "domain" | "path">,
356
606
  ): void {
607
+ assertNotInsideCacheExec(ctx, "deleteCookie");
357
608
  stubResponse.headers.append(
358
609
  "Set-Cookie",
359
- serializeCookieValue(name, "", { ...options, maxAge: 0 })
610
+ serializeCookieValue(name, "", { ...options, maxAge: 0 }),
360
611
  );
612
+ invalidateResponseCookieCache();
361
613
  },
362
614
 
363
615
  header(name: string, value: string): void {
616
+ assertNotInsideCacheExec(ctx, "header");
364
617
  stubResponse.headers.set(name, value);
365
618
  },
366
619
 
620
+ setStatus(status: number): void {
621
+ assertNotInsideCacheExec(ctx, "setStatus");
622
+ // Response.status is read-only, so we must create a new Response.
623
+ // Headers are passed by reference — no cookie cache invalidation needed.
624
+ stubResponse = new Response(null, {
625
+ status,
626
+ headers: stubResponse.headers,
627
+ });
628
+ },
629
+
367
630
  // Placeholder - will be replaced below
368
631
  use: null as any,
369
632
 
@@ -371,6 +634,7 @@ export function createRequestContext<TEnv>(
371
634
 
372
635
  _handleStore: handleStore,
373
636
  _cacheStore: cacheStore,
637
+ _cacheProfiles: cacheProfiles,
374
638
 
375
639
  waitUntil(fn: () => Promise<void>): void {
376
640
  if (executionContext?.waitUntil) {
@@ -378,20 +642,43 @@ export function createRequestContext<TEnv>(
378
642
  executionContext.waitUntil(fn());
379
643
  } else {
380
644
  // Node.js / dev: fire-and-forget with error logging
381
- fn().catch((err) => console.error("[waitUntil] Background task failed:", err));
645
+ fn().catch((err) =>
646
+ console.error("[waitUntil] Background task failed:", err),
647
+ );
382
648
  }
383
649
  },
384
650
 
385
651
  _onResponseCallbacks: [],
386
652
 
387
653
  onResponse(callback: (response: Response) => Response): void {
654
+ assertNotInsideCacheExec(ctx, "onResponse");
388
655
  this._onResponseCallbacks.push(callback);
389
656
  },
390
657
 
391
658
  // Theme properties (only set when themeConfig is provided)
392
- theme: themeConfig ? getTheme() : undefined,
393
- setTheme: themeConfig ? setTheme : undefined,
659
+ get theme() {
660
+ return themeConfig ? getTheme() : undefined;
661
+ },
662
+ setTheme: themeConfig
663
+ ? (theme: Theme) => {
664
+ assertNotInsideCacheExec(ctx, "setTheme");
665
+ setTheme(theme);
666
+ }
667
+ : undefined,
394
668
  _themeConfig: themeConfig,
669
+
670
+ setLocationState(entries: LocationStateEntry | LocationStateEntry[]): void {
671
+ assertNotInsideCacheExec(ctx, "setLocationState");
672
+ const arr = Array.isArray(entries) ? entries : [entries];
673
+ this._locationState = this._locationState
674
+ ? [...this._locationState, ...arr]
675
+ : arr;
676
+ },
677
+ _locationState: undefined,
678
+
679
+ _reportedErrors: new WeakSet<object>(),
680
+
681
+ reverse: createReverseFunction(getGlobalRouteMap(), undefined, {}),
395
682
  };
396
683
 
397
684
  // Now create use() with access to ctx
@@ -401,14 +688,53 @@ export function createRequestContext<TEnv>(
401
688
  getContext: () => ctx,
402
689
  });
403
690
 
691
+ // Brand with taint symbol so "use cache" excludes ctx from cache keys
692
+ (ctx as any)[NOCACHE_SYMBOL] = true;
404
693
  return ctx;
405
694
  }
406
695
 
696
+ /**
697
+ * Parse Set-Cookie headers from a response into effective cookie state.
698
+ * Returns a map of cookie name -> value (string) or name -> null (deleted).
699
+ * Last-write-wins: later Set-Cookie entries for the same name overwrite earlier ones.
700
+ * Max-Age=0 is treated as a delete.
701
+ */
702
+ const MAX_AGE_ZERO_RE = /;\s*Max-Age\s*=\s*0/i;
703
+
704
+ function parseResponseCookies(response: Response): Map<string, string | null> {
705
+ const result = new Map<string, string | null>();
706
+ const setCookies = response.headers.getSetCookie();
707
+
708
+ for (const header of setCookies) {
709
+ // First segment before ';' is the name=value pair
710
+ const semiIdx = header.indexOf(";");
711
+ const pair = semiIdx === -1 ? header : header.substring(0, semiIdx);
712
+ const eqIdx = pair.indexOf("=");
713
+ if (eqIdx === -1) continue;
714
+
715
+ let name: string;
716
+ let value: string;
717
+ try {
718
+ name = decodeURIComponent(pair.substring(0, eqIdx).trim());
719
+ value = decodeURIComponent(pair.substring(eqIdx + 1).trim());
720
+ } catch {
721
+ // Malformed encoding — skip this entry
722
+ continue;
723
+ }
724
+
725
+ // Max-Age=0 means the cookie is being deleted
726
+ const isDeleted = MAX_AGE_ZERO_RE.test(header);
727
+ result.set(name, isDeleted ? null : value);
728
+ }
729
+
730
+ return result;
731
+ }
732
+
407
733
  /**
408
734
  * Parse cookies from Cookie header
409
735
  */
410
736
  function parseCookiesFromHeader(
411
- cookieHeader: string | null
737
+ cookieHeader: string | null,
412
738
  ): Record<string, string> {
413
739
  if (!cookieHeader) return {};
414
740
 
@@ -418,7 +744,13 @@ function parseCookiesFromHeader(
418
744
  for (const pair of pairs) {
419
745
  const [name, ...rest] = pair.trim().split("=");
420
746
  if (name) {
421
- cookies[name] = decodeURIComponent(rest.join("="));
747
+ const raw = rest.join("=");
748
+ try {
749
+ cookies[name] = decodeURIComponent(raw);
750
+ } catch {
751
+ // Malformed percent-encoded value (e.g. %zz, %2) - fall back to raw value
752
+ cookies[name] = raw;
753
+ }
422
754
  }
423
755
  }
424
756
 
@@ -431,7 +763,7 @@ function parseCookiesFromHeader(
431
763
  function serializeCookieValue(
432
764
  name: string,
433
765
  value: string,
434
- options: CookieOptions = {}
766
+ options: CookieOptions = {},
435
767
  ): string {
436
768
  let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
437
769
 
@@ -463,7 +795,7 @@ export interface CreateUseFunctionOptions<TEnv> {
463
795
  * - For handles: returns a push function to add handle data
464
796
  */
465
797
  export function createUseFunction<TEnv>(
466
- options: CreateUseFunctionOptions<TEnv>
798
+ options: CreateUseFunctionOptions<TEnv>,
467
799
  ): RequestContext["use"] {
468
800
  const { handleStore, loaderPromises, getContext } = options;
469
801
 
@@ -477,16 +809,19 @@ export function createUseFunction<TEnv>(
477
809
  if (!segmentId) {
478
810
  throw new Error(
479
811
  `Handle "${handle.$$id}" used outside of handler context. ` +
480
- `Handles must be used within route/layout handlers.`
812
+ `Handles must be used within route/layout handlers.`,
481
813
  );
482
814
  }
483
815
 
484
816
  // Return a push function bound to this handle and segment
485
- return (dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
817
+ return (
818
+ dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>),
819
+ ) => {
486
820
  // If it's a function, call it immediately to get the promise
487
- const valueOrPromise = typeof dataOrFn === "function"
488
- ? (dataOrFn as () => Promise<unknown>)()
489
- : dataOrFn;
821
+ const valueOrPromise =
822
+ typeof dataOrFn === "function"
823
+ ? (dataOrFn as () => Promise<unknown>)()
824
+ : dataOrFn;
490
825
 
491
826
  // Push directly - promises will be serialized by RSC and streamed
492
827
  handleStore.push(handle.$$id, segmentId, valueOrPromise);
@@ -504,8 +839,6 @@ export function createUseFunction<TEnv>(
504
839
  // Get loader function - either from loader object or fetchable registry
505
840
  let loaderFn = loader.fn;
506
841
  if (!loaderFn) {
507
- // Lazy import to avoid circular dependency
508
- const { getFetchableLoader } = require("../loader.rsc.js");
509
842
  const fetchable = getFetchableLoader(loader.$$id);
510
843
  if (fetchable) {
511
844
  loaderFn = fetchable.fn;
@@ -514,7 +847,7 @@ export function createUseFunction<TEnv>(
514
847
 
515
848
  if (!loaderFn) {
516
849
  throw new Error(
517
- `Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build.`
850
+ `Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build.`,
518
851
  );
519
852
  }
520
853
 
@@ -523,21 +856,29 @@ export function createUseFunction<TEnv>(
523
856
  // Create loader context with recursive use() support
524
857
  const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
525
858
  params: ctx.params,
859
+ routeParams: (ctx.params ?? {}) as Record<string, string>,
526
860
  request: ctx.request,
527
861
  searchParams: ctx.searchParams,
862
+ search: (ctx as any).search ?? {},
528
863
  pathname: ctx.pathname,
529
864
  url: ctx.url,
530
865
  env: ctx.env as any,
531
866
  var: ctx.var as any,
532
867
  get: ctx.get as any,
533
868
  use: <TDep, TDepParams = any>(
534
- dep: LoaderDefinition<TDep, TDepParams>
869
+ dep: LoaderDefinition<TDep, TDepParams>,
535
870
  ): Promise<TDep> => {
536
871
  // Recursive call - will start dep loader if not already started
537
872
  return ctx.use(dep);
538
873
  },
539
874
  method: "GET",
540
875
  body: undefined,
876
+ reverse: createReverseFunction(
877
+ getGlobalRouteMap(),
878
+ ctx._routeName,
879
+ ctx.params as Record<string, string>,
880
+ ctx._routeName ? isRouteRootScoped(ctx._routeName) : undefined,
881
+ ),
541
882
  };
542
883
 
543
884
  // Start loader execution with tracking