@rangojs/router 0.0.0-experimental.80 → 0.0.0-experimental.80daa23e

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 (1717) hide show
  1. package/AGENTS.md +8 -4
  2. package/README.md +318 -791
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +927 -273
  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/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  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/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  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/dist/href-context.d.ts +29 -0
  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/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
  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/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types/__internal.d.ts +127 -0
  749. package/dist/types/bin/rango.d.ts +1 -0
  750. package/dist/types/browser/action-coordinator.d.ts +57 -0
  751. package/dist/types/browser/action-fence.d.ts +33 -0
  752. package/dist/types/browser/app-shell.d.ts +34 -0
  753. package/dist/types/browser/app-version.d.ts +6 -0
  754. package/dist/types/browser/connection-warmup.d.ts +31 -0
  755. package/dist/types/browser/cookie-name.d.ts +66 -0
  756. package/dist/types/browser/dev-discovery.d.ts +11 -0
  757. package/dist/types/browser/event-controller.d.ts +231 -0
  758. package/dist/types/browser/history-state.d.ts +26 -0
  759. package/dist/types/browser/index.d.ts +1 -0
  760. package/dist/types/browser/intercept-utils.d.ts +30 -0
  761. package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
  762. package/dist/types/browser/link-interceptor.d.ts +53 -0
  763. package/dist/types/browser/logging.d.ts +33 -0
  764. package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
  765. package/dist/types/browser/navigation-bridge.d.ts +39 -0
  766. package/dist/types/browser/navigation-client.d.ts +17 -0
  767. package/dist/types/browser/navigation-store-handle.d.ts +25 -0
  768. package/dist/types/browser/navigation-store.d.ts +85 -0
  769. package/dist/types/browser/navigation-transaction.d.ts +75 -0
  770. package/dist/types/browser/network-error-handler.d.ts +35 -0
  771. package/dist/types/browser/notify-listeners.d.ts +2 -0
  772. package/dist/types/browser/partial-update.d.ts +61 -0
  773. package/dist/types/browser/prefetch/cache.d.ts +224 -0
  774. package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
  775. package/dist/types/browser/prefetch/fetch.d.ts +52 -0
  776. package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
  777. package/dist/types/browser/prefetch/loader.d.ts +12 -0
  778. package/dist/types/browser/prefetch/observer.d.ts +24 -0
  779. package/dist/types/browser/prefetch/policy.d.ts +13 -0
  780. package/dist/types/browser/prefetch/queue.d.ts +48 -0
  781. package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
  782. package/dist/types/browser/prefetch/runtime.d.ts +2 -0
  783. package/dist/types/browser/rango-state.d.ts +56 -0
  784. package/dist/types/browser/react/Link.d.ts +132 -0
  785. package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
  786. package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
  787. package/dist/types/browser/react/context.d.ts +57 -0
  788. package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
  789. package/dist/types/browser/react/index.d.ts +1 -0
  790. package/dist/types/browser/react/location-state-shared.d.ts +162 -0
  791. package/dist/types/browser/react/location-state.d.ts +29 -0
  792. package/dist/types/browser/react/mount-context.d.ts +23 -0
  793. package/dist/types/browser/react/nonce-context.d.ts +14 -0
  794. package/dist/types/browser/react/shallow-equal.d.ts +5 -0
  795. package/dist/types/browser/react/use-action.d.ts +61 -0
  796. package/dist/types/browser/react/use-handle.d.ts +21 -0
  797. package/dist/types/browser/react/use-href.d.ts +32 -0
  798. package/dist/types/browser/react/use-link-status.d.ts +36 -0
  799. package/dist/types/browser/react/use-mount.d.ts +24 -0
  800. package/dist/types/browser/react/use-navigation.d.ts +15 -0
  801. package/dist/types/browser/react/use-params.d.ts +21 -0
  802. package/dist/types/browser/react/use-pathname.d.ts +13 -0
  803. package/dist/types/browser/react/use-reverse.d.ts +40 -0
  804. package/dist/types/browser/react/use-router.d.ts +30 -0
  805. package/dist/types/browser/react/use-search-params.d.ts +66 -0
  806. package/dist/types/browser/react/use-segments.d.ts +29 -0
  807. package/dist/types/browser/response-adapter.d.ts +58 -0
  808. package/dist/types/browser/rsc-router.d.ts +146 -0
  809. package/dist/types/browser/scroll-restoration.d.ts +103 -0
  810. package/dist/types/browser/segment-reconciler.d.ts +74 -0
  811. package/dist/types/browser/segment-structure-assert.d.ts +16 -0
  812. package/dist/types/browser/server-action-bridge.d.ts +29 -0
  813. package/dist/types/browser/types.d.ts +546 -0
  814. package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
  815. package/dist/types/build/collect-fallback-refs.d.ts +5 -0
  816. package/dist/types/build/generate-manifest.d.ts +106 -0
  817. package/dist/types/build/generate-route-types.d.ts +8 -0
  818. package/dist/types/build/index.d.ts +21 -0
  819. package/dist/types/build/merge-full-manifests.d.ts +3 -0
  820. package/dist/types/build/prefix-tree-utils.d.ts +56 -0
  821. package/dist/types/build/route-trie.d.ts +20 -0
  822. package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
  823. package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
  824. package/dist/types/build/route-types/codegen.d.ts +16 -0
  825. package/dist/types/build/route-types/include-resolution.d.ts +74 -0
  826. package/dist/types/build/route-types/param-extraction.d.ts +13 -0
  827. package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
  828. package/dist/types/build/route-types/router-processing.d.ts +81 -0
  829. package/dist/types/build/route-types/scan-filter.d.ts +17 -0
  830. package/dist/types/build/route-types/source-scan.d.ts +13 -0
  831. package/dist/types/build/runtime-discovery.d.ts +24 -0
  832. package/dist/types/cache/background-task.d.ts +21 -0
  833. package/dist/types/cache/cache-error.d.ts +71 -0
  834. package/dist/types/cache/cache-exec-scope.d.ts +31 -0
  835. package/dist/types/cache/cache-key-utils.d.ts +43 -0
  836. package/dist/types/cache/cache-policy.d.ts +59 -0
  837. package/dist/types/cache/cache-runtime.d.ts +51 -0
  838. package/dist/types/cache/cache-scope.d.ts +215 -0
  839. package/dist/types/cache/cache-tag.d.ts +79 -0
  840. package/dist/types/cache/cf/cf-base64.d.ts +4 -0
  841. package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
  842. package/dist/types/cache/cf/cf-cache-store.d.ts +630 -0
  843. package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
  844. package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
  845. package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
  846. package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
  847. package/dist/types/cache/cf/index.d.ts +4 -0
  848. package/dist/types/cache/document-cache.d.ts +71 -0
  849. package/dist/types/cache/handle-capture.d.ts +23 -0
  850. package/dist/types/cache/handle-snapshot.d.ts +39 -0
  851. package/dist/types/cache/index.d.ts +9 -0
  852. package/dist/types/cache/memory-segment-store.d.ts +163 -0
  853. package/dist/types/cache/profile-registry.d.ts +40 -0
  854. package/dist/types/cache/read-through-swr.d.ts +61 -0
  855. package/dist/types/cache/search-params-filter.d.ts +64 -0
  856. package/dist/types/cache/segment-codec.d.ts +78 -0
  857. package/dist/types/cache/shell-snapshot.d.ts +186 -0
  858. package/dist/types/cache/tag-invalidation.d.ts +74 -0
  859. package/dist/types/cache/taint.d.ts +77 -0
  860. package/dist/types/cache/types.d.ts +522 -0
  861. package/dist/types/cache/vercel/index.d.ts +1 -0
  862. package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
  863. package/dist/types/client-urls/client-root.d.ts +38 -0
  864. package/dist/types/client-urls/client-urls.d.ts +5 -0
  865. package/dist/types/client-urls/navigation.d.ts +38 -0
  866. package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
  867. package/dist/types/client-urls/server-projection.d.ts +71 -0
  868. package/dist/types/client-urls/types.d.ts +148 -0
  869. package/dist/types/client.d.ts +192 -0
  870. package/dist/types/client.rsc.d.ts +42 -0
  871. package/dist/types/cloudflare/index.d.ts +7 -0
  872. package/dist/types/cloudflare/tracing.d.ts +57 -0
  873. package/dist/types/component-utils.d.ts +46 -0
  874. package/dist/types/components/DefaultDocument.d.ts +13 -0
  875. package/dist/types/context-var.d.ts +84 -0
  876. package/dist/types/debug.d.ts +57 -0
  877. package/dist/types/decode-loader-results.d.ts +42 -0
  878. package/dist/types/default-error-boundary.d.ts +10 -0
  879. package/dist/types/defer.d.ts +89 -0
  880. package/dist/types/deps/browser.d.ts +1 -0
  881. package/dist/types/deps/html-stream-client.d.ts +1 -0
  882. package/dist/types/deps/html-stream-server.d.ts +1 -0
  883. package/dist/types/deps/rsc.d.ts +1 -0
  884. package/dist/types/deps/ssr.d.ts +1 -0
  885. package/dist/types/dev-discovery-protocol.d.ts +5 -0
  886. package/dist/types/encode-kv.d.ts +35 -0
  887. package/dist/types/errors.d.ts +227 -0
  888. package/dist/types/escape-script.d.ts +44 -0
  889. package/dist/types/handle.d.ts +93 -0
  890. package/dist/types/handles/MetaTags.d.ts +17 -0
  891. package/dist/types/handles/Scripts.d.ts +38 -0
  892. package/dist/types/handles/breadcrumbs.d.ts +43 -0
  893. package/dist/types/handles/deferred-resolution.d.ts +53 -0
  894. package/dist/types/handles/is-thenable.d.ts +10 -0
  895. package/dist/types/handles/meta.d.ts +43 -0
  896. package/dist/types/handles/script.d.ts +139 -0
  897. package/dist/types/host/cookie-handler.d.ts +8 -0
  898. package/dist/types/host/errors.d.ts +40 -0
  899. package/dist/types/host/index.d.ts +33 -0
  900. package/dist/types/host/pattern-matcher.d.ts +30 -0
  901. package/dist/types/host/router.d.ts +12 -0
  902. package/dist/types/host/testing.d.ts +41 -0
  903. package/dist/types/host/types.d.ts +148 -0
  904. package/dist/types/host/utils.d.ts +20 -0
  905. package/dist/types/href-client.d.ts +214 -0
  906. package/dist/types/index.d.ts +113 -0
  907. package/dist/types/index.rsc.d.ts +52 -0
  908. package/dist/types/internal-debug.d.ts +1 -0
  909. package/dist/types/loader-redirect.d.ts +27 -0
  910. package/dist/types/loader-store.d.ts +193 -0
  911. package/dist/types/loader.d.ts +18 -0
  912. package/dist/types/loader.rsc.d.ts +18 -0
  913. package/dist/types/missing-id-error.d.ts +1 -0
  914. package/dist/types/outlet-context.d.ts +32 -0
  915. package/dist/types/outlet-provider.d.ts +15 -0
  916. package/dist/types/prerender/build-shell-capture.d.ts +104 -0
  917. package/dist/types/prerender/param-hash.d.ts +6 -0
  918. package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
  919. package/dist/types/prerender/store.d.ts +63 -0
  920. package/dist/types/prerender.d.ts +292 -0
  921. package/dist/types/redirect-origin.d.ts +71 -0
  922. package/dist/types/regex-escape.d.ts +6 -0
  923. package/dist/types/render-error-thrower.d.ts +13 -0
  924. package/dist/types/response-utils.d.ts +35 -0
  925. package/dist/types/reverse.d.ts +206 -0
  926. package/dist/types/root-error-boundary.d.ts +32 -0
  927. package/dist/types/route-content-wrapper.d.ts +84 -0
  928. package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
  929. package/dist/types/route-definition/helper-factories.d.ts +22 -0
  930. package/dist/types/route-definition/helpers-types.d.ts +405 -0
  931. package/dist/types/route-definition/index.d.ts +7 -0
  932. package/dist/types/route-definition/redirect.d.ts +48 -0
  933. package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
  934. package/dist/types/route-definition/use-item-types.d.ts +1 -0
  935. package/dist/types/route-definition.d.ts +1 -0
  936. package/dist/types/route-map-builder.d.ts +102 -0
  937. package/dist/types/route-name.d.ts +27 -0
  938. package/dist/types/route-types.d.ts +172 -0
  939. package/dist/types/router/basename.d.ts +10 -0
  940. package/dist/types/router/content-negotiation.d.ts +91 -0
  941. package/dist/types/router/debug-manifest.d.ts +7 -0
  942. package/dist/types/router/error-handling.d.ts +110 -0
  943. package/dist/types/router/find-match.d.ts +19 -0
  944. package/dist/types/router/handler-context.d.ts +41 -0
  945. package/dist/types/router/instrument.d.ts +191 -0
  946. package/dist/types/router/intercept-resolution.d.ts +91 -0
  947. package/dist/types/router/lazy-includes.d.ts +26 -0
  948. package/dist/types/router/loader-resolution.d.ts +85 -0
  949. package/dist/types/router/logging.d.ts +41 -0
  950. package/dist/types/router/manifest.d.ts +8 -0
  951. package/dist/types/router/match-api.d.ts +19 -0
  952. package/dist/types/router/match-context.d.ts +184 -0
  953. package/dist/types/router/match-handlers.d.ts +48 -0
  954. package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
  955. package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
  956. package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
  957. package/dist/types/router/match-middleware/index.d.ts +80 -0
  958. package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
  959. package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
  960. package/dist/types/router/match-pipelines.d.ts +103 -0
  961. package/dist/types/router/match-result.d.ts +114 -0
  962. package/dist/types/router/metrics.d.ts +6 -0
  963. package/dist/types/router/middleware-types.d.ts +74 -0
  964. package/dist/types/router/middleware.d.ts +116 -0
  965. package/dist/types/router/navigation-snapshot.d.ts +51 -0
  966. package/dist/types/router/params-util.d.ts +8 -0
  967. package/dist/types/router/parse-pattern.d.ts +38 -0
  968. package/dist/types/router/pattern-matching.d.ts +169 -0
  969. package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
  970. package/dist/types/router/prefetch-default.d.ts +28 -0
  971. package/dist/types/router/prefetch-limits.d.ts +20 -0
  972. package/dist/types/router/prerender-match.d.ts +53 -0
  973. package/dist/types/router/preview-match.d.ts +22 -0
  974. package/dist/types/router/request-classification.d.ts +104 -0
  975. package/dist/types/router/revalidation.d.ts +64 -0
  976. package/dist/types/router/route-snapshot.d.ts +112 -0
  977. package/dist/types/router/route-trie-builder.d.ts +77 -0
  978. package/dist/types/router/router-context.d.ts +137 -0
  979. package/dist/types/router/router-interfaces.d.ts +461 -0
  980. package/dist/types/router/router-options.d.ts +792 -0
  981. package/dist/types/router/router-registry.d.ts +15 -0
  982. package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
  983. package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
  984. package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
  985. package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
  986. package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
  987. package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
  988. package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
  989. package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
  990. package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
  991. package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
  992. package/dist/types/router/segment-resolution.d.ts +3 -0
  993. package/dist/types/router/segment-wrappers.d.ts +53 -0
  994. package/dist/types/router/state-cookie-name.d.ts +1 -0
  995. package/dist/types/router/substitute-pattern-params.d.ts +23 -0
  996. package/dist/types/router/telemetry-otel.d.ts +113 -0
  997. package/dist/types/router/telemetry.d.ts +216 -0
  998. package/dist/types/router/timeout.d.ts +107 -0
  999. package/dist/types/router/tracing.d.ts +139 -0
  1000. package/dist/types/router/transition-when.d.ts +13 -0
  1001. package/dist/types/router/trie-matching.d.ts +32 -0
  1002. package/dist/types/router/types.d.ts +98 -0
  1003. package/dist/types/router/url-params.d.ts +26 -0
  1004. package/dist/types/router.d.ts +7 -0
  1005. package/dist/types/rsc/capture-queue.d.ts +49 -0
  1006. package/dist/types/rsc/full-payload.d.ts +22 -0
  1007. package/dist/types/rsc/handler-context.d.ts +32 -0
  1008. package/dist/types/rsc/handler.d.ts +9 -0
  1009. package/dist/types/rsc/helpers.d.ts +127 -0
  1010. package/dist/types/rsc/index.d.ts +17 -0
  1011. package/dist/types/rsc/json-route-result.d.ts +20 -0
  1012. package/dist/types/rsc/loader-fetch.d.ts +14 -0
  1013. package/dist/types/rsc/manifest-init.d.ts +18 -0
  1014. package/dist/types/rsc/nonce.d.ts +38 -0
  1015. package/dist/types/rsc/origin-guard.d.ts +50 -0
  1016. package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
  1017. package/dist/types/rsc/redirect-guard.d.ts +37 -0
  1018. package/dist/types/rsc/render-pipeline.d.ts +148 -0
  1019. package/dist/types/rsc/response-cache-serve.d.ts +46 -0
  1020. package/dist/types/rsc/response-error.d.ts +19 -0
  1021. package/dist/types/rsc/response-route-handler.d.ts +29 -0
  1022. package/dist/types/rsc/routine-plan.d.ts +124 -0
  1023. package/dist/types/rsc/rsc-rendering.d.ts +18 -0
  1024. package/dist/types/rsc/runtime-warnings.d.ts +22 -0
  1025. package/dist/types/rsc/server-action.d.ts +68 -0
  1026. package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
  1027. package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
  1028. package/dist/types/rsc/shell-capture.d.ts +425 -0
  1029. package/dist/types/rsc/shell-serve.d.ts +200 -0
  1030. package/dist/types/rsc/ssr-setup.d.ts +73 -0
  1031. package/dist/types/rsc/stream-idle.d.ts +60 -0
  1032. package/dist/types/rsc/transition-gate.d.ts +23 -0
  1033. package/dist/types/rsc/types.d.ts +353 -0
  1034. package/dist/types/runtime-env.d.ts +1 -0
  1035. package/dist/types/search-params.d.ts +125 -0
  1036. package/dist/types/segment-content-promise.d.ts +13 -0
  1037. package/dist/types/segment-fragments.d.ts +79 -0
  1038. package/dist/types/segment-loader-promise.d.ts +22 -0
  1039. package/dist/types/segment-system.d.ts +86 -0
  1040. package/dist/types/serialize.d.ts +164 -0
  1041. package/dist/types/server/context.d.ts +520 -0
  1042. package/dist/types/server/cookie-parse.d.ts +10 -0
  1043. package/dist/types/server/cookie-store.d.ts +107 -0
  1044. package/dist/types/server/fetchable-loader-store.d.ts +20 -0
  1045. package/dist/types/server/handle-store.d.ts +131 -0
  1046. package/dist/types/server/loader-registry.d.ts +32 -0
  1047. package/dist/types/server/request-context.d.ts +717 -0
  1048. package/dist/types/server/root-layout.d.ts +3 -0
  1049. package/dist/types/server.d.ts +16 -0
  1050. package/dist/types/ssr/index.d.ts +271 -0
  1051. package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
  1052. package/dist/types/ssr/preinit-client-references.d.ts +71 -0
  1053. package/dist/types/ssr/ssr-root.d.ts +84 -0
  1054. package/dist/types/ssr-suspension-warning.d.ts +19 -0
  1055. package/dist/types/static-handler.d.ts +71 -0
  1056. package/dist/types/testing/cache-status.d.ts +63 -0
  1057. package/dist/types/testing/collect-handle.d.ts +20 -0
  1058. package/dist/types/testing/dispatch.d.ts +127 -0
  1059. package/dist/types/testing/dom.entry.d.ts +15 -0
  1060. package/dist/types/testing/e2e/fixture.d.ts +37 -0
  1061. package/dist/types/testing/e2e/index.d.ts +31 -0
  1062. package/dist/types/testing/e2e/matchers.d.ts +17 -0
  1063. package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
  1064. package/dist/types/testing/e2e/parity.d.ts +111 -0
  1065. package/dist/types/testing/e2e/server.d.ts +35 -0
  1066. package/dist/types/testing/flight-matchers.d.ts +55 -0
  1067. package/dist/types/testing/flight-normalize.d.ts +1 -0
  1068. package/dist/types/testing/flight-tree.d.ts +192 -0
  1069. package/dist/types/testing/flight.d.ts +115 -0
  1070. package/dist/types/testing/flight.entry.d.ts +27 -0
  1071. package/dist/types/testing/generated-routes.d.ts +66 -0
  1072. package/dist/types/testing/index.d.ts +54 -0
  1073. package/dist/types/testing/internal/context.d.ts +225 -0
  1074. package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
  1075. package/dist/types/testing/internal/seed-vars.d.ts +30 -0
  1076. package/dist/types/testing/render-handler.d.ts +160 -0
  1077. package/dist/types/testing/render-route.d.ts +265 -0
  1078. package/dist/types/testing/run-loader.d.ts +195 -0
  1079. package/dist/types/testing/run-middleware.d.ts +132 -0
  1080. package/dist/types/testing/run-transition-when.d.ts +78 -0
  1081. package/dist/types/testing/shell-status.d.ts +81 -0
  1082. package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
  1083. package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
  1084. package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
  1085. package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
  1086. package/dist/types/testing/vitest.d.ts +205 -0
  1087. package/dist/types/theme/ThemeProvider.d.ts +13 -0
  1088. package/dist/types/theme/ThemeScript.d.ts +45 -0
  1089. package/dist/types/theme/constants.d.ts +39 -0
  1090. package/dist/types/theme/index.d.ts +29 -0
  1091. package/dist/types/theme/theme-context.d.ts +21 -0
  1092. package/dist/types/theme/theme-script.d.ts +26 -0
  1093. package/dist/types/theme/types.d.ts +162 -0
  1094. package/dist/types/theme/use-theme.d.ts +8 -0
  1095. package/dist/types/types/boundaries.d.ts +115 -0
  1096. package/dist/types/types/cache-types.d.ts +191 -0
  1097. package/dist/types/types/error-types.d.ts +114 -0
  1098. package/dist/types/types/global-namespace.d.ts +90 -0
  1099. package/dist/types/types/handler-context.d.ts +658 -0
  1100. package/dist/types/types/index.d.ts +11 -0
  1101. package/dist/types/types/loader-types.d.ts +240 -0
  1102. package/dist/types/types/request-scope.d.ts +93 -0
  1103. package/dist/types/types/route-config.d.ts +105 -0
  1104. package/dist/types/types/route-entry.d.ts +98 -0
  1105. package/dist/types/types/segments.d.ts +254 -0
  1106. package/dist/types/types.d.ts +1 -0
  1107. package/dist/types/urls/include-helper.d.ts +17 -0
  1108. package/dist/types/urls/include-provider.d.ts +27 -0
  1109. package/dist/types/urls/index.d.ts +6 -0
  1110. package/dist/types/urls/path-helper-types.d.ts +207 -0
  1111. package/dist/types/urls/path-helper.d.ts +12 -0
  1112. package/dist/types/urls/pattern-types.d.ts +166 -0
  1113. package/dist/types/urls/response-types.d.ts +67 -0
  1114. package/dist/types/urls/type-extraction.d.ts +157 -0
  1115. package/dist/types/urls/urls-function.d.ts +24 -0
  1116. package/dist/types/urls.d.ts +1 -0
  1117. package/dist/types/use-loader.d.ts +150 -0
  1118. package/dist/types/vercel/index.d.ts +10 -0
  1119. package/dist/types/vercel/tracing.d.ts +71 -0
  1120. package/dist/types/vite/debug.d.ts +80 -0
  1121. package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
  1122. package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
  1123. package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
  1124. package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
  1125. package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
  1126. package/dist/types/vite/discovery/gate-state.d.ts +79 -0
  1127. package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
  1128. package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
  1129. package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
  1130. package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
  1131. package/dist/types/vite/discovery/state.d.ts +170 -0
  1132. package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
  1133. package/dist/types/vite/encryption-key.d.ts +2 -0
  1134. package/dist/types/vite/index.d.ts +11 -0
  1135. package/dist/types/vite/inject-client-debug.d.ts +56 -0
  1136. package/dist/types/vite/plugin-types.d.ts +298 -0
  1137. package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
  1138. package/dist/types/vite/plugins/client-ref-dedup.d.ts +29 -0
  1139. package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
  1140. package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
  1141. package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
  1142. package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
  1143. package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
  1144. package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
  1145. package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
  1146. package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
  1147. package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
  1148. package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
  1149. package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
  1150. package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
  1151. package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
  1152. package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
  1153. package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
  1154. package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
  1155. package/dist/types/vite/plugins/version-injector.d.ts +21 -0
  1156. package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
  1157. package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
  1158. package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
  1159. package/dist/types/vite/rango.d.ts +29 -0
  1160. package/dist/types/vite/router-discovery.d.ts +23 -0
  1161. package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
  1162. package/dist/types/vite/utils/banner.d.ts +2 -0
  1163. package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
  1164. package/dist/types/vite/utils/client-chunks.d.ts +55 -0
  1165. package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
  1166. package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
  1167. package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
  1168. package/dist/types/vite/utils/package-resolution.d.ts +6 -0
  1169. package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
  1170. package/dist/types/vite/utils/shared-utils.d.ts +67 -0
  1171. package/dist/types.d.ts +1479 -0
  1172. package/dist/types.d.ts.map +1 -0
  1173. package/dist/types.js +10 -0
  1174. package/dist/types.js.map +1 -0
  1175. package/dist/urls.d.ts +441 -0
  1176. package/dist/urls.d.ts.map +1 -0
  1177. package/dist/urls.gen.d.ts +8 -0
  1178. package/dist/urls.gen.d.ts.map +1 -0
  1179. package/dist/urls.gen.js +8 -0
  1180. package/dist/urls.gen.js.map +1 -0
  1181. package/dist/urls.js +443 -0
  1182. package/dist/urls.js.map +1 -0
  1183. package/dist/use-loader.d.ts +127 -0
  1184. package/dist/use-loader.d.ts.map +1 -0
  1185. package/dist/use-loader.js +237 -0
  1186. package/dist/use-loader.js.map +1 -0
  1187. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  1188. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  1189. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  1190. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  1191. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  1192. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  1193. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  1194. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  1195. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  1196. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  1197. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  1198. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  1199. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  1200. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  1201. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  1202. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  1203. package/dist/vite/ast-handler-extract.d.ts +49 -0
  1204. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  1205. package/dist/vite/ast-handler-extract.js +249 -0
  1206. package/dist/vite/ast-handler-extract.js.map +1 -0
  1207. package/dist/vite/expose-action-id.d.ts +19 -0
  1208. package/dist/vite/expose-action-id.d.ts.map +1 -0
  1209. package/dist/vite/expose-action-id.js +250 -0
  1210. package/dist/vite/expose-action-id.js.map +1 -0
  1211. package/dist/vite/expose-id-utils.d.ts +69 -0
  1212. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  1213. package/dist/vite/expose-id-utils.js +289 -0
  1214. package/dist/vite/expose-id-utils.js.map +1 -0
  1215. package/dist/vite/expose-internal-ids.d.ts +22 -0
  1216. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  1217. package/dist/vite/expose-internal-ids.js +886 -0
  1218. package/dist/vite/expose-internal-ids.js.map +1 -0
  1219. package/dist/vite/index.d.ts +149 -0
  1220. package/dist/vite/index.d.ts.map +1 -0
  1221. package/dist/vite/index.js +10793 -4122
  1222. package/dist/vite/index.js.bak +5448 -0
  1223. package/dist/vite/index.js.map +1 -0
  1224. package/dist/vite/index.named-routes.gen.ts +103 -0
  1225. package/dist/vite/package-resolution.d.ts +43 -0
  1226. package/dist/vite/package-resolution.d.ts.map +1 -0
  1227. package/dist/vite/package-resolution.js +112 -0
  1228. package/dist/vite/package-resolution.js.map +1 -0
  1229. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1230. package/dist/vite/virtual-entries.d.ts +25 -0
  1231. package/dist/vite/virtual-entries.d.ts.map +1 -0
  1232. package/dist/vite/virtual-entries.js +110 -0
  1233. package/dist/vite/virtual-entries.js.map +1 -0
  1234. package/package.json +121 -38
  1235. package/skills/api-client/SKILL.md +211 -0
  1236. package/skills/breadcrumbs/SKILL.md +117 -8
  1237. package/skills/bundle-analysis/SKILL.md +159 -0
  1238. package/skills/cache-guide/SKILL.md +232 -34
  1239. package/skills/caching/SKILL.md +375 -19
  1240. package/skills/catalog.json +289 -0
  1241. package/skills/client-urls/SKILL.md +339 -0
  1242. package/skills/cloudflare/SKILL.md +153 -0
  1243. package/skills/cloudflare/agents/openai.yaml +4 -0
  1244. package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
  1245. package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
  1246. package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
  1247. package/skills/comparison/SKILL.md +50 -0
  1248. package/skills/comparison/agents/openai.yaml +4 -0
  1249. package/skills/comparison/references/framework-comparison.md +858 -0
  1250. package/skills/composability/SKILL.md +124 -4
  1251. package/skills/css/SKILL.md +76 -0
  1252. package/skills/debug-manifest/SKILL.md +5 -11
  1253. package/skills/defer-hydration/SKILL.md +235 -0
  1254. package/skills/deployment-caching/SKILL.md +176 -0
  1255. package/skills/document-cache/SKILL.md +116 -58
  1256. package/skills/fonts/SKILL.md +1 -1
  1257. package/skills/handler-use/SKILL.md +12 -10
  1258. package/skills/hooks/SKILL.md +73 -691
  1259. package/skills/hooks/data.md +282 -0
  1260. package/skills/hooks/handle-and-actions.md +110 -0
  1261. package/skills/hooks/navigation.md +110 -0
  1262. package/skills/hooks/outlets.md +62 -0
  1263. package/skills/hooks/state.md +228 -0
  1264. package/skills/hooks/urls.md +172 -0
  1265. package/skills/host-router/SKILL.md +129 -27
  1266. package/skills/i18n/SKILL.md +276 -0
  1267. package/skills/intercept/SKILL.md +75 -19
  1268. package/skills/layout/SKILL.md +40 -19
  1269. package/skills/links/SKILL.md +283 -17
  1270. package/skills/loader/SKILL.md +362 -11
  1271. package/skills/middleware/SKILL.md +58 -13
  1272. package/skills/migrate-nextjs/SKILL.md +336 -42
  1273. package/skills/migrate-nextjs/backend-host-swap.md +120 -0
  1274. package/skills/migrate-react-router/SKILL.md +95 -670
  1275. package/skills/migrate-react-router/component-migration.md +201 -0
  1276. package/skills/migrate-react-router/data-and-actions.md +236 -0
  1277. package/skills/migrate-react-router/route-mapping.md +284 -0
  1278. package/skills/mime-routes/SKILL.md +55 -18
  1279. package/skills/observability/SKILL.md +231 -0
  1280. package/skills/parallel/SKILL.md +72 -11
  1281. package/skills/ppr/SKILL.md +918 -0
  1282. package/skills/prerender/SKILL.md +137 -71
  1283. package/skills/rango/SKILL.md +325 -26
  1284. package/skills/react-compiler/SKILL.md +168 -0
  1285. package/skills/response-routes/SKILL.md +180 -52
  1286. package/skills/route/SKILL.md +126 -9
  1287. package/skills/router-setup/SKILL.md +69 -11
  1288. package/skills/scripts/SKILL.md +189 -0
  1289. package/skills/server-actions/SKILL.md +776 -0
  1290. package/skills/shell-manifest/SKILL.md +194 -0
  1291. package/skills/streams-and-websockets/SKILL.md +283 -0
  1292. package/skills/tailwind/SKILL.md +28 -4
  1293. package/skills/testing/SKILL.md +131 -0
  1294. package/skills/testing/bindings.md +103 -0
  1295. package/skills/testing/cache-prerender.md +172 -0
  1296. package/skills/testing/client-components.md +131 -0
  1297. package/skills/testing/e2e-parity.md +125 -0
  1298. package/skills/testing/flight.md +91 -0
  1299. package/skills/testing/handles.md +153 -0
  1300. package/skills/testing/loader.md +130 -0
  1301. package/skills/testing/middleware.md +99 -0
  1302. package/skills/testing/render-handler.md +122 -0
  1303. package/skills/testing/response-routes.md +95 -0
  1304. package/skills/testing/reverse-and-types.md +85 -0
  1305. package/skills/testing/server-actions.md +107 -0
  1306. package/skills/testing/server-tree.md +128 -0
  1307. package/skills/testing/setup.md +123 -0
  1308. package/skills/theme/SKILL.md +9 -6
  1309. package/skills/typesafety/SKILL.md +45 -626
  1310. package/skills/typesafety/env-and-bindings.md +254 -0
  1311. package/skills/typesafety/generated-files-and-cli.md +342 -0
  1312. package/skills/typesafety/params-and-search.md +153 -0
  1313. package/skills/typesafety/route-types.md +213 -0
  1314. package/skills/use-cache/SKILL.md +121 -15
  1315. package/skills/vercel/SKILL.md +149 -0
  1316. package/skills/view-transitions/SKILL.md +341 -0
  1317. package/src/__augment-tests__/augment.ts +81 -0
  1318. package/src/__augment-tests__/augmented.check.ts +116 -0
  1319. package/src/__internal.ts +0 -65
  1320. package/src/bin/rango.ts +7 -3
  1321. package/src/browser/action-coordinator.ts +53 -36
  1322. package/src/browser/action-fence.ts +47 -0
  1323. package/src/browser/app-shell.ts +39 -0
  1324. package/src/browser/connection-warmup.ts +134 -0
  1325. package/src/browser/cookie-name.ts +140 -0
  1326. package/src/browser/dev-discovery.ts +66 -0
  1327. package/src/browser/event-controller.ts +400 -168
  1328. package/src/browser/history-state.ts +21 -0
  1329. package/src/browser/index.ts +3 -3
  1330. package/src/browser/invalidate-client-cache.ts +52 -0
  1331. package/src/browser/link-interceptor.ts +469 -20
  1332. package/src/browser/logging.ts +28 -0
  1333. package/src/browser/merge-segment-loaders.ts +6 -4
  1334. package/src/browser/navigation-bridge.ts +171 -27
  1335. package/src/browser/navigation-client.ts +216 -90
  1336. package/src/browser/navigation-store-handle.ts +38 -0
  1337. package/src/browser/navigation-store.ts +167 -323
  1338. package/src/browser/navigation-transaction.ts +9 -59
  1339. package/src/browser/network-error-handler.ts +34 -7
  1340. package/src/browser/notify-listeners.ts +22 -0
  1341. package/src/browser/partial-update.ts +243 -144
  1342. package/src/browser/prefetch/cache.ts +325 -84
  1343. package/src/browser/prefetch/default-strategy.ts +74 -0
  1344. package/src/browser/prefetch/fetch.ts +411 -69
  1345. package/src/browser/prefetch/invalidation.ts +30 -0
  1346. package/src/browser/prefetch/loader.ts +111 -0
  1347. package/src/browser/prefetch/observer.ts +50 -22
  1348. package/src/browser/prefetch/queue.ts +61 -12
  1349. package/src/browser/prefetch/runtime.ts +6 -0
  1350. package/src/browser/rango-state.ts +178 -75
  1351. package/src/browser/react/Link.tsx +160 -92
  1352. package/src/browser/react/NavigationProvider.tsx +211 -121
  1353. package/src/browser/react/ScrollRestoration.tsx +10 -6
  1354. package/src/browser/react/context.ts +4 -0
  1355. package/src/browser/react/filter-segment-order.ts +66 -7
  1356. package/src/browser/react/index.ts +0 -48
  1357. package/src/browser/react/location-state-shared.ts +178 -8
  1358. package/src/browser/react/location-state.ts +39 -14
  1359. package/src/browser/react/use-action.ts +6 -15
  1360. package/src/browser/react/use-handle.ts +17 -14
  1361. package/src/browser/react/use-href.tsx +8 -1
  1362. package/src/browser/react/use-link-status.ts +33 -8
  1363. package/src/browser/react/use-navigation.ts +10 -5
  1364. package/src/browser/react/use-params.ts +20 -10
  1365. package/src/browser/react/use-reverse.ts +106 -0
  1366. package/src/browser/react/use-router.ts +62 -11
  1367. package/src/browser/react/use-search-params.ts +140 -22
  1368. package/src/browser/react/use-segments.ts +11 -21
  1369. package/src/browser/response-adapter.ts +99 -8
  1370. package/src/browser/rsc-router.tsx +248 -32
  1371. package/src/browser/scroll-restoration.ts +37 -22
  1372. package/src/browser/segment-reconciler.ts +31 -21
  1373. package/src/browser/segment-structure-assert.ts +2 -2
  1374. package/src/browser/server-action-bridge.ts +262 -65
  1375. package/src/browser/types.ts +132 -34
  1376. package/src/browser/validate-redirect-origin.ts +43 -16
  1377. package/src/build/collect-fallback-refs.ts +107 -0
  1378. package/src/build/generate-manifest.ts +213 -184
  1379. package/src/build/generate-route-types.ts +3 -1
  1380. package/src/build/index.ts +11 -3
  1381. package/src/build/merge-full-manifests.ts +161 -0
  1382. package/src/build/prefix-tree-utils.ts +123 -0
  1383. package/src/build/route-trie.ts +43 -280
  1384. package/src/build/route-types/ast-route-extraction.ts +15 -8
  1385. package/src/build/route-types/codegen.ts +16 -5
  1386. package/src/build/route-types/include-resolution.ts +513 -64
  1387. package/src/build/route-types/param-extraction.ts +6 -3
  1388. package/src/build/route-types/per-module-writer.ts +33 -12
  1389. package/src/build/route-types/router-processing.ts +312 -204
  1390. package/src/build/route-types/scan-filter.ts +1 -1
  1391. package/src/build/route-types/source-scan.ts +216 -0
  1392. package/src/build/runtime-discovery.ts +32 -29
  1393. package/src/cache/cache-error.ts +104 -0
  1394. package/src/cache/cache-exec-scope.ts +47 -0
  1395. package/src/cache/cache-key-utils.ts +73 -15
  1396. package/src/cache/cache-policy.ts +108 -34
  1397. package/src/cache/cache-runtime.ts +566 -121
  1398. package/src/cache/cache-scope.ts +383 -105
  1399. package/src/cache/cache-tag.ts +149 -0
  1400. package/src/cache/cf/cf-base64.ts +33 -0
  1401. package/src/cache/cf/cf-cache-constants.ts +134 -0
  1402. package/src/cache/cf/cf-cache-store.ts +3083 -392
  1403. package/src/cache/cf/cf-cache-types.ts +417 -0
  1404. package/src/cache/cf/cf-kv-utils.ts +84 -0
  1405. package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
  1406. package/src/cache/cf/cf-zone-purge.ts +101 -0
  1407. package/src/cache/cf/index.ts +11 -16
  1408. package/src/cache/document-cache.ts +184 -53
  1409. package/src/cache/handle-snapshot.ts +92 -1
  1410. package/src/cache/index.ts +32 -20
  1411. package/src/cache/memory-segment-store.ts +286 -37
  1412. package/src/cache/profile-registry.ts +46 -31
  1413. package/src/cache/read-through-swr.ts +66 -16
  1414. package/src/cache/search-params-filter.ts +118 -0
  1415. package/src/cache/segment-codec.ts +80 -25
  1416. package/src/cache/shell-snapshot.ts +516 -0
  1417. package/src/cache/tag-invalidation.ts +230 -0
  1418. package/src/cache/taint.ts +28 -9
  1419. package/src/cache/types.ts +343 -100
  1420. package/src/cache/vercel/index.ts +11 -0
  1421. package/src/cache/vercel/vercel-cache-store.ts +1264 -0
  1422. package/src/client-urls/client-root.tsx +168 -0
  1423. package/src/client-urls/client-urls.ts +779 -0
  1424. package/src/client-urls/navigation.ts +237 -0
  1425. package/src/client-urls/revalidation-protocol.ts +56 -0
  1426. package/src/client-urls/server-projection.ts +670 -0
  1427. package/src/client-urls/types.ts +202 -0
  1428. package/src/client.rsc.tsx +53 -21
  1429. package/src/client.tsx +82 -67
  1430. package/src/cloudflare/index.ts +11 -0
  1431. package/src/cloudflare/tracing.ts +112 -0
  1432. package/src/component-utils.ts +19 -0
  1433. package/src/components/DefaultDocument.tsx +8 -2
  1434. package/src/context-var.ts +18 -6
  1435. package/src/decode-loader-results.ts +165 -0
  1436. package/src/defer.ts +185 -0
  1437. package/src/deps/ssr.ts +4 -2
  1438. package/src/dev-discovery-protocol.ts +11 -0
  1439. package/src/encode-kv.ts +49 -0
  1440. package/src/errors.ts +44 -4
  1441. package/src/escape-script.ts +52 -0
  1442. package/src/handle.ts +67 -37
  1443. package/src/handles/MetaTags.tsx +24 -53
  1444. package/src/handles/Scripts.tsx +183 -0
  1445. package/src/handles/breadcrumbs.ts +35 -8
  1446. package/src/handles/deferred-resolution.ts +134 -0
  1447. package/src/handles/is-thenable.ts +16 -0
  1448. package/src/handles/meta.ts +14 -40
  1449. package/src/handles/script.ts +244 -0
  1450. package/src/host/cookie-handler.ts +9 -60
  1451. package/src/host/errors.ts +13 -22
  1452. package/src/host/index.ts +9 -2
  1453. package/src/host/pattern-matcher.ts +23 -52
  1454. package/src/host/router.ts +107 -99
  1455. package/src/host/testing.ts +40 -27
  1456. package/src/host/types.ts +37 -4
  1457. package/src/host/utils.ts +1 -1
  1458. package/src/href-client.ts +137 -22
  1459. package/src/index.rsc.ts +108 -12
  1460. package/src/index.ts +106 -14
  1461. package/src/internal-debug.ts +11 -10
  1462. package/src/loader-redirect.tsx +64 -0
  1463. package/src/loader-store.ts +500 -0
  1464. package/src/loader.rsc.ts +20 -13
  1465. package/src/loader.ts +12 -11
  1466. package/src/missing-id-error.ts +68 -0
  1467. package/src/outlet-context.ts +21 -1
  1468. package/src/outlet-provider.tsx +20 -6
  1469. package/src/prerender/build-shell-capture.ts +453 -0
  1470. package/src/prerender/param-hash.ts +16 -16
  1471. package/src/prerender/shell-manifest-key.ts +20 -0
  1472. package/src/prerender/store.ts +47 -38
  1473. package/src/prerender.ts +81 -13
  1474. package/src/redirect-origin.ts +172 -0
  1475. package/src/regex-escape.ts +8 -0
  1476. package/src/render-error-thrower.tsx +20 -0
  1477. package/src/response-utils.ts +62 -0
  1478. package/src/reverse.ts +65 -39
  1479. package/src/root-error-boundary.tsx +1 -19
  1480. package/src/route-content-wrapper.tsx +120 -78
  1481. package/src/route-definition/dsl-helpers.ts +342 -313
  1482. package/src/route-definition/helper-factories.ts +28 -140
  1483. package/src/route-definition/helpers-types.ts +106 -62
  1484. package/src/route-definition/index.ts +1 -2
  1485. package/src/route-definition/redirect.ts +60 -28
  1486. package/src/route-definition/resolve-handler-use.ts +12 -1
  1487. package/src/route-definition/use-item-types.ts +29 -0
  1488. package/src/route-map-builder.ts +102 -74
  1489. package/src/route-types.ts +19 -46
  1490. package/src/router/basename.ts +14 -0
  1491. package/src/router/content-negotiation.ts +120 -30
  1492. package/src/router/error-handling.ts +110 -29
  1493. package/src/router/find-match.ts +129 -30
  1494. package/src/router/handler-context.ts +58 -57
  1495. package/src/router/instrument.ts +401 -0
  1496. package/src/router/intercept-resolution.ts +98 -21
  1497. package/src/router/lazy-includes.ts +83 -59
  1498. package/src/router/loader-resolution.ts +429 -85
  1499. package/src/router/logging.ts +0 -6
  1500. package/src/router/manifest.ts +74 -40
  1501. package/src/router/match-api.ts +94 -58
  1502. package/src/router/match-context.ts +0 -22
  1503. package/src/router/match-handlers.ts +268 -171
  1504. package/src/router/match-middleware/background-revalidation.ts +40 -24
  1505. package/src/router/match-middleware/cache-lookup.ts +316 -302
  1506. package/src/router/match-middleware/cache-store.ts +134 -52
  1507. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  1508. package/src/router/match-middleware/segment-resolution.ts +0 -22
  1509. package/src/router/match-pipelines.ts +1 -42
  1510. package/src/router/match-result.ts +76 -79
  1511. package/src/router/metrics.ts +17 -36
  1512. package/src/router/middleware-types.ts +20 -130
  1513. package/src/router/middleware.ts +302 -172
  1514. package/src/router/navigation-snapshot.ts +51 -60
  1515. package/src/router/params-util.ts +23 -0
  1516. package/src/router/parse-pattern.ts +115 -0
  1517. package/src/router/pattern-matching.ts +181 -150
  1518. package/src/router/prefetch-cache-ttl.ts +51 -0
  1519. package/src/router/prefetch-default.ts +59 -0
  1520. package/src/router/prefetch-limits.ts +37 -0
  1521. package/src/router/prerender-match.ts +159 -69
  1522. package/src/router/preview-match.ts +6 -2
  1523. package/src/router/request-classification.ts +50 -69
  1524. package/src/router/revalidation.ts +146 -83
  1525. package/src/router/route-snapshot.ts +14 -3
  1526. package/src/router/route-trie-builder.ts +334 -0
  1527. package/src/router/router-context.ts +6 -29
  1528. package/src/router/router-interfaces.ts +168 -38
  1529. package/src/router/router-options.ts +235 -11
  1530. package/src/router/router-registry.ts +2 -5
  1531. package/src/router/segment-resolution/fresh.ts +219 -88
  1532. package/src/router/segment-resolution/helpers.ts +96 -18
  1533. package/src/router/segment-resolution/loader-cache.ts +208 -39
  1534. package/src/router/segment-resolution/loader-mask.ts +60 -0
  1535. package/src/router/segment-resolution/loader-snapshot.ts +259 -0
  1536. package/src/router/segment-resolution/mask-nested.ts +99 -0
  1537. package/src/router/segment-resolution/revalidation.ts +318 -321
  1538. package/src/router/segment-resolution/static-store.ts +55 -15
  1539. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1540. package/src/router/segment-resolution/view-transition-default.ts +60 -0
  1541. package/src/router/segment-resolution.ts +5 -1
  1542. package/src/router/segment-wrappers.ts +6 -5
  1543. package/src/router/state-cookie-name.ts +33 -0
  1544. package/src/router/substitute-pattern-params.ts +75 -0
  1545. package/src/router/telemetry-otel.ts +171 -200
  1546. package/src/router/telemetry.ts +106 -20
  1547. package/src/router/timeout.ts +53 -22
  1548. package/src/router/tracing.ts +235 -0
  1549. package/src/router/transition-when.ts +76 -0
  1550. package/src/router/trie-matching.ts +171 -59
  1551. package/src/router/types.ts +9 -63
  1552. package/src/router/url-params.ts +57 -0
  1553. package/src/router.ts +249 -79
  1554. package/src/rsc/capture-queue.ts +218 -0
  1555. package/src/rsc/full-payload.ts +77 -0
  1556. package/src/rsc/handler-context.ts +4 -2
  1557. package/src/rsc/handler.ts +570 -288
  1558. package/src/rsc/helpers.ts +245 -47
  1559. package/src/rsc/index.ts +2 -5
  1560. package/src/rsc/json-route-result.ts +38 -0
  1561. package/src/rsc/loader-fetch.ts +116 -40
  1562. package/src/rsc/manifest-init.ts +55 -56
  1563. package/src/rsc/nonce.ts +26 -1
  1564. package/src/rsc/origin-guard.ts +39 -25
  1565. package/src/rsc/progressive-enhancement.ts +378 -83
  1566. package/src/rsc/redirect-guard.ts +102 -0
  1567. package/src/rsc/render-pipeline.ts +611 -0
  1568. package/src/rsc/response-cache-serve.ts +259 -0
  1569. package/src/rsc/response-error.ts +79 -12
  1570. package/src/rsc/response-route-handler.ts +80 -206
  1571. package/src/rsc/routine-plan.ts +359 -0
  1572. package/src/rsc/rsc-rendering.ts +1647 -164
  1573. package/src/rsc/runtime-warnings.ts +23 -10
  1574. package/src/rsc/server-action.ts +421 -138
  1575. package/src/rsc/shell-build-manifest.ts +343 -0
  1576. package/src/rsc/shell-capture-constants.ts +45 -0
  1577. package/src/rsc/shell-capture.ts +2135 -0
  1578. package/src/rsc/shell-serve.ts +350 -0
  1579. package/src/rsc/ssr-setup.ts +124 -16
  1580. package/src/rsc/stream-idle.ts +137 -0
  1581. package/src/rsc/transition-gate.ts +86 -0
  1582. package/src/rsc/types.ts +125 -7
  1583. package/src/runtime-env.ts +18 -0
  1584. package/src/search-params.ts +35 -30
  1585. package/src/segment-fragments.ts +165 -0
  1586. package/src/segment-loader-promise.ts +49 -4
  1587. package/src/segment-system.tsx +463 -153
  1588. package/src/serialize.ts +243 -0
  1589. package/src/server/context.ts +426 -55
  1590. package/src/server/cookie-parse.ts +32 -0
  1591. package/src/server/cookie-store.ts +162 -15
  1592. package/src/server/handle-store.ts +190 -70
  1593. package/src/server/loader-registry.ts +33 -42
  1594. package/src/server/request-context.ts +824 -215
  1595. package/src/server.ts +7 -2
  1596. package/src/ssr/index.tsx +687 -184
  1597. package/src/ssr/inject-rsc-eager.ts +167 -0
  1598. package/src/ssr/preinit-client-references.ts +106 -0
  1599. package/src/ssr/ssr-root.tsx +305 -0
  1600. package/src/ssr-suspension-warning.ts +67 -0
  1601. package/src/static-handler.ts +28 -15
  1602. package/src/testing/cache-status.ts +162 -0
  1603. package/src/testing/collect-handle.ts +46 -0
  1604. package/src/testing/dispatch.ts +951 -0
  1605. package/src/testing/dom.entry.ts +22 -0
  1606. package/src/testing/e2e/fixture.ts +188 -0
  1607. package/src/testing/e2e/index.ts +147 -0
  1608. package/src/testing/e2e/matchers.ts +35 -0
  1609. package/src/testing/e2e/page-helpers.ts +319 -0
  1610. package/src/testing/e2e/parity.ts +400 -0
  1611. package/src/testing/e2e/server.ts +195 -0
  1612. package/src/testing/flight-matchers.ts +97 -0
  1613. package/src/testing/flight-normalize.ts +11 -0
  1614. package/src/testing/flight-runtime.d.ts +57 -0
  1615. package/src/testing/flight-tree.ts +682 -0
  1616. package/src/testing/flight.entry.ts +52 -0
  1617. package/src/testing/flight.ts +257 -0
  1618. package/src/testing/generated-routes.ts +199 -0
  1619. package/src/testing/index.ts +121 -0
  1620. package/src/testing/internal/context.ts +380 -0
  1621. package/src/testing/internal/flight-client-globals.ts +30 -0
  1622. package/src/testing/internal/seed-vars.ts +54 -0
  1623. package/src/testing/render-handler.ts +371 -0
  1624. package/src/testing/render-route.tsx +667 -0
  1625. package/src/testing/run-loader.ts +423 -0
  1626. package/src/testing/run-middleware.ts +219 -0
  1627. package/src/testing/run-transition-when.ts +197 -0
  1628. package/src/testing/shell-status.ts +206 -0
  1629. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1630. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1631. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1632. package/src/testing/vitest-stubs/version.ts +5 -0
  1633. package/src/testing/vitest.ts +305 -0
  1634. package/src/theme/ThemeProvider.tsx +56 -84
  1635. package/src/theme/ThemeScript.tsx +7 -9
  1636. package/src/theme/constants.ts +52 -13
  1637. package/src/theme/index.ts +0 -7
  1638. package/src/theme/theme-context.ts +1 -5
  1639. package/src/theme/theme-script.ts +22 -21
  1640. package/src/theme/use-theme.ts +0 -3
  1641. package/src/types/boundaries.ts +19 -35
  1642. package/src/types/cache-types.ts +13 -4
  1643. package/src/types/error-types.ts +30 -90
  1644. package/src/types/global-namespace.ts +54 -41
  1645. package/src/types/handler-context.ts +123 -64
  1646. package/src/types/index.ts +4 -10
  1647. package/src/types/loader-types.ts +76 -13
  1648. package/src/types/request-scope.ts +112 -0
  1649. package/src/types/route-config.ts +20 -52
  1650. package/src/types/route-entry.ts +3 -6
  1651. package/src/types/segments.ts +155 -14
  1652. package/src/urls/include-helper.ts +38 -64
  1653. package/src/urls/include-provider.ts +71 -0
  1654. package/src/urls/index.ts +2 -11
  1655. package/src/urls/path-helper-types.ts +88 -25
  1656. package/src/urls/path-helper.ts +30 -110
  1657. package/src/urls/pattern-types.ts +101 -19
  1658. package/src/urls/response-types.ts +22 -29
  1659. package/src/urls/type-extraction.ts +98 -154
  1660. package/src/urls/urls-function.ts +1 -19
  1661. package/src/use-loader.tsx +379 -110
  1662. package/src/vercel/index.ts +11 -0
  1663. package/src/vercel/tracing.ts +89 -0
  1664. package/src/vite/debug.ts +185 -0
  1665. package/src/vite/discovery/bundle-postprocess.ts +18 -14
  1666. package/src/vite/discovery/client-urls-projection.ts +322 -0
  1667. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1668. package/src/vite/discovery/discover-routers.ts +178 -151
  1669. package/src/vite/discovery/discovery-errors.ts +255 -0
  1670. package/src/vite/discovery/gate-state.ts +171 -0
  1671. package/src/vite/discovery/prerender-collection.ts +125 -70
  1672. package/src/vite/discovery/route-types-writer.ts +40 -84
  1673. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1674. package/src/vite/discovery/shell-prerender-phase.ts +397 -0
  1675. package/src/vite/discovery/state.ts +104 -6
  1676. package/src/vite/discovery/virtual-module-codegen.ts +226 -87
  1677. package/src/vite/encryption-key.ts +29 -0
  1678. package/src/vite/index.ts +12 -0
  1679. package/src/vite/inject-client-debug.ts +88 -0
  1680. package/src/vite/plugin-types.ts +243 -10
  1681. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1682. package/src/vite/plugins/client-ref-dedup.ts +296 -29
  1683. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1684. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1685. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1686. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1687. package/src/vite/plugins/expose-action-id.ts +95 -120
  1688. package/src/vite/plugins/expose-id-utils.ts +88 -55
  1689. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1690. package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
  1691. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1692. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1693. package/src/vite/plugins/expose-internal-ids.ts +551 -486
  1694. package/src/vite/plugins/performance-tracks.ts +26 -25
  1695. package/src/vite/plugins/refresh-cmd.ts +1 -1
  1696. package/src/vite/plugins/server-ref-hashing.ts +74 -0
  1697. package/src/vite/plugins/server-reference-pattern.ts +10 -0
  1698. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1699. package/src/vite/plugins/vercel-output.ts +384 -0
  1700. package/src/vite/plugins/version-injector.ts +39 -29
  1701. package/src/vite/plugins/version-plugin.ts +45 -40
  1702. package/src/vite/plugins/virtual-entries.ts +193 -30
  1703. package/src/vite/rango.ts +287 -140
  1704. package/src/vite/router-discovery.ts +1639 -157
  1705. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1706. package/src/vite/utils/banner.ts +1 -1
  1707. package/src/vite/utils/bundle-analysis.ts +10 -15
  1708. package/src/vite/utils/client-chunks.ts +184 -0
  1709. package/src/vite/utils/directive-prologue.ts +40 -0
  1710. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1711. package/src/vite/utils/manifest-utils.ts +1 -59
  1712. package/src/vite/utils/package-resolution.ts +21 -52
  1713. package/src/vite/utils/prerender-utils.ts +96 -49
  1714. package/src/vite/utils/shared-utils.ts +156 -43
  1715. package/src/browser/action-response-classifier.ts +0 -99
  1716. package/src/browser/shallow.ts +0 -40
  1717. package/src/router/middleware-cookies.ts +0 -55
