@rangojs/router 0.0.0-experimental.ea6d5eec → 0.0.0-experimental.eb0645d3

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 (960) hide show
  1. package/README.md +124 -38
  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 +130 -47
  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/theme/ThemeProvider.d.ts +20 -0
  711. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  712. package/dist/theme/ThemeProvider.js +240 -0
  713. package/dist/theme/ThemeProvider.js.map +1 -0
  714. package/dist/theme/ThemeScript.d.ts +48 -0
  715. package/dist/theme/ThemeScript.d.ts.map +1 -0
  716. package/dist/theme/ThemeScript.js +13 -0
  717. package/dist/theme/ThemeScript.js.map +1 -0
  718. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  719. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  720. package/dist/theme/__tests__/theme.test.js +103 -0
  721. package/dist/theme/__tests__/theme.test.js.map +1 -0
  722. package/dist/theme/constants.d.ts +29 -0
  723. package/dist/theme/constants.d.ts.map +1 -0
  724. package/dist/theme/constants.js +48 -0
  725. package/dist/theme/constants.js.map +1 -0
  726. package/dist/theme/index.d.ts +31 -0
  727. package/dist/theme/index.d.ts.map +1 -0
  728. package/dist/theme/index.js +36 -0
  729. package/dist/theme/index.js.map +1 -0
  730. package/dist/theme/theme-context.d.ts +40 -0
  731. package/dist/theme/theme-context.d.ts.map +1 -0
  732. package/dist/theme/theme-context.js +60 -0
  733. package/dist/theme/theme-context.js.map +1 -0
  734. package/dist/theme/theme-script.d.ts +27 -0
  735. package/dist/theme/theme-script.d.ts.map +1 -0
  736. package/dist/theme/theme-script.js +147 -0
  737. package/dist/theme/theme-script.js.map +1 -0
  738. package/dist/theme/types.d.ts +163 -0
  739. package/dist/theme/types.d.ts.map +1 -0
  740. package/dist/theme/types.js +11 -0
  741. package/dist/theme/types.js.map +1 -0
  742. package/dist/theme/use-theme.d.ts +12 -0
  743. package/dist/theme/use-theme.d.ts.map +1 -0
  744. package/dist/theme/use-theme.js +40 -0
  745. package/dist/theme/use-theme.js.map +1 -0
  746. package/dist/types.d.ts +1479 -0
  747. package/dist/types.d.ts.map +1 -0
  748. package/dist/types.js +10 -0
  749. package/dist/types.js.map +1 -0
  750. package/dist/urls.d.ts +441 -0
  751. package/dist/urls.d.ts.map +1 -0
  752. package/dist/urls.gen.d.ts +8 -0
  753. package/dist/urls.gen.d.ts.map +1 -0
  754. package/dist/urls.gen.js +8 -0
  755. package/dist/urls.gen.js.map +1 -0
  756. package/dist/urls.js +443 -0
  757. package/dist/urls.js.map +1 -0
  758. package/dist/use-loader.d.ts +127 -0
  759. package/dist/use-loader.d.ts.map +1 -0
  760. package/dist/use-loader.js +237 -0
  761. package/dist/use-loader.js.map +1 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  774. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  778. package/dist/vite/ast-handler-extract.d.ts +49 -0
  779. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  780. package/dist/vite/ast-handler-extract.js +249 -0
  781. package/dist/vite/ast-handler-extract.js.map +1 -0
  782. package/dist/vite/expose-action-id.d.ts +19 -0
  783. package/dist/vite/expose-action-id.d.ts.map +1 -0
  784. package/dist/vite/expose-action-id.js +250 -0
  785. package/dist/vite/expose-action-id.js.map +1 -0
  786. package/dist/vite/expose-id-utils.d.ts +69 -0
  787. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  788. package/dist/vite/expose-id-utils.js +289 -0
  789. package/dist/vite/expose-id-utils.js.map +1 -0
  790. package/dist/vite/expose-internal-ids.d.ts +22 -0
  791. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  792. package/dist/vite/expose-internal-ids.js +886 -0
  793. package/dist/vite/expose-internal-ids.js.map +1 -0
  794. package/dist/vite/index.d.ts +149 -0
  795. package/dist/vite/index.d.ts.map +1 -0
  796. package/dist/vite/index.js +845 -241
  797. package/dist/vite/index.js.bak +5448 -0
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  805. package/dist/vite/virtual-entries.d.ts +25 -0
  806. package/dist/vite/virtual-entries.d.ts.map +1 -0
  807. package/dist/vite/virtual-entries.js +110 -0
  808. package/dist/vite/virtual-entries.js.map +1 -0
  809. package/package.json +4 -4
  810. package/skills/cache-guide/SKILL.md +32 -0
  811. package/skills/caching/SKILL.md +8 -0
  812. package/skills/handler-use/SKILL.md +362 -0
  813. package/skills/hooks/SKILL.md +25 -19
  814. package/skills/intercept/SKILL.md +20 -0
  815. package/skills/layout/SKILL.md +22 -0
  816. package/skills/links/SKILL.md +77 -12
  817. package/skills/loader/SKILL.md +53 -43
  818. package/skills/middleware/SKILL.md +34 -3
  819. package/skills/migrate-nextjs/SKILL.md +560 -0
  820. package/skills/migrate-react-router/SKILL.md +765 -0
  821. package/skills/parallel/SKILL.md +185 -0
  822. package/skills/prerender/SKILL.md +110 -68
  823. package/skills/rango/SKILL.md +24 -22
  824. package/skills/response-routes/SKILL.md +8 -0
  825. package/skills/route/SKILL.md +55 -0
  826. package/skills/router-setup/SKILL.md +87 -2
  827. package/skills/streams-and-websockets/SKILL.md +283 -0
  828. package/skills/typesafety/SKILL.md +10 -0
  829. package/src/__internal.ts +1 -1
  830. package/src/browser/app-version.ts +14 -0
  831. package/src/browser/event-controller.ts +5 -0
  832. package/src/browser/navigation-bridge.ts +37 -5
  833. package/src/browser/navigation-client.ts +132 -77
  834. package/src/browser/navigation-store.ts +43 -8
  835. package/src/browser/partial-update.ts +51 -6
  836. package/src/browser/prefetch/cache.ts +118 -26
  837. package/src/browser/prefetch/fetch.ts +168 -31
  838. package/src/browser/prefetch/queue.ts +92 -29
  839. package/src/browser/prefetch/resource-ready.ts +77 -0
  840. package/src/browser/react/Link.tsx +72 -8
  841. package/src/browser/react/NavigationProvider.tsx +19 -6
  842. package/src/browser/react/context.ts +7 -2
  843. package/src/browser/react/use-handle.ts +9 -58
  844. package/src/browser/react/use-navigation.ts +22 -2
  845. package/src/browser/react/use-params.ts +11 -1
  846. package/src/browser/react/use-router.ts +21 -8
  847. package/src/browser/rsc-router.tsx +45 -3
  848. package/src/browser/scroll-restoration.ts +10 -8
  849. package/src/browser/segment-reconciler.ts +36 -9
  850. package/src/browser/server-action-bridge.ts +8 -6
  851. package/src/browser/types.ts +27 -5
  852. package/src/build/generate-manifest.ts +6 -6
  853. package/src/build/generate-route-types.ts +3 -0
  854. package/src/build/route-trie.ts +50 -24
  855. package/src/build/route-types/include-resolution.ts +8 -1
  856. package/src/build/route-types/router-processing.ts +211 -72
  857. package/src/build/route-types/scan-filter.ts +8 -1
  858. package/src/cache/cache-runtime.ts +15 -11
  859. package/src/cache/cache-scope.ts +46 -5
  860. package/src/cache/document-cache.ts +17 -7
  861. package/src/cache/taint.ts +55 -0
  862. package/src/client.tsx +84 -230
  863. package/src/context-var.ts +72 -2
  864. package/src/debug.ts +2 -2
  865. package/src/handle.ts +40 -0
  866. package/src/index.rsc.ts +3 -1
  867. package/src/index.ts +46 -6
  868. package/src/prerender/store.ts +5 -4
  869. package/src/prerender.ts +138 -77
  870. package/src/response-utils.ts +28 -0
  871. package/src/reverse.ts +27 -2
  872. package/src/route-definition/dsl-helpers.ts +224 -37
  873. package/src/route-definition/helpers-types.ts +67 -19
  874. package/src/route-definition/index.ts +3 -0
  875. package/src/route-definition/redirect.ts +9 -1
  876. package/src/route-definition/resolve-handler-use.ts +149 -0
  877. package/src/route-types.ts +18 -0
  878. package/src/router/content-negotiation.ts +100 -1
  879. package/src/router/handler-context.ts +84 -24
  880. package/src/router/intercept-resolution.ts +9 -4
  881. package/src/router/lazy-includes.ts +7 -6
  882. package/src/router/loader-resolution.ts +156 -21
  883. package/src/router/logging.ts +1 -1
  884. package/src/router/manifest.ts +28 -15
  885. package/src/router/match-api.ts +124 -189
  886. package/src/router/match-middleware/background-revalidation.ts +30 -2
  887. package/src/router/match-middleware/cache-lookup.ts +94 -17
  888. package/src/router/match-middleware/cache-store.ts +53 -10
  889. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  890. package/src/router/match-middleware/segment-resolution.ts +60 -5
  891. package/src/router/match-result.ts +104 -10
  892. package/src/router/metrics.ts +6 -1
  893. package/src/router/middleware-types.ts +6 -8
  894. package/src/router/middleware.ts +24 -8
  895. package/src/router/navigation-snapshot.ts +182 -0
  896. package/src/router/pattern-matching.ts +60 -9
  897. package/src/router/prerender-match.ts +110 -10
  898. package/src/router/preview-match.ts +30 -102
  899. package/src/router/request-classification.ts +310 -0
  900. package/src/router/route-snapshot.ts +245 -0
  901. package/src/router/router-context.ts +1 -0
  902. package/src/router/router-interfaces.ts +36 -4
  903. package/src/router/router-options.ts +37 -11
  904. package/src/router/segment-resolution/fresh.ts +198 -20
  905. package/src/router/segment-resolution/helpers.ts +29 -24
  906. package/src/router/segment-resolution/loader-cache.ts +1 -0
  907. package/src/router/segment-resolution/revalidation.ts +433 -296
  908. package/src/router/trie-matching.ts +10 -4
  909. package/src/router/types.ts +1 -0
  910. package/src/router/url-params.ts +49 -0
  911. package/src/router.ts +55 -6
  912. package/src/rsc/handler.ts +476 -373
  913. package/src/rsc/helpers.ts +69 -41
  914. package/src/rsc/loader-fetch.ts +23 -3
  915. package/src/rsc/manifest-init.ts +5 -1
  916. package/src/rsc/progressive-enhancement.ts +16 -2
  917. package/src/rsc/response-route-handler.ts +11 -1
  918. package/src/rsc/rsc-rendering.ts +17 -1
  919. package/src/rsc/server-action.ts +10 -0
  920. package/src/rsc/ssr-setup.ts +2 -2
  921. package/src/rsc/types.ts +9 -1
  922. package/src/segment-content-promise.ts +67 -0
  923. package/src/segment-loader-promise.ts +122 -0
  924. package/src/segment-system.tsx +109 -23
  925. package/src/server/context.ts +166 -17
  926. package/src/server/handle-store.ts +19 -0
  927. package/src/server/loader-registry.ts +9 -8
  928. package/src/server/request-context.ts +175 -15
  929. package/src/ssr/index.tsx +4 -0
  930. package/src/static-handler.ts +18 -6
  931. package/src/types/cache-types.ts +4 -4
  932. package/src/types/handler-context.ts +137 -33
  933. package/src/types/loader-types.ts +36 -9
  934. package/src/types/route-entry.ts +12 -1
  935. package/src/types/segments.ts +2 -0
  936. package/src/urls/include-helper.ts +24 -14
  937. package/src/urls/path-helper-types.ts +39 -6
  938. package/src/urls/path-helper.ts +48 -13
  939. package/src/urls/pattern-types.ts +12 -0
  940. package/src/urls/response-types.ts +16 -6
  941. package/src/use-loader.tsx +77 -5
  942. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  943. package/src/vite/discovery/discover-routers.ts +5 -1
  944. package/src/vite/discovery/prerender-collection.ts +128 -74
  945. package/src/vite/discovery/state.ts +13 -4
  946. package/src/vite/index.ts +4 -0
  947. package/src/vite/plugin-types.ts +60 -5
  948. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  949. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  950. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  951. package/src/vite/plugins/expose-id-utils.ts +12 -0
  952. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  953. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  954. package/src/vite/plugins/performance-tracks.ts +88 -0
  955. package/src/vite/plugins/refresh-cmd.ts +88 -26
  956. package/src/vite/rango.ts +19 -2
  957. package/src/vite/router-discovery.ts +237 -37
  958. package/src/vite/utils/banner.ts +3 -3
  959. package/src/vite/utils/prerender-utils.ts +37 -5
  960. package/src/vite/utils/shared-utils.ts +3 -2
