@rangojs/router 0.0.0-experimental.fb6e2f40 → 0.0.0-experimental.fce7fbd1

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 (1060) hide show
  1. package/README.md +120 -25
  2. package/dist/__internal.d.ts +83 -0
  3. package/dist/__internal.d.ts.map +1 -0
  4. package/dist/__internal.js +19 -0
  5. package/dist/__internal.js.map +1 -0
  6. package/dist/__mocks__/version.d.ts +7 -0
  7. package/dist/__mocks__/version.d.ts.map +1 -0
  8. package/dist/__mocks__/version.js +7 -0
  9. package/dist/__mocks__/version.js.map +1 -0
  10. package/dist/__tests__/client-href.test.d.ts +2 -0
  11. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  12. package/dist/__tests__/client-href.test.js +74 -0
  13. package/dist/__tests__/client-href.test.js.map +1 -0
  14. package/dist/__tests__/component-utils.test.d.ts +2 -0
  15. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  16. package/dist/__tests__/component-utils.test.js +51 -0
  17. package/dist/__tests__/component-utils.test.js.map +1 -0
  18. package/dist/__tests__/event-controller.test.d.ts +2 -0
  19. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  20. package/dist/__tests__/event-controller.test.js +538 -0
  21. package/dist/__tests__/event-controller.test.js.map +1 -0
  22. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  24. package/dist/__tests__/helpers/route-tree.js +374 -0
  25. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  26. package/dist/__tests__/match-result.test.d.ts +2 -0
  27. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  28. package/dist/__tests__/match-result.test.js +154 -0
  29. package/dist/__tests__/match-result.test.js.map +1 -0
  30. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  31. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  32. package/dist/__tests__/navigation-store.test.js +440 -0
  33. package/dist/__tests__/navigation-store.test.js.map +1 -0
  34. package/dist/__tests__/partial-update.test.d.ts +2 -0
  35. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  36. package/dist/__tests__/partial-update.test.js +1009 -0
  37. package/dist/__tests__/partial-update.test.js.map +1 -0
  38. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  39. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  40. package/dist/__tests__/reverse-types.test.js +656 -0
  41. package/dist/__tests__/reverse-types.test.js.map +1 -0
  42. package/dist/__tests__/route-definition.test.d.ts +2 -0
  43. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  44. package/dist/__tests__/route-definition.test.js +55 -0
  45. package/dist/__tests__/route-definition.test.js.map +1 -0
  46. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  47. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  48. package/dist/__tests__/router-helpers.test.js +377 -0
  49. package/dist/__tests__/router-helpers.test.js.map +1 -0
  50. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  52. package/dist/__tests__/router-integration-2.test.js +426 -0
  53. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  54. package/dist/__tests__/router-integration.test.d.ts +2 -0
  55. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  56. package/dist/__tests__/router-integration.test.js +1051 -0
  57. package/dist/__tests__/router-integration.test.js.map +1 -0
  58. package/dist/__tests__/search-params.test.d.ts +5 -0
  59. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  60. package/dist/__tests__/search-params.test.js +306 -0
  61. package/dist/__tests__/search-params.test.js.map +1 -0
  62. package/dist/__tests__/segment-system.test.d.ts +2 -0
  63. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  64. package/dist/__tests__/segment-system.test.js +627 -0
  65. package/dist/__tests__/segment-system.test.js.map +1 -0
  66. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  68. package/dist/__tests__/static-handler-types.test.js +63 -0
  69. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  70. package/dist/__tests__/urls.test.d.ts +2 -0
  71. package/dist/__tests__/urls.test.d.ts.map +1 -0
  72. package/dist/__tests__/urls.test.js +421 -0
  73. package/dist/__tests__/urls.test.js.map +1 -0
  74. package/dist/__tests__/use-mount.test.d.ts +2 -0
  75. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  76. package/dist/__tests__/use-mount.test.js +35 -0
  77. package/dist/__tests__/use-mount.test.js.map +1 -0
  78. package/dist/bin/rango.d.ts +2 -0
  79. package/dist/bin/rango.d.ts.map +1 -0
  80. package/dist/bin/rango.js +147 -57
  81. package/dist/bin/rango.js.map +1 -0
  82. package/dist/browser/event-controller.d.ts +191 -0
  83. package/dist/browser/event-controller.d.ts.map +1 -0
  84. package/dist/browser/event-controller.js +559 -0
  85. package/dist/browser/event-controller.js.map +1 -0
  86. package/dist/browser/index.d.ts +2 -0
  87. package/dist/browser/index.d.ts.map +1 -0
  88. package/dist/browser/index.js +14 -0
  89. package/dist/browser/index.js.map +1 -0
  90. package/dist/browser/link-interceptor.d.ts +38 -0
  91. package/dist/browser/link-interceptor.d.ts.map +1 -0
  92. package/dist/browser/link-interceptor.js +99 -0
  93. package/dist/browser/link-interceptor.js.map +1 -0
  94. package/dist/browser/logging.d.ts +10 -0
  95. package/dist/browser/logging.d.ts.map +1 -0
  96. package/dist/browser/logging.js +29 -0
  97. package/dist/browser/logging.js.map +1 -0
  98. package/dist/browser/lru-cache.d.ts +17 -0
  99. package/dist/browser/lru-cache.d.ts.map +1 -0
  100. package/dist/browser/lru-cache.js +50 -0
  101. package/dist/browser/lru-cache.js.map +1 -0
  102. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  103. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  104. package/dist/browser/merge-segment-loaders.js +102 -0
  105. package/dist/browser/merge-segment-loaders.js.map +1 -0
  106. package/dist/browser/navigation-bridge.d.ts +102 -0
  107. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  108. package/dist/browser/navigation-bridge.js +708 -0
  109. package/dist/browser/navigation-bridge.js.map +1 -0
  110. package/dist/browser/navigation-client.d.ts +25 -0
  111. package/dist/browser/navigation-client.d.ts.map +1 -0
  112. package/dist/browser/navigation-client.js +157 -0
  113. package/dist/browser/navigation-client.js.map +1 -0
  114. package/dist/browser/navigation-store.d.ts +101 -0
  115. package/dist/browser/navigation-store.d.ts.map +1 -0
  116. package/dist/browser/navigation-store.js +625 -0
  117. package/dist/browser/navigation-store.js.map +1 -0
  118. package/dist/browser/partial-update.d.ts +75 -0
  119. package/dist/browser/partial-update.d.ts.map +1 -0
  120. package/dist/browser/partial-update.js +426 -0
  121. package/dist/browser/partial-update.js.map +1 -0
  122. package/dist/browser/react/Link.d.ts +86 -0
  123. package/dist/browser/react/Link.d.ts.map +1 -0
  124. package/dist/browser/react/Link.js +128 -0
  125. package/dist/browser/react/Link.js.map +1 -0
  126. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  127. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  128. package/dist/browser/react/NavigationProvider.js +216 -0
  129. package/dist/browser/react/NavigationProvider.js.map +1 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  132. package/dist/browser/react/ScrollRestoration.js +57 -0
  133. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  134. package/dist/browser/react/context.d.ts +46 -0
  135. package/dist/browser/react/context.d.ts.map +1 -0
  136. package/dist/browser/react/context.js +10 -0
  137. package/dist/browser/react/context.js.map +1 -0
  138. package/dist/browser/react/index.d.ts +11 -0
  139. package/dist/browser/react/index.d.ts.map +1 -0
  140. package/dist/browser/react/index.js +22 -0
  141. package/dist/browser/react/index.js.map +1 -0
  142. package/dist/browser/react/location-state-shared.d.ts +63 -0
  143. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  144. package/dist/browser/react/location-state-shared.js +81 -0
  145. package/dist/browser/react/location-state-shared.js.map +1 -0
  146. package/dist/browser/react/location-state.d.ts +23 -0
  147. package/dist/browser/react/location-state.d.ts.map +1 -0
  148. package/dist/browser/react/location-state.js +29 -0
  149. package/dist/browser/react/location-state.js.map +1 -0
  150. package/dist/browser/react/mount-context.d.ts +24 -0
  151. package/dist/browser/react/mount-context.d.ts.map +1 -0
  152. package/dist/browser/react/mount-context.js +24 -0
  153. package/dist/browser/react/mount-context.js.map +1 -0
  154. package/dist/browser/react/use-action.d.ts +64 -0
  155. package/dist/browser/react/use-action.d.ts.map +1 -0
  156. package/dist/browser/react/use-action.js +134 -0
  157. package/dist/browser/react/use-action.js.map +1 -0
  158. package/dist/browser/react/use-client-cache.d.ts +41 -0
  159. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  160. package/dist/browser/react/use-client-cache.js +39 -0
  161. package/dist/browser/react/use-client-cache.js.map +1 -0
  162. package/dist/browser/react/use-handle.d.ts +31 -0
  163. package/dist/browser/react/use-handle.d.ts.map +1 -0
  164. package/dist/browser/react/use-handle.js +144 -0
  165. package/dist/browser/react/use-handle.js.map +1 -0
  166. package/dist/browser/react/use-href.d.ts +33 -0
  167. package/dist/browser/react/use-href.d.ts.map +1 -0
  168. package/dist/browser/react/use-href.js +39 -0
  169. package/dist/browser/react/use-href.js.map +1 -0
  170. package/dist/browser/react/use-link-status.d.ts +37 -0
  171. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  172. package/dist/browser/react/use-link-status.js +99 -0
  173. package/dist/browser/react/use-link-status.js.map +1 -0
  174. package/dist/browser/react/use-mount.d.ts +25 -0
  175. package/dist/browser/react/use-mount.d.ts.map +1 -0
  176. package/dist/browser/react/use-mount.js +30 -0
  177. package/dist/browser/react/use-mount.js.map +1 -0
  178. package/dist/browser/react/use-navigation.d.ts +27 -0
  179. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  180. package/dist/browser/react/use-navigation.js +87 -0
  181. package/dist/browser/react/use-navigation.js.map +1 -0
  182. package/dist/browser/react/use-segments.d.ts +38 -0
  183. package/dist/browser/react/use-segments.d.ts.map +1 -0
  184. package/dist/browser/react/use-segments.js +130 -0
  185. package/dist/browser/react/use-segments.js.map +1 -0
  186. package/dist/browser/request-controller.d.ts +26 -0
  187. package/dist/browser/request-controller.d.ts.map +1 -0
  188. package/dist/browser/request-controller.js +147 -0
  189. package/dist/browser/request-controller.js.map +1 -0
  190. package/dist/browser/rsc-router.d.ts +129 -0
  191. package/dist/browser/rsc-router.d.ts.map +1 -0
  192. package/dist/browser/rsc-router.js +195 -0
  193. package/dist/browser/rsc-router.js.map +1 -0
  194. package/dist/browser/scroll-restoration.d.ts +93 -0
  195. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  196. package/dist/browser/scroll-restoration.js +321 -0
  197. package/dist/browser/scroll-restoration.js.map +1 -0
  198. package/dist/browser/segment-structure-assert.d.ts +17 -0
  199. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  200. package/dist/browser/segment-structure-assert.js +59 -0
  201. package/dist/browser/segment-structure-assert.js.map +1 -0
  202. package/dist/browser/server-action-bridge.d.ts +26 -0
  203. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  204. package/dist/browser/server-action-bridge.js +668 -0
  205. package/dist/browser/server-action-bridge.js.map +1 -0
  206. package/dist/browser/shallow.d.ts +12 -0
  207. package/dist/browser/shallow.d.ts.map +1 -0
  208. package/dist/browser/shallow.js +34 -0
  209. package/dist/browser/shallow.js.map +1 -0
  210. package/dist/browser/types.d.ts +369 -0
  211. package/dist/browser/types.d.ts.map +1 -0
  212. package/dist/browser/types.js +2 -0
  213. package/dist/browser/types.js.map +1 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  216. package/dist/build/__tests__/generate-cli.test.js +237 -0
  217. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  220. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  221. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  224. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  225. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  230. package/dist/build/generate-manifest.d.ts +81 -0
  231. package/dist/build/generate-manifest.d.ts.map +1 -0
  232. package/dist/build/generate-manifest.js +276 -0
  233. package/dist/build/generate-manifest.js.map +1 -0
  234. package/dist/build/generate-route-types.d.ts +115 -0
  235. package/dist/build/generate-route-types.d.ts.map +1 -0
  236. package/dist/build/generate-route-types.js +740 -0
  237. package/dist/build/generate-route-types.js.map +1 -0
  238. package/dist/build/index.d.ts +21 -0
  239. package/dist/build/index.d.ts.map +1 -0
  240. package/dist/build/index.js +21 -0
  241. package/dist/build/index.js.map +1 -0
  242. package/dist/build/route-trie.d.ts +71 -0
  243. package/dist/build/route-trie.d.ts.map +1 -0
  244. package/dist/build/route-trie.js +175 -0
  245. package/dist/build/route-trie.js.map +1 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  248. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  249. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  252. package/dist/cache/__tests__/document-cache.test.js +345 -0
  253. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  260. package/dist/cache/__tests__/memory-store.test.js +367 -0
  261. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  262. package/dist/cache/cache-scope.d.ts +102 -0
  263. package/dist/cache/cache-scope.d.ts.map +1 -0
  264. package/dist/cache/cache-scope.js +440 -0
  265. package/dist/cache/cache-scope.js.map +1 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  272. package/dist/cache/cf/cf-cache-store.js +242 -0
  273. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  274. package/dist/cache/cf/index.d.ts +14 -0
  275. package/dist/cache/cf/index.d.ts.map +1 -0
  276. package/dist/cache/cf/index.js +17 -0
  277. package/dist/cache/cf/index.js.map +1 -0
  278. package/dist/cache/document-cache.d.ts +64 -0
  279. package/dist/cache/document-cache.d.ts.map +1 -0
  280. package/dist/cache/document-cache.js +228 -0
  281. package/dist/cache/document-cache.js.map +1 -0
  282. package/dist/cache/index.d.ts +19 -0
  283. package/dist/cache/index.d.ts.map +1 -0
  284. package/dist/cache/index.js +21 -0
  285. package/dist/cache/index.js.map +1 -0
  286. package/dist/cache/memory-segment-store.d.ts +110 -0
  287. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  288. package/dist/cache/memory-segment-store.js +117 -0
  289. package/dist/cache/memory-segment-store.js.map +1 -0
  290. package/dist/cache/memory-store.d.ts +41 -0
  291. package/dist/cache/memory-store.d.ts.map +1 -0
  292. package/dist/cache/memory-store.js +191 -0
  293. package/dist/cache/memory-store.js.map +1 -0
  294. package/dist/cache/types.d.ts +317 -0
  295. package/dist/cache/types.d.ts.map +1 -0
  296. package/dist/cache/types.js +12 -0
  297. package/dist/cache/types.js.map +1 -0
  298. package/dist/client.d.ts +248 -0
  299. package/dist/client.d.ts.map +1 -0
  300. package/dist/client.js +367 -0
  301. package/dist/client.js.map +1 -0
  302. package/dist/client.rsc.d.ts +26 -0
  303. package/dist/client.rsc.d.ts.map +1 -0
  304. package/dist/client.rsc.js +46 -0
  305. package/dist/client.rsc.js.map +1 -0
  306. package/dist/component-utils.d.ts +36 -0
  307. package/dist/component-utils.d.ts.map +1 -0
  308. package/dist/component-utils.js +61 -0
  309. package/dist/component-utils.js.map +1 -0
  310. package/dist/components/DefaultDocument.d.ts +13 -0
  311. package/dist/components/DefaultDocument.d.ts.map +1 -0
  312. package/dist/components/DefaultDocument.js +15 -0
  313. package/dist/components/DefaultDocument.js.map +1 -0
  314. package/dist/debug.d.ts +58 -0
  315. package/dist/debug.d.ts.map +1 -0
  316. package/dist/debug.js +157 -0
  317. package/dist/debug.js.map +1 -0
  318. package/dist/default-error-boundary.d.ts +11 -0
  319. package/dist/default-error-boundary.d.ts.map +1 -0
  320. package/dist/default-error-boundary.js +45 -0
  321. package/dist/default-error-boundary.js.map +1 -0
  322. package/dist/deps/browser.d.ts +2 -0
  323. package/dist/deps/browser.d.ts.map +1 -0
  324. package/dist/deps/browser.js +3 -0
  325. package/dist/deps/browser.js.map +1 -0
  326. package/dist/deps/html-stream-client.d.ts +2 -0
  327. package/dist/deps/html-stream-client.d.ts.map +1 -0
  328. package/dist/deps/html-stream-client.js +3 -0
  329. package/dist/deps/html-stream-client.js.map +1 -0
  330. package/dist/deps/html-stream-server.d.ts +2 -0
  331. package/dist/deps/html-stream-server.d.ts.map +1 -0
  332. package/dist/deps/html-stream-server.js +3 -0
  333. package/dist/deps/html-stream-server.js.map +1 -0
  334. package/dist/deps/rsc.d.ts +2 -0
  335. package/dist/deps/rsc.d.ts.map +1 -0
  336. package/dist/deps/rsc.js +4 -0
  337. package/dist/deps/rsc.js.map +1 -0
  338. package/dist/deps/ssr.d.ts +2 -0
  339. package/dist/deps/ssr.d.ts.map +1 -0
  340. package/dist/deps/ssr.js +3 -0
  341. package/dist/deps/ssr.js.map +1 -0
  342. package/dist/errors.d.ts +174 -0
  343. package/dist/errors.d.ts.map +1 -0
  344. package/dist/errors.js +241 -0
  345. package/dist/errors.js.map +1 -0
  346. package/dist/handle.d.ts +78 -0
  347. package/dist/handle.d.ts.map +1 -0
  348. package/dist/handle.js +82 -0
  349. package/dist/handle.js.map +1 -0
  350. package/dist/handles/MetaTags.d.ts +14 -0
  351. package/dist/handles/MetaTags.d.ts.map +1 -0
  352. package/dist/handles/MetaTags.js +136 -0
  353. package/dist/handles/MetaTags.js.map +1 -0
  354. package/dist/handles/index.d.ts +6 -0
  355. package/dist/handles/index.d.ts.map +1 -0
  356. package/dist/handles/index.js +6 -0
  357. package/dist/handles/index.js.map +1 -0
  358. package/dist/handles/meta.d.ts +39 -0
  359. package/dist/handles/meta.d.ts.map +1 -0
  360. package/dist/handles/meta.js +202 -0
  361. package/dist/handles/meta.js.map +1 -0
  362. package/dist/host/__tests__/errors.test.d.ts +2 -0
  363. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  364. package/dist/host/__tests__/errors.test.js +76 -0
  365. package/dist/host/__tests__/errors.test.js.map +1 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  374. package/dist/host/__tests__/router.test.d.ts +2 -0
  375. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  376. package/dist/host/__tests__/router.test.js +241 -0
  377. package/dist/host/__tests__/router.test.js.map +1 -0
  378. package/dist/host/__tests__/testing.test.d.ts +2 -0
  379. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  380. package/dist/host/__tests__/testing.test.js +64 -0
  381. package/dist/host/__tests__/testing.test.js.map +1 -0
  382. package/dist/host/__tests__/utils.test.d.ts +2 -0
  383. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  384. package/dist/host/__tests__/utils.test.js +29 -0
  385. package/dist/host/__tests__/utils.test.js.map +1 -0
  386. package/dist/host/cookie-handler.d.ts +34 -0
  387. package/dist/host/cookie-handler.d.ts.map +1 -0
  388. package/dist/host/cookie-handler.js +124 -0
  389. package/dist/host/cookie-handler.js.map +1 -0
  390. package/dist/host/errors.d.ts +56 -0
  391. package/dist/host/errors.d.ts.map +1 -0
  392. package/dist/host/errors.js +79 -0
  393. package/dist/host/errors.js.map +1 -0
  394. package/dist/host/index.d.ts +29 -0
  395. package/dist/host/index.d.ts.map +1 -0
  396. package/dist/host/index.js +32 -0
  397. package/dist/host/index.js.map +1 -0
  398. package/dist/host/pattern-matcher.d.ts +36 -0
  399. package/dist/host/pattern-matcher.d.ts.map +1 -0
  400. package/dist/host/pattern-matcher.js +172 -0
  401. package/dist/host/pattern-matcher.js.map +1 -0
  402. package/dist/host/router.d.ts +26 -0
  403. package/dist/host/router.d.ts.map +1 -0
  404. package/dist/host/router.js +218 -0
  405. package/dist/host/router.js.map +1 -0
  406. package/dist/host/testing.d.ts +36 -0
  407. package/dist/host/testing.d.ts.map +1 -0
  408. package/dist/host/testing.js +55 -0
  409. package/dist/host/testing.js.map +1 -0
  410. package/dist/host/types.d.ts +115 -0
  411. package/dist/host/types.d.ts.map +1 -0
  412. package/dist/host/types.js +7 -0
  413. package/dist/host/types.js.map +1 -0
  414. package/dist/host/utils.d.ts +21 -0
  415. package/dist/host/utils.d.ts.map +1 -0
  416. package/dist/host/utils.js +23 -0
  417. package/dist/host/utils.js.map +1 -0
  418. package/dist/href-client.d.ts +131 -0
  419. package/dist/href-client.d.ts.map +1 -0
  420. package/dist/href-client.js +64 -0
  421. package/dist/href-client.js.map +1 -0
  422. package/dist/href-context.d.ts +29 -0
  423. package/dist/href-context.d.ts.map +1 -0
  424. package/dist/href-context.js +21 -0
  425. package/dist/href-context.js.map +1 -0
  426. package/dist/index.d.ts +73 -0
  427. package/dist/index.d.ts.map +1 -0
  428. package/dist/index.js +91 -0
  429. package/dist/index.js.map +1 -0
  430. package/dist/index.rsc.d.ts +32 -0
  431. package/dist/index.rsc.d.ts.map +1 -0
  432. package/dist/index.rsc.js +40 -0
  433. package/dist/index.rsc.js.map +1 -0
  434. package/dist/internal-debug.d.ts +2 -0
  435. package/dist/internal-debug.d.ts.map +1 -0
  436. package/dist/internal-debug.js +5 -0
  437. package/dist/internal-debug.js.map +1 -0
  438. package/dist/loader.d.ts +14 -0
  439. package/dist/loader.d.ts.map +1 -0
  440. package/dist/loader.js +20 -0
  441. package/dist/loader.js.map +1 -0
  442. package/dist/loader.rsc.d.ts +19 -0
  443. package/dist/loader.rsc.d.ts.map +1 -0
  444. package/dist/loader.rsc.js +99 -0
  445. package/dist/loader.rsc.js.map +1 -0
  446. package/dist/network-error-thrower.d.ts +17 -0
  447. package/dist/network-error-thrower.d.ts.map +1 -0
  448. package/dist/network-error-thrower.js +14 -0
  449. package/dist/network-error-thrower.js.map +1 -0
  450. package/dist/outlet-context.d.ts +13 -0
  451. package/dist/outlet-context.d.ts.map +1 -0
  452. package/dist/outlet-context.js +3 -0
  453. package/dist/outlet-context.js.map +1 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  456. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  457. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  458. package/dist/prerender/param-hash.d.ts +16 -0
  459. package/dist/prerender/param-hash.d.ts.map +1 -0
  460. package/dist/prerender/param-hash.js +36 -0
  461. package/dist/prerender/param-hash.js.map +1 -0
  462. package/dist/prerender/store.d.ts +38 -0
  463. package/dist/prerender/store.d.ts.map +1 -0
  464. package/dist/prerender/store.js +61 -0
  465. package/dist/prerender/store.js.map +1 -0
  466. package/dist/prerender.d.ts +66 -0
  467. package/dist/prerender.d.ts.map +1 -0
  468. package/dist/prerender.js +57 -0
  469. package/dist/prerender.js.map +1 -0
  470. package/dist/reverse.d.ts +196 -0
  471. package/dist/reverse.d.ts.map +1 -0
  472. package/dist/reverse.js +78 -0
  473. package/dist/reverse.js.map +1 -0
  474. package/dist/root-error-boundary.d.ts +33 -0
  475. package/dist/root-error-boundary.d.ts.map +1 -0
  476. package/dist/root-error-boundary.js +165 -0
  477. package/dist/root-error-boundary.js.map +1 -0
  478. package/dist/route-content-wrapper.d.ts +46 -0
  479. package/dist/route-content-wrapper.d.ts.map +1 -0
  480. package/dist/route-content-wrapper.js +77 -0
  481. package/dist/route-content-wrapper.js.map +1 -0
  482. package/dist/route-definition.d.ts +421 -0
  483. package/dist/route-definition.d.ts.map +1 -0
  484. package/dist/route-definition.js +868 -0
  485. package/dist/route-definition.js.map +1 -0
  486. package/dist/route-map-builder.d.ts +155 -0
  487. package/dist/route-map-builder.d.ts.map +1 -0
  488. package/dist/route-map-builder.js +237 -0
  489. package/dist/route-map-builder.js.map +1 -0
  490. package/dist/route-types.d.ts +165 -0
  491. package/dist/route-types.d.ts.map +1 -0
  492. package/dist/route-types.js +7 -0
  493. package/dist/route-types.js.map +1 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  496. package/dist/router/__tests__/handler-context.test.js +65 -0
  497. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  502. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  503. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  504. package/dist/router/__tests__/match-context.test.js +92 -0
  505. package/dist/router/__tests__/match-context.test.js.map +1 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  508. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  509. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  510. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  511. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  512. package/dist/router/__tests__/match-result.test.js +457 -0
  513. package/dist/router/__tests__/match-result.test.js.map +1 -0
  514. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  515. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  516. package/dist/router/__tests__/on-error.test.js +678 -0
  517. package/dist/router/__tests__/on-error.test.js.map +1 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  520. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  521. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  526. package/dist/router/error-handling.d.ts +77 -0
  527. package/dist/router/error-handling.d.ts.map +1 -0
  528. package/dist/router/error-handling.js +202 -0
  529. package/dist/router/error-handling.js.map +1 -0
  530. package/dist/router/handler-context.d.ts +20 -0
  531. package/dist/router/handler-context.d.ts.map +1 -0
  532. package/dist/router/handler-context.js +198 -0
  533. package/dist/router/handler-context.js.map +1 -0
  534. package/dist/router/intercept-resolution.d.ts +66 -0
  535. package/dist/router/intercept-resolution.d.ts.map +1 -0
  536. package/dist/router/intercept-resolution.js +246 -0
  537. package/dist/router/intercept-resolution.js.map +1 -0
  538. package/dist/router/loader-resolution.d.ts +64 -0
  539. package/dist/router/loader-resolution.d.ts.map +1 -0
  540. package/dist/router/loader-resolution.js +284 -0
  541. package/dist/router/loader-resolution.js.map +1 -0
  542. package/dist/router/logging.d.ts +15 -0
  543. package/dist/router/logging.d.ts.map +1 -0
  544. package/dist/router/logging.js +99 -0
  545. package/dist/router/logging.js.map +1 -0
  546. package/dist/router/manifest.d.ts +22 -0
  547. package/dist/router/manifest.d.ts.map +1 -0
  548. package/dist/router/manifest.js +181 -0
  549. package/dist/router/manifest.js.map +1 -0
  550. package/dist/router/match-api.d.ts +35 -0
  551. package/dist/router/match-api.d.ts.map +1 -0
  552. package/dist/router/match-api.js +406 -0
  553. package/dist/router/match-api.js.map +1 -0
  554. package/dist/router/match-context.d.ts +206 -0
  555. package/dist/router/match-context.d.ts.map +1 -0
  556. package/dist/router/match-context.js +17 -0
  557. package/dist/router/match-context.js.map +1 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  560. package/dist/router/match-middleware/background-revalidation.js +75 -0
  561. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  564. package/dist/router/match-middleware/cache-lookup.js +257 -0
  565. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  566. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  567. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  568. package/dist/router/match-middleware/cache-store.js +108 -0
  569. package/dist/router/match-middleware/cache-store.js.map +1 -0
  570. package/dist/router/match-middleware/index.d.ts +81 -0
  571. package/dist/router/match-middleware/index.d.ts.map +1 -0
  572. package/dist/router/match-middleware/index.js +80 -0
  573. package/dist/router/match-middleware/index.js.map +1 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  576. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  577. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  580. package/dist/router/match-middleware/segment-resolution.js +53 -0
  581. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  582. package/dist/router/match-pipelines.d.ts +147 -0
  583. package/dist/router/match-pipelines.d.ts.map +1 -0
  584. package/dist/router/match-pipelines.js +82 -0
  585. package/dist/router/match-pipelines.js.map +1 -0
  586. package/dist/router/match-result.d.ts +126 -0
  587. package/dist/router/match-result.d.ts.map +1 -0
  588. package/dist/router/match-result.js +93 -0
  589. package/dist/router/match-result.js.map +1 -0
  590. package/dist/router/metrics.d.ts +20 -0
  591. package/dist/router/metrics.d.ts.map +1 -0
  592. package/dist/router/metrics.js +47 -0
  593. package/dist/router/metrics.js.map +1 -0
  594. package/dist/router/middleware.d.ts +249 -0
  595. package/dist/router/middleware.d.ts.map +1 -0
  596. package/dist/router/middleware.js +434 -0
  597. package/dist/router/middleware.js.map +1 -0
  598. package/dist/router/middleware.test.d.ts +2 -0
  599. package/dist/router/middleware.test.d.ts.map +1 -0
  600. package/dist/router/middleware.test.js +816 -0
  601. package/dist/router/middleware.test.js.map +1 -0
  602. package/dist/router/pattern-matching.d.ts +149 -0
  603. package/dist/router/pattern-matching.d.ts.map +1 -0
  604. package/dist/router/pattern-matching.js +349 -0
  605. package/dist/router/pattern-matching.js.map +1 -0
  606. package/dist/router/revalidation.d.ts +44 -0
  607. package/dist/router/revalidation.d.ts.map +1 -0
  608. package/dist/router/revalidation.js +147 -0
  609. package/dist/router/revalidation.js.map +1 -0
  610. package/dist/router/router-context.d.ts +135 -0
  611. package/dist/router/router-context.d.ts.map +1 -0
  612. package/dist/router/router-context.js +36 -0
  613. package/dist/router/router-context.js.map +1 -0
  614. package/dist/router/segment-resolution.d.ts +127 -0
  615. package/dist/router/segment-resolution.d.ts.map +1 -0
  616. package/dist/router/segment-resolution.js +919 -0
  617. package/dist/router/segment-resolution.js.map +1 -0
  618. package/dist/router/trie-matching.d.ts +40 -0
  619. package/dist/router/trie-matching.d.ts.map +1 -0
  620. package/dist/router/trie-matching.js +127 -0
  621. package/dist/router/trie-matching.js.map +1 -0
  622. package/dist/router/types.d.ts +136 -0
  623. package/dist/router/types.d.ts.map +1 -0
  624. package/dist/router/types.js +7 -0
  625. package/dist/router/types.js.map +1 -0
  626. package/dist/router.d.ts +753 -0
  627. package/dist/router.d.ts.map +1 -0
  628. package/dist/router.gen.d.ts +6 -0
  629. package/dist/router.gen.d.ts.map +1 -0
  630. package/dist/router.gen.js +6 -0
  631. package/dist/router.gen.js.map +1 -0
  632. package/dist/router.js +1304 -0
  633. package/dist/router.js.map +1 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  636. package/dist/rsc/__tests__/helpers.test.js +140 -0
  637. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  638. package/dist/rsc/handler.d.ts +45 -0
  639. package/dist/rsc/handler.d.ts.map +1 -0
  640. package/dist/rsc/handler.js +1172 -0
  641. package/dist/rsc/handler.js.map +1 -0
  642. package/dist/rsc/helpers.d.ts +16 -0
  643. package/dist/rsc/helpers.d.ts.map +1 -0
  644. package/dist/rsc/helpers.js +55 -0
  645. package/dist/rsc/helpers.js.map +1 -0
  646. package/dist/rsc/index.d.ts +22 -0
  647. package/dist/rsc/index.d.ts.map +1 -0
  648. package/dist/rsc/index.js +23 -0
  649. package/dist/rsc/index.js.map +1 -0
  650. package/dist/rsc/nonce.d.ts +9 -0
  651. package/dist/rsc/nonce.d.ts.map +1 -0
  652. package/dist/rsc/nonce.js +18 -0
  653. package/dist/rsc/nonce.js.map +1 -0
  654. package/dist/rsc/types.d.ts +206 -0
  655. package/dist/rsc/types.d.ts.map +1 -0
  656. package/dist/rsc/types.js +8 -0
  657. package/dist/rsc/types.js.map +1 -0
  658. package/dist/search-params.d.ts +103 -0
  659. package/dist/search-params.d.ts.map +1 -0
  660. package/dist/search-params.js +74 -0
  661. package/dist/search-params.js.map +1 -0
  662. package/dist/segment-system.d.ts +75 -0
  663. package/dist/segment-system.d.ts.map +1 -0
  664. package/dist/segment-system.js +336 -0
  665. package/dist/segment-system.js.map +1 -0
  666. package/dist/server/context.d.ts +245 -0
  667. package/dist/server/context.d.ts.map +1 -0
  668. package/dist/server/context.js +197 -0
  669. package/dist/server/context.js.map +1 -0
  670. package/dist/server/fetchable-loader-store.d.ts +18 -0
  671. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  672. package/dist/server/fetchable-loader-store.js +18 -0
  673. package/dist/server/fetchable-loader-store.js.map +1 -0
  674. package/dist/server/handle-store.d.ts +85 -0
  675. package/dist/server/handle-store.d.ts.map +1 -0
  676. package/dist/server/handle-store.js +142 -0
  677. package/dist/server/handle-store.js.map +1 -0
  678. package/dist/server/loader-registry.d.ts +55 -0
  679. package/dist/server/loader-registry.d.ts.map +1 -0
  680. package/dist/server/loader-registry.js +132 -0
  681. package/dist/server/loader-registry.js.map +1 -0
  682. package/dist/server/request-context.d.ts +226 -0
  683. package/dist/server/request-context.d.ts.map +1 -0
  684. package/dist/server/request-context.js +290 -0
  685. package/dist/server/request-context.js.map +1 -0
  686. package/dist/server/root-layout.d.ts +4 -0
  687. package/dist/server/root-layout.d.ts.map +1 -0
  688. package/dist/server/root-layout.js +5 -0
  689. package/dist/server/root-layout.js.map +1 -0
  690. package/dist/server.d.ts +15 -0
  691. package/dist/server.d.ts.map +1 -0
  692. package/dist/server.js +20 -0
  693. package/dist/server.js.map +1 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  698. package/dist/ssr/index.d.ts +98 -0
  699. package/dist/ssr/index.d.ts.map +1 -0
  700. package/dist/ssr/index.js +158 -0
  701. package/dist/ssr/index.js.map +1 -0
  702. package/dist/static-handler.d.ts +50 -0
  703. package/dist/static-handler.d.ts.map +1 -0
  704. package/dist/static-handler.gen.d.ts +5 -0
  705. package/dist/static-handler.gen.d.ts.map +1 -0
  706. package/dist/static-handler.gen.js +5 -0
  707. package/dist/static-handler.gen.js.map +1 -0
  708. package/dist/static-handler.js +29 -0
  709. package/dist/static-handler.js.map +1 -0
  710. package/dist/testing/vitest.js +48 -0
  711. package/dist/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +2309 -833
  798. package/dist/vite/index.js.bak +5448 -0
  799. package/dist/vite/index.js.map +1 -0
  800. package/dist/vite/index.named-routes.gen.ts +103 -0
  801. package/dist/vite/package-resolution.d.ts +43 -0
  802. package/dist/vite/package-resolution.d.ts.map +1 -0
  803. package/dist/vite/package-resolution.js +112 -0
  804. package/dist/vite/package-resolution.js.map +1 -0
  805. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  806. package/dist/vite/virtual-entries.d.ts +25 -0
  807. package/dist/vite/virtual-entries.d.ts.map +1 -0
  808. package/dist/vite/virtual-entries.js +110 -0
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +57 -11
  811. package/skills/breadcrumbs/SKILL.md +3 -1
  812. package/skills/bundle-analysis/SKILL.md +159 -0
  813. package/skills/cache-guide/SKILL.md +220 -30
  814. package/skills/caching/SKILL.md +116 -8
  815. package/skills/composability/SKILL.md +27 -2
  816. package/skills/document-cache/SKILL.md +78 -55
  817. package/skills/handler-use/SKILL.md +364 -0
  818. package/skills/hooks/SKILL.md +229 -20
  819. package/skills/host-router/SKILL.md +45 -20
  820. package/skills/i18n/SKILL.md +276 -0
  821. package/skills/intercept/SKILL.md +46 -4
  822. package/skills/layout/SKILL.md +28 -7
  823. package/skills/links/SKILL.md +247 -17
  824. package/skills/loader/SKILL.md +219 -9
  825. package/skills/middleware/SKILL.md +47 -12
  826. package/skills/migrate-nextjs/SKILL.md +562 -0
  827. package/skills/migrate-react-router/SKILL.md +769 -0
  828. package/skills/mime-routes/SKILL.md +27 -0
  829. package/skills/observability/SKILL.md +137 -0
  830. package/skills/parallel/SKILL.md +71 -6
  831. package/skills/prerender/SKILL.md +14 -33
  832. package/skills/rango/SKILL.md +242 -22
  833. package/skills/react-compiler/SKILL.md +168 -0
  834. package/skills/response-routes/SKILL.md +66 -9
  835. package/skills/route/SKILL.md +57 -4
  836. package/skills/router-setup/SKILL.md +3 -3
  837. package/skills/server-actions/SKILL.md +751 -0
  838. package/skills/streams-and-websockets/SKILL.md +283 -0
  839. package/skills/testing/SKILL.md +599 -0
  840. package/skills/typesafety/SKILL.md +319 -27
  841. package/skills/use-cache/SKILL.md +34 -5
  842. package/skills/view-transitions/SKILL.md +294 -0
  843. package/src/__augment-tests__/augment.ts +81 -0
  844. package/src/__augment-tests__/augmented.check.ts +117 -0
  845. package/src/browser/action-coordinator.ts +53 -36
  846. package/src/browser/app-shell.ts +52 -0
  847. package/src/browser/event-controller.ts +86 -70
  848. package/src/browser/history-state.ts +21 -0
  849. package/src/browser/index.ts +3 -3
  850. package/src/browser/navigation-bridge.ts +86 -11
  851. package/src/browser/navigation-client.ts +76 -28
  852. package/src/browser/navigation-store.ts +32 -9
  853. package/src/browser/navigation-transaction.ts +10 -28
  854. package/src/browser/partial-update.ts +64 -26
  855. package/src/browser/prefetch/cache.ts +129 -21
  856. package/src/browser/prefetch/fetch.ts +148 -16
  857. package/src/browser/prefetch/queue.ts +36 -5
  858. package/src/browser/rango-state.ts +53 -13
  859. package/src/browser/react/Link.tsx +30 -2
  860. package/src/browser/react/NavigationProvider.tsx +72 -31
  861. package/src/browser/react/filter-segment-order.ts +51 -7
  862. package/src/browser/react/index.ts +3 -0
  863. package/src/browser/react/location-state-shared.ts +175 -4
  864. package/src/browser/react/location-state.ts +39 -13
  865. package/src/browser/react/use-handle.ts +17 -9
  866. package/src/browser/react/use-navigation.ts +22 -2
  867. package/src/browser/react/use-params.ts +20 -8
  868. package/src/browser/react/use-reverse.ts +106 -0
  869. package/src/browser/react/use-router.ts +22 -2
  870. package/src/browser/react/use-segments.ts +11 -8
  871. package/src/browser/response-adapter.ts +25 -0
  872. package/src/browser/rsc-router.tsx +64 -22
  873. package/src/browser/scroll-restoration.ts +22 -14
  874. package/src/browser/segment-reconciler.ts +36 -14
  875. package/src/browser/segment-structure-assert.ts +2 -2
  876. package/src/browser/server-action-bridge.ts +23 -30
  877. package/src/browser/types.ts +21 -0
  878. package/src/build/collect-fallback-refs.ts +107 -0
  879. package/src/build/generate-manifest.ts +60 -35
  880. package/src/build/generate-route-types.ts +2 -0
  881. package/src/build/index.ts +2 -0
  882. package/src/build/route-trie.ts +52 -25
  883. package/src/build/route-types/codegen.ts +4 -4
  884. package/src/build/route-types/include-resolution.ts +1 -1
  885. package/src/build/route-types/per-module-writer.ts +7 -4
  886. package/src/build/route-types/router-processing.ts +55 -14
  887. package/src/build/route-types/scan-filter.ts +1 -1
  888. package/src/build/route-types/source-scan.ts +118 -0
  889. package/src/build/runtime-discovery.ts +9 -20
  890. package/src/cache/cache-scope.ts +28 -42
  891. package/src/cache/cf/cf-cache-store.ts +54 -13
  892. package/src/client.rsc.tsx +3 -0
  893. package/src/client.tsx +92 -182
  894. package/src/context-var.ts +5 -5
  895. package/src/decode-loader-results.ts +36 -0
  896. package/src/errors.ts +30 -1
  897. package/src/handle.ts +26 -13
  898. package/src/host/index.ts +2 -2
  899. package/src/host/router.ts +129 -57
  900. package/src/host/types.ts +31 -2
  901. package/src/host/utils.ts +1 -1
  902. package/src/href-client.ts +140 -20
  903. package/src/index.rsc.ts +9 -4
  904. package/src/index.ts +57 -15
  905. package/src/loader-store.ts +500 -0
  906. package/src/loader.rsc.ts +2 -5
  907. package/src/loader.ts +3 -10
  908. package/src/missing-id-error.ts +68 -0
  909. package/src/outlet-context.ts +1 -1
  910. package/src/prerender.ts +4 -4
  911. package/src/response-utils.ts +37 -0
  912. package/src/reverse.ts +65 -36
  913. package/src/route-content-wrapper.tsx +6 -28
  914. package/src/route-definition/dsl-helpers.ts +384 -257
  915. package/src/route-definition/helper-factories.ts +29 -139
  916. package/src/route-definition/helpers-types.ts +100 -28
  917. package/src/route-definition/resolve-handler-use.ts +6 -0
  918. package/src/route-definition/use-item-types.ts +32 -0
  919. package/src/route-types.ts +26 -41
  920. package/src/router/basename.ts +14 -0
  921. package/src/router/content-negotiation.ts +15 -2
  922. package/src/router/error-handling.ts +1 -1
  923. package/src/router/handler-context.ts +21 -38
  924. package/src/router/intercept-resolution.ts +4 -18
  925. package/src/router/lazy-includes.ts +8 -8
  926. package/src/router/loader-resolution.ts +89 -49
  927. package/src/router/manifest.ts +22 -13
  928. package/src/router/match-api.ts +4 -3
  929. package/src/router/match-handlers.ts +63 -20
  930. package/src/router/match-middleware/cache-lookup.ts +54 -96
  931. package/src/router/match-middleware/cache-store.ts +3 -2
  932. package/src/router/match-middleware/segment-resolution.ts +1 -1
  933. package/src/router/match-result.ts +103 -4
  934. package/src/router/metrics.ts +1 -1
  935. package/src/router/middleware-types.ts +15 -26
  936. package/src/router/middleware.ts +99 -84
  937. package/src/router/pattern-matching.ts +101 -17
  938. package/src/router/prerender-match.ts +1 -1
  939. package/src/router/preview-match.ts +3 -1
  940. package/src/router/request-classification.ts +4 -28
  941. package/src/router/revalidation.ts +58 -2
  942. package/src/router/router-interfaces.ts +45 -28
  943. package/src/router/router-options.ts +40 -1
  944. package/src/router/router-registry.ts +2 -5
  945. package/src/router/segment-resolution/fresh.ts +32 -6
  946. package/src/router/segment-resolution/revalidation.ts +154 -107
  947. package/src/router/segment-resolution/view-transition-default.ts +36 -0
  948. package/src/router/substitute-pattern-params.ts +56 -0
  949. package/src/router/telemetry.ts +99 -0
  950. package/src/router/trie-matching.ts +18 -13
  951. package/src/router/types.ts +8 -0
  952. package/src/router/url-params.ts +49 -0
  953. package/src/router.ts +38 -23
  954. package/src/rsc/handler-context.ts +2 -2
  955. package/src/rsc/handler.ts +41 -74
  956. package/src/rsc/helpers.ts +91 -43
  957. package/src/rsc/index.ts +1 -1
  958. package/src/rsc/loader-fetch.ts +23 -3
  959. package/src/rsc/origin-guard.ts +28 -10
  960. package/src/rsc/progressive-enhancement.ts +14 -2
  961. package/src/rsc/response-route-handler.ts +46 -53
  962. package/src/rsc/rsc-rendering.ts +40 -52
  963. package/src/rsc/runtime-warnings.ts +9 -10
  964. package/src/rsc/server-action.ts +23 -37
  965. package/src/rsc/ssr-setup.ts +16 -0
  966. package/src/rsc/types.ts +9 -2
  967. package/src/search-params.ts +4 -4
  968. package/src/segment-content-promise.ts +67 -0
  969. package/src/segment-loader-promise.ts +122 -0
  970. package/src/segment-system.tsx +132 -116
  971. package/src/serialize.ts +243 -0
  972. package/src/server/context.ts +143 -53
  973. package/src/server/cookie-store.ts +28 -4
  974. package/src/server/handle-store.ts +19 -0
  975. package/src/server/request-context.ts +50 -44
  976. package/src/ssr/index.tsx +5 -1
  977. package/src/static-handler.ts +1 -1
  978. package/src/testing/cache-status.ts +166 -0
  979. package/src/testing/collect-handle.ts +63 -0
  980. package/src/testing/dispatch.ts +440 -0
  981. package/src/testing/dom.entry.ts +22 -0
  982. package/src/testing/e2e/fixture.ts +154 -0
  983. package/src/testing/e2e/index.ts +149 -0
  984. package/src/testing/e2e/matchers.ts +51 -0
  985. package/src/testing/e2e/page-helpers.ts +272 -0
  986. package/src/testing/e2e/parity.ts +306 -0
  987. package/src/testing/e2e/server.ts +183 -0
  988. package/src/testing/flight-matchers.ts +104 -0
  989. package/src/testing/flight-runtime.d.ts +21 -0
  990. package/src/testing/flight.entry.ts +22 -0
  991. package/src/testing/flight.ts +182 -0
  992. package/src/testing/generated-routes.ts +223 -0
  993. package/src/testing/index.ts +105 -0
  994. package/src/testing/internal/context.ts +193 -0
  995. package/src/testing/render-route.tsx +536 -0
  996. package/src/testing/run-loader.ts +296 -0
  997. package/src/testing/run-middleware.ts +170 -0
  998. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  999. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1000. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1001. package/src/testing/vitest-stubs/version.ts +5 -0
  1002. package/src/testing/vitest.ts +183 -0
  1003. package/src/types/global-namespace.ts +39 -26
  1004. package/src/types/handler-context.ts +68 -50
  1005. package/src/types/index.ts +1 -0
  1006. package/src/types/loader-types.ts +5 -6
  1007. package/src/types/request-scope.ts +126 -0
  1008. package/src/types/route-entry.ts +11 -0
  1009. package/src/types/segments.ts +36 -2
  1010. package/src/urls/include-helper.ts +34 -67
  1011. package/src/urls/index.ts +0 -3
  1012. package/src/urls/path-helper-types.ts +41 -7
  1013. package/src/urls/path-helper.ts +17 -52
  1014. package/src/urls/pattern-types.ts +36 -19
  1015. package/src/urls/response-types.ts +22 -29
  1016. package/src/urls/type-extraction.ts +26 -116
  1017. package/src/urls/urls-function.ts +1 -5
  1018. package/src/use-loader.tsx +416 -42
  1019. package/src/vite/debug.ts +185 -0
  1020. package/src/vite/discovery/bundle-postprocess.ts +6 -6
  1021. package/src/vite/discovery/discover-routers.ts +101 -51
  1022. package/src/vite/discovery/discovery-errors.ts +194 -0
  1023. package/src/vite/discovery/gate-state.ts +171 -0
  1024. package/src/vite/discovery/prerender-collection.ts +185 -103
  1025. package/src/vite/discovery/route-types-writer.ts +40 -84
  1026. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1027. package/src/vite/discovery/state.ts +33 -0
  1028. package/src/vite/discovery/virtual-module-codegen.ts +13 -23
  1029. package/src/vite/index.ts +2 -0
  1030. package/src/vite/plugin-types.ts +67 -0
  1031. package/src/vite/plugins/cjs-to-esm.ts +8 -7
  1032. package/src/vite/plugins/client-ref-dedup.ts +16 -0
  1033. package/src/vite/plugins/client-ref-hashing.ts +28 -5
  1034. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1035. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1036. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  1037. package/src/vite/plugins/expose-action-id.ts +54 -30
  1038. package/src/vite/plugins/expose-id-utils.ts +24 -8
  1039. package/src/vite/plugins/expose-ids/export-analysis.ts +100 -20
  1040. package/src/vite/plugins/expose-ids/handler-transform.ts +12 -35
  1041. package/src/vite/plugins/expose-ids/loader-transform.ts +3 -5
  1042. package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
  1043. package/src/vite/plugins/expose-internal-ids.ts +544 -317
  1044. package/src/vite/plugins/performance-tracks.ts +29 -25
  1045. package/src/vite/plugins/use-cache-transform.ts +65 -50
  1046. package/src/vite/plugins/version-injector.ts +39 -23
  1047. package/src/vite/plugins/version-plugin.ts +59 -2
  1048. package/src/vite/plugins/virtual-entries.ts +2 -2
  1049. package/src/vite/rango.ts +116 -29
  1050. package/src/vite/router-discovery.ts +774 -102
  1051. package/src/vite/utils/ast-handler-extract.ts +15 -15
  1052. package/src/vite/utils/banner.ts +1 -1
  1053. package/src/vite/utils/bundle-analysis.ts +4 -2
  1054. package/src/vite/utils/client-chunks.ts +190 -0
  1055. package/src/vite/utils/forward-user-plugins.ts +193 -0
  1056. package/src/vite/utils/manifest-utils.ts +21 -5
  1057. package/src/vite/utils/package-resolution.ts +41 -1
  1058. package/src/vite/utils/prerender-utils.ts +21 -6
  1059. package/src/vite/utils/shared-utils.ts +107 -26
  1060. package/src/browser/action-response-classifier.ts +0 -99
