@rangojs/router 0.0.0-experimental.19 → 0.0.0-experimental.190fb30d

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 (1254) hide show
  1. package/AGENTS.md +13 -0
  2. package/README.md +304 -708
  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 +822 -182
  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/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/{src/handles/index.ts → dist/handles/index.js} +1 -1
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.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 +4644 -1433
  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 +87 -16
  812. package/skills/api-client/SKILL.md +211 -0
  813. package/skills/breadcrumbs/SKILL.md +329 -0
  814. package/skills/bundle-analysis/SKILL.md +159 -0
  815. package/skills/cache-guide/SKILL.md +251 -24
  816. package/skills/caching/SKILL.md +379 -21
  817. package/skills/catalog.json +271 -0
  818. package/skills/comparison/SKILL.md +50 -0
  819. package/skills/comparison/agents/openai.yaml +4 -0
  820. package/skills/comparison/references/framework-comparison.md +837 -0
  821. package/skills/composability/SKILL.md +110 -4
  822. package/skills/css/SKILL.md +76 -0
  823. package/skills/debug-manifest/SKILL.md +5 -3
  824. package/skills/defer-hydration/SKILL.md +235 -0
  825. package/skills/document-cache/SKILL.md +87 -56
  826. package/skills/fonts/SKILL.md +1 -1
  827. package/skills/handler-use/SKILL.md +364 -0
  828. package/skills/hooks/SKILL.md +76 -692
  829. package/skills/hooks/data.md +273 -0
  830. package/skills/hooks/handle-and-actions.md +103 -0
  831. package/skills/hooks/navigation.md +110 -0
  832. package/skills/hooks/outlets.md +41 -0
  833. package/skills/hooks/state.md +228 -0
  834. package/skills/hooks/urls.md +135 -0
  835. package/skills/host-router/SKILL.md +320 -0
  836. package/skills/i18n/SKILL.md +276 -0
  837. package/skills/intercept/SKILL.md +94 -18
  838. package/skills/layout/SKILL.md +62 -19
  839. package/skills/links/SKILL.md +249 -17
  840. package/skills/loader/SKILL.md +320 -32
  841. package/skills/middleware/SKILL.md +59 -16
  842. package/skills/migrate-nextjs/SKILL.md +745 -0
  843. package/skills/migrate-react-router/SKILL.md +153 -0
  844. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  845. package/skills/migrate-react-router/component-migration.md +196 -0
  846. package/skills/migrate-react-router/data-and-actions.md +225 -0
  847. package/skills/migrate-react-router/route-mapping.md +271 -0
  848. package/skills/mime-routes/SKILL.md +29 -2
  849. package/skills/observability/SKILL.md +202 -0
  850. package/skills/parallel/SKILL.md +225 -10
  851. package/skills/ppr/SKILL.md +618 -0
  852. package/skills/prerender/SKILL.md +180 -126
  853. package/skills/rango/SKILL.md +318 -25
  854. package/skills/react-compiler/SKILL.md +168 -0
  855. package/skills/response-routes/SKILL.md +138 -49
  856. package/skills/route/SKILL.md +175 -13
  857. package/skills/router-setup/SKILL.md +139 -14
  858. package/skills/scripts/SKILL.md +179 -0
  859. package/skills/server-actions/SKILL.md +776 -0
  860. package/skills/shell-manifest/SKILL.md +185 -0
  861. package/skills/streams-and-websockets/SKILL.md +283 -0
  862. package/skills/tailwind/SKILL.md +28 -4
  863. package/skills/testing/SKILL.md +126 -222
  864. package/skills/testing/bindings.md +103 -0
  865. package/skills/testing/cache-prerender.md +127 -0
  866. package/skills/testing/client-components.md +124 -0
  867. package/skills/testing/e2e-parity.md +125 -0
  868. package/skills/testing/flight.md +91 -0
  869. package/skills/testing/handles.md +131 -0
  870. package/skills/testing/loader.md +128 -0
  871. package/skills/testing/middleware.md +99 -0
  872. package/skills/testing/render-handler.md +122 -0
  873. package/skills/testing/response-routes.md +95 -0
  874. package/skills/testing/reverse-and-types.md +85 -0
  875. package/skills/testing/server-actions.md +107 -0
  876. package/skills/testing/server-tree.md +128 -0
  877. package/skills/testing/setup.md +123 -0
  878. package/skills/theme/SKILL.md +1 -1
  879. package/skills/typesafety/SKILL.md +45 -614
  880. package/skills/typesafety/env-and-bindings.md +254 -0
  881. package/skills/typesafety/generated-files-and-cli.md +335 -0
  882. package/skills/typesafety/params-and-search.md +153 -0
  883. package/skills/typesafety/route-types.md +209 -0
  884. package/skills/use-cache/SKILL.md +74 -15
  885. package/skills/vercel/SKILL.md +128 -0
  886. package/skills/view-transitions/SKILL.md +337 -0
  887. package/src/__augment-tests__/augment.ts +81 -0
  888. package/src/__augment-tests__/augmented.check.ts +116 -0
  889. package/src/__internal.ts +67 -40
  890. package/src/bin/rango.ts +18 -0
  891. package/src/browser/action-coordinator.ts +53 -36
  892. package/src/browser/action-fence.ts +47 -0
  893. package/src/browser/app-shell.ts +39 -0
  894. package/src/browser/app-version.ts +14 -0
  895. package/src/browser/connection-warmup.ts +134 -0
  896. package/src/browser/cookie-name.ts +140 -0
  897. package/src/browser/event-controller.ts +257 -158
  898. package/src/browser/history-state.ts +21 -0
  899. package/src/browser/index.ts +3 -3
  900. package/src/browser/invalidate-client-cache.ts +52 -0
  901. package/src/browser/link-interceptor.ts +4 -0
  902. package/src/browser/logging.ts +28 -0
  903. package/src/browser/merge-segment-loaders.ts +6 -4
  904. package/src/browser/navigation-bridge.ts +222 -38
  905. package/src/browser/navigation-client.ts +233 -58
  906. package/src/browser/navigation-store-handle.ts +38 -0
  907. package/src/browser/navigation-store.ts +203 -80
  908. package/src/browser/navigation-transaction.ts +18 -66
  909. package/src/browser/network-error-handler.ts +34 -7
  910. package/src/browser/partial-update.ts +242 -126
  911. package/src/browser/prefetch/cache.ts +344 -30
  912. package/src/browser/prefetch/fetch.ts +373 -48
  913. package/src/browser/prefetch/policy.ts +6 -0
  914. package/src/browser/prefetch/queue.ts +144 -23
  915. package/src/browser/prefetch/resource-ready.ts +77 -0
  916. package/src/browser/rango-state.ts +158 -76
  917. package/src/browser/react/Link.tsx +135 -18
  918. package/src/browser/react/NavigationProvider.tsx +240 -122
  919. package/src/browser/react/ScrollRestoration.tsx +10 -6
  920. package/src/browser/react/context.ts +7 -2
  921. package/src/browser/react/filter-segment-order.ts +66 -7
  922. package/src/browser/react/index.ts +0 -48
  923. package/src/browser/react/location-state-shared.ts +178 -8
  924. package/src/browser/react/location-state.ts +39 -14
  925. package/src/browser/react/use-action.ts +6 -15
  926. package/src/browser/react/use-handle.ts +23 -69
  927. package/src/browser/react/use-href.tsx +8 -1
  928. package/src/browser/react/use-link-status.ts +33 -8
  929. package/src/browser/react/use-navigation.ts +32 -7
  930. package/src/browser/react/use-params.ts +20 -10
  931. package/src/browser/react/use-reverse.ts +106 -0
  932. package/src/browser/react/use-router.ts +46 -11
  933. package/src/browser/react/use-search-params.ts +0 -5
  934. package/src/browser/react/use-segments.ts +11 -21
  935. package/src/browser/response-adapter.ts +99 -8
  936. package/src/browser/rsc-router.tsx +276 -75
  937. package/src/browser/scroll-restoration.ts +61 -47
  938. package/src/browser/segment-reconciler.ts +44 -7
  939. package/src/browser/segment-structure-assert.ts +2 -2
  940. package/src/browser/server-action-bridge.ts +631 -442
  941. package/src/browser/types.ts +160 -12
  942. package/src/browser/validate-redirect-origin.ts +43 -16
  943. package/src/build/collect-fallback-refs.ts +107 -0
  944. package/src/build/generate-manifest.ts +207 -158
  945. package/src/build/generate-route-types.ts +8 -1
  946. package/src/build/index.ts +11 -3
  947. package/src/build/prefix-tree-utils.ts +123 -0
  948. package/src/build/route-trie.ts +215 -42
  949. package/src/build/route-types/ast-route-extraction.ts +15 -8
  950. package/src/build/route-types/codegen.ts +16 -5
  951. package/src/build/route-types/include-resolution.ts +464 -63
  952. package/src/build/route-types/param-extraction.ts +6 -3
  953. package/src/build/route-types/per-module-writer.ts +22 -6
  954. package/src/build/route-types/router-processing.ts +442 -106
  955. package/src/build/route-types/scan-filter.ts +9 -2
  956. package/src/build/route-types/source-scan.ts +216 -0
  957. package/src/build/runtime-discovery.ts +13 -21
  958. package/src/cache/cache-error.ts +104 -0
  959. package/src/cache/cache-key-utils.ts +58 -13
  960. package/src/cache/cache-policy.ts +108 -34
  961. package/src/cache/cache-runtime.ts +454 -97
  962. package/src/cache/cache-scope.ts +235 -103
  963. package/src/cache/cache-tag.ts +149 -0
  964. package/src/cache/cf/cf-base64.ts +33 -0
  965. package/src/cache/cf/cf-cache-constants.ts +127 -0
  966. package/src/cache/cf/cf-cache-store.ts +2446 -170
  967. package/src/cache/cf/cf-cache-types.ts +349 -0
  968. package/src/cache/cf/cf-kv-utils.ts +46 -0
  969. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  970. package/src/cache/cf/index.ts +11 -17
  971. package/src/cache/document-cache.ts +144 -49
  972. package/src/cache/handle-snapshot.ts +70 -0
  973. package/src/cache/index.ts +24 -20
  974. package/src/cache/memory-segment-store.ts +243 -37
  975. package/src/cache/profile-registry.ts +46 -31
  976. package/src/cache/read-through-swr.ts +56 -12
  977. package/src/cache/segment-codec.ts +13 -21
  978. package/src/cache/shell-snapshot.ts +417 -0
  979. package/src/cache/tag-invalidation.ts +230 -0
  980. package/src/cache/taint.ts +55 -0
  981. package/src/cache/types.ts +194 -99
  982. package/src/cache/vercel/index.ts +11 -0
  983. package/src/cache/vercel/vercel-cache-store.ts +1132 -0
  984. package/src/client.rsc.tsx +42 -21
  985. package/src/client.tsx +117 -336
  986. package/src/cloudflare/index.ts +11 -0
  987. package/src/cloudflare/tracing.ts +108 -0
  988. package/src/component-utils.ts +19 -0
  989. package/src/components/DefaultDocument.tsx +8 -2
  990. package/src/context-var.ts +84 -2
  991. package/src/debug.ts +2 -2
  992. package/src/decode-loader-results.ts +52 -0
  993. package/src/defer.ts +185 -0
  994. package/src/deps/ssr.ts +0 -1
  995. package/src/encode-kv.ts +49 -0
  996. package/src/errors.ts +30 -4
  997. package/src/escape-script.ts +52 -0
  998. package/src/handle.ts +104 -34
  999. package/src/handles/MetaTags.tsx +24 -53
  1000. package/src/handles/Scripts.tsx +183 -0
  1001. package/src/handles/breadcrumbs.ts +93 -0
  1002. package/src/handles/deferred-resolution.ts +127 -0
  1003. package/src/handles/is-thenable.ts +18 -0
  1004. package/src/handles/meta.ts +14 -40
  1005. package/src/handles/script.ts +244 -0
  1006. package/src/host/cookie-handler.ts +9 -60
  1007. package/src/host/errors.ts +13 -22
  1008. package/src/host/index.ts +9 -5
  1009. package/src/host/pattern-matcher.ts +23 -52
  1010. package/src/host/router.ts +107 -99
  1011. package/src/host/testing.ts +40 -27
  1012. package/src/host/types.ts +37 -4
  1013. package/src/host/utils.ts +1 -1
  1014. package/src/href-client.ts +137 -22
  1015. package/src/index.rsc.ts +86 -30
  1016. package/src/index.ts +158 -68
  1017. package/src/internal-debug.ts +11 -10
  1018. package/src/loader-store.ts +500 -0
  1019. package/src/loader.rsc.ts +20 -13
  1020. package/src/loader.ts +12 -11
  1021. package/src/missing-id-error.ts +68 -0
  1022. package/src/outlet-context.ts +1 -1
  1023. package/src/outlet-provider.tsx +1 -5
  1024. package/src/prerender/param-hash.ts +16 -16
  1025. package/src/prerender/store.ts +63 -26
  1026. package/src/prerender.ts +215 -86
  1027. package/src/redirect-origin.ts +114 -0
  1028. package/src/regex-escape.ts +8 -0
  1029. package/src/render-error-thrower.tsx +20 -0
  1030. package/src/response-utils.ts +62 -0
  1031. package/src/reverse.ts +65 -15
  1032. package/src/root-error-boundary.tsx +1 -19
  1033. package/src/route-content-wrapper.tsx +19 -77
  1034. package/src/route-definition/dsl-helpers.ts +485 -303
  1035. package/src/route-definition/helper-factories.ts +28 -140
  1036. package/src/route-definition/helpers-types.ts +153 -77
  1037. package/src/route-definition/index.ts +4 -5
  1038. package/src/route-definition/redirect.ts +53 -12
  1039. package/src/route-definition/resolve-handler-use.ts +160 -0
  1040. package/src/route-definition/use-item-types.ts +29 -0
  1041. package/src/route-map-builder.ts +48 -21
  1042. package/src/route-types.ts +37 -46
  1043. package/src/router/basename.ts +14 -0
  1044. package/src/router/content-negotiation.ts +164 -17
  1045. package/src/router/error-handling.ts +45 -18
  1046. package/src/router/find-match.ts +130 -29
  1047. package/src/router/handler-context.ts +110 -39
  1048. package/src/router/instrument.ts +355 -0
  1049. package/src/router/intercept-resolution.ts +50 -24
  1050. package/src/router/lazy-includes.ts +89 -63
  1051. package/src/router/loader-resolution.ts +286 -56
  1052. package/src/router/logging.ts +5 -8
  1053. package/src/router/manifest.ts +105 -56
  1054. package/src/router/match-api.ts +179 -219
  1055. package/src/router/match-context.ts +0 -22
  1056. package/src/router/match-handlers.ts +211 -165
  1057. package/src/router/match-middleware/background-revalidation.ts +66 -22
  1058. package/src/router/match-middleware/cache-lookup.ts +214 -263
  1059. package/src/router/match-middleware/cache-store.ts +105 -50
  1060. package/src/router/match-middleware/intercept-resolution.ts +8 -28
  1061. package/src/router/match-middleware/segment-resolution.ts +52 -18
  1062. package/src/router/match-pipelines.ts +1 -42
  1063. package/src/router/match-result.ts +127 -52
  1064. package/src/router/metrics.ts +217 -26
  1065. package/src/router/middleware-types.ts +24 -110
  1066. package/src/router/middleware.ts +412 -199
  1067. package/src/router/navigation-snapshot.ts +133 -0
  1068. package/src/router/params-util.ts +23 -0
  1069. package/src/router/parse-pattern.ts +115 -0
  1070. package/src/router/pattern-matching.ts +183 -137
  1071. package/src/router/prefetch-cache-ttl.ts +51 -0
  1072. package/src/router/prefetch-limits.ts +37 -0
  1073. package/src/router/prerender-match.ts +207 -58
  1074. package/src/router/preview-match.ts +35 -103
  1075. package/src/router/request-classification.ts +291 -0
  1076. package/src/router/revalidation.ts +144 -74
  1077. package/src/router/route-snapshot.ts +256 -0
  1078. package/src/router/router-context.ts +11 -29
  1079. package/src/router/router-interfaces.ts +160 -36
  1080. package/src/router/router-options.ts +215 -23
  1081. package/src/router/router-registry.ts +2 -5
  1082. package/src/router/segment-resolution/fresh.ts +318 -77
  1083. package/src/router/segment-resolution/helpers.ts +116 -31
  1084. package/src/router/segment-resolution/loader-cache.ts +156 -39
  1085. package/src/router/segment-resolution/loader-mask.ts +67 -0
  1086. package/src/router/segment-resolution/loader-snapshot.ts +308 -0
  1087. package/src/router/segment-resolution/revalidation.ts +496 -391
  1088. package/src/router/segment-resolution/static-store.ts +19 -5
  1089. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1090. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  1091. package/src/router/segment-resolution.ts +5 -1
  1092. package/src/router/segment-wrappers.ts +8 -5
  1093. package/src/router/state-cookie-name.ts +33 -0
  1094. package/src/router/substitute-pattern-params.ts +75 -0
  1095. package/src/router/telemetry-otel.ts +160 -200
  1096. package/src/router/telemetry.ts +105 -20
  1097. package/src/router/timeout.ts +0 -20
  1098. package/src/router/tracing.ts +215 -0
  1099. package/src/router/trie-matching.ts +188 -58
  1100. package/src/router/types.ts +10 -63
  1101. package/src/router/url-params.ts +57 -0
  1102. package/src/router.ts +224 -65
  1103. package/src/rsc/full-payload.ts +70 -0
  1104. package/src/rsc/handler-context.ts +3 -2
  1105. package/src/rsc/handler.ts +726 -457
  1106. package/src/rsc/helpers.ts +168 -46
  1107. package/src/rsc/index.ts +2 -25
  1108. package/src/rsc/json-route-result.ts +38 -0
  1109. package/src/rsc/loader-fetch.ts +127 -31
  1110. package/src/rsc/manifest-init.ts +33 -42
  1111. package/src/rsc/nonce.ts +10 -1
  1112. package/src/rsc/origin-guard.ts +39 -25
  1113. package/src/rsc/progressive-enhancement.ts +159 -23
  1114. package/src/rsc/redirect-guard.ts +100 -0
  1115. package/src/rsc/response-cache-serve.ts +238 -0
  1116. package/src/rsc/response-error.ts +79 -12
  1117. package/src/rsc/response-route-handler.ts +99 -189
  1118. package/src/rsc/rsc-rendering.ts +516 -104
  1119. package/src/rsc/runtime-warnings.ts +23 -10
  1120. package/src/rsc/server-action.ts +293 -115
  1121. package/src/rsc/shell-capture.ts +1166 -0
  1122. package/src/rsc/shell-serve.ts +181 -0
  1123. package/src/rsc/ssr-setup.ts +144 -0
  1124. package/src/rsc/transition-gate.ts +89 -0
  1125. package/src/rsc/types.ts +64 -6
  1126. package/src/runtime-env.ts +18 -0
  1127. package/src/search-params.ts +49 -41
  1128. package/src/segment-content-promise.ts +67 -0
  1129. package/src/segment-loader-promise.ts +167 -0
  1130. package/src/segment-system.tsx +418 -131
  1131. package/src/serialize.ts +243 -0
  1132. package/src/server/context.ts +375 -63
  1133. package/src/server/cookie-parse.ts +32 -0
  1134. package/src/server/cookie-store.ts +152 -5
  1135. package/src/server/handle-store.ts +40 -38
  1136. package/src/server/loader-registry.ts +38 -46
  1137. package/src/server/request-context.ts +585 -178
  1138. package/src/server.ts +6 -0
  1139. package/src/ssr/index.tsx +467 -174
  1140. package/src/ssr/inject-rsc-eager.ts +167 -0
  1141. package/src/ssr/ssr-root.tsx +228 -0
  1142. package/src/static-handler.ts +27 -18
  1143. package/src/testing/cache-status.ts +162 -0
  1144. package/src/testing/collect-handle.ts +46 -0
  1145. package/src/testing/dispatch.ts +813 -0
  1146. package/src/testing/dom.entry.ts +22 -0
  1147. package/src/testing/e2e/fixture.ts +188 -0
  1148. package/src/testing/e2e/index.ts +128 -0
  1149. package/src/testing/e2e/matchers.ts +35 -0
  1150. package/src/testing/e2e/page-helpers.ts +272 -0
  1151. package/src/testing/e2e/parity.ts +387 -0
  1152. package/src/testing/e2e/server.ts +195 -0
  1153. package/src/testing/flight-matchers.ts +97 -0
  1154. package/src/testing/flight-normalize.ts +11 -0
  1155. package/src/testing/flight-runtime.d.ts +57 -0
  1156. package/src/testing/flight-tree.ts +682 -0
  1157. package/src/testing/flight.entry.ts +52 -0
  1158. package/src/testing/flight.ts +257 -0
  1159. package/src/testing/generated-routes.ts +199 -0
  1160. package/src/testing/index.ts +105 -0
  1161. package/src/testing/internal/context.ts +371 -0
  1162. package/src/testing/internal/flight-client-globals.ts +30 -0
  1163. package/src/testing/internal/seed-vars.ts +54 -0
  1164. package/src/testing/render-handler.ts +357 -0
  1165. package/src/testing/render-route.tsx +584 -0
  1166. package/src/testing/run-loader.ts +385 -0
  1167. package/src/testing/run-middleware.ts +205 -0
  1168. package/src/testing/run-transition-when.ts +164 -0
  1169. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1170. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1171. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1172. package/src/testing/vitest-stubs/version.ts +5 -0
  1173. package/src/testing/vitest.ts +305 -0
  1174. package/src/theme/ThemeProvider.tsx +56 -84
  1175. package/src/theme/ThemeScript.tsx +7 -9
  1176. package/src/theme/constants.ts +52 -13
  1177. package/src/theme/index.ts +3 -19
  1178. package/src/theme/theme-context.ts +1 -5
  1179. package/src/theme/theme-script.ts +22 -21
  1180. package/src/theme/use-theme.ts +0 -3
  1181. package/src/types/boundaries.ts +0 -35
  1182. package/src/types/cache-types.ts +17 -8
  1183. package/src/types/error-types.ts +30 -90
  1184. package/src/types/global-namespace.ts +54 -41
  1185. package/src/types/handler-context.ts +237 -89
  1186. package/src/types/index.ts +3 -10
  1187. package/src/types/loader-types.ts +44 -15
  1188. package/src/types/request-scope.ts +112 -0
  1189. package/src/types/route-config.ts +23 -46
  1190. package/src/types/route-entry.ts +19 -7
  1191. package/src/types/segments.ts +137 -19
  1192. package/src/urls/include-helper.ts +40 -75
  1193. package/src/urls/include-provider.ts +71 -0
  1194. package/src/urls/index.ts +2 -11
  1195. package/src/urls/path-helper-types.ts +102 -23
  1196. package/src/urls/path-helper.ts +62 -111
  1197. package/src/urls/pattern-types.ts +84 -19
  1198. package/src/urls/response-types.ts +25 -22
  1199. package/src/urls/type-extraction.ts +98 -154
  1200. package/src/urls/urls-function.ts +1 -19
  1201. package/src/use-loader.tsx +346 -89
  1202. package/src/vercel/index.ts +11 -0
  1203. package/src/vercel/tracing.ts +88 -0
  1204. package/src/vite/debug.ts +185 -0
  1205. package/src/vite/discovery/bundle-postprocess.ts +64 -91
  1206. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1207. package/src/vite/discovery/discover-routers.ts +147 -88
  1208. package/src/vite/discovery/discovery-errors.ts +255 -0
  1209. package/src/vite/discovery/gate-state.ts +171 -0
  1210. package/src/vite/discovery/prerender-collection.ts +247 -145
  1211. package/src/vite/discovery/route-types-writer.ts +40 -84
  1212. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1213. package/src/vite/discovery/state.ts +61 -13
  1214. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1215. package/src/vite/index.ts +19 -3
  1216. package/src/vite/inject-client-debug.ts +88 -0
  1217. package/src/vite/plugin-types.ts +234 -62
  1218. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1219. package/src/vite/plugins/client-ref-dedup.ts +120 -0
  1220. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1221. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1222. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1223. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1224. package/src/vite/plugins/expose-action-id.ts +49 -98
  1225. package/src/vite/plugins/expose-id-utils.ts +96 -51
  1226. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1227. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  1228. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1229. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1230. package/src/vite/plugins/expose-internal-ids.ts +553 -317
  1231. package/src/vite/plugins/performance-tracks.ts +89 -0
  1232. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1233. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1234. package/src/vite/plugins/vercel-output.ts +384 -0
  1235. package/src/vite/plugins/version-injector.ts +40 -29
  1236. package/src/vite/plugins/version-plugin.ts +46 -37
  1237. package/src/vite/plugins/virtual-entries.ts +138 -27
  1238. package/src/vite/rango.ts +356 -295
  1239. package/src/vite/router-discovery.ts +1106 -166
  1240. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1241. package/src/vite/utils/banner.ts +4 -4
  1242. package/src/vite/utils/bundle-analysis.ts +10 -15
  1243. package/src/vite/utils/client-chunks.ts +184 -0
  1244. package/src/vite/utils/directive-prologue.ts +40 -0
  1245. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1246. package/src/vite/utils/manifest-utils.ts +4 -59
  1247. package/src/vite/utils/package-resolution.ts +20 -52
  1248. package/src/vite/utils/prerender-utils.ts +158 -38
  1249. package/src/vite/utils/shared-utils.ts +144 -44
  1250. package/CLAUDE.md +0 -5
  1251. package/src/browser/action-response-classifier.ts +0 -99
  1252. package/src/browser/shallow.ts +0 -40
  1253. package/src/route-definition/route-function.ts +0 -119
  1254. package/src/router/middleware-cookies.ts +0 -55
