@rangojs/router 0.0.0-experimental.2 → 0.0.0-experimental.204030a9

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