@rangojs/router 0.0.0-experimental.7 → 0.0.0-experimental.73ab3466

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