@@ -1,22 +1,24 @@
1
1
  import { type ReactNode } from "react";
2
2
  import { createHandleStore } from "../server/handle-store.js";
3
+ import { resolveSegmentHandleValues } from "../handles/deferred-resolution.js";
3
4
  import { getRequestContext } from "../server/request-context.js";
4
5
  import {
5
6
  runWithRequestContext,
6
7
  type RequestContext,
7
8
  } from "../server/request-context.js";
8
- import { contextGet, contextSet } from "../context-var.js";
9
+ import { contextGet, contextSet, hasContextVars } from "../context-var.js";
9
10
  import {
10
11
  createPrerenderContext,
11
12
  createStaticContext,
12
13
  createReverseFunction,
13
14
  } from "./handler-context.js";
14
- import { isPrerenderPassthrough } from "../prerender.js";
15
+ import { detectPrerenderPassthrough } from "../prerender.js";
15
16
  import { isRouteRootScoped } from "../route-map-builder.js";
16
17
  import { setupBuildUse } from "./loader-resolution.js";
17
18
  import { loadManifest } from "./manifest.js";
18
19
  import { traverseBack } from "./pattern-matching.js";
19
20
  import type { RouterContext } from "./router-context.js";
21
+ import type { ResolveSegmentOptions } from "./segment-resolution.js";
20
22
  import { runWithRouterContext } from "./router-context.js";