@@ -8,8 +8,67 @@ import {
8
8
  _getRequestContext,
9
9
  getLocationState,
10
10
  } from "../server/request-context.js";
11
+ import type { RequestContext } from "../server/request-context.js";
11
12
  import { resolveLocationStateEntries } from "../browser/react/location-state-shared.js";
13
+ import { isRedirectResponse } from "../response-utils.js";
12
14
  import type { MiddlewareEntry, MiddlewareFn } from "../router/middleware.js";
15
+ import { formatCacheSignalHeader } from "../router/telemetry.js";
16
+
17
+ /**
18
+ * DEVELOPMENT/TEST ONLY. When the debug cache signal gate is on,
19
+ * match/matchPartial populate ctx._cacheSignal. Emit it as the X-Rango-Cache
20
+ * header. When the gate is off, ctx._cacheSignal is undefined and NOTHING is
21
+ * attached — output is byte-identical to the default. Header mutation failures
22
+ * are swallowed so immutable Response headers (e.g. protocol-switch) are safe.
23
+ */
24
+ function applyCacheSignalHeader(target: Headers, ctx: RequestContext): void {
25
+ const signal = ctx._cacheSignal;
26
+ if (!signal || signal.length === 0) return;
27
+ try {
28
+ target.set("X-Rango-Cache", formatCacheSignalHeader(signal));
29
+ } catch {
30
+ // Headers immutable — skip.
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Copy stub headers from the request context onto a target Headers instance:
36
+ * append Set-Cookie entries, set everything else only if absent. Header
37
+ * mutation failures are swallowed so the same logic works against Response
38
+ * headers that may be immutable (e.g. Cloudflare protocol-switch responses).
39
+ */
40
+ function applyStubHeaders(target: Headers, stub: Headers): void {
41
+ stub.forEach((value, name) => {
42
+ try {
43
+ if (name.toLowerCase() === "set-cookie") {
44
+ target.append(name, value);
45
+ } else if (!target.has(name)) {
46
+ target.set(name, value);
47
+ }
48
+ } catch {
49
+ // Headers immutable — skip.
50
+ }
51
+ });
52
+ }
53
+
54
+ /**
55
+ * Drain ctx._onResponseCallbacks onto a response. Swapping the array before
56
+ * iteration prevents re-entrant registrations from double-firing and matches
57
+ * the contract that each callback runs at most once per request.
58
+ */
59
+ function drainOnResponseCallbacks(
60
+ ctx: RequestContext,
61
+ response: Response,
62
+ ): Response {
63
+ const callbacks = ctx._onResponseCallbacks;
64
+ if (callbacks.length === 0) return response;
65
+ ctx._onResponseCallbacks = [];
66
+ let result = response;
67
+ for (const callback of callbacks) {
68
+ result = callback(result) ?? result;
69
+ }
70
+ return result;
71
+ }
13
72
 
14
73
  /**
15
74
  * Check if a request body has content to decode
@@ -39,40 +98,24 @@ export function createResponseWithMergedHeaders(
39
98
  return new Response(body, init);
40
99
  }
41
100
 
42
- // Merge headers from stub response into the new response.
43
- // Delete Set-Cookie from the stub after consuming so that downstream
44
- // merge points (e.g. executeMiddleware) do not duplicate them.
101
+ // Delete Set-Cookie from the stub after consuming so downstream merge
102
+ // points (e.g. executeMiddleware) don't duplicate them.
45
103
  const mergedHeaders = new Headers(init.headers);
46
- ctx.res.headers.forEach((value, name) => {
47
- if (name.toLowerCase() === "set-cookie") {
48
- mergedHeaders.append(name, value);
49
- } else if (!mergedHeaders.has(name)) {
50
- // Only set if not already present in init.headers
51
- mergedHeaders.set(name, value);
52
- }
53
- });
104
+ applyStubHeaders(mergedHeaders, ctx.res.headers);
54
105
  ctx.res.headers.delete("set-cookie");
106
+ applyCacheSignalHeader(mergedHeaders, ctx);
55
107
 
56
- // Use ctx.res.status if it was set (e.g., 404 for notFound, 500 for error)
57
- // Otherwise use the status from init
108
+ // ctx.res.status overrides init.status when explicitly set (e.g. 404 for
109
+ // notFound, 500 for error). Default ctx.res.status is 200.
58
110
  const status = ctx.res.status !== 200 ? ctx.res.status : init.status;
59
111
 
60
- let response = new Response(body, {
112
+ const response = new Response(body, {
61
113
  ...init,
62
114
  status,
63
115
  headers: mergedHeaders,
64
116
  });
65
117
 
66
- // Run onResponse callbacks - each can inspect/modify the response.
67
- // Drain the array so that downstream callers (e.g. finalizeResponse)
68
- // do not re-execute the same callbacks on this response.
69
- const callbacks = ctx._onResponseCallbacks;
70
- ctx._onResponseCallbacks = [];
71
- for (const callback of callbacks) {
72
- response = callback(response) ?? response;
73
- }
74
-
75
- return response;
118
+ return drainOnResponseCallbacks(ctx, response);
76
119
  }
77
120
 
78
121
  /**
@@ -122,10 +165,10 @@ export function interceptRedirectForPartial(
122
165
  locationState?: Record<string, unknown>,
123
166
  ) => Response,
124
167
  ): Response | null {
125
- const redirectUrl = response.headers.get("Location");
126
- if (!(response.status >= 300 && response.status < 400 && redirectUrl)) {
168
+ if (!isRedirectResponse(response)) {
127
169
  return null;
128
170
  }
171
+ const redirectUrl = response.headers.get("Location")!;
129
172
  const locationState = getLocationState();
130
173
  let intercepted: Response;
131
174
  if (locationState) {
@@ -175,24 +218,29 @@ export function buildRouteMiddlewareEntries<TEnv>(
175
218
  }
176
219
 
177
220
  /**
178
- * Run onResponse callbacks on an existing Response.
179
- *
180
- * Used for code paths that bypass createResponseWithMergedHeaders(), such as
181
- * middleware short-circuits where the Response is already constructed but
182
- * ctx.onResponse() callbacks still need to fire.
221
+ * Merge stub headers from the request context onto an existing Response in
222
+ * place, then drain onResponse callbacks. Used when a Response cannot flow
223
+ * through `new Response()` status 101 is outside the constructor's
224
+ * 200-599 range, and the Cloudflare-specific `webSocket` property would be
225
+ * lost on reconstruction.
183
226
  */
184
- export function finalizeResponse(response: Response): Response {
227
+ export function mergeStubHeadersAndFinalize(response: Response): Response {
185
228
  const ctx = _getRequestContext();
186
- if (!ctx || ctx._onResponseCallbacks.length === 0) {
187
- return response;
188
- }
229
+ if (!ctx) return response;
189
230
 
190
- // Drain the array so callbacks run at most once per request.
191
- const callbacks = ctx._onResponseCallbacks;
192
- ctx._onResponseCallbacks = [];
193
- let result = response;
194
- for (const callback of callbacks) {
195
- result = callback(result) ?? result;
196
- }
197
- return result;
231
+ applyStubHeaders(response.headers, ctx.res.headers);
232
+ ctx.res.headers.delete("set-cookie");
233
+
234
+ return drainOnResponseCallbacks(ctx, response);
235
+ }
236
+
237
+ /**
238
+ * Run onResponse callbacks on an existing Response. Used by code paths that
239
+ * bypass createResponseWithMergedHeaders (e.g. middleware short-circuits)
240
+ * but still need ctx.onResponse() callbacks to fire.
241
+ */
242
+ export function finalizeResponse(response: Response): Response {
243
+ const ctx = _getRequestContext();
244
+ if (!ctx) return response;
245
+ return drainOnResponseCallbacks(ctx, response);
198
246
  }
package/src/rsc/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * RSC Router - RSC Entry Point
2
+ * Rango - RSC Entry Point
3
3
  *
4
4
  * This module provides RSC utilities for server-side rendering,
5
5
  * server actions, loader fetching, and progressive enhancement.
@@ -168,8 +168,19 @@ export async function handleLoaderFetch<TEnv>(
168
168
  loaderResult: unknown;
169
169
  }
170
170
  const loaderPayload: LoaderPayload = { loaderResult: result };
171
- const rscStream =
172
- ctx.renderToReadableStream<LoaderPayload>(loaderPayload);
171
+ const rscStream = ctx.renderToReadableStream<LoaderPayload>(
172
+ loaderPayload,
173
+ {
174
+ onError: (error: unknown) => {
175
+ ctx.callOnError(error, "rendering", {
176
+ request,
177
+ url,
178
+ env,
179
+ loaderName: loaderId,
180
+ });
181
+ },
182
+ },
183
+ );
173
184
 
174
185
  return createResponseWithMergedHeaders(rscStream, {
175
186
  headers: { "content-type": "text/x-component;charset=utf-8" },
@@ -199,7 +210,16 @@ export async function handleLoaderFetch<TEnv>(
199
210
  name: err.name,
200
211
  },
201
212
  };
202
- const rscStream = ctx.renderToReadableStream(errorPayload);
213
+ const rscStream = ctx.renderToReadableStream(errorPayload, {
214
+ onError: (error: unknown) => {
215
+ ctx.callOnError(error, "rendering", {
216
+ request,
217
+ url,
218
+ env,
219
+ loaderName: loaderId,
220
+ });
221
+ },
222
+ });
203
223
 
204
224
  return createResponseWithMergedHeaders(rscStream, {
205
225
  status: 500,
@@ -9,11 +9,29 @@
9
9
  * navigations, bookmarks, and non-browser clients don't send Origin.
10
10
  */
11
11
 
12
+ import type { RequestPlan } from "../router/request-classification.js";
13
+
12
14
  /**
13
15
  * Request phase that triggered the origin check.
14
16
  */
15
17
  export type OriginCheckPhase = "action" | "loader" | "pe-form";
16
18
 
19
+ // Exhaustive over RequestPlan modes so a new mode must be classified here (the
20
+ // security gate) instead of silently falling through to no origin check.
21
+ export const ORIGIN_CHECK_PHASE_BY_MODE: Record<
22
+ RequestPlan["mode"],
23
+ OriginCheckPhase | null
24
+ > = {
25
+ action: "action",
26
+ loader: "loader",
27
+ "pe-render": "pe-form",
28
+ "full-render": null,
29
+ "partial-render": null,
30
+ response: null,
31
+ redirect: null,
32
+ "version-mismatch": null,
33
+ };
34
+
17
35
  /**
18
36
  * Context passed to the originCheck callback.
19
37
  */
@@ -116,14 +134,15 @@ export async function checkRequestOrigin<TEnv = any>(
116
134
  // Disabled by explicit opt-out
117
135
  if (config === false) return null;
118
136
 
119
- // Default: built-in validation (config === true or undefined)
120
- if (config === true || config === undefined) {
121
- const allowed = defaultOriginCheck(request, url);
122
- if (allowed) return null;
123
- return createForbiddenResponse(request);
124
- }
137
+ // Default (true/undefined) becomes a callback returning boolean, so the
138
+ // Response|true|reject resolution below is written once.
139
+ const check: (
140
+ ctx: OriginCheckContext<TEnv>,
141
+ ) => boolean | Response | Promise<boolean | Response> =
142
+ config === true || config === undefined
143
+ ? () => defaultOriginCheck(request, url)
144
+ : config;
125
145
 
126
- // Custom function — build context and call
127
146
  const ctx: OriginCheckContext<TEnv> = {
128
147
  request,
129
148
  url,
@@ -133,9 +152,8 @@ export async function checkRequestOrigin<TEnv = any>(
133
152
  defaultCheck: () => defaultOriginCheck(request, url),
134
153
  };
135
154
 
136
- const result = await config(ctx);
155
+ const result = await check(ctx);
137
156
 
138
157
  if (result instanceof Response) return result;
139
- if (result === true) return null;
140
- return createForbiddenResponse(request);
158
+ return result === true ? null : createForbiddenResponse(request);
141
159
  }
@@ -248,6 +248,8 @@ export async function handleProgressiveEnhancement<TEnv>(
248
248
  segments: match.segments,
249
249
  matched: match.matched,
250
250
  diff: match.diff,
251
+ resolvedIds: match.resolvedIds,
252
+ params: match.params,
251
253
  isPartial: false,
252
254
  rootLayout: ctx.router.rootLayout,
253
255
  handles: handleStore.stream(),
@@ -259,7 +261,11 @@ export async function handleProgressiveEnhancement<TEnv>(
259
261
  formState: actionResult,
260
262
  };
261
263
 
262
- const rscStream = ctx.renderToReadableStream<RscPayload>(payload);
264
+ const rscStream = ctx.renderToReadableStream<RscPayload>(payload, {
265
+ onError: (error: unknown) => {
266
+ ctx.callOnError(error, "rendering", { request, url, env });
267
+ },
268
+ });
263
269
  // metricsStore=undefined is safe: the handler already stashed the early
264
270
  // SSR setup promise on request variables, so getSSRSetup returns it
265
271
  // without falling back to a fresh startSSRSetup.
@@ -349,6 +355,8 @@ async function renderPeErrorBoundary<TEnv>(
349
355
  segments: errorResult.segments,
350
356
  matched: errorResult.matched,
351
357
  diff: errorResult.diff,
358
+ resolvedIds: errorResult.resolvedIds,
359
+ params: errorResult.params,
352
360
  isPartial: false,
353
361
  isError: true,
354
362
  rootLayout: ctx.router.rootLayout,
@@ -360,7 +368,11 @@ async function renderPeErrorBoundary<TEnv>(
360
368
  },
361
369
  };
362
370
 
363
- const rscStream = ctx.renderToReadableStream<RscPayload>(payload);
371
+ const rscStream = ctx.renderToReadableStream<RscPayload>(payload, {
372
+ onError: (error: unknown) => {
373
+ ctx.callOnError(error, "rendering", { request, url, env });
374
+ },
375
+ });
364
376
  // metricsStore=undefined is safe: the handler already stashed the early
365
377
  // SSR setup promise on request variables, so getSSRSetup returns it
366
378
  // without falling back to a fresh startSSRSetup.
@@ -11,6 +11,7 @@ import { requireRequestContext } from "../server/request-context.js";
11
11
  import { contextGet } from "../context-var.js";
12
12
  import { NOCACHE_SYMBOL } from "../cache/taint.js";
13
13
  import { traverseBack } from "../router/pattern-matching.js";
14
+ import { RESPONSE_TYPE_MIME } from "../router/content-negotiation.js";
14
15
  import { createCacheScope } from "../cache/cache-scope.js";
15
16
  import { executeMiddleware } from "../router/middleware.js";
16
17
  import {
@@ -26,7 +27,9 @@ import {
26
27
  finalizeResponse,
27
28
  isCacheableStatus,
28
29
  buildRouteMiddlewareEntries,
30
+ mergeStubHeadersAndFinalize,
29
31
  } from "./helpers.js";
32
+ import { isWebSocketUpgradeResponse } from "../response-utils.js";
30
33
 
31
34
  export interface ResponseRouteMatch {
32
35
  responseType: string;
@@ -78,10 +81,13 @@ export async function handleResponseRoute<TEnv>(
78
81
  env,
79
82
  searchParams: cleanUrl.searchParams,
80
83
  url: cleanUrl,
84
+ originalUrl: reqCtx.originalUrl,
81
85
  pathname: url.pathname,
82
86
  reverse: createReverseFunction(handlerCtx.getRequiredRouteMap()),
83
87
  get: ((keyOrVar: any) => contextGet(variables, keyOrVar)) as any,
84
88
  header: (name: string, value: string) => reqCtx.header(name, value),
89
+ waitUntil: reqCtx.waitUntil.bind(reqCtx),
90
+ executionContext: reqCtx.executionContext,
85
91
  _responseType: preview.responseType,
86
92
  };
87
93
  // Brand with taint symbol so "use cache" detects it as request-scoped
@@ -96,6 +102,12 @@ export async function handleResponseRoute<TEnv>(
96
102
  // so that stub headers (cookies, custom headers set via ctx.header()) are included.
97
103
  // Use Headers (not Record<string, string>) to preserve duplicate entries like Set-Cookie.
98
104
  const rewrapResponse = (result: Response) => {
105
+ // 204/205/304 are NOT short-circuited — they're valid for the Response
106
+ // constructor and must honor ctx.setStatus() overrides. Only upgrade
107
+ // responses (status 101 / `webSocket` property) bypass reconstruction.
108
+ if (isWebSocketUpgradeResponse(result)) {
109
+ return mergeStubHeadersAndFinalize(result);
110
+ }
99
111
  const headers = new Headers();
100
112
  result.headers.forEach((value, key) => {
101
113
  if (key.toLowerCase() === "set-cookie") {
@@ -110,13 +122,15 @@ export async function handleResponseRoute<TEnv>(
110
122
  });
111
123
  };
112
124
 
113
- // JSON response routes: wrap in { data } / { error } envelope
114
- if (preview.responseType === "json") {
115
- try {
116
- const result = await (preview.handler as Function)(responseHandlerCtx);
117
- if (result instanceof Response) {
118
- return rewrapResponse(result);
119
- }
125
+ try {
126
+ const result = await (preview.handler as Function)(responseHandlerCtx);
127
+
128
+ if (result instanceof Response) {
129
+ return rewrapResponse(result);
130
+ }
131
+
132
+ // Handled before the MIME lookup (json is also a RESPONSE_TYPE_MIME key).
133
+ if (preview.responseType === "json") {
120
134
  return createResponseWithMergedHeaders(
121
135
  JSON.stringify({ data: result }),
122
136
  {
@@ -124,10 +138,28 @@ export async function handleResponseRoute<TEnv>(
124
138
  headers: { "content-type": "application/json;charset=utf-8" },
125
139
  },
126
140
  );
127
- } catch (error) {
128
- handlerCtx.callOnError(error, "handler", errorCtx);
129
- const isDev = process.env.NODE_ENV !== "production";
130
- const status = error instanceof RouterError ? error.status : 500;
141
+ }
142
+
143
+ // Object.hasOwn (not truthiness) so prototype names like "toString" are not
144
+ // matched; image/stream/any are absent and fall through to the throw.
145
+ if (Object.hasOwn(RESPONSE_TYPE_MIME, preview.responseType)) {
146
+ return createResponseWithMergedHeaders(String(result), {
147
+ status: 200,
148
+ headers: {
149
+ "content-type": `${RESPONSE_TYPE_MIME[preview.responseType]};charset=utf-8`,
150
+ },
151
+ });
152
+ }
153
+
154
+ throw new Error(
155
+ `Response route handler for "${preview.responseType}" must return a Response object, got ${typeof result}`,
156
+ );
157
+ } catch (error) {
158
+ handlerCtx.callOnError(error, "handler", errorCtx);
159
+ const isDev = process.env.NODE_ENV !== "production";
160
+ const status = error instanceof RouterError ? error.status : 500;
161
+
162
+ if (preview.responseType === "json") {
131
163
  return createResponseWithMergedHeaders(
132
164
  JSON.stringify({
133
165
  error: createResponseErrorPayload(error, isDev),
@@ -138,48 +170,7 @@ export async function handleResponseRoute<TEnv>(
138
170
  },
139
171
  );
140
172
  }
141
- }
142
173
 
143
- // Non-JSON response routes: catch errors and return plain Response
144
- try {
145
- const result = await (preview.handler as Function)(responseHandlerCtx);
146
-
147
- if (result instanceof Response) {
148
- return rewrapResponse(result);
149
- }
150
-
151
- // Auto-wrap based on response type tag
152
- switch (preview.responseType) {
153
- case "text":
154
- return createResponseWithMergedHeaders(String(result), {
155
- status: 200,
156
- headers: { "content-type": "text/plain;charset=utf-8" },
157
- });
158
- case "html":
159
- return createResponseWithMergedHeaders(String(result), {
160
- status: 200,
161
- headers: { "content-type": "text/html;charset=utf-8" },
162
- });
163
- case "xml":
164
- return createResponseWithMergedHeaders(String(result), {
165
- status: 200,
166
- headers: { "content-type": "application/xml;charset=utf-8" },
167
- });
168
- case "md":
169
- return createResponseWithMergedHeaders(String(result), {
170
- status: 200,
171
- headers: { "content-type": "text/markdown;charset=utf-8" },
172
- });
173
- default:
174
- // image, stream, any -- must return Response
175
- throw new Error(
176
- `Response route handler for "${preview.responseType}" must return a Response object, got ${typeof result}`,
177
- );
178
- }
179
- } catch (error) {
180
- handlerCtx.callOnError(error, "handler", errorCtx);
181
- const isDev = process.env.NODE_ENV !== "production";
182
- const status = error instanceof RouterError ? error.status : 500;
183
174
  const message =
184
175
  error instanceof RouterError
185
176
  ? error.message
@@ -196,7 +187,9 @@ export async function handleResponseRoute<TEnv>(
196
187
  // Wrap callHandler to append Vary: Accept on content-negotiated responses
197
188
  const callHandlerWithVary = async () => {
198
189
  const response = await callHandler();
199
- if (preview.negotiated) {
190
+ if (preview.negotiated && !isWebSocketUpgradeResponse(response)) {
191
+ // Skip Vary on upgrade responses: headers are semantically immutable
192
+ // on some runtimes, and Vary is meaningless for a 101 response.
200
193
  response.headers.append("Vary", "Accept");
201
194
  }
202
195
  return response;
@@ -13,8 +13,9 @@ import {
13
13
  } from "../server/request-context.js";
14
14
  import { resolveLocationStateEntries } from "../browser/react/location-state-shared.js";
15
15
  import { appendMetric } from "../router/metrics.js";
16
- import { getSSRSetup } from "./ssr-setup.js";
16
+ import { getSSRSetup, isRscRequest } from "./ssr-setup.js";
17
17
  import type { RscPayload } from "./types.js";
18
+ import type { MatchResult } from "../types.js";
18
19
  import {
19
20
  createResponseWithMergedHeaders,
20
21
  createSimpleRedirectResponse,
@@ -35,6 +36,28 @@ export async function handleRscRendering<TEnv>(
35
36
  let payload: RscPayload;
36
37
  let hasInterceptSlots = false;
37
38
 
39
+ // Shared by the partial-fallback and full-render paths. The partial-success
40
+ // payload below is intentionally different (omits rootLayout/theme, adds slots).
41
+ const buildFullPayload = (m: MatchResult): RscPayload => ({
42
+ metadata: {
43
+ pathname: url.pathname,
44
+ routerId: ctx.router.id,
45
+ basename: ctx.router.basename,
46
+ segments: m.segments,
47
+ matched: m.matched,
48
+ diff: m.diff,
49
+ resolvedIds: m.resolvedIds,
50
+ params: m.params,
51
+ isPartial: false,
52
+ rootLayout: ctx.router.rootLayout,
53
+ handles: handleStore.stream(),
54
+ version: ctx.version,
55
+ prefetchCacheTTL: ctx.router.prefetchCacheTTL,
56
+ themeConfig: ctx.router.themeConfig,
57
+ initialTheme: reqCtx.theme,
58
+ },
59
+ });
60
+
38
61
  if (isPartial) {
39
62
  // Partial render (navigation)
40
63
  const result = await ctx.router.matchPartial(request, { env });
@@ -51,24 +74,7 @@ export async function handleRscRendering<TEnv>(
51
74
  return createSimpleRedirectResponse(match.redirect);
52
75
  }
53
76
 
54
- payload = {
55
- metadata: {
56
- pathname: url.pathname,
57
- routerId: ctx.router.id,
58
- basename: ctx.router.basename,
59
- segments: match.segments,
60
- matched: match.matched,
61
- diff: match.diff,
62
- params: match.params,
63
- isPartial: false,
64
- rootLayout: ctx.router.rootLayout,
65
- handles: handleStore.stream(),
66
- version: ctx.version,
67
- prefetchCacheTTL: ctx.router.prefetchCacheTTL,
68
- themeConfig: ctx.router.themeConfig,
69
- initialTheme: reqCtx.theme,
70
- },
71
- };
77
+ payload = buildFullPayload(match);
72
78
  } else {
73
79
  setRequestContextParams(result.params, result.routeName);
74
80
 
@@ -81,6 +87,7 @@ export async function handleRscRendering<TEnv>(
81
87
  segments: result.segments,
82
88
  matched: result.matched,
83
89
  diff: result.diff,
90
+ resolvedIds: result.resolvedIds,
84
91
  params: result.params,
85
92
  isPartial: true,
86
93
  slots: result.slots,
@@ -133,27 +140,7 @@ export async function handleRscRendering<TEnv>(
133
140
  { headers: { "Content-Type": "application/json" } },
134
141
  );
135
142
  } else {
136
- payload = {
137
- // Initial SSR can reconstruct the tree from segments + rootLayout,
138
- // so we omit root to avoid sending the same structure twice.
139
-
140
- metadata: {
141
- pathname: url.pathname,
142
- routerId: ctx.router.id,
143
- basename: ctx.router.basename,
144
- segments: match.segments,
145
- matched: match.matched,
146
- diff: match.diff,
147
- params: match.params,
148
- isPartial: false,
149
- rootLayout: ctx.router.rootLayout,
150
- handles: handleStore.stream(),
151
- version: ctx.version,
152
- prefetchCacheTTL: ctx.router.prefetchCacheTTL,
153
- themeConfig: ctx.router.themeConfig,
154
- initialTheme: reqCtx.theme,
155
- },
156
- };
143
+ payload = buildFullPayload(match);
157
144
  }
158
145
  }
159
146
 
@@ -173,7 +160,11 @@ export async function handleRscRendering<TEnv>(
173
160
 
174
161
  // Serialize to RSC stream
175
162
  const rscSerializeStart = performance.now();
176
- const rscStream = ctx.renderToReadableStream<RscPayload>(payload);
163
+ const rscStream = ctx.renderToReadableStream<RscPayload>(payload, {
164
+ onError: (error: unknown) => {
165
+ ctx.callOnError(error, "rendering", { request, url, env });
166
+ },
167
+ });
177
168
  const rscSerializeDur = performance.now() - rscSerializeStart;
178
169
  // This measures synchronous stream creation, not end-to-end stream consumption.
179
170
  appendMetric(
@@ -183,23 +174,20 @@ export async function handleRscRendering<TEnv>(
183
174
  rscSerializeDur,
184
175
  );
185
176
 
186
- // Determine if this is an RSC request or HTML request.
187
- // Partial requests (_rsc_partial) are always RSC -- they come from client-side
188
- // navigation or prefetch fetch(). We cannot rely on Accept alone since some
189
- // browsers may send Accept: text/html for non-HTML requests.
190
- const isRscRequest =
191
- isPartial ||
192
- (!request.headers.get("accept")?.includes("text/html") &&
193
- !url.searchParams.has("__html")) ||
194
- url.searchParams.has("__rsc");
195
-
196
- if (isRscRequest) {
177
+ if (isRscRequest(request, url, isPartial)) {
197
178
  const renderDur = performance.now() - renderStart;
198
179
  appendMetric(metricsStore, "render:total", renderStart, renderDur);
199
180
  const rscHeaders: Record<string, string> = {
200
181
  "content-type": "text/x-component;charset=utf-8",
201
182
  vary: "accept, X-Rango-State, X-RSC-Router-Client-Path",
202
183
  };
184
+ // Tell the client's prefetch cache to scope this response to its source
185
+ // URL (instead of the default source-agnostic wildcard). Intercept
186
+ // responses depend on the source page matching an intercept rule, so
187
+ // they must not be reused for navigations from other sources.
188
+ if (hasInterceptSlots) {
189
+ rscHeaders["x-rsc-prefetch-scope"] = "source";
190
+ }
203
191
  // Enable browser HTTP caching for prefetch responses only.
204
192
  // Requires X-Rango-Prefetch header (sent by Link prefetch fetch),
205
193
  // non-intercept context (intercept responses depend on source page),
@@ -8,6 +8,7 @@ import {
8
8
  createResponseWithMergedHeaders,
9
9
  carryOverRedirectHeaders,
10
10
  } from "./helpers.js";
11
+ import { isRedirectResponse } from "../response-utils.js";
11
12
 
12
13
  // W3 -----------------------------------------------------------------------
13
14
 
@@ -18,16 +19,14 @@ import {
18
19
  */
19
20
  export function extractRedirectResponse(value: unknown): Response | null {
20
21
  if (!(value instanceof Response)) return null;
21
- const location = value.headers.get("Location");
22
- if (value.status >= 300 && value.status < 400 && location) {
23
- const redirect = createResponseWithMergedHeaders(null, {
24
- status: value.status,
25
- headers: { Location: location },
26
- });
27
- carryOverRedirectHeaders(value, redirect);
28
- return redirect;
29
- }
30
- return null;
22
+ if (!isRedirectResponse(value)) return null;
23
+ const location = value.headers.get("Location")!;
24
+ const redirect = createResponseWithMergedHeaders(null, {
25
+ status: value.status,
26
+ headers: { Location: location },
27
+ });
28
+ carryOverRedirectHeaders(value, redirect);
29
+ return redirect;
31
30
  }
32
31
 
33
32
  /**