@@ -14,10 +14,11 @@ import {
14
14
  runWithRequestContext,
15
15
  setRequestContextParams,
16
16
  requireRequestContext,
17
+ getRequestContext,
18
+ _getRequestContext,
17
19
  createRequestContext,
18
20
  } from "../server/request-context.js";
19
21
  import * as rscDeps from "@vitejs/plugin-rsc/rsc";
20
-
21
22
  import type {
22
23
  RscPayload,
23
24
  CreateRSCHandlerOptions,
@@ -30,6 +31,7 @@ import {
30
31
  interceptRedirectForPartial,
31
32
  buildRouteMiddlewareEntries,
32
33
  } from "./helpers.js";
34
+ import { isWebSocketUpgradeResponse } from "../response-utils.js";
33
35
  import {
34
36
  handleResponseRoute,
35
37
  type ResponseRouteMatch,
@@ -82,6 +84,11 @@ import {
82
84
  mayNeedSSR,
83
85
  SSR_SETUP_VAR,
84
86
  } from "./ssr-setup.js";
87
+ import {
88
+ classifyRequest,
89
+ type RequestPlan,
90
+ type ExecutableRequestPlan,
91
+ } from "../router/request-classification.js";
85
92
 
86
93
  /**
87
94
  * Create an RSC request handler.
@@ -161,10 +168,13 @@ export function createRSCHandler<
161
168
  phase: ErrorPhase,
162
169
  context: Parameters<typeof invokeOnError<TEnv>>[3],
163
170
  ): void {
164
- if (error != null && typeof error === "object") {
165
- const reportedErrors = requireRequestContext()._reportedErrors;
166
- if (reportedErrors.has(error)) return;
167
- reportedErrors.add(error);
171
+ // Guard: abort signal handlers fire asynchronously outside the ALS
172
+ // request scope, so the context may be gone. Skip dedup in that
173
+ // case — the error is from a cancelled stream, not a real failure.
174
+ const reqCtx = _getRequestContext();
175
+ if (error != null && typeof error === "object" && reqCtx) {
176
+ if (reqCtx._reportedErrors.has(error)) return;
177
+ reqCtx._reportedErrors.add(error);
168
178
  }
169
179
  invokeOnError(router.onError, error, phase, context, "RSC");
170
180
  }
@@ -452,6 +462,9 @@ export function createRSCHandler<
452
462
  // - Server components during rendering
453
463
  // - Error boundaries
454
464
  // - Streaming
465
+ // Store basename on request context (scoped per-request via existing ALS)
466
+ requestContext._basename = router.basename;
467
+
455
468
  return runWithRequestContext(requestContext, async () => {
456
469
  // Core handler logic (wrapped by middleware)
457
470
  const coreHandler = async (): Promise<Response> => {
@@ -521,13 +534,17 @@ export function createRSCHandler<
521
534
  }
522
535
 
523
536
  const fullTiming = timingParts.join(", ");
524
- if (fullTiming) response.headers.set("Server-Timing", fullTiming);
537
+ if (fullTiming && !isWebSocketUpgradeResponse(response)) {
538
+ response.headers.set("Server-Timing", fullTiming);
539
+ }
525
540
 
526
541
  return response;
527
542
  });
528
543
  };
529
544
 
530
- // Core request handling logic (separated for middleware wrapping)
545
+ // Core request handling logic (separated for middleware wrapping).
546
+ // Uses the classify → execute model: classifyRequest produces a RequestPlan,
547
+ // then execution dispatches on the plan mode.
531
548
  async function coreRequestHandler(
532
549
  request: Request,
533
550
  env: TEnv,
@@ -535,71 +552,112 @@ export function createRSCHandler<
535
552
  variables: Record<string, any>,
536
553
  nonce: string | undefined,
537
554
  ): Promise<Response> {
538
- const previewStart = performance.now();
539
- const preview = await router.previewMatch(request, { env });
540
- const previewDur = performance.now() - previewStart;
541
555
  const handlerTiming: string[] = variables.__handlerTiming || [];
542
- handlerTiming.push(`handler-preview-match;dur=${previewDur.toFixed(2)}`);
543
- // Response route short-circuit: skip entire RSC pipeline
544
- if (preview?.responseType && preview.handler) {
545
- const responseOutcome = await withTimeout(
546
- handleResponseRoute(
547
- handlerCtx,
548
- preview as ResponseRouteMatch,
549
- request,
550
- env,
551
- url,
552
- variables,
556
+
557
+ // Debug manifest endpoint: handled before classification since it
558
+ // doesn't need a route match and needs trie access from the closure.
559
+ const isDev = process.env.NODE_ENV !== "production";
560
+ if (
561
+ url.searchParams.has("__debug_manifest") &&
562
+ (isDev || router.allowDebugManifest)
563
+ ) {
564
+ const trie = getRouterTrie(router.id) ?? getRouteTrie();
565
+ const routeManifest = getRequiredRouteMap();
566
+ const { extractAncestryFromTrie } =
567
+ await import("../build/route-trie.js");
568
+ return new Response(
569
+ JSON.stringify(
570
+ {
571
+ routerId: router.id,
572
+ routeManifest,
573
+ routeAncestry: trie ? extractAncestryFromTrie(trie) : {},
574
+ routeTrie: trie,
575
+ precomputedEntries: getPrecomputedEntries(),
576
+ },
577
+ null,
578
+ 2,
553
579
  ),
554
- router.timeouts.renderStartMs,
555
- "render-start",
580
+ {
581
+ headers: { "Content-Type": "application/json" },
582
+ },
556
583
  );
557
- if (responseOutcome.timedOut) {
558
- return handleTimeoutResponse(
559
- request,
560
- env,
561
- url,
562
- "render-start",
563
- responseOutcome.durationMs,
564
- preview?.routeKey,
565
- );
584
+ }
585
+
586
+ // ---- 1. Classify ----
587
+ // classifyRequest may throw RouteNotFoundError for unknown routes.
588
+ // In that case, fall through to a full-render plan so the pipeline
589
+ // can render the 404 page via the existing error handling path.
590
+ const classifyStart = performance.now();
591
+ let plan: RequestPlan<TEnv>;
592
+ try {
593
+ plan = await classifyRequest<TEnv>(request, url, {
594
+ findMatch: router.findMatch,
595
+ routerVersion: version,
596
+ routerId: router.id,
597
+ });
598
+ } catch (error) {
599
+ if (
600
+ error instanceof RouteNotFoundError ||
601
+ (error instanceof Error && error.name === "RouteNotFoundError")
602
+ ) {
603
+ // Let the render path handle 404 — match()/matchPartial() will
604
+ // re-throw RouteNotFoundError and the catch block in
605
+ // executeRenderWithMiddleware renders the not-found page.
606
+ plan = {
607
+ mode: "full-render",
608
+ route: {
609
+ matched: null as any,
610
+ manifestEntry: null as any,
611
+ entries: [],
612
+ routeKey: "",
613
+ localRouteName: "",
614
+ params: {},
615
+ routeMiddleware: [],
616
+ cacheScope: null,
617
+ isPassthrough: false,
618
+ },
619
+ negotiated: false,
620
+ };
621
+ } else {
622
+ throw error;
623
+ }
624
+ }
625
+ const classifyDur = performance.now() - classifyStart;
626
+ handlerTiming.push(`handler-classify;dur=${classifyDur.toFixed(2)}`);
627
+
628
+ // ---- 2. Terminal plans (no execution needed) ----
629
+ if (plan.mode === "redirect") {
630
+ // Redirects are handled by the pipeline (match/matchPartial),
631
+ // but for partial requests we short-circuit with a Flight redirect.
632
+ if (url.searchParams.has("_rsc_partial")) {
633
+ return createRedirectFlightResponse(plan.redirectUrl);
566
634
  }
567
- return responseOutcome.result;
635
+ // Full requests: let the pipeline handle the redirect via match()
636
+ // which returns { redirect: url }. Fall through to full-render.
568
637
  }
569
638
 
570
- // Kick off SSR module loading + stream mode resolution in parallel with
571
- // segment resolution. Placed after the response-route short-circuit so
572
- // response/mime routes never pay for SSR work.
573
- if (mayNeedSSR(request, url)) {
574
- variables[SSR_SETUP_VAR] = startSSRSetup(
575
- handlerCtx,
576
- request,
577
- env,
578
- url,
579
- router.debugPerformance
580
- ? () => requireRequestContext()._metricsStore
581
- : undefined,
639
+ if (plan.mode === "version-mismatch") {
640
+ console.log(
641
+ `[RSC] Version mismatch: client=${url.searchParams.get("_rsc_v")}, server=${version}. Forcing reload.`,
582
642
  );
643
+ return createResponseWithMergedHeaders(null, {
644
+ status: 200,
645
+ headers: {
646
+ "X-RSC-Reload": plan.reloadUrl,
647
+ "content-type": "text/x-component;charset=utf-8",
648
+ },
649
+ });
583
650
  }
584
651
 
585
- const routeReverse = createReverseFunction(getRequiredRouteMap());
586
-
587
- const isAction =
588
- request.headers.has("rsc-action") || url.searchParams.has("_rsc_action");
589
- const isLoaderFetch = url.searchParams.has("_rsc_loader");
590
- const actionId =
591
- request.headers.get("rsc-action") || url.searchParams.get("_rsc_action");
592
-
593
- // Origin guard: reject cross-origin actions, loader fetches, and
594
- // PE form submissions before any execution. Regular page navigations
595
- // (GET without _rsc_loader/_rsc_action) are not affected.
596
- const originPhase: OriginCheckPhase | null = isAction
597
- ? "action"
598
- : isLoaderFetch
599
- ? "loader"
600
- : request.method === "POST"
601
- ? "pe-form"
602
- : null;
652
+ // ---- 3. Origin guard (gate for action/loader/PE modes) ----
653
+ const originPhase: OriginCheckPhase | null =
654
+ plan.mode === "action"
655
+ ? "action"
656
+ : plan.mode === "loader"
657
+ ? "loader"
658
+ : plan.mode === "pe-render"
659
+ ? "pe-form"
660
+ : null;
603
661
  if (originPhase) {
604
662
  const originResult = await checkRequestOrigin(
605
663
  request,
@@ -649,13 +707,33 @@ export function createRSCHandler<
649
707
  }
650
708
  }
651
709
 
652
- // Get handle store from request context
710
+ // ---- 4. Execute ----
711
+ return executeRequest(
712
+ plan as ExecutableRequestPlan<TEnv>,
713
+ request,
714
+ env,
715
+ url,
716
+ variables,
717
+ nonce,
718
+ );
719
+ }
720
+
721
+ // Execute a classified request plan. Dispatches to the appropriate handler
722
+ // based on plan.mode. Lives in the createRSCHandler closure for access to
723
+ // handlerCtx, router, callOnError, etc.
724
+ // Only receives executable plans (version-mismatch is handled above).
725
+ async function executeRequest(
726
+ plan: ExecutableRequestPlan<TEnv>,
727
+ request: Request,
728
+ env: TEnv,
729
+ url: URL,
730
+ variables: Record<string, any>,
731
+ nonce: string | undefined,
732
+ ): Promise<Response> {
733
+ // Common setup
653
734
  const handleStore = requireRequestContext()._handleStore;
654
735
 
655
736
  // Wire up error reporting for late streaming-handle failures
656
- // (LateHandlePushError: handle pushed after stream completion).
657
- // Without this, these errors are only caught by React's error boundary
658
- // and never reach the router's onError callback or telemetry.
659
737
  handleStore.onError = (error: Error) => {
660
738
  const reqCtx = requireRequestContext();
661
739
  callOnError(error, "handler", {
@@ -685,37 +763,106 @@ export function createRSCHandler<
685
763
  };
686
764
 
687
765
  // Set route params early so all execution paths can access ctx.params.
688
- if (preview?.params) {
689
- setRequestContextParams(preview.params, preview.routeKey);
766
+ // Also store the classified snapshot so match/matchPartial can reuse it
767
+ // instead of calling resolveRoute again.
768
+ if (plan.mode !== "redirect") {
769
+ setRequestContextParams(plan.route.params, plan.route.routeKey);
770
+ requireRequestContext()._classifiedRoute = plan.route;
690
771
  }
691
772
 
692
- // Progressive enhancement runs before the normal action/render paths.
693
- // Route middleware wraps the PE re-render so handlers see the same
694
- // context variables regardless of JS/no-JS transport.
695
- const progressiveResult = await handleProgressiveEnhancement(
696
- handlerCtx,
697
- request,
698
- env,
699
- url,
700
- isAction,
701
- handleStore,
702
- nonce,
703
- {
704
- routeMiddleware: preview?.routeMiddleware,
773
+ const routeReverse = createReverseFunction(getRequiredRouteMap());
774
+
775
+ // ---- Response route: skip entire RSC pipeline ----
776
+ if (plan.mode === "response") {
777
+ // Build ResponseRouteMatch from plan fields. handleResponseRoute
778
+ // expects a flat object with params at the top level.
779
+ const responseMatch: ResponseRouteMatch = {
780
+ responseType: plan.responseType,
781
+ handler: plan.handler,
782
+ params: plan.route.params,
783
+ negotiated: plan.negotiated,
784
+ manifestEntry: plan.manifestEntry,
785
+ routeMiddleware: plan.routeMiddleware,
786
+ };
787
+ const responseOutcome = await withTimeout(
788
+ handleResponseRoute(
789
+ handlerCtx,
790
+ responseMatch,
791
+ request,
792
+ env,
793
+ url,
794
+ variables,
795
+ ),
796
+ router.timeouts.renderStartMs,
797
+ "render-start",
798
+ );
799
+ if (responseOutcome.timedOut) {
800
+ return handleTimeoutResponse(
801
+ request,
802
+ env,
803
+ url,
804
+ "render-start",
805
+ responseOutcome.durationMs,
806
+ plan.route.routeKey,
807
+ );
808
+ }
809
+ const response = responseOutcome.result;
810
+ if (plan.negotiated && !isWebSocketUpgradeResponse(response)) {
811
+ response.headers.append("Vary", "Accept");
812
+ }
813
+ return response;
814
+ }
815
+
816
+ // SSR setup: kick off in parallel for modes that need HTML rendering.
817
+ // Placed after response-route short-circuit so response/mime routes
818
+ // never pay for SSR work.
819
+ if (plan.mode !== "loader" && mayNeedSSR(request, url)) {
820
+ variables[SSR_SETUP_VAR] = startSSRSetup(
821
+ handlerCtx,
822
+ request,
823
+ env,
824
+ url,
825
+ router.debugPerformance
826
+ ? () => requireRequestContext()._metricsStore
827
+ : undefined,
828
+ );
829
+ }
830
+
831
+ // ---- Loader fetch ----
832
+ if (plan.mode === "loader") {
833
+ return handleLoaderFetch(
834
+ handlerCtx,
835
+ request,
836
+ env,
837
+ url,
705
838
  variables,
706
- routeReverse,
707
- },
708
- );
709
- if (progressiveResult) {
710
- return progressiveResult;
839
+ plan.route.params,
840
+ );
841
+ }
842
+
843
+ // ---- Progressive enhancement ----
844
+ if (plan.mode === "pe-render") {
845
+ const peResult = await handleProgressiveEnhancement(
846
+ handlerCtx,
847
+ request,
848
+ env,
849
+ url,
850
+ false, // isAction = false for PE
851
+ handleStore,
852
+ nonce,
853
+ {
854
+ routeMiddleware: plan.route.routeMiddleware,
855
+ variables,
856
+ routeReverse,
857
+ },
858
+ );
859
+ if (peResult) return peResult;
860
+ // PE handler returned null (not a PE form) — fall through to render
711
861
  }
712
862
 
713
- // --- Action execution: runs BEFORE route middleware ---
714
- // Route middleware wraps rendering only. For actions, the action runs
715
- // first in the global middleware context, then route middleware wraps
716
- // the revalidation pass (identical to a normal render).
717
- let actionContinuation: ActionContinuation | undefined;
718
- if (isAction && actionId) {
863
+ // ---- Action: execute action, then revalidate wrapped in route middleware ----
864
+ if (plan.mode === "action") {
865
+ let actionContinuation: ActionContinuation | undefined;
719
866
  try {
720
867
  const actionOutcome = await withTimeout(
721
868
  executeServerAction(
@@ -723,7 +870,7 @@ export function createRSCHandler<
723
870
  request,
724
871
  env,
725
872
  url,
726
- actionId,
873
+ plan.actionId,
727
874
  handleStore,
728
875
  ),
729
876
  router.timeouts.actionMs,
@@ -736,8 +883,8 @@ export function createRSCHandler<
736
883
  url,
737
884
  "action",
738
885
  actionOutcome.durationMs,
739
- preview?.routeKey,
740
- actionId,
886
+ plan.route.routeKey,
887
+ plan.actionId,
741
888
  );
742
889
  }
743
890
  const result = actionOutcome.result;
@@ -749,341 +896,297 @@ export function createRSCHandler<
749
896
  request,
750
897
  url,
751
898
  env,
752
- actionId,
899
+ actionId: plan.actionId,
753
900
  handledByBoundary: false,
754
901
  });
755
902
  console.error(`[RSC] Action error:`, error);
756
903
  throw error;
757
904
  }
758
- }
759
905
 
760
- // --- Rendering (action revalidation or navigation) ---
761
- // Route middleware wraps this same code path for both cases.
762
- const renderHandler = async () => {
763
- const response = await coreRequestHandlerInner(
906
+ // Revalidation render wrapped in route middleware.
907
+ // Actions from client-side navigation include _rsc_partial preserve
908
+ // the partial flag so the revalidation returns a Flight stream, not HTML.
909
+ // App-switch is already excluded by classifyRequest (would be full-render).
910
+ const isPartialAction = url.searchParams.has("_rsc_partial");
911
+ return executeRenderWithMiddleware(
912
+ plan.route.routeMiddleware,
913
+ plan.negotiated,
914
+ plan.route.routeKey,
915
+ routeReverse,
764
916
  request,
765
917
  env,
766
918
  url,
767
919
  variables,
768
920
  nonce,
769
- preview?.params,
770
- preview?.routeKey,
771
921
  handleStore,
922
+ isPartialAction,
772
923
  actionContinuation,
773
924
  );
774
- if (preview?.negotiated) {
775
- response.headers.append("Vary", "Accept");
776
- }
777
- return response;
778
- };
779
-
780
- // Wrap the render path (with or without route middleware) in a
781
- // renderStartMs timeout so slow renders are caught before output.
782
- const executeRender = async (): Promise<Response> => {
783
- if (preview?.routeMiddleware && preview.routeMiddleware.length > 0) {
784
- const mwResponse = await executeMiddleware(
785
- buildRouteMiddlewareEntries<TEnv>(preview.routeMiddleware),
786
- request,
787
- env,
788
- variables,
789
- renderHandler,
790
- routeReverse,
791
- );
792
-
793
- if (
794
- url.searchParams.has("_rsc_partial") ||
795
- url.searchParams.has("_rsc_action")
796
- ) {
797
- const intercepted = interceptRedirectForPartial(
798
- mwResponse,
799
- createRedirectFlightResponse,
800
- );
801
- if (intercepted) return intercepted;
802
- }
803
-
804
- return finalizeResponse(mwResponse);
805
- }
925
+ }
806
926
 
807
- // No route middleware, proceed directly
808
- return renderHandler();
809
- };
927
+ // ---- Full render / Partial render (or PE that fell through) ----
928
+ if (plan.mode === "full-render" || plan.mode === "partial-render") {
929
+ const isPartial = plan.mode === "partial-render";
930
+ return executeRenderWithMiddleware(
931
+ plan.route.routeMiddleware,
932
+ plan.negotiated,
933
+ plan.route.routeKey,
934
+ routeReverse,
935
+ request,
936
+ env,
937
+ url,
938
+ variables,
939
+ nonce,
940
+ handleStore,
941
+ isPartial,
942
+ );
943
+ }
810
944
 
811
- const renderOutcome = await withTimeout(
812
- executeRender(),
813
- router.timeouts.renderStartMs,
814
- "render-start",
815
- );
816
- if (renderOutcome.timedOut) {
817
- return handleTimeoutResponse(
945
+ // PE that fell through (handleProgressiveEnhancement returned null)
946
+ // falls back to full render
947
+ if (plan.mode === "pe-render") {
948
+ return executeRenderWithMiddleware(
949
+ plan.route.routeMiddleware,
950
+ false,
951
+ plan.route.routeKey,
952
+ routeReverse,
818
953
  request,
819
954
  env,
820
955
  url,
821
- "render-start",
822
- renderOutcome.durationMs,
823
- preview?.routeKey,
956
+ variables,
957
+ nonce,
958
+ handleStore,
959
+ false,
824
960
  );
825
961
  }
826
- return renderOutcome.result;
962
+
963
+ // Redirect plan that wasn't handled above (full-page redirect — let
964
+ // the pipeline handle it via match() which returns { redirect: url })
965
+ return executeRenderWithMiddleware(
966
+ plan.route.routeMiddleware,
967
+ false,
968
+ plan.route.routeKey,
969
+ routeReverse,
970
+ request,
971
+ env,
972
+ url,
973
+ variables,
974
+ nonce,
975
+ handleStore,
976
+ false,
977
+ );
827
978
  }
828
979
 
829
- // Inner request handler: rendering logic wrapped by route middleware.
830
- // Handles action revalidation (when actionContinuation is present),
831
- // loader fetches, and regular RSC rendering.
832
- async function coreRequestHandlerInner(
980
+ // Shared render execution: wraps handleRscRendering (or revalidateAfterAction)
981
+ // in route middleware and timeout handling. Consolidates the pattern used by
982
+ // action-revalidate, full-render, and partial-render modes.
983
+ async function executeRenderWithMiddleware(
984
+ routeMiddleware: import("../router/middleware-types.js").CollectedMiddleware[],
985
+ negotiated: boolean,
986
+ routeKey: string,
987
+ routeReverse: ReturnType<typeof createReverseFunction>,
833
988
  request: Request,
834
989
  env: TEnv,
835
990
  url: URL,
836
991
  variables: Record<string, any>,
837
992
  nonce: string | undefined,
838
- routeParams?: Record<string, string>,
839
- routeKey?: string,
840
- handleStore?: ReturnType<typeof requireRequestContext>["_handleStore"],
993
+ handleStore: ReturnType<typeof requireRequestContext>["_handleStore"],
994
+ isPartial: boolean,
841
995
  actionContinuation?: ActionContinuation,
842
996
  ): Promise<Response> {
843
- const isPartial = url.searchParams.has("_rsc_partial");
844
- const isAction =
845
- request.headers.has("rsc-action") || url.searchParams.has("_rsc_action");
846
-
847
- // Version mismatch detection - client may have stale code after HMR/deployment
848
- // If versions don't match, tell the client to reload
849
- const clientVersion = url.searchParams.get("_rsc_v");
850
- if (version && clientVersion && clientVersion !== version) {
851
- console.log(
852
- `[RSC] Version mismatch: client=${clientVersion}, server=${version}. Forcing reload.`,
853
- );
997
+ const renderHandler = async (): Promise<Response> => {
998
+ try {
999
+ let response: Response;
1000
+ if (actionContinuation) {
1001
+ response = await revalidateAfterAction(
1002
+ handlerCtx,
1003
+ request,
1004
+ env,
1005
+ url,
1006
+ handleStore,
1007
+ actionContinuation,
1008
+ );
1009
+ } else {
1010
+ response = await handleRscRendering(
1011
+ handlerCtx,
1012
+ request,
1013
+ env,
1014
+ url,
1015
+ isPartial,
1016
+ handleStore,
1017
+ nonce,
1018
+ );
1019
+ }
1020
+ if (negotiated && !isWebSocketUpgradeResponse(response)) {
1021
+ response.headers.append("Vary", "Accept");
1022
+ }
1023
+ return response;
1024
+ } catch (error) {
1025
+ // Check if middleware/handler returned Response
1026
+ if (error instanceof Response) {
1027
+ // During partial (client-side navigation), a 200 Response from a handler
1028
+ // means the route serves raw content (JSON, text, etc.), not JSX.
1029
+ // Signal the browser to hard-navigate so it renders the raw response.
1030
+ if (isPartial && error.status === 200) {
1031
+ console.warn(
1032
+ `[RSC] Route handler at ${url.pathname} returned a Response during client-side navigation. ` +
1033
+ `Falling back to hard navigation. Use data-external on the <Link> to avoid the extra round-trip.`,
1034
+ );
1035
+ return createResponseWithMergedHeaders(null, {
1036
+ status: 200,
1037
+ headers: {
1038
+ "X-RSC-Reload": stripInternalParams(url).toString(),
1039
+ "content-type": "text/x-component;charset=utf-8",
1040
+ },
1041
+ });
1042
+ }
854
1043
 
855
- // For actions, reload current page (referer) if same origin.
856
- // For navigation, load the target URL.
857
- // Validate referer origin to prevent open redirect via crafted header.
858
- let reloadUrl = stripInternalParams(url).toString();
859
- if (isAction) {
860
- const referer = request.headers.get("referer");
861
- if (referer) {
862
- try {
863
- const refererUrl = new URL(referer);
864
- if (refererUrl.origin === url.origin) {
865
- reloadUrl = referer;
866
- }
867
- } catch {
868
- // Malformed referer, fall back to cleanUrl
1044
+ if (isPartial) {
1045
+ const intercepted = interceptRedirectForPartial(
1046
+ error,
1047
+ createRedirectFlightResponse,
1048
+ );
1049
+ if (intercepted) return intercepted;
869
1050
  }
1051
+
1052
+ return error;
870
1053
  }
871
- }
872
1054
 
873
- // Return special response that tells client to reload
874
- return createResponseWithMergedHeaders(null, {
875
- status: 200,
876
- headers: {
877
- "X-RSC-Reload": reloadUrl,
878
- "content-type": "text/x-component;charset=utf-8",
879
- },
880
- });
881
- }
882
- // Debug manifest endpoint: ?__debug_manifest on any route.
883
- // Always available in dev, requires allowDebugManifest option in production.
884
- const isDev = process.env.NODE_ENV !== "production";
885
- if (
886
- url.searchParams.has("__debug_manifest") &&
887
- (isDev || router.allowDebugManifest)
888
- ) {
889
- const trie = getRouterTrie(router.id) ?? getRouteTrie();
890
- const routeManifest = getRequiredRouteMap();
891
- const { extractAncestryFromTrie } =
892
- await import("../build/route-trie.js");
893
- return new Response(
894
- JSON.stringify(
895
- {
896
- routerId: router.id,
897
- routeManifest,
898
- routeAncestry: trie ? extractAncestryFromTrie(trie) : {},
899
- routeTrie: trie,
900
- precomputedEntries: getPrecomputedEntries(),
901
- },
902
- null,
903
- 2,
904
- ),
905
- {
906
- headers: { "Content-Type": "application/json" },
907
- },
908
- );
909
- }
1055
+ // Render 404 page for unmatched routes
1056
+ const isRouteNotFound =
1057
+ error instanceof RouteNotFoundError ||
1058
+ (error instanceof Error && error.name === "RouteNotFoundError");
1059
+ if (isRouteNotFound) {
1060
+ callOnError(error, "routing", {
1061
+ request,
1062
+ url,
1063
+ env,
1064
+ handledByBoundary: true,
1065
+ });
910
1066
 
911
- const store = handleStore ?? requireRequestContext()._handleStore;
1067
+ const notFoundOption = router.notFound;
1068
+ const notFoundComponent =
1069
+ typeof notFoundOption === "function"
1070
+ ? notFoundOption({ pathname: url.pathname })
1071
+ : (notFoundOption ?? createElement("h1", null, "Not Found"));
1072
+
1073
+ const notFoundSegment = {
1074
+ id: "notFound",
1075
+ namespace: "notFound",
1076
+ type: "route" as const,
1077
+ index: 0,
1078
+ component: notFoundComponent,
1079
+ params: {},
1080
+ };
1081
+
1082
+ const payload: RscPayload = {
1083
+ metadata: {
1084
+ pathname: url.pathname,
1085
+ routerId: router.id,
1086
+ basename: router.basename,
1087
+ segments: [notFoundSegment],
1088
+ matched: [],
1089
+ diff: [],
1090
+ isPartial: false,
1091
+ rootLayout: router.rootLayout,
1092
+ handles: handleStore.stream(),
1093
+ version,
1094
+ themeConfig: router.themeConfig,
1095
+ warmupEnabled: router.warmupEnabled,
1096
+ initialTheme: requireRequestContext().theme,
1097
+ },
1098
+ };
912
1099
 
913
- try {
914
- // Route params were already set in coreRequestHandler, but set again
915
- // for callers that enter coreRequestHandlerInner directly.
916
- if (routeParams) {
917
- setRequestContextParams(routeParams, routeKey);
918
- }
1100
+ const rscStream = renderToReadableStream(payload, {
1101
+ onError: (error: unknown) => {
1102
+ callOnError(error, "rendering", { request, url, env });
1103
+ },
1104
+ });
919
1105
 
920
- // ============================================================================
921
- // ACTION REVALIDATION (action already executed, revalidate segments)
922
- // ============================================================================
923
- if (actionContinuation) {
924
- return await revalidateAfterAction(
925
- handlerCtx,
926
- request,
927
- env,
928
- url,
929
- store,
930
- actionContinuation,
931
- );
932
- }
1106
+ const isRscRequest =
1107
+ isPartial ||
1108
+ (!request.headers.get("accept")?.includes("text/html") &&
1109
+ !url.searchParams.has("__html")) ||
1110
+ url.searchParams.has("__rsc");
933
1111
 
934
- // ============================================================================
935
- // LOADER FETCH EXECUTION (data fetching with RSC serialization)
936
- // ============================================================================
937
- const isLoaderRequest = url.searchParams.has("_rsc_loader");
938
- if (isLoaderRequest) {
939
- return handleLoaderFetch(
940
- handlerCtx,
941
- request,
942
- env,
943
- url,
944
- variables,
945
- routeParams,
946
- );
947
- }
1112
+ if (isRscRequest) {
1113
+ return createResponseWithMergedHeaders(rscStream, {
1114
+ status: 404,
1115
+ headers: { "content-type": "text/x-component;charset=utf-8" },
1116
+ });
1117
+ }
948
1118
 
949
- // ============================================================================
950
- // REGULAR RSC RENDERING (Navigation)
951
- // ============================================================================
952
- // Note: Must use "return await" for try/catch to catch async rejections
953
- return await handleRscRendering(
954
- handlerCtx,
955
- request,
956
- env,
957
- url,
958
- isPartial,
959
- store,
960
- nonce,
961
- );
962
- } catch (error) {
963
- // Check if middleware/handler returned Response
964
- if (error instanceof Response) {
965
- // During partial (client-side navigation), a 200 Response from a handler
966
- // means the route serves raw content (JSON, text, etc.), not JSX.
967
- // Signal the browser to hard-navigate so it renders the raw response.
968
- // Only for 200 — redirects (3xx) work already because the browser follows
969
- // them automatically to a URL that serves Flight data.
970
- if (isPartial && error.status === 200) {
971
- console.warn(
972
- `[RSC] Route handler at ${url.pathname} returned a Response during client-side navigation. ` +
973
- `Falling back to hard navigation. Use data-external on the <Link> to avoid the extra round-trip.`,
1119
+ const [ssrModule, streamMode] = await getSSRSetup(
1120
+ handlerCtx,
1121
+ request,
1122
+ env,
1123
+ url,
1124
+ requireRequestContext()._metricsStore,
974
1125
  );
975
- return createResponseWithMergedHeaders(null, {
976
- status: 200,
977
- headers: {
978
- "X-RSC-Reload": stripInternalParams(url).toString(),
979
- "content-type": "text/x-component;charset=utf-8",
980
- },
1126
+ const htmlStream = await ssrModule.renderHTML(rscStream, {
1127
+ nonce,
1128
+ streamMode,
981
1129
  });
982
- }
983
1130
 
984
- if (isPartial) {
985
- const intercepted = interceptRedirectForPartial(
986
- error,
987
- createRedirectFlightResponse,
988
- );
989
- if (intercepted) return intercepted;
1131
+ return createResponseWithMergedHeaders(htmlStream, {
1132
+ status: 404,
1133
+ headers: { "content-type": "text/html;charset=utf-8" },
1134
+ });
990
1135
  }
991
1136
 
992
- return error;
993
- }
994
-
995
- // Render 404 page for unmatched routes
996
- // Check both instanceof and error.name for cross-bundle compatibility
997
- const isRouteNotFound =
998
- error instanceof RouteNotFoundError ||
999
- (error instanceof Error && error.name === "RouteNotFoundError");
1000
- if (isRouteNotFound) {
1137
+ // Report unhandled errors
1001
1138
  callOnError(error, "routing", {
1002
1139
  request,
1003
1140
  url,
1004
1141
  env,
1005
- handledByBoundary: true, // Handled by notFound component
1142
+ handledByBoundary: false,
1006
1143
  });
1144
+ console.error(`[RSC] Error:`, error);
1145
+ throw error;
1146
+ }
1147
+ };
1007
1148
 
1008
- // Get notFound component from router options or use default
1009
- const notFoundOption = router.notFound;
1010
- const notFoundComponent =
1011
- typeof notFoundOption === "function"
1012
- ? notFoundOption({ pathname: url.pathname })
1013
- : (notFoundOption ?? createElement("h1", null, "Not Found"));
1014
-
1015
- // Create a simple segment for the 404 page
1016
- const notFoundSegment = {
1017
- id: "notFound",
1018
- namespace: "notFound",
1019
- type: "route" as const,
1020
- index: 0,
1021
- component: notFoundComponent,
1022
- params: {},
1023
- };
1024
-
1025
- const payload: RscPayload = {
1026
- metadata: {
1027
- pathname: url.pathname,
1028
- segments: [notFoundSegment],
1029
- matched: [],
1030
- diff: [],
1031
- isPartial: false,
1032
- rootLayout: router.rootLayout,
1033
- handles: store.stream(),
1034
- version,
1035
- themeConfig: router.themeConfig,
1036
- warmupEnabled: router.warmupEnabled,
1037
- initialTheme: requireRequestContext().theme,
1038
- // No routeName for not-found routes
1039
- },
1040
- };
1041
-
1042
- const rscStream = renderToReadableStream(payload);
1043
-
1044
- // Determine if this is an RSC request or HTML request.
1045
- // Partial requests are always RSC (see main isRscRequest comment).
1046
- const isRscRequest =
1047
- isPartial ||
1048
- (!request.headers.get("accept")?.includes("text/html") &&
1049
- !url.searchParams.has("__html")) ||
1050
- url.searchParams.has("__rsc");
1051
-
1052
- if (isRscRequest) {
1053
- return createResponseWithMergedHeaders(rscStream, {
1054
- status: 404,
1055
- headers: { "content-type": "text/x-component;charset=utf-8" },
1056
- });
1057
- }
1058
-
1059
- // Delegate to SSR for HTML response (reuse early setup if available)
1060
- const [ssrModule, streamMode] = await getSSRSetup(
1061
- handlerCtx,
1149
+ // Wrap the render path in a renderStartMs timeout
1150
+ const executeRender = async (): Promise<Response> => {
1151
+ if (routeMiddleware.length > 0) {
1152
+ const mwResponse = await executeMiddleware(
1153
+ buildRouteMiddlewareEntries<TEnv>(routeMiddleware),
1062
1154
  request,
1063
1155
  env,
1064
- url,
1065
- requireRequestContext()._metricsStore,
1156
+ variables,
1157
+ renderHandler,
1158
+ routeReverse,
1066
1159
  );
1067
- const htmlStream = await ssrModule.renderHTML(rscStream, {
1068
- nonce,
1069
- streamMode,
1070
- });
1071
1160
 
1072
- return createResponseWithMergedHeaders(htmlStream, {
1073
- status: 404,
1074
- headers: { "content-type": "text/html;charset=utf-8" },
1075
- });
1161
+ if (isPartial || actionContinuation) {
1162
+ const intercepted = interceptRedirectForPartial(
1163
+ mwResponse,
1164
+ createRedirectFlightResponse,
1165
+ );
1166
+ if (intercepted) return intercepted;
1167
+ }
1168
+
1169
+ return finalizeResponse(mwResponse);
1076
1170
  }
1077
1171
 
1078
- // Report unhandled errors
1079
- callOnError(error, "routing", {
1172
+ return renderHandler();
1173
+ };
1174
+
1175
+ const renderOutcome = await withTimeout(
1176
+ executeRender(),
1177
+ router.timeouts.renderStartMs,
1178
+ "render-start",
1179
+ );
1180
+ if (renderOutcome.timedOut) {
1181
+ return handleTimeoutResponse(
1080
1182
  request,
1081
- url,
1082
1183
  env,
1083
- handledByBoundary: false,
1084
- });
1085
- console.error(`[RSC] Error:`, error);
1086
- throw error;
1184
+ url,
1185
+ "render-start",
1186
+ renderOutcome.durationMs,
1187
+ routeKey,
1188
+ );
1087
1189
  }
1190
+ return renderOutcome.result;
1088
1191
  }
1089
1192
  }