21
23
  import type { EntryData, InterceptEntry } from "../server/context";
22
24
  import type {
@@ -31,7 +33,9 @@ import type {
31
33
  import type { RouteMatchResult } from "./pattern-matching.js";
32
34
 
33
35
  export interface PrerenderMatchDeps<TEnv = any> {
34
- findMatch: (pathname: string) => RouteMatchResult<TEnv> | null;
36
+ findMatch: (
37
+ pathname: string,
38
+ ) => RouteMatchResult<TEnv> | null | Promise<RouteMatchResult<TEnv> | null>;
35
39
  buildRouterContext: () => RouterContext<TEnv>;
36
40
  mergedRouteMap: Record<string, string>;
37
41
  resolveAllSegments: (
@@ -40,7 +44,7 @@ export interface PrerenderMatchDeps<TEnv = any> {
40
44
  params: Record<string, string>,
41
45
  context: HandlerContext<any, TEnv>,
42
46
  loaderPromises: Map<string, Promise<any>>,
43
- options?: { skipLoaders?: boolean },
47
+ options?: ResolveSegmentOptions,
44
48
  ) => Promise<ResolvedSegment[]>;
45
49
  }
46
50
 
@@ -54,17 +58,25 @@ export async function matchForPrerender<TEnv = any>(
54
58
  deps: PrerenderMatchDeps<TEnv>,
55
59
  buildVars?: Record<string, any>,
56
60
  isPassthroughRoute?: boolean,
61
+ buildEnv?: TEnv,
62
+ /** Dev-only: check getParams() for passthrough routes to skip unknown params. */
63
+ devMode?: boolean,
57
64
  ): Promise<{
58
65
  segments: SerializedSegmentData[];
59
- handles: Record<string, SegmentHandleData>;
66
+ /** RSC-encoded handle map ("" when none) — see handle-snapshot.ts. Encoded in
67
+ * the producer (where the Flight codec resolves) so the node-side build/dev
68
+ * sinks can persist it without touching the codec. */
69
+ handles: string;
60
70
  routeName: string;
61
71
  params: Record<string, string>;
62
72
  interceptSegments?: SerializedSegmentData[];
63
- interceptHandles?: Record<string, SegmentHandleData>;
73
+ /** RSC-encoded MERGED (main + intercept) handle map for the intercept artifact;
74
+ * the sinks store it as-is (no longer merge raw records). */
75
+ interceptHandles?: string;
64
76
  passthrough?: true;
65
77
  } | null> {
66
78
  // 1. Find the matching route entry
67
- const matched = deps.findMatch(pathname);
79
+ const matched = await deps.findMatch(pathname);
68
80
  if (!matched) return null;
69
81
 
70
82
  // Use params from trie match if available, fall back to provided params
@@ -74,6 +86,17 @@ export async function matchForPrerender<TEnv = any>(
74
86
  // Build RouterContext for loadManifest/traverseBack
75
87
  const routerCtx = deps.buildRouterContext();
76
88
 
89
+ // Passthrough sentinel result: an unknown-param Passthrough route falls
90
+ // through to the live handler at runtime, so no artifact is baked. A fresh
91
+ // object is returned per call (no site mutates or identity-compares it).
92
+ const passthroughResult = () => ({
93
+ segments: [],
94
+ handles: "",
95
+ routeName: matched.routeKey,
96
+ params: matchedParams,
97
+ passthrough: true as const,
98
+ });
99
+
77
100
  return runWithRouterContext(routerCtx, async () => {
78
101
  // 2. Load the manifest entry tree
79
102
  const manifestEntry = await loadManifest(
@@ -90,20 +113,91 @@ export async function matchForPrerender<TEnv = any>(
90
113
  entries.push(entry);
91
114
  }
92
115
 
116
+ // 3b. Dev-mode passthrough shortcut: if the route is a Passthrough route
117
+ // and has getParams(), check if the matched params are in the known list.
118
+ // In production, only known params are pre-rendered; unknown params fall
119
+ // through to the live handler. Mirror that behavior in dev mode to avoid
120
+ // rendering unknown params with build: true.
121
+ // Vars collected from getParams() probe — merged into render context below.
122
+ let devProbeBuildVars: Record<string, any> | undefined;
123
+
124
+ if (devMode && matchedPassthroughRoute) {
125
+ const routeEntry = entries.find(
126
+ (
127
+ e,
128
+ ): e is EntryData & {
129
+ type: "route";
130
+ prerenderDef: { getParams: (ctx: any) => Promise<any[]> | any[] };
131
+ } =>
132
+ e.type === "route" &&
133
+ !!(e as any).isPassthrough &&
134
+ !!(e as any).prerenderDef?.getParams,
135
+ );
136
+ if (routeEntry) {
137
+ try {
138
+ const probeBuildVars: Record<string, any> = {};
139
+ const knownParamsList = await routeEntry.prerenderDef.getParams({
140
+ build: true as const,
141
+ dev: true,
142
+ set: ((keyOrVar: any, value: any) => {
143
+ contextSet(probeBuildVars, keyOrVar, value);
144
+ }) as any,
145
+ reverse: createReverseFunction(deps.mergedRouteMap),
146
+ get env() {
147
+ if (buildEnv !== undefined) return buildEnv;
148
+ throw new Error(
149
+ "[rango] ctx.env is not available during dev-mode getParams(). " +
150
+ "Configure buildEnv in your rango() plugin options to enable build-time env access.",
151
+ );
152
+ },
153
+ });
154
+ // Compare only the keys returned by getParams — ignore mount params
155
+ // from include() prefixes that aren't part of the handler's params.
156
+ const isKnown = knownParamsList.some((known: Record<string, any>) => {
157
+ const knownKeys = Object.keys(known);
158
+ return knownKeys.every(
159
+ (k) => String(known[k]) === String(matchedParams[k]),
160
+ );
161
+ });
162
+ if (!isKnown) {
163
+ return passthroughResult();
164
+ }
165
+ // Preserve vars set by getParams() for the render context
166
+ if (hasContextVars(probeBuildVars)) {
167
+ devProbeBuildVars = probeBuildVars;
168
+ }
169
+ } catch (err: any) {
170
+ // Mirror production semantics (prerender-collection.ts):
171
+ // Skip errors are intentional — treat as passthrough.
172
+ // All other errors propagate so dev surfaces them.
173
+ if (err?.name === "Skip") {
174
+ return passthroughResult();
175
+ }
176
+ throw err;
177
+ }
178
+ }
179
+ }
180
+
93
181
  // 4. Create handle store for collecting handle data
94
182
  const handleStore = createHandleStore();
95
183
 
96
184
  // 5. Create a minimal request context with the handle store
97
- // Shallow-copy getParams vars so each param set is independent
98
- const variables: Record<string, any> = buildVars ? { ...buildVars } : {};
185
+ // Shallow-copy getParams vars so each param set is independent.
186
+ // In dev mode, merge vars from the getParams() probe if the caller
187
+ // didn't provide buildVars (production passes them from expandPrerenderRoutes).
188
+ const effectiveBuildVars = buildVars ?? devProbeBuildVars;
189
+ const variables: Record<string, any> = effectiveBuildVars
190
+ ? { ...effectiveBuildVars }
191
+ : {};
99
192
  const stubRes = new Response(null, { status: 200 });
100
193
  const minimalRequestContext: RequestContext<TEnv> = {
101
- env: {} as TEnv,
194
+ env: buildEnv ?? ({} as TEnv),
102
195
  request: new Request("http://prerender" + pathname),
103
196
  url: new URL("http://prerender" + pathname),
197
+ originalUrl: new URL("http://prerender" + pathname),
104
198
  pathname,
105
199
  searchParams: new URLSearchParams(),
106
- var: variables,
200
+ _variables: variables,
107
201
  get: ((keyOrVar: any) => contextGet(variables, keyOrVar)) as any,
108
202
  set: ((keyOrVar: any, value: any) => {
109
203
  contextSet(variables, keyOrVar, value);
@@ -116,16 +210,22 @@ export async function matchForPrerender<TEnv = any>(
116
210
  deleteCookie: () => {},
117
211
  header: () => {},
118
212
  setStatus: () => {},
213
+ _setStatus: () => {},
214
+ _rotateStateCookie: () => {},
215
+ _setKeepCacheDirective: () => {},
119
216
  use: (() => {
120
217
  throw new Error("use() not available during pre-rendering");
121
218
  }) as any,
122
219
  method: "GET",
123
220
  _handleStore: handleStore,
221
+ _requestTags: new Set<string>(),
124
222
  waitUntil: () => {},
125
223
  onResponse: () => {},
126
224
  _onResponseCallbacks: [],
127
225
  setLocationState() {},
128
226
  _locationState: undefined,
227
+ _renderBarrier: Promise.resolve(),
228
+ _resolveRenderBarrier: () => {},
129
229
  _reportedErrors: new WeakSet<object>(),
130
230
  reverse: createReverseFunction(
131
231
  deps.mergedRouteMap,
@@ -138,7 +238,7 @@ export async function matchForPrerender<TEnv = any>(
138
238
  return runWithRequestContext(minimalRequestContext, async () => {
139
239
  // 6. Create prerender context with synthetic URL.
140
240
  // Prerender handlers get params, pathname, url, searchParams, search,
141
- // reverse, and use(handle) — but no request, env, headers, or cookies.
241
+ // reverse, use(handle), and optionally env (when buildEnv is configured).
142
242
  const buildCtx = createPrerenderContext<TEnv>(
143
243
  matchedParams,
144
244
  pathname,
@@ -146,6 +246,8 @@ export async function matchForPrerender<TEnv = any>(
146
246
  matched.routeKey,
147
247
  variables,
148
248
  matchedPassthroughRoute,
249
+ buildEnv,
250
+ devMode,
149
251
  );
150
252
 
151
253
  // 7. Wire use() for handles only (loaders throw)
@@ -159,20 +261,18 @@ export async function matchForPrerender<TEnv = any>(
159
261
  matchedParams,
160
262
  buildCtx,
161
263
  loaderPromises,
162
- { skipLoaders: true },
264
+ // throwOnError: a render failure (or `throw new Skip()`) must reach the
265
+ // build/dev caller, not be baked into a frozen error page (issue #587).
266
+ { skipLoaders: true, throwOnError: true },
163
267
  );
164
268
 
165
- // 9. Detect passthrough sentinel: handler returned ctx.passthrough()
166
- for (const seg of allSegments) {
167
- if (isPrerenderPassthrough(seg.component)) {
168
- return {
169
- segments: [],
170
- handles: {},
171
- routeName: matched.routeKey,
172
- params: matchedParams,
173
- passthrough: true as const,
174
- };
175
- }
269
+ // 9. Detect passthrough sentinel: handler returned ctx.passthrough().
270
+ // When the route declares loading(), the handler result is deferred so the
271
+ // component is a thenable resolving to the sentinel — detectPrerenderPassthrough
272
+ // resolves thenables before testing (a sync check would miss it and bake a
273
+ // corrupt artifact).
274
+ if (await detectPrerenderPassthrough(allSegments)) {
275
+ return passthroughResult();
176
276
  }
177
277
 
178
278
  // 10. Filter out any loader segments (belt-and-suspenders)
@@ -184,16 +284,24 @@ export async function matchForPrerender<TEnv = any>(
184
284
 
185
285
  // 12. Serialize segments using the cache serializer
186
286
  const { serializeSegments } = await import("../cache/segment-codec.js");
287
+ const { encodeHandles } = await import("../cache/handle-snapshot.js");
187
288
  const serializedSegments = await serializeSegments(nonLoaderSegments);
188
289
 
189
- // 13. Collect handle data per segment (skip segments with no handle data)
190
- const handles: Record<string, SegmentHandleData> = {};
290
+ // 13. Collect handle data per segment (skip segments with no handle data).
291
+ // Encoded through the Flight codec (not stored raw) so Promise/ReactNode
292
+ // handle values survive the JSON-serialized build artifact / dev wire —
293
+ // the same fix the runtime cache uses. Encode happens here, in the RSC
294
+ // environment where the codec resolves; the node-side sinks only persist.
295
+ const handlesRecord: Record<string, SegmentHandleData> = {};
191
296
  for (const seg of nonLoaderSegments) {
192
297
  const segHandles = handleStore.getDataForSegment(seg.id);
193
298
  if (Object.keys(segHandles).length > 0) {
194
- handles[seg.id] = segHandles;
299
+ // Resolve deferred values before encoding so the baked artifact holds
300
+ // resolved data (prerender = build-time cache).
301
+ handlesRecord[seg.id] = await resolveSegmentHandleValues(segHandles);
195
302
  }
196
303
  }
304
+ const handles = await encodeHandles(handlesRecord);
197
305
 
198
306
  // Use the trie-level route key (e.g., "docs", "docs.article")
199
307
  const routeName = matched.routeKey;
@@ -203,7 +311,7 @@ export async function matchForPrerender<TEnv = any>(
203
311
  // evaluation -- we pre-render all intercepts unconditionally and let
204
312
  // runtime matching decide which to serve.
205
313
  let interceptSegments: SerializedSegmentData[] | undefined;
206
- let interceptHandles: Record<string, SegmentHandleData> | undefined;
314
+ let interceptHandles: string | undefined;
207
315
 
208
316
  const foundIntercepts: {
209
317
  intercept: InterceptEntry;
@@ -211,24 +319,14 @@ export async function matchForPrerender<TEnv = any>(
211
319
  }[] = [];
212
320
  let current: EntryData | null = manifestEntry;
213
321
  while (current) {
214
- if (current.intercept && current.intercept.length > 0) {
215
- for (const ic of current.intercept) {
322
+ // Flatten the entry and its sibling layouts into one source list, the
323
+ // same traversal findInterceptForRoute uses; the build keeps ALL matches
324
+ // (not just the innermost) and skips when(). intercept/layout are
325
+ // non-optional arrays, so empty ones are a no-op here.
326
+ for (const source of [current, ...current.layout]) {
327
+ for (const ic of source.intercept) {
216
328
  if (ic.routeName === matched.routeKey) {
217
- foundIntercepts.push({ intercept: ic, entry: current });
218
- }
219
- }
220
- }
221
- if (current.layout && current.layout.length > 0) {
222
- for (const siblingLayout of current.layout) {
223
- if (siblingLayout.intercept && siblingLayout.intercept.length > 0) {
224
- for (const ic of siblingLayout.intercept) {
225
- if (ic.routeName === matched.routeKey) {
226
- foundIntercepts.push({
227
- intercept: ic,
228
- entry: siblingLayout,
229
- });
230
- }
231
- }
329
+ foundIntercepts.push({ intercept: ic, entry: source });
232
330
  }
233
331
  }
234
332
  }
@@ -239,6 +337,18 @@ export async function matchForPrerender<TEnv = any>(
239
337
  const interceptResolvedSegments: typeof nonLoaderSegments = [];
240
338
 
241
339
  for (const { intercept, entry: parentEntry } of foundIntercepts) {
340
+ // setupBuildUse keys handle pushes by ctx._currentSegmentId. The main
341
+ // resolveAllSegments pass left it on the route's segment id, so pin it
342
+ // to THIS intercept's slot id before resolving the handler/layout --
343
+ // otherwise the intercept's ctx.use() handle pushes land in the wrong
344
+ // bucket and getDataForSegment(seg.id) below drops them from the baked
345
+ // artifact. Re-pinned per iteration so multiple intercepts targeting
346
+ // the same route each get their own id (mirrors fresh.ts parallel-slot
347
+ // pinning).
348
+ const interceptSegmentId = `${parentEntry.shortCode}.${intercept.slotName}`;
349
+ (buildCtx as InternalHandlerContext<any, TEnv>)._currentSegmentId =
350
+ interceptSegmentId;
351
+
242
352
  // Resolve handler
243
353
  const handlerRaw =
244
354
  typeof intercept.handler === "function"
@@ -265,7 +375,7 @@ export async function matchForPrerender<TEnv = any>(
265
375
  }
266
376
 
267
377
  interceptResolvedSegments.push({
268
- id: `${parentEntry.shortCode}.${intercept.slotName}`,
378
+ id: interceptSegmentId,
269
379
  namespace: `intercept:${intercept.routeName}`,
270
380
  type: "parallel" as const,
271
381
  index: 0,
@@ -285,13 +395,21 @@ export async function matchForPrerender<TEnv = any>(
285
395
  interceptSegments = await serializeSegments(
286
396
  interceptResolvedSegments,
287
397
  );
288
- interceptHandles = {};
398
+ const interceptHandlesRecord: Record<string, SegmentHandleData> = {};
289
399
  for (const seg of interceptResolvedSegments) {
290
400
  const segHandles = handleStore.getDataForSegment(seg.id);
291
401
  if (Object.keys(segHandles).length > 0) {
292
- interceptHandles[seg.id] = segHandles;
402
+ interceptHandlesRecord[seg.id] =
403
+ await resolveSegmentHandleValues(segHandles);
293
404
  }
294
405
  }
406
+ // The intercept artifact serves main + intercept segments together, so
407
+ // encode the MERGED handle map here (the sinks no longer merge raw
408
+ // records — they store this pre-encoded string as-is).
409
+ interceptHandles = await encodeHandles({
410
+ ...handlesRecord,
411
+ ...interceptHandlesRecord,
412
+ });
295
413
  }
296
414
  }
297
415
 
@@ -318,7 +436,9 @@ export async function renderStaticSegment<TEnv = any>(
318
436
  handlerId: string,
319
437
  mergedRouteMap: Record<string, string>,
320
438
  routeName?: string,
321
- ): Promise<{ encoded: string; handles: Record<string, unknown[]> } | null> {
439
+ buildEnv?: TEnv,
440
+ devMode?: boolean,
441
+ ): Promise<{ encoded: string; handles: string } | null> {
322
442
  const syntheticUrl = new URL("http://prerender/");
323
443
  const syntheticRequest = new Request(syntheticUrl);
324
444
 
@@ -328,12 +448,13 @@ export async function renderStaticSegment<TEnv = any>(
328
448
  // Minimal request context so setupBuildUse can find the HandleStore
329
449
  const stubRes = new Response(null, { status: 200 });
330
450
  const minimalRequestContext: RequestContext<TEnv> = {
331
- env: {} as TEnv,
451
+ env: buildEnv ?? ({} as TEnv),
332
452
  request: syntheticRequest,
333
453
  url: syntheticUrl,
454
+ originalUrl: syntheticUrl,
334
455
  pathname: "/",
335
456
  searchParams: syntheticUrl.searchParams,
336
- var: {},
457
+ _variables: {},
337
458
  get: () => undefined as any,
338
459
  set: () => {},
339
460
  params: {},
@@ -344,16 +465,22 @@ export async function renderStaticSegment<TEnv = any>(
344
465
  deleteCookie: () => {},
345
466
  header: () => {},
346
467
  setStatus: () => {},
468
+ _setStatus: () => {},
469
+ _rotateStateCookie: () => {},
470
+ _setKeepCacheDirective: () => {},
347
471
  use: (() => {
348
472
  throw new Error("use() not available during static pre-rendering");
349
473
  }) as any,
350
474
  method: "GET",
351
475
  _handleStore: handleStore,
476
+ _requestTags: new Set<string>(),
352
477
  waitUntil: () => {},
353
478
  onResponse: () => {},
354
479
  _onResponseCallbacks: [],
355
480
  setLocationState() {},
356
481
  _locationState: undefined,
482
+ _renderBarrier: Promise.resolve(),
483
+ _resolveRenderBarrier: () => {},
357
484
  _reportedErrors: new WeakSet<object>(),
358
485
  reverse: createReverseFunction(
359
486
  mergedRouteMap,
@@ -364,9 +491,13 @@ export async function renderStaticSegment<TEnv = any>(
364
491
  };
365
492
 
366
493
  return runWithRequestContext(minimalRequestContext, async () => {
367
- // Static handlers get only reverse and use(handle) — no URL, params,
368
- // request, env, headers, or cookies.
369
- const buildCtx = createStaticContext<TEnv>(mergedRouteMap, routeName);
494
+ // Static handlers get only reverse, use(handle), and optionally env.
495
+ const buildCtx = createStaticContext<TEnv>(
496
+ mergedRouteMap,
497
+ routeName,
498
+ buildEnv,
499
+ devMode,
500
+ );
370
501
 
371
502
  // Set segment ID so handle pushes are keyed correctly
372
503
  (buildCtx as InternalHandlerContext<any, TEnv>)._currentSegmentId =
@@ -375,23 +506,41 @@ export async function renderStaticSegment<TEnv = any>(
375
506
  setupBuildUse(buildCtx);
376
507
 
377
508
  const raw = await handler(buildCtx);
378
- const component = raw?.type ? raw : raw;
509
+
510
+ // Static handlers must return a ReactNode. A returned Response (e.g. an
511
+ // accidental redirect()) would otherwise be serialized as a corrupt build
512
+ // artifact; fail loudly instead. The fresh/revalidation paths route handler
513
+ // results through handleHandlerResult, which throws Responses; the static
514
+ // build path bypasses that, so guard here.
515
+ if (raw instanceof Response) {
516
+ throw new TypeError(
517
+ `Static handler "${routeName}" returned a Response. Static handlers must return a ReactNode; ` +
518
+ `Responses (redirects, file responses) are not supported during static pre-rendering.`,
519
+ );
520
+ }
379
521
 
380
522
  const segment: ResolvedSegment = {
381
523
  id: handlerId,
382
524
  namespace: handlerId,
383
525
  type: "layout",
384
526
  index: 0,
385
- component,
527
+ component: raw,
386
528
  params: {},
387
529
  belongsToRoute: false,
388
530
  };
389
531
 
390
532
  const { serializeSegments } = await import("../cache/segment-codec.js");
533
+ const { encodeHandleValue } = await import("../cache/handle-snapshot.js");
391
534
  const [serialized] = await serializeSegments([segment]);
392
535
 
393
- // Collect handle data pushed during rendering
394
- const handles = handleStore.getDataForSegment(handlerId);
536
+ // Collect handle data pushed during rendering and Flight-encode it (so
537
+ // Promise/ReactNode handle values survive the JSON build artifact). "" when
538
+ // nothing was pushed.
539
+ const segHandles = handleStore.getDataForSegment(handlerId);
540
+ const handles =
541
+ Object.keys(segHandles).length > 0
542
+ ? await encodeHandleValue(await resolveSegmentHandleValues(segHandles))
543
+ : "";
395
544
 
396
545
  return { encoded: serialized.encoded, handles };
397
546
  });
@@ -1,18 +1,14 @@
1
- import { loadManifest } from "./manifest.js";
2
- import { traverseBack } from "./pattern-matching.js";
3
- import { collectRouteMiddleware } from "./middleware.js";
4
- import {
5
- parseAcceptTypes,
6
- RSC_RESPONSE_TYPE,
7
- pickNegotiateVariant,
8
- } from "./content-negotiation.js";
1
+ import { negotiateRoute } from "./content-negotiation.js";
9
2
  import { runWithRouterLogContext, withRouterLogScope } from "./logging.js";
10
3
  import type { EntryData } from "../server/context";
11
4
  import type { RouteMatchResult } from "./pattern-matching.js";
12
5
  import type { MiddlewareFn } from "./middleware.js";
6
+ import { resolveRoute } from "./route-snapshot.js";
13
7
 
14
8
  export interface PreviewMatchDeps<TEnv = any> {
15
- findMatch: (pathname: string) => RouteMatchResult<TEnv> | null;
9
+ findMatch: (
10
+ pathname: string,
11
+ ) => RouteMatchResult<TEnv> | null | Promise<RouteMatchResult<TEnv> | null>;
16
12
  }
17
13
 
18
14
  /**
@@ -42,110 +38,46 @@ export async function previewMatch<TEnv = any>(
42
38
  const url = new URL(request.url);
43
39
  const pathname = url.pathname;
44
40
 
45
- // Quick route matching
46
- const matched = deps.findMatch(pathname);
47
- if (!matched) {
41
+ // Route resolution via snapshot (lite mode: skip entries/cacheScope
42
+ // since previewMatch only needs matched, manifestEntry, routeMiddleware,
43
+ // and responseType)
44
+ const result = await resolveRoute<TEnv>(pathname, {
45
+ findMatch: deps.findMatch,
46
+ lite: true,
47
+ });
48
+
49
+ if (!result) {
48
50
  return null;
49
51
  }
50
52
 
51
53
  // Skip redirect check - will be handled in full match
52
- if (matched.redirectTo) {
54
+ if (result.type === "redirect") {
53
55
  return { routeMiddleware: undefined };
54
56
  }
55
57
 
56
- // Load manifest (without segment resolution)
57
- const manifestEntry = await loadManifest(
58
- matched.entry,
59
- matched.routeKey,
60
- pathname,
61
- undefined, // No metrics store for preview
62
- false, // isSSR - doesn't matter for preview
63
- );
64
-
65
- // Collect route-level middleware from entry tree
66
- // Includes middleware from orphan layouts (inline layouts within routes)
67
- const routeMiddleware = collectRouteMiddleware(
68
- traverseBack(manifestEntry),
69
- matched.params,
70
- );
71
-
72
- // Check for response type (from trie match or manifest entry)
73
- const responseType =
74
- matched.responseType ||
75
- (manifestEntry.type === "route"
76
- ? manifestEntry.responseType
77
- : undefined);
78
-
79
- // Content negotiation: when negotiate variants exist, pick the best
80
- // handler based on the Accept header. Uses q-values and client order
81
- // as tiebreaker (matching Express/Hono behavior). RSC routes participate
82
- // as text/html candidates so browsers naturally get HTML without
83
- // special-casing.
84
- if (matched.negotiateVariants && matched.negotiateVariants.length > 0) {
85
- const acceptEntries = parseAcceptTypes(
86
- request.headers.get("accept") || "",
87
- );
88
-
89
- // Build candidate list preserving definition order.
90
- // For wildcard (*/*) and no-Accept fallback, the first candidate wins.
91
- const variants = matched.negotiateVariants;
92
- let candidates: Array<{ routeKey: string; responseType: string }>;
93
- if (responseType) {
94
- // Primary is response-type — include it as a candidate
95
- candidates = [
96
- ...variants,
97
- { routeKey: matched.routeKey, responseType },
98
- ];
99
- } else {
100
- // Primary is RSC — insert as text/html candidate in definition order
101
- const rscCandidate = {
102
- routeKey: matched.routeKey,
103
- responseType: RSC_RESPONSE_TYPE,
104
- };
105
- candidates = matched.rscFirst
106
- ? [rscCandidate, ...variants]
107
- : [...variants, rscCandidate];
108
- }
109
-
110
- const variant = pickNegotiateVariant(acceptEntries, candidates);
58
+ const snapshot = result.snapshot;
59
+ const { matched, manifestEntry, routeMiddleware, responseType } =
60
+ snapshot;
111
61
 
112
- // If the winner is RSC, fall through to default RSC handling
113
- if (variant.responseType === RSC_RESPONSE_TYPE) {
114
- // Fall through — RSC won negotiation
115
- } else if (responseType && variant.routeKey === matched.routeKey) {
116
- // Fall through — response-type primary won, already set
117
- } else {
118
- const negotiateEntry = await loadManifest(
119
- matched.entry,
120
- variant.routeKey,
121
- pathname,
122
- undefined,
123
- false,
124
- );
125
- // Recompute middleware from the selected variant's entry tree
126
- // since different variants can have different middleware chains.
127
- const variantMiddleware = collectRouteMiddleware(
128
- traverseBack(negotiateEntry),
129
- matched.params,
130
- );
131
- return {
132
- routeMiddleware:
133
- variantMiddleware.length > 0 ? variantMiddleware : undefined,
134
- responseType: variant.responseType,
135
- handler:
136
- negotiateEntry.type === "route"
137
- ? negotiateEntry.handler
138
- : undefined,
139
- params: matched.params,
140
- negotiated: true,
141
- manifestEntry: negotiateEntry,
142
- routeKey: matched.routeKey,
143
- };
144
- }
62
+ const negotiation = await negotiateRoute(request, pathname, snapshot);
63
+ if (negotiation) {
64
+ return {
65
+ routeMiddleware:
66
+ negotiation.routeMiddleware.length > 0
67
+ ? negotiation.routeMiddleware
68
+ : undefined,
69
+ responseType: negotiation.responseType,
70
+ handler: negotiation.handler,
71
+ params: matched.params,
72
+ manifestEntry: negotiation.manifestEntry,
73
+ routeKey: matched.routeKey,
74
+ // omitted unless a variant negotiated, preserving the prior public
75
+ // shape (absent for plain response routes, not negotiated:false)
76
+ ...(negotiation.negotiated ? { negotiated: true } : {}),
77
+ };
145
78
  }
146
79
 
147
- // If we passed through the negotiation block (variants exist), mark as
148
- // negotiated so the handler sets Vary: Accept on the response.
80
+ // No negotiation or RSC won — return default route info
149
81
  const hasVariants =
150
82
  matched.negotiateVariants && matched.negotiateVariants.length > 0;
151
83
  return {