@rangojs/router 0.0.0-experimental.dfdb0387 → 0.0.0-experimental.e9c0b2f2

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 (1199) hide show
  1. package/AGENTS.md +8 -0
  2. package/README.md +184 -31
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +339 -106
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +3247 -1128
  799. package/dist/vite/index.js.bak +5448 -0
  800. package/dist/vite/index.js.map +1 -0
  801. package/dist/vite/index.named-routes.gen.ts +103 -0
  802. package/dist/vite/package-resolution.d.ts +43 -0
  803. package/dist/vite/package-resolution.d.ts.map +1 -0
  804. package/dist/vite/package-resolution.js +112 -0
  805. package/dist/vite/package-resolution.js.map +1 -0
  806. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  807. package/dist/vite/virtual-entries.d.ts +25 -0
  808. package/dist/vite/virtual-entries.d.ts.map +1 -0
  809. package/dist/vite/virtual-entries.js +110 -0
  810. package/dist/vite/virtual-entries.js.map +1 -0
  811. package/package.json +81 -12
  812. package/skills/api-client/SKILL.md +211 -0
  813. package/skills/breadcrumbs/SKILL.md +64 -2
  814. package/skills/bundle-analysis/SKILL.md +159 -0
  815. package/skills/cache-guide/SKILL.md +224 -32
  816. package/skills/caching/SKILL.md +279 -17
  817. package/skills/composability/SKILL.md +27 -2
  818. package/skills/css/SKILL.md +76 -0
  819. package/skills/debug-manifest/SKILL.md +4 -2
  820. package/skills/document-cache/SKILL.md +78 -55
  821. package/skills/handler-use/SKILL.md +364 -0
  822. package/skills/hooks/SKILL.md +250 -30
  823. package/skills/host-router/SKILL.md +125 -23
  824. package/skills/i18n/SKILL.md +276 -0
  825. package/skills/intercept/SKILL.md +50 -6
  826. package/skills/layout/SKILL.md +35 -9
  827. package/skills/links/SKILL.md +247 -17
  828. package/skills/loader/SKILL.md +225 -9
  829. package/skills/middleware/SKILL.md +50 -13
  830. package/skills/migrate-nextjs/SKILL.md +584 -0
  831. package/skills/migrate-react-router/SKILL.md +771 -0
  832. package/skills/mime-routes/SKILL.md +28 -1
  833. package/skills/observability/SKILL.md +194 -0
  834. package/skills/parallel/SKILL.md +77 -7
  835. package/skills/prerender/SKILL.md +45 -43
  836. package/skills/rango/SKILL.md +257 -22
  837. package/skills/react-compiler/SKILL.md +168 -0
  838. package/skills/response-routes/SKILL.md +123 -48
  839. package/skills/route/SKILL.md +70 -5
  840. package/skills/router-setup/SKILL.md +30 -6
  841. package/skills/scripts/SKILL.md +179 -0
  842. package/skills/server-actions/SKILL.md +775 -0
  843. package/skills/streams-and-websockets/SKILL.md +283 -0
  844. package/skills/tailwind/SKILL.md +27 -3
  845. package/skills/testing/SKILL.md +129 -0
  846. package/skills/testing/bindings.md +103 -0
  847. package/skills/testing/cache-prerender.md +127 -0
  848. package/skills/testing/client-components.md +124 -0
  849. package/skills/testing/e2e-parity.md +125 -0
  850. package/skills/testing/flight.md +91 -0
  851. package/skills/testing/handles.md +129 -0
  852. package/skills/testing/loader.md +128 -0
  853. package/skills/testing/middleware.md +99 -0
  854. package/skills/testing/render-handler.md +121 -0
  855. package/skills/testing/response-routes.md +95 -0
  856. package/skills/testing/reverse-and-types.md +84 -0
  857. package/skills/testing/server-actions.md +107 -0
  858. package/skills/testing/server-tree.md +128 -0
  859. package/skills/testing/setup.md +123 -0
  860. package/skills/typesafety/SKILL.md +322 -29
  861. package/skills/use-cache/SKILL.md +46 -14
  862. package/skills/vercel/SKILL.md +128 -0
  863. package/skills/view-transitions/SKILL.md +294 -0
  864. package/src/__augment-tests__/augment.ts +81 -0
  865. package/src/__augment-tests__/augmented.check.ts +116 -0
  866. package/src/__internal.ts +0 -65
  867. package/src/browser/action-coordinator.ts +53 -36
  868. package/src/browser/action-fence.ts +47 -0
  869. package/src/browser/app-shell.ts +39 -0
  870. package/src/browser/connection-warmup.ts +134 -0
  871. package/src/browser/cookie-name.ts +140 -0
  872. package/src/browser/event-controller.ts +192 -150
  873. package/src/browser/history-state.ts +21 -0
  874. package/src/browser/index.ts +3 -3
  875. package/src/browser/invalidate-client-cache.ts +52 -0
  876. package/src/browser/navigation-bridge.ts +50 -11
  877. package/src/browser/navigation-client.ts +113 -78
  878. package/src/browser/navigation-store-handle.ts +38 -0
  879. package/src/browser/navigation-store.ts +33 -59
  880. package/src/browser/navigation-transaction.ts +9 -59
  881. package/src/browser/partial-update.ts +109 -122
  882. package/src/browser/prefetch/cache.ts +193 -68
  883. package/src/browser/prefetch/fetch.ts +293 -59
  884. package/src/browser/prefetch/queue.ts +42 -8
  885. package/src/browser/rango-state.ts +158 -76
  886. package/src/browser/react/Link.tsx +48 -20
  887. package/src/browser/react/NavigationProvider.tsx +95 -117
  888. package/src/browser/react/ScrollRestoration.tsx +10 -6
  889. package/src/browser/react/filter-segment-order.ts +66 -7
  890. package/src/browser/react/index.ts +0 -48
  891. package/src/browser/react/location-state-shared.ts +178 -8
  892. package/src/browser/react/location-state.ts +39 -14
  893. package/src/browser/react/use-action.ts +6 -15
  894. package/src/browser/react/use-handle.ts +17 -14
  895. package/src/browser/react/use-href.tsx +8 -1
  896. package/src/browser/react/use-link-status.ts +33 -8
  897. package/src/browser/react/use-navigation.ts +32 -7
  898. package/src/browser/react/use-params.ts +20 -10
  899. package/src/browser/react/use-reverse.ts +106 -0
  900. package/src/browser/react/use-router.ts +25 -3
  901. package/src/browser/react/use-search-params.ts +0 -5
  902. package/src/browser/react/use-segments.ts +11 -21
  903. package/src/browser/response-adapter.ts +66 -4
  904. package/src/browser/rsc-router.tsx +91 -24
  905. package/src/browser/scroll-restoration.ts +30 -17
  906. package/src/browser/segment-reconciler.ts +10 -14
  907. package/src/browser/segment-structure-assert.ts +2 -2
  908. package/src/browser/server-action-bridge.ts +214 -55
  909. package/src/browser/types.ts +48 -8
  910. package/src/browser/validate-redirect-origin.ts +43 -16
  911. package/src/build/collect-fallback-refs.ts +107 -0
  912. package/src/build/generate-manifest.ts +60 -35
  913. package/src/build/generate-route-types.ts +3 -1
  914. package/src/build/index.ts +8 -2
  915. package/src/build/prefix-tree-utils.ts +123 -0
  916. package/src/build/route-trie.ts +165 -36
  917. package/src/build/route-types/ast-route-extraction.ts +15 -8
  918. package/src/build/route-types/codegen.ts +16 -5
  919. package/src/build/route-types/include-resolution.ts +117 -23
  920. package/src/build/route-types/param-extraction.ts +6 -3
  921. package/src/build/route-types/per-module-writer.ts +22 -6
  922. package/src/build/route-types/router-processing.ts +128 -51
  923. package/src/build/route-types/scan-filter.ts +1 -1
  924. package/src/build/route-types/source-scan.ts +216 -0
  925. package/src/build/runtime-discovery.ts +9 -20
  926. package/src/cache/cache-error.ts +104 -0
  927. package/src/cache/cache-key-utils.ts +29 -13
  928. package/src/cache/cache-policy.ts +108 -34
  929. package/src/cache/cache-runtime.ts +199 -37
  930. package/src/cache/cache-scope.ts +188 -82
  931. package/src/cache/cache-tag.ts +103 -0
  932. package/src/cache/cf/cf-base64.ts +33 -0
  933. package/src/cache/cf/cf-cache-constants.ts +127 -0
  934. package/src/cache/cf/cf-cache-store.ts +1989 -378
  935. package/src/cache/cf/cf-cache-types.ts +349 -0
  936. package/src/cache/cf/cf-kv-utils.ts +46 -0
  937. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  938. package/src/cache/cf/index.ts +6 -16
  939. package/src/cache/document-cache.ts +72 -20
  940. package/src/cache/handle-snapshot.ts +70 -0
  941. package/src/cache/index.ts +22 -20
  942. package/src/cache/memory-segment-store.ts +136 -37
  943. package/src/cache/profile-registry.ts +31 -31
  944. package/src/cache/read-through-swr.ts +41 -11
  945. package/src/cache/segment-codec.ts +9 -17
  946. package/src/cache/tag-invalidation.ts +230 -0
  947. package/src/cache/types.ts +37 -100
  948. package/src/cache/vercel/index.ts +11 -0
  949. package/src/cache/vercel/vercel-cache-store.ts +855 -0
  950. package/src/client.rsc.tsx +44 -21
  951. package/src/client.tsx +118 -235
  952. package/src/cloudflare/index.ts +11 -0
  953. package/src/cloudflare/tracing.ts +109 -0
  954. package/src/component-utils.ts +19 -0
  955. package/src/components/DefaultDocument.tsx +8 -2
  956. package/src/context-var.ts +18 -6
  957. package/src/decode-loader-results.ts +52 -0
  958. package/src/defer.ts +196 -0
  959. package/src/deps/ssr.ts +0 -1
  960. package/src/encode-kv.ts +49 -0
  961. package/src/errors.ts +30 -4
  962. package/src/escape-script.ts +52 -0
  963. package/src/handle.ts +31 -23
  964. package/src/handles/MetaTags.tsx +56 -19
  965. package/src/handles/Scripts.tsx +183 -0
  966. package/src/handles/breadcrumbs.ts +37 -8
  967. package/src/handles/is-thenable.ts +19 -0
  968. package/src/handles/meta.ts +51 -40
  969. package/src/handles/script.ts +244 -0
  970. package/src/host/cookie-handler.ts +9 -60
  971. package/src/host/errors.ts +0 -24
  972. package/src/host/index.ts +8 -2
  973. package/src/host/pattern-matcher.ts +23 -52
  974. package/src/host/router.ts +107 -99
  975. package/src/host/testing.ts +40 -27
  976. package/src/host/types.ts +37 -4
  977. package/src/host/utils.ts +1 -1
  978. package/src/href-client.ts +137 -22
  979. package/src/index.rsc.ts +90 -11
  980. package/src/index.ts +125 -19
  981. package/src/internal-debug.ts +2 -4
  982. package/src/loader-store.ts +500 -0
  983. package/src/loader.rsc.ts +20 -13
  984. package/src/loader.ts +12 -11
  985. package/src/missing-id-error.ts +68 -0
  986. package/src/network-error-thrower.tsx +1 -6
  987. package/src/outlet-context.ts +1 -1
  988. package/src/outlet-provider.tsx +1 -5
  989. package/src/prerender/param-hash.ts +16 -16
  990. package/src/prerender/store.ts +32 -37
  991. package/src/prerender.ts +61 -6
  992. package/src/redirect-origin.ts +100 -0
  993. package/src/regex-escape.ts +8 -0
  994. package/src/response-utils.ts +62 -0
  995. package/src/reverse.ts +65 -36
  996. package/src/root-error-boundary.tsx +1 -19
  997. package/src/route-content-wrapper.tsx +7 -72
  998. package/src/route-definition/dsl-helpers.ts +418 -273
  999. package/src/route-definition/helper-factories.ts +29 -139
  1000. package/src/route-definition/helpers-types.ts +103 -31
  1001. package/src/route-definition/redirect.ts +44 -11
  1002. package/src/route-definition/resolve-handler-use.ts +12 -0
  1003. package/src/route-definition/use-item-types.ts +32 -0
  1004. package/src/route-map-builder.ts +0 -16
  1005. package/src/route-types.ts +26 -41
  1006. package/src/router/basename.ts +14 -0
  1007. package/src/router/content-negotiation.ts +73 -25
  1008. package/src/router/error-handling.ts +45 -18
  1009. package/src/router/find-match.ts +44 -23
  1010. package/src/router/handler-context.ts +27 -39
  1011. package/src/router/instrument.ts +350 -0
  1012. package/src/router/intercept-resolution.ts +39 -20
  1013. package/src/router/lazy-includes.ts +15 -52
  1014. package/src/router/loader-resolution.ts +155 -72
  1015. package/src/router/logging.ts +0 -6
  1016. package/src/router/manifest.ts +40 -42
  1017. package/src/router/match-api.ts +4 -23
  1018. package/src/router/match-context.ts +0 -22
  1019. package/src/router/match-handlers.ts +58 -58
  1020. package/src/router/match-middleware/background-revalidation.ts +6 -7
  1021. package/src/router/match-middleware/cache-lookup.ts +161 -286
  1022. package/src/router/match-middleware/cache-store.ts +31 -34
  1023. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  1024. package/src/router/match-middleware/segment-resolution.ts +0 -22
  1025. package/src/router/match-pipelines.ts +1 -42
  1026. package/src/router/match-result.ts +44 -74
  1027. package/src/router/metrics.ts +0 -34
  1028. package/src/router/middleware-types.ts +7 -134
  1029. package/src/router/middleware.ts +266 -166
  1030. package/src/router/navigation-snapshot.ts +0 -51
  1031. package/src/router/params-util.ts +23 -0
  1032. package/src/router/pattern-matching.ts +132 -90
  1033. package/src/router/prefetch-cache-ttl.ts +51 -0
  1034. package/src/router/prerender-match.ts +104 -65
  1035. package/src/router/preview-match.ts +3 -1
  1036. package/src/router/request-classification.ts +28 -62
  1037. package/src/router/revalidation.ts +123 -73
  1038. package/src/router/route-snapshot.ts +0 -1
  1039. package/src/router/router-context.ts +3 -28
  1040. package/src/router/router-interfaces.ts +83 -35
  1041. package/src/router/router-options.ts +136 -5
  1042. package/src/router/router-registry.ts +2 -5
  1043. package/src/router/segment-resolution/fresh.ts +93 -84
  1044. package/src/router/segment-resolution/helpers.ts +86 -6
  1045. package/src/router/segment-resolution/loader-cache.ts +62 -37
  1046. package/src/router/segment-resolution/revalidation.ts +269 -320
  1047. package/src/router/segment-resolution/static-store.ts +19 -5
  1048. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1049. package/src/router/segment-resolution/view-transition-default.ts +36 -0
  1050. package/src/router/segment-resolution.ts +5 -1
  1051. package/src/router/segment-wrappers.ts +6 -5
  1052. package/src/router/state-cookie-name.ts +33 -0
  1053. package/src/router/substitute-pattern-params.ts +56 -0
  1054. package/src/router/telemetry-otel.ts +161 -199
  1055. package/src/router/telemetry.ts +96 -19
  1056. package/src/router/timeout.ts +0 -20
  1057. package/src/router/tracing.ts +206 -0
  1058. package/src/router/trie-matching.ts +163 -59
  1059. package/src/router/types.ts +9 -63
  1060. package/src/router/url-params.ts +44 -0
  1061. package/src/router.ts +110 -55
  1062. package/src/rsc/handler-context.ts +3 -2
  1063. package/src/rsc/handler.ts +266 -219
  1064. package/src/rsc/helpers.ts +168 -46
  1065. package/src/rsc/index.ts +2 -5
  1066. package/src/rsc/json-route-result.ts +38 -0
  1067. package/src/rsc/loader-fetch.ts +114 -38
  1068. package/src/rsc/manifest-init.ts +28 -41
  1069. package/src/rsc/origin-guard.ts +39 -25
  1070. package/src/rsc/progressive-enhancement.ts +63 -9
  1071. package/src/rsc/redirect-guard.ts +99 -0
  1072. package/src/rsc/response-cache-serve.ts +238 -0
  1073. package/src/rsc/response-error.ts +79 -12
  1074. package/src/rsc/response-route-handler.ts +99 -189
  1075. package/src/rsc/rsc-rendering.ts +99 -75
  1076. package/src/rsc/runtime-warnings.ts +23 -10
  1077. package/src/rsc/server-action.ts +258 -115
  1078. package/src/rsc/ssr-setup.ts +16 -0
  1079. package/src/rsc/types.ts +23 -5
  1080. package/src/runtime-env.ts +18 -0
  1081. package/src/search-params.ts +35 -30
  1082. package/src/segment-content-promise.ts +67 -0
  1083. package/src/segment-loader-promise.ts +149 -0
  1084. package/src/segment-system.tsx +218 -202
  1085. package/src/serialize.ts +243 -0
  1086. package/src/server/context.ts +175 -53
  1087. package/src/server/cookie-parse.ts +32 -0
  1088. package/src/server/cookie-store.ts +80 -5
  1089. package/src/server/handle-store.ts +21 -38
  1090. package/src/server/loader-registry.ts +21 -42
  1091. package/src/server/request-context.ts +235 -175
  1092. package/src/ssr/index.tsx +21 -16
  1093. package/src/static-handler.ts +10 -13
  1094. package/src/testing/cache-status.ts +162 -0
  1095. package/src/testing/collect-handle.ts +40 -0
  1096. package/src/testing/dispatch.ts +701 -0
  1097. package/src/testing/dom.entry.ts +22 -0
  1098. package/src/testing/e2e/fixture.ts +188 -0
  1099. package/src/testing/e2e/index.ts +128 -0
  1100. package/src/testing/e2e/matchers.ts +35 -0
  1101. package/src/testing/e2e/page-helpers.ts +272 -0
  1102. package/src/testing/e2e/parity.ts +387 -0
  1103. package/src/testing/e2e/server.ts +195 -0
  1104. package/src/testing/flight-matchers.ts +97 -0
  1105. package/src/testing/flight-normalize.ts +11 -0
  1106. package/src/testing/flight-runtime.d.ts +57 -0
  1107. package/src/testing/flight-tree.ts +682 -0
  1108. package/src/testing/flight.entry.ts +52 -0
  1109. package/src/testing/flight.ts +257 -0
  1110. package/src/testing/generated-routes.ts +183 -0
  1111. package/src/testing/index.ts +99 -0
  1112. package/src/testing/internal/context.ts +371 -0
  1113. package/src/testing/internal/flight-client-globals.ts +30 -0
  1114. package/src/testing/internal/seed-vars.ts +54 -0
  1115. package/src/testing/render-handler.ts +343 -0
  1116. package/src/testing/render-route.tsx +581 -0
  1117. package/src/testing/run-loader.ts +385 -0
  1118. package/src/testing/run-middleware.ts +205 -0
  1119. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1120. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1121. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1122. package/src/testing/vitest-stubs/version.ts +5 -0
  1123. package/src/testing/vitest.ts +305 -0
  1124. package/src/theme/ThemeProvider.tsx +20 -58
  1125. package/src/theme/ThemeScript.tsx +7 -9
  1126. package/src/theme/constants.ts +52 -13
  1127. package/src/theme/index.ts +0 -7
  1128. package/src/theme/theme-context.ts +1 -5
  1129. package/src/theme/theme-script.ts +22 -21
  1130. package/src/theme/use-theme.ts +0 -3
  1131. package/src/types/boundaries.ts +0 -35
  1132. package/src/types/cache-types.ts +13 -4
  1133. package/src/types/error-types.ts +30 -90
  1134. package/src/types/global-namespace.ts +54 -41
  1135. package/src/types/handler-context.ts +109 -61
  1136. package/src/types/index.ts +1 -10
  1137. package/src/types/loader-types.ts +11 -9
  1138. package/src/types/request-scope.ts +112 -0
  1139. package/src/types/route-config.ts +6 -50
  1140. package/src/types/route-entry.ts +11 -6
  1141. package/src/types/segments.ts +35 -15
  1142. package/src/urls/include-helper.ts +33 -70
  1143. package/src/urls/index.ts +1 -11
  1144. package/src/urls/path-helper-types.ts +49 -9
  1145. package/src/urls/path-helper.ts +17 -106
  1146. package/src/urls/pattern-types.ts +36 -19
  1147. package/src/urls/response-types.ts +22 -29
  1148. package/src/urls/type-extraction.ts +58 -139
  1149. package/src/urls/urls-function.ts +1 -18
  1150. package/src/use-loader.tsx +292 -107
  1151. package/src/vercel/index.ts +11 -0
  1152. package/src/vercel/tracing.ts +88 -0
  1153. package/src/vite/debug.ts +185 -0
  1154. package/src/vite/discovery/bundle-postprocess.ts +8 -7
  1155. package/src/vite/discovery/discover-routers.ts +126 -85
  1156. package/src/vite/discovery/discovery-errors.ts +194 -0
  1157. package/src/vite/discovery/gate-state.ts +171 -0
  1158. package/src/vite/discovery/prerender-collection.ts +96 -68
  1159. package/src/vite/discovery/route-types-writer.ts +40 -84
  1160. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1161. package/src/vite/discovery/state.ts +45 -1
  1162. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1163. package/src/vite/index.ts +4 -0
  1164. package/src/vite/plugin-types.ts +210 -10
  1165. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1166. package/src/vite/plugins/client-ref-dedup.ts +16 -11
  1167. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1168. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1169. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1170. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1171. package/src/vite/plugins/expose-action-id.ts +48 -95
  1172. package/src/vite/plugins/expose-id-utils.ts +88 -55
  1173. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1174. package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
  1175. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1176. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1177. package/src/vite/plugins/expose-internal-ids.ts +505 -486
  1178. package/src/vite/plugins/performance-tracks.ts +26 -25
  1179. package/src/vite/plugins/refresh-cmd.ts +1 -1
  1180. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1181. package/src/vite/plugins/vercel-output.ts +295 -0
  1182. package/src/vite/plugins/version-injector.ts +21 -25
  1183. package/src/vite/plugins/version-plugin.ts +37 -40
  1184. package/src/vite/plugins/virtual-entries.ts +71 -18
  1185. package/src/vite/rango.ts +225 -137
  1186. package/src/vite/router-discovery.ts +769 -106
  1187. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1188. package/src/vite/utils/banner.ts +1 -1
  1189. package/src/vite/utils/bundle-analysis.ts +10 -15
  1190. package/src/vite/utils/client-chunks.ts +184 -0
  1191. package/src/vite/utils/directive-prologue.ts +40 -0
  1192. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1193. package/src/vite/utils/manifest-utils.ts +4 -59
  1194. package/src/vite/utils/package-resolution.ts +20 -52
  1195. package/src/vite/utils/prerender-utils.ts +67 -38
  1196. package/src/vite/utils/shared-utils.ts +95 -43
  1197. package/src/browser/action-response-classifier.ts +0 -99
  1198. package/src/browser/shallow.ts +0 -40
  1199. package/src/router/middleware-cookies.ts +0 -55