@@ -7,13 +7,11 @@
7
7
  * and progressive enhancement (no-JS form submissions).
8
8
  */
9
9
 
10
- import { createElement } from "react";
11
- import { RouteNotFoundError } from "../errors.js";
10
+ import { isRouteNotFoundError } from "../errors.js";
12
11
  import { matchMiddleware, executeMiddleware } from "../router/middleware.js";
13
12
  import {
14
13
  runWithRequestContext,
15
14
  setRequestContextParams,
16
- requireRequestContext,
17
15
  getRequestContext,
18
16
  _getRequestContext,
19
17
  createRequestContext,
@@ -31,31 +29,48 @@ import {
31
29
  interceptRedirectForPartial,
32
30
  buildRouteMiddlewareEntries,
33
31
  } from "./helpers.js";
32
+ import { renderRscFlightStage, renderRscResponse } from "./render-pipeline.js";
33
+ import { guardOutgoingRedirect } from "./redirect-guard.js";
34
+ import {
35
+ resolveSoftRedirectUrl,
36
+ resolveExternalRedirect,
37
+ safeSameOriginLanding,
38
+ } from "../redirect-origin.js";
39
+ import { resolvedHandleStream } from "../handles/deferred-resolution.js";
40
+ import {
41
+ isWebSocketUpgradeResponse,
42
+ appendVaryAccept,
43
+ } from "../response-utils.js";
34
44
  import {
35
45
  handleResponseRoute,
36
46
  type ResponseRouteMatch,
37
47
  } from "./response-route-handler.js";
38
- import { generateNonce, nonce as nonceToken } from "./nonce.js";
48
+ import { nonce as nonceToken, resolveProviderNonce } from "./nonce.js";
39
49
  import { VERSION } from "@rangojs/router:version";
40
50
  import type { ErrorPhase } from "../types.js";
41
51
  import type { RouterRequestInput } from "../router/router-interfaces.js";
42
- import { invokeOnError } from "../router/error-handling.js";
52
+ import {
53
+ invokeOnError,
54
+ resolveDefaultNotFound,
55
+ } from "../router/error-handling.js";
43
56
  import {
44
57
  createReverseFunction,
45
58
  stripInternalParams,
46
59
  } from "../router/handler-context.js";
47
- import { getRouterContext } from "../router/router-context.js";
48
- import { resolveSink, safeEmit } from "../router/telemetry.js";
49
60
  import { contextSet } from "../context-var.js";
50
61
  import {
51
62
  hasCachedManifest,
52
- getRouteTrie,
53
- getPrecomputedEntries,
54
63
  waitForManifestReady,
55
64
  getRouterManifest,
56
65
  getRouterTrie,
57
66
  } from "../route-map-builder.js";
58
67
  import type { HandlerContext } from "./handler-context.js";
68
+ import type { CacheErrorCategory } from "../cache/cache-error.js";
69
+ import {
70
+ compileSearchParamsFilter,
71
+ type SearchParamsFilter,
72
+ } from "../cache/search-params-filter.js";
73
+ import type { SegmentCacheStore } from "../cache/types.js";
59
74
  import { buildRouterTrieFromUrlpatterns } from "./manifest-init.js";
60
75
  import { handleProgressiveEnhancement } from "./progressive-enhancement.js";
61
76
  import {
@@ -64,23 +79,32 @@ import {
64
79
  type ActionContinuation,
65
80
  } from "./server-action.js";
66
81
  import { handleLoaderFetch } from "./loader-fetch.js";
67
- import { checkRequestOrigin, type OriginCheckPhase } from "./origin-guard.js";
82
+ import { applyStreamIdleTimeout } from "./stream-idle.js";
83
+ import {
84
+ checkRequestOrigin,
85
+ ORIGIN_CHECK_PHASE_BY_MODE,
86
+ } from "./origin-guard.js";
68
87
  import { handleRscRendering } from "./rsc-rendering.js";
69
88
  import {
70
89
  withTimeout,
90
+ isTimeoutEnabled,
71
91
  RouterTimeoutError,
72
92
  createDefaultTimeoutResponse,
73
93
  type TimeoutPhase,
94
+ type RenderTimeoutContext,
74
95
  } from "../router/timeout.js";
75
96
  import {
76
97
  createMetricsStore,
77
98
  appendMetric,
78
99
  buildMetricsTiming,
79
100
  } from "../router/metrics.js";
101
+ import { observePhase, PHASES } from "../router/instrument.js";
102
+ import { safeEmit, resolveSink, getRequestId } from "../router/telemetry.js";
80
103
  import {
81
104
  startSSRSetup,
82
- getSSRSetup,
105
+ createSsrHtmlStage,
83
106
  mayNeedSSR,
107
+ isRscRequest,
84
108
  SSR_SETUP_VAR,
85
109
  } from "./ssr-setup.js";
86
110
  import {
@@ -88,6 +112,7 @@ import {
88
112
  type RequestPlan,
89
113
  type ExecutableRequestPlan,
90
114
  } from "../router/request-classification.js";
115
+ import { INTERNAL_RANGO_DEBUG } from "../internal-debug.js";
91
116
 
92
117
  /**
93
118
  * Create an RSC request handler.
@@ -122,12 +147,35 @@ import {
122
147
  * });
123
148
  * ```
124
149
  */
150
+
151
+ /**
152
+ * Response that tells the client to do a full document navigation. Shared by
153
+ * the terminal reload plans (version-mismatch and app-switch): an empty 200
154
+ * carrying X-RSC-Reload, which the client turns into window.location.href.
155
+ */
156
+ function createReloadResponse(reloadUrl: string) {
157
+ return createResponseWithMergedHeaders(null, {
158
+ status: 200,
159
+ headers: {
160
+ "X-RSC-Reload": reloadUrl,
161
+ "content-type": "text/x-component;charset=utf-8",
162
+ },
163
+ });
164
+ }
165
+
125
166
  export function createRSCHandler<
126
167
  TEnv = unknown,
127
168
  TRoutes extends Record<string, string> = Record<string, string>,
128
169
  >(options: CreateRSCHandlerOptions<TEnv, TRoutes>) {
129
170
  const { router, version = VERSION, nonce: nonceProvider } = options;
130
171
 
172
+ // Handler-owned registry of explicit per-scope stores from cache({ store }).
173
+ // Lives in the closure so it is scoped per handler (multi-router deployments
174
+ // get separate registries) and accumulates every explicit store this handler
175
+ // resolves across requests. updateTag()/revalidateTag() iterate it to reach
176
+ // stores not covered by the app-level ctx._cacheStore.
177
+ const explicitTaggedStores = new Set<SegmentCacheStore>();
178
+
131
179
  // Use provided deps or default to @vitejs/plugin-rsc/rsc exports
132
180
  const deps = options.deps ?? rscDeps;
133
181
  const {
@@ -202,7 +250,44 @@ export function createRSCHandler<
202
250
  actionId?: string,
203
251
  ): Promise<Response> {
204
252
  const timeoutError = new RouterTimeoutError(phase, durationMs);
253
+ const requestContext = _getRequestContext<TEnv>();
254
+ const cursor = requestContext?._renderForeground;
255
+ const render: RenderTimeoutContext | undefined =
256
+ phase === "render-start" && cursor
257
+ ? {
258
+ mode: cursor.mode,
259
+ phase: cursor.phase,
260
+ state: cursor.state,
261
+ completed: cursor.completed,
262
+ total: cursor.total,
263
+ ...(cursor.phaseStartedAt !== undefined && {
264
+ phaseDurationMs: performance.now() - cursor.phaseStartedAt,
265
+ }),
266
+ }
267
+ : undefined;
268
+ const trace =
269
+ phase === "render-start" ? requestContext?._activeRoutine : undefined;
270
+ const activeEntries = trace?.active() ?? [];
271
+ const activeStep = activeEntries.at(-1);
272
+ const activeAt = performance.now();
273
+ const routineSnapshot =
274
+ trace && activeStep
275
+ ? {
276
+ name: trace.name,
277
+ path: activeEntries.map((entry) => entry.name),
278
+ durationMs: activeAt - activeStep.startedAt,
279
+ }
280
+ : undefined;
281
+
282
+ if (INTERNAL_RANGO_DEBUG && trace && activeStep) {
283
+ console.log(
284
+ `[routine] TIMEOUT ${request.method} ${url.pathname} (${trace.name})\n${trace.formatActive(activeEntries, activeAt)}`,
285
+ );
286
+ }
205
287
 
288
+ // Each surface gets its OWN shallow render snapshot. A consumer that mutates
289
+ // its copy must not corrupt what the other two observe. The internal-debug
290
+ // routine snapshot is bounded metadata sent only to onError.
206
291
  callOnError(timeoutError, phase === "action" ? "action" : "handler", {
207
292
  request,
208
293
  url,
@@ -210,26 +295,28 @@ export function createRSCHandler<
210
295
  routeKey,
211
296
  actionId,
212
297
  handledByBoundary: false,
213
- metadata: { timeout: true, phase, durationMs },
298
+ metadata: {
299
+ timeout: true,
300
+ phase,
301
+ durationMs,
302
+ ...(render && { render: { ...render } }),
303
+ ...(routineSnapshot && { routine: routineSnapshot }),
304
+ },
214
305
  });
215
306
 
216
- try {
217
- const routerCtx = getRouterContext();
218
- if (routerCtx?.telemetry) {
219
- safeEmit(resolveSink(routerCtx.telemetry), {
220
- type: "request.timeout" as const,
221
- timestamp: performance.now(),
222
- requestId: routerCtx.requestId,
223
- phase,
224
- pathname: url.pathname,
225
- routeKey,
226
- actionId,
227
- durationMs,
228
- customHandler: !!router.onTimeout,
229
- });
230
- }
231
- } catch {
232
- // Router context may not be available
307
+ if (router.telemetry) {
308
+ safeEmit(resolveSink(router.telemetry), {
309
+ type: "request.timeout",
310
+ timestamp: performance.now(),
311
+ requestId: getRequestId(request),
312
+ phase,
313
+ pathname: url.pathname,
314
+ routeKey,
315
+ actionId,
316
+ durationMs,
317
+ customHandler: !!router.onTimeout,
318
+ ...(render && { render: { ...render } }),
319
+ });
233
320
  }
234
321
 
235
322
  if (router.onTimeout) {
@@ -242,6 +329,7 @@ export function createRSCHandler<
242
329
  routeKey,
243
330
  actionId,
244
331
  durationMs,
332
+ ...(render && { render: { ...render } }),
245
333
  });
246
334
  } catch (e) {
247
335
  if (process.env.NODE_ENV !== "production") {
@@ -258,20 +346,66 @@ export function createRSCHandler<
258
346
  * Build a 200 Flight response that carries a redirect URL and optional state.
259
347
  * Used when a partial/action request results in a redirect -- fetch
260
348
  * auto-follows 3xx so we send the redirect as payload metadata instead.
349
+ *
350
+ * The redirect URL is resolved with {@link resolveSoftRedirectUrl} against
351
+ * the current request origin so an unsafe target never leaves as Flight
352
+ * metadata (client validators remain defense-in-depth).
261
353
  */
262
354
  function createRedirectFlightResponse(
263
355
  redirectUrl: string,
264
356
  locationState?: Record<string, unknown>,
357
+ external?: boolean,
265
358
  ): Response {
359
+ const reqCtx = _getRequestContext<TEnv>();
360
+ const requestOrigin =
361
+ reqCtx?.url.origin ?? new URL("http://localhost").origin;
362
+ // Resolve with the same policy as 3xx guardOutgoingRedirect. Keep
363
+ // external:true only when the external scheme check passed; a neutralized
364
+ // landing (javascript:/blocked) must not advertise external.
365
+ let resolvedUrl: string;
366
+ let resolvedExternal = false;
367
+ if (external) {
368
+ const ext = resolveExternalRedirect(redirectUrl, requestOrigin);
369
+ if (ext !== null) {
370
+ resolvedUrl = ext;
371
+ resolvedExternal = true;
372
+ } else {
373
+ resolvedUrl = safeSameOriginLanding(router.basename);
374
+ }
375
+ } else {
376
+ resolvedUrl = resolveSoftRedirectUrl(
377
+ redirectUrl,
378
+ requestOrigin,
379
+ router.basename,
380
+ false,
381
+ );
382
+ }
266
383
  const redirectPayload: RscPayload = {
267
384
  metadata: {
268
- pathname: redirectUrl,
385
+ pathname: resolvedUrl,
269
386
  segments: [],
270
- redirect: { url: redirectUrl },
387
+ redirect: {
388
+ url: resolvedUrl,
389
+ ...(resolvedExternal && { external: true }),
390
+ },
271
391
  ...(locationState && { locationState }),
272
392
  },
273
393
  };
274
- const rscStream = renderToReadableStream<RscPayload>(redirectPayload);
394
+ const rscStream = reqCtx
395
+ ? renderRscFlightStage({
396
+ ctx: { renderToReadableStream, callOnError },
397
+ request: reqCtx.request,
398
+ url: reqCtx.url,
399
+ env: reqCtx.env,
400
+ payload: redirectPayload,
401
+ tracking: {
402
+ mode: reqCtx.url.searchParams.has("_rsc_action")
403
+ ? "action-revalidation"
404
+ : "partial",
405
+ routeKey: reqCtx._routeName,
406
+ },
407
+ }).stream
408
+ : renderToReadableStream<RscPayload>(redirectPayload);
275
409
  return createResponseWithMergedHeaders(rscStream, {
276
410
  status: 200,
277
411
  headers: { "content-type": "text/x-component;charset=utf-8" },
@@ -283,6 +417,7 @@ export function createRSCHandler<
283
417
  const handlerCtx: HandlerContext<TEnv> = {
284
418
  router,
285
419
  version,
420
+ devDiscoveryEpoch: router.__devDiscoveryEpoch,
286
421
  renderToReadableStream,
287
422
  decodeReply,
288
423
  createTemporaryReferenceSet,
@@ -321,12 +456,12 @@ export function createRSCHandler<
321
456
  }
322
457
  }
323
458
 
324
- // Resolve nonce if provider is set
459
+ // Resolve nonce if provider is set. false/"" normalize to undefined —
460
+ // the per-request opt-out (resolveProviderNonce).
325
461
  const nonceStart = performance.now();
326
462
  let nonce: string | undefined;
327
463
  if (nonceProvider) {
328
- const result = await nonceProvider(request, env);
329
- nonce = result === true ? generateNonce() : result;
464
+ nonce = resolveProviderNonce(await nonceProvider(request, env));
330
465
  }
331
466
  const nonceDur = performance.now() - nonceStart;
332
467
 
@@ -352,7 +487,8 @@ export function createRSCHandler<
352
487
  // Resolve cache store configuration
353
488
  // Priority: options.cache (handler override) > router.cache (router default)
354
489
  // Store is enabled only if: config provided, enabled, and no ?__no_cache query param
355
- let cacheStore = undefined;
490
+ let cacheStore: SegmentCacheStore | undefined;
491
+ let searchParamsFilter: SearchParamsFilter | undefined;
356
492
  const cacheOption = options.cache ?? router.cache;
357
493
  if (cacheOption && !url.searchParams.has("__no_cache")) {
358
494
  const cacheConfig =
@@ -362,6 +498,9 @@ export function createRSCHandler<
362
498
 
363
499
  if (cacheConfig.enabled !== false) {
364
500
  cacheStore = cacheConfig.store;
501
+ searchParamsFilter = compileSearchParamsFilter(
502
+ cacheConfig.searchParams,
503
+ );
365
504
  }
366
505
  }
367
506
 
@@ -419,10 +558,25 @@ export function createRSCHandler<
419
558
  url,
420
559
  variables,
421
560
  cacheStore,
561
+ searchParamsFilter,
562
+ explicitTaggedStores,
422
563
  cacheProfiles: router.cacheProfiles,
423
564
  executionContext: executionCtx,
424
565
  themeConfig: router.themeConfig,
566
+ stateCookieName: router.resolvedStateCookieName,
567
+ version,
425
568
  });
569
+ // Gate on the SAME enabled-semantics withTimeout uses (isTimeoutEnabled):
570
+ // a `renderStartMs: 0` / negative opt-out disables the timeout, so the
571
+ // driver's cursor bookkeeping (which only the timeout reads) must be off too.
572
+ requestContext._renderDiagnosticsEnabled = isTimeoutEnabled(
573
+ router.timeouts.renderStartMs,
574
+ );
575
+ // Thread the true request entry timestamp onto the context so a metrics
576
+ // store created MID-request (ctx.debugPerformance() / getMetricsStore) anchors
577
+ // to the real start, not the opt-in moment — phases that began earlier then
578
+ // report non-negative offsets. Set unconditionally: debug may be enabled later.
579
+ requestContext._handlerStart = handlerStart;
426
580
  if (earlyMetricsStore) {
427
581
  requestContext._debugPerformance = true;
428
582
  requestContext._metricsStore = earlyMetricsStore;
@@ -431,7 +585,7 @@ export function createRSCHandler<
431
585
  // can surface non-fatal errors through the router's onError callback.
432
586
  requestContext._reportBackgroundError = (
433
587
  error: unknown,
434
- category: string,
588
+ category: CacheErrorCategory,
435
589
  ) => {
436
590
  callOnError(error, "cache", {
437
591
  request,
@@ -463,80 +617,206 @@ export function createRSCHandler<
463
617
  // - Streaming
464
618
  // Store basename on request context (scoped per-request via existing ALS)
465
619
  requestContext._basename = router.basename;
620
+ requestContext._routerId = router.id;
621
+
622
+ // Resolved span tracing for this request (read at each traced phase).
623
+ requestContext._tracing = router.tracing;
624
+
625
+ // The "rango.request" span is opened inside the request context so the
626
+ // Cloudflare runner can read executionContext.tracing, and so every nested
627
+ // phase span (and the platform's automatic KV/D1/fetch spans) nests under
628
+ // it. Construction-bound: the span ends when the Response is built, never
629
+ // wrapping the streamed body. metric:false — handler:total is metered
630
+ // directly below (a grand total incl. the pre-context bootstrap timings).
631
+ // When tracing is off this is a direct pass-through.
632
+ return runWithRequestContext(requestContext, () =>
633
+ observePhase(PHASES.request, async (span) => {
634
+ span.setAttribute("http.method", request.method);
635
+ // The matched route template is not known until match() runs later, so
636
+ // emit the concrete path as url.path (low-level), NOT http.route — the
637
+ // latter is reserved for the low-cardinality template (OTel convention).
638
+ span.setAttribute("url.path", url.pathname);
639
+
640
+ // Core handler logic (wrapped by middleware)
641
+ const coreHandler = async (): Promise<Response> => {
642
+ return coreRequestHandler(request, env, url, variables, nonce);
643
+ };
466
644
 
467
- return runWithRequestContext(requestContext, async () => {
468
- // Core handler logic (wrapped by middleware)
469
- const coreHandler = async (): Promise<Response> => {
470
- return coreRequestHandler(request, env, url, variables, nonce);
471
- };
645
+ // Execute middleware chain if any, otherwise call core handler
646
+ // directly; the response is finalized below, inside the response span.
647
+ const hasMiddleware = matchedMiddleware.length > 0;
648
+ const downstream = hasMiddleware
649
+ ? await executeMiddleware(
650
+ matchedMiddleware,
651
+ request,
652
+ env,
653
+ variables,
654
+ coreHandler,
655
+ createReverseFunction(getRequiredRouteMap()),
656
+ )
657
+ : await coreHandler();
658
+
659
+ // Final response construction + host handoff, wrapped in rango.response
660
+ // — the explicit stream-handoff marker. The callback is synchronous, so
661
+ // the span ends immediately before the handler returns the response to
662
+ // the host; it never reads or wraps response.body. A downstream throw
663
+ // skips it entirely (no response exists to hand off).
664
+ return observePhase(PHASES.response, (responseSpan) => {
665
+ let response: Response;
666
+ if (hasMiddleware) {
667
+ if (
668
+ url.searchParams.has("_rsc_partial") ||
669
+ url.searchParams.has("_rsc_action")
670
+ ) {
671
+ const intercepted = interceptRedirectForPartial(
672
+ downstream,
673
+ createRedirectFlightResponse,
674
+ { requestOrigin: url.origin, basename: router.basename },
675
+ );
676
+ response = intercepted ?? finalizeResponse(downstream);
677
+ } else {
678
+ response = finalizeResponse(downstream);
679
+ }
680
+ } else {
681
+ response = downstream;
682
+ }
472
683
 
473
- // Execute middleware chain if any, otherwise call core handler directly
474
- let response: Response;
475
- if (matchedMiddleware.length > 0) {
476
- const mwResponse = await executeMiddleware(
477
- matchedMiddleware,
478
- request,
479
- env,
480
- variables,
481
- coreHandler,
482
- createReverseFunction(getRequiredRouteMap()),
483
- );
684
+ // Finalize metrics after all middleware (including post-next work)
685
+ // has completed so :post spans are captured in the timeline.
686
+ // Handler timing parts are always emitted (even without debug metrics)
687
+ // so non-debug requests still get bootstrap Server-Timing entries.
688
+ const handlerTimingArr: string[] = variables.__handlerTiming || [];
689
+ // Preserve any existing Server-Timing set by response routes or middleware
690
+ const existingTiming = response.headers.get("Server-Timing");
691
+ const timingParts = existingTiming
692
+ ? [existingTiming, ...handlerTimingArr]
693
+ : [...handlerTimingArr];
694
+
695
+ const metricsStore = requestContext._metricsStore;
696
+ if (metricsStore) {
697
+ // When the store was created at handler start (earlyMetricsStore),
698
+ // handler:total covers the full request. When ctx.debugPerformance()
699
+ // created the store mid-request its requestStart is now the threaded
700
+ // _handlerStart (== handlerStart), so both branches yield the true
701
+ // request entry; reading the store's own anchor keeps this correct even
702
+ // if a store ever lands without the threading (falls back to its start).
703
+ const totalStart = earlyMetricsStore
704
+ ? handlerStart
705
+ : metricsStore.requestStart;
706
+ appendMetric(
707
+ metricsStore,
708
+ "handler:total",
709
+ totalStart,
710
+ performance.now() - totalStart,
711
+ );
712
+ const metricsTiming = buildMetricsTiming(
713
+ request.method,
714
+ url.pathname,
715
+ metricsStore,
716
+ );
717
+ if (metricsTiming) timingParts.push(metricsTiming);
718
+ }
484
719
 
485
- if (
486
- url.searchParams.has("_rsc_partial") ||
487
- url.searchParams.has("_rsc_action")
488
- ) {
489
- const intercepted = interceptRedirectForPartial(
490
- mwResponse,
491
- createRedirectFlightResponse,
492
- );
493
- response = intercepted ?? finalizeResponse(mwResponse);
494
- } else {
495
- response = finalizeResponse(mwResponse);
496
- }
497
- } else {
498
- response = await coreHandler();
499
- }
720
+ const fullTiming = timingParts.join(", ");
721
+ if (fullTiming && !isWebSocketUpgradeResponse(response)) {
722
+ try {
723
+ response.headers.set("Server-Timing", fullTiming);
724
+ } catch {
725
+ // Immutable headers (e.g. a passed-through platform Response) — drop
726
+ // the timing header, never the response. Instrumentation must not
727
+ // 500 a request.
728
+ }
729
+ }
500
730
 
501
- // Finalize metrics after all middleware (including post-next work)
502
- // has completed so :post spans are captured in the timeline.
503
- // Handler timing parts are always emitted (even without debug metrics)
504
- // so non-debug requests still get bootstrap Server-Timing entries.
505
- const handlerTimingArr: string[] = variables.__handlerTiming || [];
506
- // Preserve any existing Server-Timing set by response routes or middleware
507
- const existingTiming = response.headers.get("Server-Timing");
508
- const timingParts = existingTiming
509
- ? [existingTiming, ...handlerTimingArr]
510
- : [...handlerTimingArr];
511
-
512
- const metricsStore = requestContext._metricsStore;
513
- if (metricsStore) {
514
- // When the store was created at handler start (earlyMetricsStore),
515
- // handler:total covers the full request. When ctx.debugPerformance()
516
- // created the store mid-request, use its requestStart to avoid a
517
- // negative startTime offset.
518
- const totalStart = earlyMetricsStore
519
- ? handlerStart
520
- : metricsStore.requestStart;
521
- appendMetric(
522
- metricsStore,
523
- "handler:total",
524
- totalStart,
525
- performance.now() - totalStart,
526
- );
527
- const metricsTiming = buildMetricsTiming(
528
- request.method,
529
- url.pathname,
530
- metricsStore,
531
- );
532
- if (metricsTiming) timingParts.push(metricsTiming);
533
- }
731
+ // Single open-redirect chokepoint: every response (PE, full-page,
732
+ // middleware short-circuit, response-route) funnels through here, so
733
+ // guarding browser-followed (3xx) redirects once covers them all and any
734
+ // future redirect exit. Soft SPA/Flight redirects are 200/204 and pass
735
+ // through untouched (validated client-side instead).
736
+ const guarded = guardOutgoingRedirect(
737
+ response,
738
+ url.origin,
739
+ router.basename,
740
+ );
534
741
 
535
- const fullTiming = timingParts.join(", ");
536
- if (fullTiming) response.headers.set("Server-Timing", fullTiming);
742
+ // Stream-idle watchdog (opt-in via timeouts.streamIdleMs): bounds
743
+ // end-to-end idle flow on the streamed body — see rsc/stream-idle.ts
744
+ // for the semantics. Applied at this finalization chokepoint so every
745
+ // streaming exit is covered; websocket upgrades must never be
746
+ // reconstructed and bodiless responses have nothing to bound. The
747
+ // trip fires POST-handoff (the request ALS may be gone), so it
748
+ // reports via the eagerly captured surfaces — callOnError +
749
+ // router.telemetry directly — mirroring handleStore.onError.
750
+ // onTimeout does NOT apply: the response already left the handler,
751
+ // so no replacement Response can be served mid-stream.
752
+ let finalResponse = guarded;
753
+ const streamIdleMs = router.timeouts.streamIdleMs;
754
+ // Websocket check FIRST: a workerd upgrade response must never have
755
+ // its body getter poked (same invariant as the body_kind attribute
756
+ // below).
757
+ if (
758
+ isTimeoutEnabled(streamIdleMs) &&
759
+ !isWebSocketUpgradeResponse(guarded) &&
760
+ guarded.body
761
+ ) {
762
+ const routeKey = requestContext._routeName;
763
+ finalResponse = applyStreamIdleTimeout(
764
+ guarded,
765
+ streamIdleMs!,
766
+ (tripInfo) => {
767
+ callOnError(tripInfo.error, "handler", {
768
+ request,
769
+ url,
770
+ env,
771
+ routeKey,
772
+ handledByBoundary: false,
773
+ metadata: {
774
+ timeout: true,
775
+ phase: "stream-idle",
776
+ durationMs: tripInfo.totalMs,
777
+ },
778
+ });
779
+ if (router.telemetry) {
780
+ safeEmit(resolveSink(router.telemetry), {
781
+ type: "request.timeout",
782
+ timestamp: performance.now(),
783
+ requestId: getRequestId(request),
784
+ phase: "stream-idle",
785
+ pathname: url.pathname,
786
+ routeKey,
787
+ durationMs: tripInfo.totalMs,
788
+ customHandler: false,
789
+ });
790
+ }
791
+ },
792
+ );
793
+ }
537
794
 
538
- return response;
539
- });
795
+ // Attributes describe the response actually handed to the host (after
796
+ // unsafe-redirect replacement), low-cardinality only. body_kind checks
797
+ // the websocket marker before the body getter so a workerd upgrade
798
+ // Response is never poked; `.body` is a getter access, not a read of
799
+ // the stream.
800
+ responseSpan.setAttribute(
801
+ "http.response.status_code",
802
+ finalResponse.status,
803
+ );
804
+ responseSpan.setAttribute(
805
+ "rango.response.mode",
806
+ requestContext._requestMode ?? "middleware-short-circuit",
807
+ );
808
+ responseSpan.setAttribute(
809
+ "rango.response.body_kind",
810
+ isWebSocketUpgradeResponse(finalResponse)
811
+ ? "websocket"
812
+ : finalResponse.body === null
813
+ ? "empty"
814
+ : "stream",
815
+ );
816
+ return finalResponse;
817
+ });
818
+ }),
819
+ );
540
820
  };
541
821
 
542
822
  // Core request handling logic (separated for middleware wrapping).
@@ -551,35 +831,6 @@ export function createRSCHandler<
551
831
  ): Promise<Response> {
552
832
  const handlerTiming: string[] = variables.__handlerTiming || [];
553
833
 
554
- // Debug manifest endpoint: handled before classification since it
555
- // doesn't need a route match and needs trie access from the closure.
556
- const isDev = process.env.NODE_ENV !== "production";
557
- if (
558
- url.searchParams.has("__debug_manifest") &&
559
- (isDev || router.allowDebugManifest)
560
- ) {
561
- const trie = getRouterTrie(router.id) ?? getRouteTrie();
562
- const routeManifest = getRequiredRouteMap();
563
- const { extractAncestryFromTrie } =
564
- await import("../build/route-trie.js");
565
- return new Response(
566
- JSON.stringify(
567
- {
568
- routerId: router.id,
569
- routeManifest,
570
- routeAncestry: trie ? extractAncestryFromTrie(trie) : {},
571
- routeTrie: trie,
572
- precomputedEntries: getPrecomputedEntries(),
573
- },
574
- null,
575
- 2,
576
- ),
577
- {
578
- headers: { "Content-Type": "application/json" },
579
- },
580
- );
581
- }
582
-
583
834
  // ---- 1. Classify ----
584
835
  // classifyRequest may throw RouteNotFoundError for unknown routes.
585
836
  // In that case, fall through to a full-render plan so the pipeline
@@ -593,10 +844,7 @@ export function createRSCHandler<
593
844
  routerId: router.id,
594
845
  });
595
846
  } catch (error) {
596
- if (
597
- error instanceof RouteNotFoundError ||
598
- (error instanceof Error && error.name === "RouteNotFoundError")
599
- ) {
847
+ if (isRouteNotFoundError(error)) {
600
848
  // Let the render path handle 404 — match()/matchPartial() will
601
849
  // re-throw RouteNotFoundError and the catch block in
602
850
  // executeRenderWithMiddleware renders the not-found page.
@@ -622,6 +870,12 @@ export function createRSCHandler<
622
870
  const classifyDur = performance.now() - classifyStart;
623
871
  handlerTiming.push(`handler-classify;dur=${classifyDur.toFixed(2)}`);
624
872
 
873
+ // Stash the classified mode for the rango.response span (rango.response.mode)
874
+ // — the outer handler tail cannot see the plan. Stays unset when middleware
875
+ // short-circuits before core execution runs (reported as
876
+ // "middleware-short-circuit").
877
+ getRequestContext()._requestMode = plan.mode;
878
+
625
879
  // ---- 2. Terminal plans (no execution needed) ----
626
880
  if (plan.mode === "redirect") {
627
881
  // Redirects are handled by the pipeline (match/matchPartial),
@@ -637,24 +891,18 @@ export function createRSCHandler<
637
891
  console.log(
638
892
  `[RSC] Version mismatch: client=${url.searchParams.get("_rsc_v")}, server=${version}. Forcing reload.`,
639
893
  );
640
- return createResponseWithMergedHeaders(null, {
641
- status: 200,
642
- headers: {
643
- "X-RSC-Reload": plan.reloadUrl,
644
- "content-type": "text/x-component;charset=utf-8",
645
- },
646
- });
894
+ return createReloadResponse(plan.reloadUrl);
895
+ }
896
+
897
+ if (plan.mode === "app-switch") {
898
+ // Cross-app SPA navigation crossed a host-router app boundary. Force a
899
+ // real document navigation so the target app's document is re-established
900
+ // (stylesheets, theme, warmup, prefetch-TTL). See request-classification.
901
+ return createReloadResponse(plan.reloadUrl);
647
902
  }
648
903
 
649
904
  // ---- 3. Origin guard (gate for action/loader/PE modes) ----
650
- const originPhase: OriginCheckPhase | null =
651
- plan.mode === "action"
652
- ? "action"
653
- : plan.mode === "loader"
654
- ? "loader"
655
- : plan.mode === "pe-render"
656
- ? "pe-form"
657
- : null;
905
+ const originPhase = ORIGIN_CHECK_PHASE_BY_MODE[plan.mode];
658
906
  if (originPhase) {
659
907
  const originResult = await checkRequestOrigin(
660
908
  request,
@@ -682,22 +930,17 @@ export function createRSCHandler<
682
930
  },
683
931
  });
684
932
 
685
- try {
686
- const routerCtx = getRouterContext();
687
- if (routerCtx?.telemetry) {
688
- safeEmit(resolveSink(routerCtx.telemetry), {
689
- type: "request.origin-rejected" as const,
690
- timestamp: performance.now(),
691
- requestId: routerCtx.requestId,
692
- method: request.method,
693
- pathname: url.pathname,
694
- phase: originPhase,
695
- origin: request.headers.get("origin"),
696
- host: request.headers.get("host"),
697
- });
698
- }
699
- } catch {
700
- // Router context may not be available
933
+ if (router.telemetry) {
934
+ safeEmit(resolveSink(router.telemetry), {
935
+ type: "request.origin-rejected",
936
+ timestamp: performance.now(),
937
+ requestId: getRequestId(request),
938
+ method: request.method,
939
+ pathname: url.pathname,
940
+ phase: originPhase,
941
+ origin: request.headers.get("origin"),
942
+ host: request.headers.get("host"),
943
+ });
701
944
  }
702
945
 
703
946
  return originResult;
@@ -728,11 +971,11 @@ export function createRSCHandler<
728
971
  nonce: string | undefined,
729
972
  ): Promise<Response> {
730
973
  // Common setup
731
- const handleStore = requireRequestContext()._handleStore;
974
+ const handleStore = getRequestContext()._handleStore;
732
975
 
733
976
  // Wire up error reporting for late streaming-handle failures
734
977
  handleStore.onError = (error: Error) => {
735
- const reqCtx = requireRequestContext();
978
+ const reqCtx = getRequestContext();
736
979
  callOnError(error, "handler", {
737
980
  request,
738
981
  url,
@@ -740,22 +983,17 @@ export function createRSCHandler<
740
983
  params: reqCtx.params as Record<string, string>,
741
984
  handledByBoundary: true,
742
985
  });
743
- try {
744
- const routerCtx = getRouterContext();
745
- if (routerCtx?.telemetry) {
746
- safeEmit(resolveSink(routerCtx.telemetry), {
747
- type: "handler.error" as const,
748
- timestamp: performance.now(),
749
- requestId: routerCtx.requestId,
750
- error,
751
- handledByBoundary: true,
752
- pathname: url.pathname,
753
- routeKey: reqCtx._routeName,
754
- params: reqCtx.params as Record<string, string>,
755
- });
756
- }
757
- } catch {
758
- // Router context may not be available (e.g. prerender path)
986
+ if (router.telemetry) {
987
+ safeEmit(resolveSink(router.telemetry), {
988
+ type: "handler.error",
989
+ timestamp: performance.now(),
990
+ requestId: getRequestId(request),
991
+ error,
992
+ handledByBoundary: true,
993
+ pathname: url.pathname,
994
+ routeKey: reqCtx._routeName,
995
+ params: reqCtx.params as Record<string, string>,
996
+ });
759
997
  }
760
998
  };
761
999
 
@@ -764,7 +1002,7 @@ export function createRSCHandler<
764
1002
  // instead of calling resolveRoute again.
765
1003
  if (plan.mode !== "redirect") {
766
1004
  setRequestContextParams(plan.route.params, plan.route.routeKey);
767
- requireRequestContext()._classifiedRoute = plan.route;
1005
+ getRequestContext()._classifiedRoute = plan.route;
768
1006
  }
769
1007
 
770
1008
  const routeReverse = createReverseFunction(getRequiredRouteMap());
@@ -804,8 +1042,10 @@ export function createRSCHandler<
804
1042
  );
805
1043
  }
806
1044
  const response = responseOutcome.result;
807
- if (plan.negotiated) {
808
- response.headers.append("Vary", "Accept");
1045
+ if (plan.negotiated && !isWebSocketUpgradeResponse(response)) {
1046
+ // handleResponseRoute (callHandlerWithVary) already appends Vary: Accept
1047
+ // for negotiated responses; dedup so we don't emit Vary: Accept, Accept.
1048
+ appendVaryAccept(response);
809
1049
  }
810
1050
  return response;
811
1051
  }
@@ -813,16 +1053,41 @@ export function createRSCHandler<
813
1053
  // SSR setup: kick off in parallel for modes that need HTML rendering.
814
1054
  // Placed after response-route short-circuit so response/mime routes
815
1055
  // never pay for SSR work.
816
- if (plan.mode !== "loader" && mayNeedSSR(request, url)) {
817
- variables[SSR_SETUP_VAR] = startSSRSetup(
1056
+ //
1057
+ // Only kick off when the request will actually render HTML, so the
1058
+ // eager loadSSRModule() + user resolveStreaming() are not started (and
1059
+ // never consumed) for a request that returns an RSC stream — that wasted
1060
+ // work also leaves an orphaned Promise.all that can reject (D7). PE form
1061
+ // submissions always render HTML (handleProgressiveEnhancement renders via
1062
+ // getSSRSetup regardless of Accept). For full/partial-render and action,
1063
+ // the render-time HTML decision is exactly !isRscRequest — mayNeedSSR is
1064
+ // the coarse transport pre-filter, isRscRequest adds the partial/__rsc
1065
+ // flags; both share the same Accept rule (acceptsFlightExplicitly in
1066
+ // ssr-setup.ts), so the Accept call cannot drift between them. Both must
1067
+ // pass.
1068
+ const willRenderHtml =
1069
+ plan.mode === "pe-render" ||
1070
+ (mayNeedSSR(request, url) &&
1071
+ !isRscRequest(request, url, plan.mode === "partial-render"));
1072
+ if (plan.mode !== "loader" && willRenderHtml) {
1073
+ const ssrSetup = startSSRSetup(
818
1074
  handlerCtx,
819
1075
  request,
820
1076
  env,
821
1077
  url,
822
1078
  router.debugPerformance
823
- ? () => requireRequestContext()._metricsStore
1079
+ ? () => getRequestContext()._metricsStore
824
1080
  : undefined,
825
1081
  );
1082
+ variables[SSR_SETUP_VAR] = ssrSetup;
1083
+
1084
+ // A handler can short-circuit before HTML rendering consumes this promise
1085
+ // (for example, by returning a redirect). Workerd cancels untracked dynamic
1086
+ // imports at the request boundary; retaining that cancelled promise in the
1087
+ // production SSR module memo makes every later document request hang.
1088
+ // Extending the request lifetime lets the shared setup settle without
1089
+ // delaying the short-circuit response.
1090
+ getRequestContext().executionContext?.waitUntil(ssrSetup);
826
1091
  }
827
1092
 
828
1093
  // ---- Loader fetch ----
@@ -861,14 +1126,20 @@ export function createRSCHandler<
861
1126
  if (plan.mode === "action") {
862
1127
  let actionContinuation: ActionContinuation | undefined;
863
1128
  try {
1129
+ // Instrument the action execution as its own phase (action:<actionId> +
1130
+ // rango.action), so a POST shows the mutation time AND which action ran,
1131
+ // not just the downstream revalidation render. The action's own
1132
+ // loaders/fetches nest under rango.action.
864
1133
  const actionOutcome = await withTimeout(
865
- executeServerAction(
866
- handlerCtx,
867
- request,
868
- env,
869
- url,
870
- plan.actionId,
871
- handleStore,
1134
+ observePhase(PHASES.action(plan.actionId), () =>
1135
+ executeServerAction(
1136
+ handlerCtx,
1137
+ request,
1138
+ env,
1139
+ url,
1140
+ plan.actionId,
1141
+ handleStore,
1142
+ ),
872
1143
  ),
873
1144
  router.timeouts.actionMs,
874
1145
  "action",
@@ -921,47 +1192,17 @@ export function createRSCHandler<
921
1192
  );
922
1193
  }
923
1194
 
924
- // ---- Full render / Partial render (or PE that fell through) ----
925
- if (plan.mode === "full-render" || plan.mode === "partial-render") {
926
- const isPartial = plan.mode === "partial-render";
927
- return executeRenderWithMiddleware(
928
- plan.route.routeMiddleware,
929
- plan.negotiated,
930
- plan.route.routeKey,
931
- routeReverse,
932
- request,
933
- env,
934
- url,
935
- variables,
936
- nonce,
937
- handleStore,
938
- isPartial,
939
- );
940
- }
941
-
942
- // PE that fell through (handleProgressiveEnhancement returned null)
943
- // falls back to full render
944
- if (plan.mode === "pe-render") {
945
- return executeRenderWithMiddleware(
946
- plan.route.routeMiddleware,
947
- false,
948
- plan.route.routeKey,
949
- routeReverse,
950
- request,
951
- env,
952
- url,
953
- variables,
954
- nonce,
955
- handleStore,
956
- false,
957
- );
958
- }
959
-
960
- // Redirect plan that wasn't handled above (full-page redirect — let
961
- // the pipeline handle it via match() which returns { redirect: url })
1195
+ // Full render, partial render, fallen-through PE, and full-page redirect all
1196
+ // render through the same middleware-wrapped path. Only full/partial-render
1197
+ // carry negotiation + the partial flag; pe/redirect render plainly.
1198
+ const isPartial = plan.mode === "partial-render";
1199
+ const negotiated =
1200
+ plan.mode === "full-render" || plan.mode === "partial-render"
1201
+ ? plan.negotiated
1202
+ : false;
962
1203
  return executeRenderWithMiddleware(
963
1204
  plan.route.routeMiddleware,
964
- false,
1205
+ negotiated,
965
1206
  plan.route.routeKey,
966
1207
  routeReverse,
967
1208
  request,
@@ -970,7 +1211,7 @@ export function createRSCHandler<
970
1211
  variables,
971
1212
  nonce,
972
1213
  handleStore,
973
- false,
1214
+ isPartial,
974
1215
  );
975
1216
  }
976
1217
 
@@ -987,7 +1228,7 @@ export function createRSCHandler<
987
1228
  url: URL,
988
1229
  variables: Record<string, any>,
989
1230
  nonce: string | undefined,
990
- handleStore: ReturnType<typeof requireRequestContext>["_handleStore"],
1231
+ handleStore: ReturnType<typeof getRequestContext>["_handleStore"],
991
1232
  isPartial: boolean,
992
1233
  actionContinuation?: ActionContinuation,
993
1234
  ): Promise<Response> {
@@ -1014,17 +1255,28 @@ export function createRSCHandler<
1014
1255
  nonce,
1015
1256
  );
1016
1257
  }
1017
- if (negotiated) {
1018
- response.headers.append("Vary", "Accept");
1258
+ if (negotiated && !isWebSocketUpgradeResponse(response)) {
1259
+ // handleRscRendering bakes `accept` into the RSC response's Vary list;
1260
+ // dedup so the negotiated append does not list accept twice.
1261
+ appendVaryAccept(response);
1019
1262
  }
1020
1263
  return response;
1021
1264
  } catch (error) {
1022
1265
  // Check if middleware/handler returned Response
1023
1266
  if (error instanceof Response) {
1267
+ // An action revalidation render is delivered to the client over the
1268
+ // same Flight-parsing path as a partial navigation, so a Response
1269
+ // thrown during it must be converted exactly like a partial one
1270
+ // (raw 200 -> hard-nav hint, 3xx -> Flight redirect). Without this,
1271
+ // the no-middleware path returns the raw Response (the with-middleware
1272
+ // path is already covered by the isPartial || actionContinuation
1273
+ // guard below).
1274
+ const treatAsPartial = isPartial || actionContinuation != null;
1275
+
1024
1276
  // During partial (client-side navigation), a 200 Response from a handler
1025
1277
  // means the route serves raw content (JSON, text, etc.), not JSX.
1026
1278
  // Signal the browser to hard-navigate so it renders the raw response.
1027
- if (isPartial && error.status === 200) {
1279
+ if (treatAsPartial && error.status === 200) {
1028
1280
  console.warn(
1029
1281
  `[RSC] Route handler at ${url.pathname} returned a Response during client-side navigation. ` +
1030
1282
  `Falling back to hard navigation. Use data-external on the <Link> to avoid the extra round-trip.`,
@@ -1038,10 +1290,11 @@ export function createRSCHandler<
1038
1290
  });
1039
1291
  }
1040
1292
 
1041
- if (isPartial) {
1293
+ if (treatAsPartial) {
1042
1294
  const intercepted = interceptRedirectForPartial(
1043
1295
  error,
1044
1296
  createRedirectFlightResponse,
1297
+ { requestOrigin: url.origin, basename: router.basename },
1045
1298
  );
1046
1299
  if (intercepted) return intercepted;
1047
1300
  }
@@ -1050,10 +1303,7 @@ export function createRSCHandler<
1050
1303
  }
1051
1304
 
1052
1305
  // Render 404 page for unmatched routes
1053
- const isRouteNotFound =
1054
- error instanceof RouteNotFoundError ||
1055
- (error instanceof Error && error.name === "RouteNotFoundError");
1056
- if (isRouteNotFound) {
1306
+ if (isRouteNotFoundError(error)) {
1057
1307
  callOnError(error, "routing", {
1058
1308
  request,
1059
1309
  url,
@@ -1061,11 +1311,12 @@ export function createRSCHandler<
1061
1311
  handledByBoundary: true,
1062
1312
  });
1063
1313
 
1064
- const notFoundOption = router.notFound;
1065
- const notFoundComponent =
1066
- typeof notFoundOption === "function"
1067
- ? notFoundOption({ pathname: url.pathname })
1068
- : (notFoundOption ?? createElement("h1", null, "Not Found"));
1314
+ // No boundary to consult: an unmatched route has no entry chain, so
1315
+ // this always lands on the router option or the shared default.
1316
+ const notFoundComponent = resolveDefaultNotFound(
1317
+ router.notFound,
1318
+ url.pathname,
1319
+ );
1069
1320
 
1070
1321
  const notFoundSegment = {
1071
1322
  id: "notFound",
@@ -1084,51 +1335,81 @@ export function createRSCHandler<
1084
1335
  segments: [notFoundSegment],
1085
1336
  matched: [],
1086
1337
  diff: [],
1338
+ // Shape parity with buildFullPayload (rsc-rendering.ts): the 404
1339
+ // payload carries params/resolvedIds/prefetchCacheTTL the same way a
1340
+ // matched full render does. resolvedIds mirrors the rendered segment
1341
+ // list (the single notFound segment) like the error-boundary path
1342
+ // (match-api.ts) does for its boundary segment.
1343
+ resolvedIds: [notFoundSegment.id],
1344
+ params: {},
1087
1345
  isPartial: false,
1088
1346
  rootLayout: router.rootLayout,
1089
- handles: handleStore.stream(),
1347
+ // Full (404) render: resolve deferred handle values server-side.
1348
+ handles: resolvedHandleStream(handleStore),
1090
1349
  version,
1350
+ prefetchCacheTTL: router.prefetchCacheTTL,
1351
+ prefetchCacheSize: router.prefetchCacheSize,
1352
+ prefetchConcurrency: router.prefetchConcurrency,
1353
+ defaultPrefetch: router.defaultPrefetch,
1354
+ stateCookieName: router.resolvedStateCookieName,
1091
1355
  themeConfig: router.themeConfig,
1092
1356
  warmupEnabled: router.warmupEnabled,
1093
- initialTheme: requireRequestContext().theme,
1357
+ strictMode: router.strictMode,
1358
+ initialTheme: getRequestContext().theme,
1094
1359
  },
1095
1360
  };
1096
1361
 
1097
- const rscStream = renderToReadableStream(payload, {
1098
- onError: (error: unknown) => {
1099
- callOnError(error, "rendering", { request, url, env });
1100
- },
1101
- });
1102
-
1103
- const isRscRequest =
1104
- isPartial ||
1105
- (!request.headers.get("accept")?.includes("text/html") &&
1106
- !url.searchParams.has("__html")) ||
1107
- url.searchParams.has("__rsc");
1108
-
1109
- if (isRscRequest) {
1110
- return createResponseWithMergedHeaders(rscStream, {
1111
- status: 404,
1112
- headers: { "content-type": "text/x-component;charset=utf-8" },
1113
- });
1114
- }
1115
-
1116
- const [ssrModule, streamMode] = await getSSRSetup(
1117
- handlerCtx,
1362
+ const isNotFoundFlightResponse = isRscRequest(
1118
1363
  request,
1119
- env,
1120
1364
  url,
1121
- requireRequestContext()._metricsStore,
1365
+ isPartial,
1366
+ );
1367
+ const notFoundStageTracking = {
1368
+ mode: isPartial ? ("partial" as const) : ("full" as const),
1369
+ routeKey,
1370
+ };
1371
+ return renderRscResponse(
1372
+ {
1373
+ ctx: handlerCtx,
1374
+ request,
1375
+ url,
1376
+ env,
1377
+ payload,
1378
+ // The 404 path historically records no rsc-serialize metric (it
1379
+ // used the standalone Flight constructor, whose gate was opt-in);
1380
+ // opt out explicitly since renderRscResponse defaults the gate on.
1381
+ recordSerializeMetric: false,
1382
+ init: isNotFoundFlightResponse
1383
+ ? {
1384
+ status: 404,
1385
+ headers: {
1386
+ "content-type": "text/x-component;charset=utf-8",
1387
+ // Router identity for the client's pre-decode integrity
1388
+ // check; a same-app 404 applies in place.
1389
+ "X-RSC-Router-Id": router.id,
1390
+ },
1391
+ }
1392
+ : {
1393
+ status: 404,
1394
+ headers: {
1395
+ "content-type": "text/html;charset=utf-8",
1396
+ },
1397
+ },
1398
+ tracking: notFoundStageTracking,
1399
+ },
1400
+ isNotFoundFlightResponse
1401
+ ? undefined
1402
+ : {
1403
+ html: createSsrHtmlStage({
1404
+ ctx: handlerCtx,
1405
+ request,
1406
+ env,
1407
+ url,
1408
+ metricsStore: getRequestContext()._metricsStore,
1409
+ render: { nonce },
1410
+ }),
1411
+ },
1122
1412
  );
1123
- const htmlStream = await ssrModule.renderHTML(rscStream, {
1124
- nonce,
1125
- streamMode,
1126
- });
1127
-
1128
- return createResponseWithMergedHeaders(htmlStream, {
1129
- status: 404,
1130
- headers: { "content-type": "text/html;charset=utf-8" },
1131
- });
1132
1413
  }
1133
1414
 
1134
1415
  // Report unhandled errors
@@ -1159,6 +1440,7 @@ export function createRSCHandler<
1159
1440
  const intercepted = interceptRedirectForPartial(
1160
1441
  mwResponse,
1161
1442
  createRedirectFlightResponse,
1443
+ { requestOrigin: url.origin, basename: router.basename },
1162
1444
  );
1163
1445
  if (intercepted) return intercepted;
1164
1446
  }