@@ -8,8 +8,92 @@ 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";
14
+ import {
15
+ EXTERNAL_REDIRECT_MARKER,
16
+ isExternalRedirect,
17
+ markExternalRedirect,
18
+ } from "../redirect-origin.js";
12
19
  import type { MiddlewareEntry, MiddlewareFn } from "../router/middleware.js";
20
+ import { formatCacheSignalHeader } from "../router/telemetry.js";
21
+ import type { RscPayload } from "./types.js";
22
+
23
+ /**
24
+ * DEVELOPMENT/TEST ONLY. When the debug cache signal gate is on,
25
+ * match/matchPartial populate ctx._cacheSignal. Emit it as the X-Rango-Cache
26
+ * header. When the gate is off, ctx._cacheSignal is undefined and NOTHING is
27
+ * attached — output is byte-identical to the default. Header mutation failures
28
+ * are swallowed so immutable Response headers (e.g. protocol-switch) are safe.
29
+ */
30
+ function applyCacheSignalHeader(target: Headers, ctx: RequestContext): void {
31
+ const signal = ctx._cacheSignal;
32
+ if (!signal || signal.length === 0) return;
33
+ try {
34
+ target.set("X-Rango-Cache", formatCacheSignalHeader(signal));
35
+ } catch {
36
+ // Headers immutable — skip.
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Copy stub headers from the request context onto a target Headers instance:
42
+ * append Set-Cookie entries, set everything else only if absent. Header
43
+ * mutation failures are swallowed so the same logic works against Response
44
+ * headers that may be immutable (e.g. Cloudflare protocol-switch responses).
45
+ */
46
+ function applyStubHeaders(target: Headers, stub: Headers): void {
47
+ stub.forEach((value, name) => {
48
+ try {
49
+ // The reserved external-redirect marker is internal and never a trust
50
+ // signal; never copy a stub value (e.g. a stray ctx.header() call) onto a
51
+ // browser-facing response. The opt-in is the out-of-band brand.
52
+ if (name.toLowerCase() === EXTERNAL_REDIRECT_MARKER) return;
53
+ if (name.toLowerCase() === "set-cookie") {
54
+ target.append(name, value);
55
+ } else if (!target.has(name)) {
56
+ target.set(name, value);
57
+ }
58
+ } catch {
59
+ // Headers immutable — skip.
60
+ }
61
+ });
62
+ }
63
+
64
+ /**
65
+ * Drain ctx._onResponseCallbacks onto a response. Swapping the array before
66
+ * iteration prevents re-entrant registrations from double-firing and matches
67
+ * the contract that each callback runs at most once per request.
68
+ *
69
+ * Exported so the testing primitives' buildRunResponse can reuse the exact
70
+ * production drain (swap-before-iterate + external-redirect brand preservation)
71
+ * rather than maintain a hand-synced copy. This module is plugin-rsc-free on its
72
+ * eager graph (dispatch.ts already statically imports from here in the same
73
+ * testing barrel), so importing it adds nothing to the unit runner's graph.
74
+ */
75
+ export function drainOnResponseCallbacks(
76
+ ctx: RequestContext,
77
+ response: Response,
78
+ ): Response {
79
+ const callbacks = ctx._onResponseCallbacks;
80
+ if (callbacks.length === 0) return response;
81
+ ctx._onResponseCallbacks = [];
82
+ // An onResponse callback may return a NEW Response (e.g. to add a header),
83
+ // which drops the out-of-band external-redirect brand (brand is keyed on
84
+ // Response object identity). Preserve a redirect(url, { external: true })
85
+ // opt-in across that rebuild so a callback can't silently neutralize the
86
+ // off-host redirect at the guard chokepoint.
87
+ const wasExternal = isExternalRedirect(response);
88
+ let result = response;
89
+ for (const callback of callbacks) {
90
+ result = callback(result) ?? result;
91
+ }
92
+ if (wasExternal && !isExternalRedirect(result)) {
93
+ markExternalRedirect(result);
94
+ }
95
+ return result;
96
+ }
13
97
 
14
98
  /**
15
99
  * Check if a request body has content to decode
@@ -39,40 +123,24 @@ export function createResponseWithMergedHeaders(
39
123
  return new Response(body, init);
40
124
  }
41
125
 
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.
126
+ // Delete Set-Cookie from the stub after consuming so downstream merge
127
+ // points (e.g. executeMiddleware) don't duplicate them.
45
128
  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
- });
129
+ applyStubHeaders(mergedHeaders, ctx.res.headers);
54
130
  ctx.res.headers.delete("set-cookie");
131
+ applyCacheSignalHeader(mergedHeaders, ctx);
55
132
 
56
- // Use ctx.res.status if it was set (e.g., 404 for notFound, 500 for error)
57
- // Otherwise use the status from init
133
+ // ctx.res.status overrides init.status when explicitly set (e.g. 404 for
134
+ // notFound, 500 for error). Default ctx.res.status is 200.
58
135
  const status = ctx.res.status !== 200 ? ctx.res.status : init.status;
59
136
 
60
- let response = new Response(body, {
137
+ const response = new Response(body, {
61
138
  ...init,
62
139
  status,
63
140
  headers: mergedHeaders,
64
141
  });
65
142
 
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;
143
+ return drainOnResponseCallbacks(ctx, response);
76
144
  }
77
145
 
78
146
  /**
@@ -91,8 +159,20 @@ export function createSimpleRedirectResponse(redirectUrl: string): Response {
91
159
 
92
160
  /**
93
161
  * Carry over headers from a source redirect Response to a wrapper Response.
94
- * Skips Location and X-RSC-Redirect (intentionally replaced by the wrapper)
95
- * and appends Set-Cookie to avoid clobbering multiple cookie headers.
162
+ * Skips Location and X-RSC-Redirect (intentionally replaced by the wrapper) and
163
+ * appends Set-Cookie to avoid clobbering multiple cookie headers.
164
+ *
165
+ * This is a GENERIC copier used by every redirect-rebuild path (PE
166
+ * extractRedirectResponse, the SPA intercept below, the guard's neutralize
167
+ * rebuild), so it has two redirect-specific jobs:
168
+ *
169
+ * 1. NEVER copy the reserved external-redirect header: it is no longer a trust
170
+ * signal (the opt-in is the out-of-band brand), and a forged value from a
171
+ * proxied upstream must not ride a rebuilt response to the browser.
172
+ * 2. Transfer the out-of-band external brand: a rebuilt document-native redirect
173
+ * has to carry the opt-in to the guard chokepoint, which reads and clears it.
174
+ * Without this transfer, redirect(url, { external: true }) would be silently
175
+ * neutralized on any rebuild path (fail-closed, but a feature regression).
96
176
  */
97
177
  export function carryOverRedirectHeaders(
98
178
  source: Response,
@@ -101,12 +181,16 @@ export function carryOverRedirectHeaders(
101
181
  source.headers.forEach((value, name) => {
102
182
  const lower = name.toLowerCase();
103
183
  if (lower === "location" || lower === "x-rsc-redirect") return;
184
+ if (lower === EXTERNAL_REDIRECT_MARKER) return;
104
185
  if (lower === "set-cookie") {
105
186
  target.headers.append(name, value);
106
187
  } else if (!target.headers.has(name)) {
107
188
  target.headers.set(name, value);
108
189
  }
109
190
  });
191
+ if (isExternalRedirect(source)) {
192
+ markExternalRedirect(target);
193
+ }
110
194
  }
111
195
 
112
196
  /**
@@ -120,28 +204,62 @@ export function interceptRedirectForPartial(
120
204
  createRedirectFlightResponse: (
121
205
  redirectUrl: string,
122
206
  locationState?: Record<string, unknown>,
207
+ external?: boolean,
123
208
  ) => Response,
124
209
  ): Response | null {
125
- const redirectUrl = response.headers.get("Location");
126
- if (!(response.status >= 300 && response.status < 400 && redirectUrl)) {
210
+ if (!isRedirectResponse(response)) {
127
211
  return null;
128
212
  }
213
+ const redirectUrl = response.headers.get("Location")!;
214
+ // redirect(url, { external: true }) marks an explicit off-host redirect via
215
+ // the out-of-band brand (not a wire header). On the SPA/action channel the
216
+ // intent must travel as a Flight payload (metadata.redirect.external) so the
217
+ // client does a scheme-validated hard navigation (location.assign) rather than
218
+ // a partial fetch. The client re-validates the scheme; see partial-update.ts.
219
+ const external = isExternalRedirect(response);
129
220
  const locationState = getLocationState();
130
221
  let intercepted: Response;
131
222
  if (locationState) {
132
223
  intercepted = createRedirectFlightResponse(
133
224
  redirectUrl,
134
225
  resolveLocationStateEntries(locationState),
226
+ external,
135
227
  );
228
+ } else if (external) {
229
+ intercepted = createRedirectFlightResponse(redirectUrl, undefined, true);
136
230
  } else {
137
231
  intercepted = createSimpleRedirectResponse(redirectUrl);
138
232
  }
139
233
 
140
234
  carryOverRedirectHeaders(response, intercepted);
235
+ // Defense-in-depth at the SPA browser-facing exit: carryOverRedirectHeaders
236
+ // already refuses to copy the reserved marker, but strip any value that might
237
+ // exist on `intercepted` so a forged header can never ride the 200/204 to the
238
+ // browser. The external intent travels in metadata.redirect.external (Flight),
239
+ // where the client re-validates the scheme.
240
+ try {
241
+ intercepted.headers.delete(EXTERNAL_REDIRECT_MARKER);
242
+ } catch {
243
+ // Immutable headers: the marker was never copied here, so this is inert.
244
+ }
141
245
 
142
246
  return intercepted;
143
247
  }
144
248
 
249
+ /**
250
+ * Attach location state set during a request to a payload's metadata.
251
+ * No-op if no location state was set. Callers must ensure payload.metadata
252
+ * is populated (the non-null assertion holds for the partial/action payloads
253
+ * that reach this helper).
254
+ */
255
+ export function attachLocationStateIfPresent(payload: RscPayload): void {
256
+ const locationState = getLocationState();
257
+ if (locationState) {
258
+ payload.metadata!.locationState =
259
+ resolveLocationStateEntries(locationState);
260
+ }
261
+ }
262
+
145
263
  /**
146
264
  * Only cache successful responses. Non-200 statuses (errors, redirects) are
147
265
  * not cached -- notFound() produces 500 in response routes, and explicit
@@ -168,31 +286,35 @@ export function buildRouteMiddlewareEntries<TEnv>(
168
286
  regex: null,
169
287
  paramNames: [],
170
288
  handler: mw.handler,
171
- mountPrefix: null,
172
289
  } as MiddlewareEntry<TEnv>,
173
290
  params: mw.params,
174
291
  }));
175
292
  }
176
293
 
177
294
  /**
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.
295
+ * Merge stub headers from the request context onto an existing Response in
296
+ * place, then drain onResponse callbacks. Used when a Response cannot flow
297
+ * through `new Response()` status 101 is outside the constructor's
298
+ * 200-599 range, and the Cloudflare-specific `webSocket` property would be
299
+ * lost on reconstruction.
183
300
  */
184
- export function finalizeResponse(response: Response): Response {
301
+ export function mergeStubHeadersAndFinalize(response: Response): Response {
185
302
  const ctx = _getRequestContext();
186
- if (!ctx || ctx._onResponseCallbacks.length === 0) {
187
- return response;
188
- }
303
+ if (!ctx) return response;
189
304
 
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;
305
+ applyStubHeaders(response.headers, ctx.res.headers);
306
+ ctx.res.headers.delete("set-cookie");
307
+
308
+ return drainOnResponseCallbacks(ctx, response);
309
+ }
310
+
311
+ /**
312
+ * Run onResponse callbacks on an existing Response. Used by code paths that
313
+ * bypass createResponseWithMergedHeaders (e.g. middleware short-circuits)
314
+ * but still need ctx.onResponse() callbacks to fire.
315
+ */
316
+ export function finalizeResponse(response: Response): Response {
317
+ const ctx = _getRequestContext();
318
+ if (!ctx) return response;
319
+ return drainOnResponseCallbacks(ctx, response);
198
320
  }
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.
@@ -30,7 +30,4 @@ export type {
30
30
  } from "./types.js";
31
31
 
32
32
  // Re-export request context utilities for server-side access to env/request/params
33
- export {
34
- getRequestContext,
35
- requireRequestContext,
36
- } from "../server/request-context.js";
33
+ export { getRequestContext } from "../server/request-context.js";
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shared serialization for `json()` response-route results.
3
+ *
4
+ * Kept in its own lightweight module (depends only on `errors.js`) so the
5
+ * `dispatch()` testing primitive can import it WITHOUT dragging in
6
+ * `response-route-handler.ts`'s heavy runtime graph, which transitively reaches
7
+ * a Vite virtual module and breaks a plain (non-Vite) vitest import.
8
+ */
9
+
10
+ import { RouterError } from "../errors.js";
11
+
12
+ /**
13
+ * Serialize a `json()` response-route result, rejecting a nested unresolved
14
+ * Promise (the forgotten-await footgun: `() => ({ data: fetchSomething() })`).
15
+ * `JSON.stringify` would silently emit `{}` for a Promise, shipping empty data;
16
+ * the RSC pipeline awaits nested promises but this path does not. Throwing
17
+ * `RESPONSE_NOT_SERIALIZABLE` makes the failure loud.
18
+ *
19
+ * Shared by the production response-route handler and the `dispatch()` testing
20
+ * primitive so a `dispatch` json test of a forgotten await fails exactly where
21
+ * production 500s, instead of going green.
22
+ */
23
+ export function stringifyJsonRouteResult(result: unknown): string {
24
+ return JSON.stringify(result, (_key, value) => {
25
+ if (
26
+ value != null &&
27
+ typeof (value as { then?: unknown }).then === "function"
28
+ ) {
29
+ throw new RouterError(
30
+ "RESPONSE_NOT_SERIALIZABLE",
31
+ "A json() response route returned a Promise (likely a forgotten " +
32
+ "await). Await async values before returning so they serialize, " +
33
+ "instead of emitting an empty {}.",
34
+ );
35
+ }
36
+ return value;
37
+ });
38
+ }
@@ -12,8 +12,10 @@
12
12
  */
13
13
 
14
14
  import { getLoaderLazy } from "../server/loader-registry.js";
15
+ import { DataNotFoundError } from "../errors.js";
15
16
  import { executeLoaderMiddleware } from "../router/middleware.js";
16
- import { requireRequestContext } from "../server/request-context.js";
17
+ import { getRequestContext } from "../server/request-context.js";
18
+ import { observePhase, PHASES } from "../router/instrument.js";
17
19
  import {
18
20
  createReverseFunction,
19
21
  stripInternalParams,
@@ -30,6 +32,62 @@ import {
30
32
  } from "./helpers.js";
31
33
  import type { HandlerContext } from "./handler-context.js";
32
34
 
35
+ /**
36
+ * Build the 500 RSC error Response for a failed fetchable loader. Shared by the
37
+ * module-load-error catch (the import itself threw) and the loader-execution
38
+ * error catch — both call onError("loader"), serialize the same dev-gated error
39
+ * payload via renderToReadableStream (reporting render failures through
40
+ * onError("rendering")), and return a 500 text/x-component Response. The only
41
+ * per-site difference is the console.error label, passed in.
42
+ */
43
+ function buildLoaderErrorResponse<TEnv>(
44
+ ctx: HandlerContext<TEnv>,
45
+ error: unknown,
46
+ meta: { request: Request; url: URL; env: TEnv; loaderId: string },
47
+ logLabel: string,
48
+ ): Response {
49
+ const { request, url, env, loaderId } = meta;
50
+ const isDev = process.env.NODE_ENV !== "production";
51
+
52
+ console.error(logLabel, error);
53
+
54
+ ctx.callOnError(error, "loader", {
55
+ request,
56
+ url,
57
+ env,
58
+ loaderName: loaderId,
59
+ handledByBoundary: false,
60
+ });
61
+
62
+ const err = error instanceof Error ? error : new Error(String(error));
63
+ const errorPayload = {
64
+ loaderResult: null,
65
+ loaderError: {
66
+ message: isDev ? err.message : "An error occurred",
67
+ // Gate err.name to dev. In production it leaks the consumer's error class
68
+ // name (e.g. AuthError, PrismaClientKnownRequestError) to the client; the
69
+ // client only ever reads `message`, so the field is dead data outside dev.
70
+ // Matches sanitizeError's dev-only name contract.
71
+ name: isDev ? err.name : "Error",
72
+ },
73
+ };
74
+ const rscStream = ctx.renderToReadableStream(errorPayload, {
75
+ onError: (renderError: unknown) => {
76
+ ctx.callOnError(renderError, "rendering", {
77
+ request,
78
+ url,
79
+ env,
80
+ loaderName: loaderId,
81
+ });
82
+ },
83
+ });
84
+
85
+ return createResponseWithMergedHeaders(rscStream, {
86
+ status: 500,
87
+ headers: { "content-type": "text/x-component;charset=utf-8" },
88
+ });
89
+ }
90
+
33
91
  export async function handleLoaderFetch<TEnv>(
34
92
  ctx: HandlerContext<TEnv>,
35
93
  request: Request,
@@ -46,8 +104,22 @@ export async function handleLoaderFetch<TEnv>(
46
104
  });
47
105
  }
48
106
 
49
- // Look up loader lazily
50
- const registeredLoader = await getLoaderLazy(loaderId);
107
+ // Look up loader lazily. getLoaderLazy returns undefined only when the id was
108
+ // never registered (genuine 404). A thrown error means the loader module
109
+ // EXISTS but its import failed (broken transitive import, syntax error, throw
110
+ // in top-level code) — a real server breakage that must surface as a 500 and
111
+ // fire onError, not be collapsed into a misleading "not found".
112
+ let registeredLoader;
113
+ try {
114
+ registeredLoader = await getLoaderLazy(loaderId);
115
+ } catch (error) {
116
+ return buildLoaderErrorResponse(
117
+ ctx,
118
+ error,
119
+ { request, url, env, loaderId },
120
+ `[RSC] Loader module load failed for "${loaderId}":`,
121
+ );
122
+ }
51
123
  if (!registeredLoader) {
52
124
  return createResponseWithMergedHeaders(
53
125
  `Loader "${loaderId}" not found in registry`,
@@ -124,7 +196,7 @@ export async function handleLoaderFetch<TEnv>(
124
196
  loaderParams,
125
197
  variables,
126
198
  async () => {
127
- const reqCtx = requireRequestContext();
199
+ const reqCtx = getRequestContext();
128
200
  // Merge route params (from previewMatch) with explicit loader params.
129
201
  // Explicit params take precedence over route-matched params.
130
202
  const resolvedRouteParams = routeParams ?? {};
@@ -162,7 +234,12 @@ export async function handleLoaderFetch<TEnv>(
162
234
  ...(loaderFormData ? { formData: loaderFormData } : {}),
163
235
  };
164
236
 
165
- const result = await fn(loaderCtx);
237
+ // Meter the fetchable-loader execution via observePhase, the sole
238
+ // funnel for this path (fn is called directly, not via ctx.use).
239
+ // depth:1 — a fetchable request has no render-phase parent.
240
+ const result = await observePhase(PHASES.loader(loaderId, 1), () =>
241
+ fn(loaderCtx),
242
+ );
166
243
 
167
244
  interface LoaderPayload {
168
245
  loaderResult: unknown;
@@ -190,40 +267,39 @@ export async function handleLoaderFetch<TEnv>(
190
267
  ),
191
268
  );
192
269
  } catch (error) {
193
- const err = error instanceof Error ? error : new Error(String(error));
194
- const isDev = process.env.NODE_ENV !== "production";
195
-
196
- console.error("[RSC] Loader error:", error);
197
-
198
- ctx.callOnError(error, "loader", {
199
- request,
200
- url,
201
- env,
202
- loaderName: loaderId,
203
- handledByBoundary: false,
204
- });
270
+ // A thrown Response is control flow, not an error: `throw redirect('/x')`
271
+ // throws a real Response (a 3xx). The with-middleware path already converts
272
+ // this to a returned Response (middleware.ts: `if (error instanceof Response)
273
+ // result = error`), but a fetchable loader with NO middleware reaches this
274
+ // catch directly, where the generic Error coercion below would turn it into a
275
+ // 500. Honor it the same way: re-wrap through createResponseWithMergedHeaders
276
+ // so the request context's stub cookies/headers merge, exactly like the
277
+ // returned-Response path. Mirrors rsc/handler.ts's `error instanceof Response`
278
+ // special-case.
279
+ if (error instanceof Response) {
280
+ return finalizeResponse(
281
+ createResponseWithMergedHeaders(error.body, {
282
+ status: error.status,
283
+ headers: error.headers,
284
+ }),
285
+ );
286
+ }
205
287
 
206
- const errorPayload = {
207
- loaderResult: null,
208
- loaderError: {
209
- message: isDev ? err.message : "An error occurred",
210
- name: err.name,
211
- },
212
- };
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
- });
288
+ // notFound() throws a DataNotFoundError (an Error subclass, NOT a Response),
289
+ // so it does not match the branch above. Map it to a 404 before the generic
290
+ // 500 coercion so a no-middleware fetchable loader's notFound() is honored
291
+ // (the with-middleware path resolves it through the notFoundBoundary).
292
+ if (error instanceof DataNotFoundError) {
293
+ return finalizeResponse(
294
+ createResponseWithMergedHeaders(null, { status: 404 }),
295
+ );
296
+ }
223
297
 
224
- return createResponseWithMergedHeaders(rscStream, {
225
- status: 500,
226
- headers: { "content-type": "text/x-component;charset=utf-8" },
227
- });
298
+ return buildLoaderErrorResponse(
299
+ ctx,
300
+ error,
301
+ { request, url, env, loaderId },
302
+ "[RSC] Loader error:",
303
+ );
228
304
  }
229
305
  }
@@ -13,6 +13,7 @@ import {
13
13
  setRouteTrie,
14
14
  setRouterManifest,
15
15
  setRouterTrie,
16
+ setRouterPrecomputedEntries,
16
17
  } from "../route-map-builder.js";
17
18
 
18
19
  /**
@@ -36,47 +37,13 @@ export async function buildRouterTrieFromUrlpatterns(
36
37
  undefined,
37
38
  router.basename ? { urlPrefix: router.basename } : undefined,
38
39
  );
39
- if (
40
- generated._routeAncestry &&
41
- Object.keys(generated._routeAncestry).length > 0
42
- ) {
43
- const { buildRouteTrie } = await import("../build/route-trie.js");
44
- // Map each route to its include() staticPrefix so the trie
45
- // returns the correct sp for lazy entry lookup in findMatch.
46
- const routeToStaticPrefix: Record<string, string> = {};
47
- for (const name of Object.keys(generated.routeManifest)) {
48
- routeToStaticPrefix[name] = "";
49
- }
50
- // Override with prefix from include() entries so the trie
51
- // returns the correct sp for lazy entry lookup in findMatch.
52
- // Walk recursively to include routes in nested includes.
53
- if (generated.prefixTree) {
54
- const visitPrefixNode = (node: any): void => {
55
- const sp = node.staticPrefix || "";
56
- for (const route of node.routes || []) {
57
- routeToStaticPrefix[route] = sp;
58
- }
59
- for (const child of Object.values(node.children || {})) {
60
- visitPrefixNode(child);
61
- }
62
- };
63
- for (const node of Object.values(generated.prefixTree)) {
64
- visitPrefixNode(node);
65
- }
66
- }
67
- const trie = buildRouteTrie(
68
- generated.routeManifest,
69
- generated._routeAncestry,
70
- routeToStaticPrefix,
71
- generated.routeTrailingSlash,
72
- generated.prerenderRoutes
73
- ? new Set(generated.prerenderRoutes)
74
- : undefined,
75
- generated.passthroughRoutes
76
- ? new Set(generated.passthroughRoutes)
77
- : undefined,
78
- generated.responseTypeRoutes,
79
- );
40
+ // Build the trie through the SAME shared helper the production discovery uses
41
+ // (discover-routers.ts), so the dev runtime-rebuilt trie and the prod
42
+ // serialized trie cannot drift. buildPerRouterTrie returns null when there
43
+ // are no routes.
44
+ const { buildPerRouterTrie } = await import("../build/route-trie.js");
45
+ const trie = buildPerRouterTrie(generated);
46
+ if (trie) {
80
47
  setRouterTrie(router.id, trie);
81
48
  // Set global trie only if not already set by another router
82
49
  if (!getRouteTrie()) {
@@ -84,6 +51,26 @@ export async function buildRouterTrieFromUrlpatterns(
84
51
  }
85
52
  }
86
53
  setRouterManifest(router.id, generated.routeManifest);
54
+
55
+ // Match the production discovery path: precompute leaf-include entries so the
56
+ // match-time shortcut in evaluateLazyEntry applies in dev/Cloudflare too.
57
+ // Without this, dev re-runs each matched leaf include's handler at match time
58
+ // (evaluateLazyEntry) AND again at render time (loadManifest); with it, the
59
+ // match-time run is skipped and the handler runs once per first request.
60
+ // Identical route ownership to the handler path (the shortcut is guarded by
61
+ // the same prefixIsShared and #506 checks production uses).
62
+ const { flattenLeafEntries } = await import("../build/prefix-tree-utils.js");
63
+ const precomputed: Array<{
64
+ staticPrefix: string;
65
+ routes: Record<string, string>;
66
+ }> = [];
67
+ flattenLeafEntries(
68
+ generated.prefixTree,
69
+ generated.routeManifest,
70
+ precomputed,
71
+ );
72
+ setRouterPrecomputedEntries(router.id, precomputed);
73
+
87
74
  // Merge into global manifest (needed for reverse/href across routers)
88
75
  const existing = hasCachedManifest() ? getGlobalRouteMap() : {};
89
76
  setCachedManifest({ ...existing, ...generated.routeManifest });