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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1155) hide show
  1. package/AGENTS.md +8 -0
  2. package/README.md +64 -6
  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 +195 -52
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +1165 -310
  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/virtual-entries.d.ts +25 -0
  807. package/dist/vite/virtual-entries.d.ts.map +1 -0
  808. package/dist/vite/virtual-entries.js +110 -0
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +71 -7
  811. package/skills/api-client/SKILL.md +211 -0
  812. package/skills/breadcrumbs/SKILL.md +61 -1
  813. package/skills/bundle-analysis/SKILL.md +2 -2
  814. package/skills/cache-guide/SKILL.md +2 -2
  815. package/skills/caching/SKILL.md +92 -10
  816. package/skills/css/SKILL.md +76 -0
  817. package/skills/debug-manifest/SKILL.md +4 -2
  818. package/skills/document-cache/SKILL.md +2 -2
  819. package/skills/handler-use/SKILL.md +1 -1
  820. package/skills/hooks/SKILL.md +40 -29
  821. package/skills/host-router/SKILL.md +80 -3
  822. package/skills/intercept/SKILL.md +5 -3
  823. package/skills/layout/SKILL.md +11 -6
  824. package/skills/loader/SKILL.md +25 -19
  825. package/skills/middleware/SKILL.md +4 -2
  826. package/skills/migrate-nextjs/SKILL.md +3 -1
  827. package/skills/migrate-react-router/SKILL.md +4 -2
  828. package/skills/mime-routes/SKILL.md +2 -2
  829. package/skills/observability/SKILL.md +61 -4
  830. package/skills/parallel/SKILL.md +9 -4
  831. package/skills/prerender/SKILL.md +31 -10
  832. package/skills/rango/SKILL.md +31 -10
  833. package/skills/response-routes/SKILL.md +63 -45
  834. package/skills/route/SKILL.md +14 -2
  835. package/skills/router-setup/SKILL.md +27 -3
  836. package/skills/scripts/SKILL.md +179 -0
  837. package/skills/server-actions/SKILL.md +25 -1
  838. package/skills/tailwind/SKILL.md +27 -3
  839. package/skills/testing/SKILL.md +129 -0
  840. package/skills/testing/bindings.md +103 -0
  841. package/skills/testing/cache-prerender.md +127 -0
  842. package/skills/testing/client-components.md +124 -0
  843. package/skills/testing/e2e-parity.md +125 -0
  844. package/skills/testing/flight.md +91 -0
  845. package/skills/testing/handles.md +129 -0
  846. package/skills/testing/loader.md +128 -0
  847. package/skills/testing/middleware.md +99 -0
  848. package/skills/testing/render-handler.md +121 -0
  849. package/skills/testing/response-routes.md +95 -0
  850. package/skills/testing/reverse-and-types.md +84 -0
  851. package/skills/testing/server-actions.md +107 -0
  852. package/skills/testing/server-tree.md +128 -0
  853. package/skills/testing/setup.md +123 -0
  854. package/skills/typesafety/SKILL.md +6 -5
  855. package/skills/use-cache/SKILL.md +10 -9
  856. package/skills/vercel/SKILL.md +128 -0
  857. package/src/__augment-tests__/augmented.check.ts +2 -3
  858. package/src/__internal.ts +0 -65
  859. package/src/browser/action-coordinator.ts +1 -1
  860. package/src/browser/action-fence.ts +47 -0
  861. package/src/browser/app-shell.ts +14 -27
  862. package/src/browser/connection-warmup.ts +134 -0
  863. package/src/browser/cookie-name.ts +140 -0
  864. package/src/browser/event-controller.ts +115 -89
  865. package/src/browser/invalidate-client-cache.ts +52 -0
  866. package/src/browser/navigation-bridge.ts +16 -52
  867. package/src/browser/navigation-client.ts +84 -69
  868. package/src/browser/navigation-store-handle.ts +38 -0
  869. package/src/browser/navigation-store.ts +25 -74
  870. package/src/browser/navigation-transaction.ts +0 -32
  871. package/src/browser/partial-update.ts +81 -127
  872. package/src/browser/prefetch/cache.ts +99 -72
  873. package/src/browser/prefetch/fetch.ts +176 -34
  874. package/src/browser/prefetch/queue.ts +6 -3
  875. package/src/browser/rango-state.ts +157 -115
  876. package/src/browser/react/Link.tsx +30 -7
  877. package/src/browser/react/NavigationProvider.tsx +32 -95
  878. package/src/browser/react/ScrollRestoration.tsx +10 -6
  879. package/src/browser/react/filter-segment-order.ts +17 -2
  880. package/src/browser/react/index.ts +0 -51
  881. package/src/browser/react/location-state-shared.ts +14 -15
  882. package/src/browser/react/location-state.ts +0 -1
  883. package/src/browser/react/use-action.ts +6 -15
  884. package/src/browser/react/use-handle.ts +0 -5
  885. package/src/browser/react/use-href.tsx +8 -1
  886. package/src/browser/react/use-link-status.ts +33 -8
  887. package/src/browser/react/use-navigation.ts +10 -5
  888. package/src/browser/react/use-params.ts +0 -2
  889. package/src/browser/react/use-router.ts +6 -4
  890. package/src/browser/react/use-search-params.ts +0 -5
  891. package/src/browser/react/use-segments.ts +0 -13
  892. package/src/browser/response-adapter.ts +41 -4
  893. package/src/browser/rsc-router.tsx +43 -18
  894. package/src/browser/scroll-restoration.ts +8 -3
  895. package/src/browser/server-action-bridge.ts +194 -28
  896. package/src/browser/types.ts +40 -21
  897. package/src/browser/validate-redirect-origin.ts +43 -16
  898. package/src/build/generate-route-types.ts +1 -1
  899. package/src/build/index.ts +8 -4
  900. package/src/build/prefix-tree-utils.ts +123 -0
  901. package/src/build/route-trie.ts +117 -15
  902. package/src/build/route-types/ast-route-extraction.ts +15 -8
  903. package/src/build/route-types/codegen.ts +12 -1
  904. package/src/build/route-types/include-resolution.ts +116 -22
  905. package/src/build/route-types/param-extraction.ts +6 -3
  906. package/src/build/route-types/per-module-writer.ts +15 -2
  907. package/src/build/route-types/router-processing.ts +77 -41
  908. package/src/build/route-types/source-scan.ts +105 -7
  909. package/src/cache/cache-key-utils.ts +29 -13
  910. package/src/cache/cache-policy.ts +42 -62
  911. package/src/cache/cache-runtime.ts +126 -30
  912. package/src/cache/cache-scope.ts +118 -43
  913. package/src/cache/cache-tag.ts +7 -39
  914. package/src/cache/cf/cf-base64.ts +33 -0
  915. package/src/cache/cf/cf-cache-constants.ts +127 -0
  916. package/src/cache/cf/cf-cache-store.ts +1257 -537
  917. package/src/cache/cf/cf-cache-types.ts +349 -0
  918. package/src/cache/cf/cf-kv-utils.ts +46 -0
  919. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  920. package/src/cache/cf/index.ts +6 -19
  921. package/src/cache/document-cache.ts +32 -32
  922. package/src/cache/handle-snapshot.ts +70 -0
  923. package/src/cache/index.ts +20 -24
  924. package/src/cache/memory-segment-store.ts +3 -48
  925. package/src/cache/profile-registry.ts +31 -31
  926. package/src/cache/read-through-swr.ts +41 -11
  927. package/src/cache/segment-codec.ts +9 -17
  928. package/src/cache/tag-invalidation.ts +29 -5
  929. package/src/cache/types.ts +14 -104
  930. package/src/cache/vercel/index.ts +11 -0
  931. package/src/cache/vercel/vercel-cache-store.ts +855 -0
  932. package/src/client.rsc.tsx +42 -22
  933. package/src/client.tsx +31 -58
  934. package/src/cloudflare/index.ts +11 -0
  935. package/src/cloudflare/tracing.ts +109 -0
  936. package/src/component-utils.ts +19 -0
  937. package/src/components/DefaultDocument.tsx +8 -2
  938. package/src/context-var.ts +13 -1
  939. package/src/decode-loader-results.ts +18 -2
  940. package/src/defer.ts +196 -0
  941. package/src/deps/ssr.ts +0 -1
  942. package/src/encode-kv.ts +49 -0
  943. package/src/errors.ts +0 -3
  944. package/src/escape-script.ts +52 -0
  945. package/src/handle.ts +28 -18
  946. package/src/handles/MetaTags.tsx +56 -19
  947. package/src/handles/Scripts.tsx +183 -0
  948. package/src/handles/breadcrumbs.ts +37 -8
  949. package/src/handles/is-thenable.ts +19 -0
  950. package/src/handles/meta.ts +51 -40
  951. package/src/handles/script.ts +244 -0
  952. package/src/host/cookie-handler.ts +9 -60
  953. package/src/host/errors.ts +0 -24
  954. package/src/host/index.ts +6 -0
  955. package/src/host/pattern-matcher.ts +23 -52
  956. package/src/host/router.ts +1 -65
  957. package/src/host/testing.ts +40 -27
  958. package/src/host/types.ts +6 -2
  959. package/src/href-client.ts +7 -12
  960. package/src/index.rsc.ts +75 -8
  961. package/src/index.ts +60 -4
  962. package/src/internal-debug.ts +2 -4
  963. package/src/loader.rsc.ts +19 -9
  964. package/src/loader.ts +12 -4
  965. package/src/network-error-thrower.tsx +1 -6
  966. package/src/outlet-provider.tsx +1 -5
  967. package/src/prerender/param-hash.ts +16 -16
  968. package/src/prerender/store.ts +32 -37
  969. package/src/prerender.ts +58 -3
  970. package/src/redirect-origin.ts +100 -0
  971. package/src/regex-escape.ts +8 -0
  972. package/src/response-utils.ts +25 -0
  973. package/src/root-error-boundary.tsx +1 -19
  974. package/src/route-content-wrapper.tsx +1 -44
  975. package/src/route-definition/dsl-helpers.ts +39 -21
  976. package/src/route-definition/helpers-types.ts +3 -3
  977. package/src/route-definition/redirect.ts +44 -11
  978. package/src/route-definition/resolve-handler-use.ts +6 -0
  979. package/src/route-map-builder.ts +0 -16
  980. package/src/router/basename.ts +14 -0
  981. package/src/router/content-negotiation.ts +58 -23
  982. package/src/router/error-handling.ts +44 -17
  983. package/src/router/find-match.ts +44 -23
  984. package/src/router/handler-context.ts +6 -1
  985. package/src/router/instrument.ts +350 -0
  986. package/src/router/intercept-resolution.ts +35 -2
  987. package/src/router/lazy-includes.ts +7 -44
  988. package/src/router/loader-resolution.ts +139 -73
  989. package/src/router/logging.ts +0 -6
  990. package/src/router/manifest.ts +18 -29
  991. package/src/router/match-api.ts +0 -20
  992. package/src/router/match-context.ts +0 -22
  993. package/src/router/match-handlers.ts +57 -58
  994. package/src/router/match-middleware/background-revalidation.ts +6 -7
  995. package/src/router/match-middleware/cache-lookup.ts +115 -194
  996. package/src/router/match-middleware/cache-store.ts +28 -32
  997. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  998. package/src/router/match-middleware/segment-resolution.ts +0 -22
  999. package/src/router/match-pipelines.ts +1 -42
  1000. package/src/router/match-result.ts +1 -52
  1001. package/src/router/metrics.ts +0 -34
  1002. package/src/router/middleware-types.ts +0 -116
  1003. package/src/router/middleware.ts +175 -90
  1004. package/src/router/navigation-snapshot.ts +0 -51
  1005. package/src/router/params-util.ts +23 -0
  1006. package/src/router/pattern-matching.ts +47 -89
  1007. package/src/router/prefetch-cache-ttl.ts +51 -0
  1008. package/src/router/prerender-match.ts +101 -64
  1009. package/src/router/request-classification.ts +25 -35
  1010. package/src/router/revalidation.ts +75 -81
  1011. package/src/router/route-snapshot.ts +0 -1
  1012. package/src/router/router-context.ts +3 -28
  1013. package/src/router/router-interfaces.ts +38 -7
  1014. package/src/router/router-options.ts +111 -4
  1015. package/src/router/segment-resolution/fresh.ts +66 -78
  1016. package/src/router/segment-resolution/helpers.ts +86 -6
  1017. package/src/router/segment-resolution/loader-cache.ts +57 -23
  1018. package/src/router/segment-resolution/revalidation.ts +212 -304
  1019. package/src/router/segment-resolution/static-store.ts +19 -5
  1020. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1021. package/src/router/segment-resolution.ts +5 -1
  1022. package/src/router/segment-wrappers.ts +6 -5
  1023. package/src/router/state-cookie-name.ts +33 -0
  1024. package/src/router/telemetry-otel.ts +161 -199
  1025. package/src/router/telemetry.ts +96 -19
  1026. package/src/router/timeout.ts +0 -20
  1027. package/src/router/tracing.ts +206 -0
  1028. package/src/router/trie-matching.ts +163 -64
  1029. package/src/router/types.ts +1 -63
  1030. package/src/router/url-params.ts +0 -5
  1031. package/src/router.ts +87 -37
  1032. package/src/rsc/handler-context.ts +1 -0
  1033. package/src/rsc/handler.ts +232 -153
  1034. package/src/rsc/helpers.ts +97 -4
  1035. package/src/rsc/index.ts +1 -4
  1036. package/src/rsc/json-route-result.ts +38 -0
  1037. package/src/rsc/loader-fetch.ts +114 -38
  1038. package/src/rsc/manifest-init.ts +28 -41
  1039. package/src/rsc/origin-guard.ts +11 -15
  1040. package/src/rsc/progressive-enhancement.ts +59 -9
  1041. package/src/rsc/redirect-guard.ts +99 -0
  1042. package/src/rsc/response-cache-serve.ts +238 -0
  1043. package/src/rsc/response-error.ts +79 -12
  1044. package/src/rsc/response-route-handler.ts +57 -147
  1045. package/src/rsc/rsc-rendering.ts +64 -24
  1046. package/src/rsc/runtime-warnings.ts +14 -0
  1047. package/src/rsc/server-action.ts +244 -81
  1048. package/src/rsc/types.ts +15 -3
  1049. package/src/runtime-env.ts +18 -0
  1050. package/src/search-params.ts +31 -26
  1051. package/src/segment-loader-promise.ts +31 -4
  1052. package/src/segment-system.tsx +89 -89
  1053. package/src/server/context.ts +32 -0
  1054. package/src/server/cookie-parse.ts +32 -0
  1055. package/src/server/cookie-store.ts +52 -1
  1056. package/src/server/handle-store.ts +21 -38
  1057. package/src/server/loader-registry.ts +21 -42
  1058. package/src/server/request-context.ts +189 -131
  1059. package/src/ssr/index.tsx +19 -18
  1060. package/src/static-handler.ts +10 -13
  1061. package/src/testing/cache-status.ts +162 -0
  1062. package/src/testing/collect-handle.ts +40 -0
  1063. package/src/testing/dispatch.ts +701 -0
  1064. package/src/testing/dom.entry.ts +22 -0
  1065. package/src/testing/e2e/fixture.ts +188 -0
  1066. package/src/testing/e2e/index.ts +128 -0
  1067. package/src/testing/e2e/matchers.ts +35 -0
  1068. package/src/testing/e2e/page-helpers.ts +272 -0
  1069. package/src/testing/e2e/parity.ts +387 -0
  1070. package/src/testing/e2e/server.ts +195 -0
  1071. package/src/testing/flight-matchers.ts +97 -0
  1072. package/src/testing/flight-normalize.ts +11 -0
  1073. package/src/testing/flight-runtime.d.ts +57 -0
  1074. package/src/testing/flight-tree.ts +682 -0
  1075. package/src/testing/flight.entry.ts +52 -0
  1076. package/src/testing/flight.ts +257 -0
  1077. package/src/testing/generated-routes.ts +183 -0
  1078. package/src/testing/index.ts +99 -0
  1079. package/src/testing/internal/context.ts +371 -0
  1080. package/src/testing/internal/flight-client-globals.ts +30 -0
  1081. package/src/testing/internal/seed-vars.ts +54 -0
  1082. package/src/testing/render-handler.ts +343 -0
  1083. package/src/testing/render-route.tsx +581 -0
  1084. package/src/testing/run-loader.ts +385 -0
  1085. package/src/testing/run-middleware.ts +205 -0
  1086. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1087. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1088. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1089. package/src/testing/vitest-stubs/version.ts +5 -0
  1090. package/src/testing/vitest.ts +305 -0
  1091. package/src/theme/ThemeProvider.tsx +20 -58
  1092. package/src/theme/ThemeScript.tsx +7 -9
  1093. package/src/theme/constants.ts +52 -13
  1094. package/src/theme/index.ts +0 -7
  1095. package/src/theme/theme-context.ts +1 -5
  1096. package/src/theme/theme-script.ts +22 -21
  1097. package/src/theme/use-theme.ts +0 -3
  1098. package/src/types/boundaries.ts +0 -35
  1099. package/src/types/cache-types.ts +3 -3
  1100. package/src/types/error-types.ts +25 -89
  1101. package/src/types/global-namespace.ts +15 -15
  1102. package/src/types/handler-context.ts +44 -14
  1103. package/src/types/index.ts +0 -10
  1104. package/src/types/loader-types.ts +6 -3
  1105. package/src/types/request-scope.ts +8 -22
  1106. package/src/types/route-config.ts +6 -50
  1107. package/src/types/route-entry.ts +0 -6
  1108. package/src/types/segments.ts +0 -13
  1109. package/src/urls/include-helper.ts +0 -4
  1110. package/src/urls/index.ts +1 -8
  1111. package/src/urls/path-helper-types.ts +8 -2
  1112. package/src/urls/path-helper.ts +0 -54
  1113. package/src/urls/type-extraction.ts +33 -24
  1114. package/src/urls/urls-function.ts +0 -13
  1115. package/src/use-loader.tsx +0 -186
  1116. package/src/vercel/index.ts +11 -0
  1117. package/src/vercel/tracing.ts +88 -0
  1118. package/src/vite/discovery/bundle-postprocess.ts +2 -1
  1119. package/src/vite/discovery/discover-routers.ts +33 -42
  1120. package/src/vite/discovery/prerender-collection.ts +33 -46
  1121. package/src/vite/discovery/state.ts +12 -1
  1122. package/src/vite/discovery/virtual-module-codegen.ts +1 -11
  1123. package/src/vite/index.ts +2 -0
  1124. package/src/vite/plugin-types.ts +143 -10
  1125. package/src/vite/plugins/cjs-to-esm.ts +8 -12
  1126. package/src/vite/plugins/client-ref-dedup.ts +0 -11
  1127. package/src/vite/plugins/client-ref-hashing.ts +0 -10
  1128. package/src/vite/plugins/cloudflare-protocol-stub.ts +0 -20
  1129. package/src/vite/plugins/expose-action-id.ts +2 -73
  1130. package/src/vite/plugins/expose-id-utils.ts +85 -56
  1131. package/src/vite/plugins/expose-ids/export-analysis.ts +30 -43
  1132. package/src/vite/plugins/expose-ids/handler-transform.ts +5 -31
  1133. package/src/vite/plugins/expose-ids/loader-transform.ts +12 -20
  1134. package/src/vite/plugins/expose-ids/router-transform.ts +98 -26
  1135. package/src/vite/plugins/expose-internal-ids.ts +10 -1
  1136. package/src/vite/plugins/performance-tracks.ts +0 -3
  1137. package/src/vite/plugins/refresh-cmd.ts +1 -1
  1138. package/src/vite/plugins/use-cache-transform.ts +21 -46
  1139. package/src/vite/plugins/vercel-output.ts +295 -0
  1140. package/src/vite/plugins/version-injector.ts +0 -20
  1141. package/src/vite/plugins/version-plugin.ts +6 -66
  1142. package/src/vite/plugins/virtual-entries.ts +70 -17
  1143. package/src/vite/rango.ts +135 -134
  1144. package/src/vite/router-discovery.ts +21 -8
  1145. package/src/vite/utils/ast-handler-extract.ts +11 -20
  1146. package/src/vite/utils/bundle-analysis.ts +6 -13
  1147. package/src/vite/utils/client-chunks.ts +0 -6
  1148. package/src/vite/utils/directive-prologue.ts +40 -0
  1149. package/src/vite/utils/forward-user-plugins.ts +0 -22
  1150. package/src/vite/utils/manifest-utils.ts +4 -75
  1151. package/src/vite/utils/package-resolution.ts +1 -73
  1152. package/src/vite/utils/prerender-utils.ts +54 -40
  1153. package/src/vite/utils/shared-utils.ts +8 -37
  1154. package/src/browser/shallow.ts +0 -40
  1155. package/src/router/middleware-cookies.ts +0 -55
package/src/vite/rango.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { PluginOption } from "vite";
1
+ import { type PluginOption } from "vite";
2
2
  import { readFileSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
4
  import { exposeActionId } from "./plugins/expose-action-id.js";
@@ -15,7 +15,10 @@ import {
15
15
  getPublishedPackageName,
16
16
  getVendorAliases,
17
17
  } from "./utils/package-resolution.js";
18
- import { findRouterFiles } from "../build/generate-route-types.js";
18
+ import {
19
+ findRouterFiles,
20
+ findHostRouterFiles,
21
+ } from "../build/generate-route-types.js";
19
22
  import { createVersionPlugin } from "./plugins/version-plugin.js";
20
23
  import {
21
24
  sharedRolldownOptions,
@@ -27,7 +30,12 @@ import {
27
30
  resolveClientChunks,
28
31
  type ClientChunkContext,
29
32
  } from "./utils/client-chunks.js";
30
- import type { RangoOptions } from "./plugin-types.js";
33
+ import type {
34
+ RangoOptions,
35
+ RangoNodeOptions,
36
+ RangoVercelOptions,
37
+ } from "./plugin-types.js";
38
+ import { createVercelOutputPlugin } from "./plugins/vercel-output.js";
31
39
  import { printBanner, rangoVersion } from "./utils/banner.js";
32
40
  import { createVersionInjectorPlugin } from "./plugins/version-injector.js";
33
41
  import { createCjsToEsmPlugin } from "./plugins/cjs-to-esm.js";
@@ -37,6 +45,13 @@ import { createRangoDebugger, NS } from "./debug.js";
37
45
 
38
46
  const debugConfig = createRangoDebugger(NS.config);
39
47
 
48
+ // The leading-directive 'use client' sniff is shared with version-plugin's
49
+ // getClientModuleSignature so the two cannot drift. Imported for local use by the
50
+ // HMR transform below and re-exported because the E8 sniff test imports it from
51
+ // this module.
52
+ import { hasUseClientDirective } from "./utils/directive-prologue.js";
53
+ export { hasUseClientDirective };
54
+
40
55
  /**
41
56
  * Vite plugin for @rangojs/router.
42
57
  *
@@ -66,18 +81,7 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
66
81
  const resolvedOptions: RangoOptions = options ?? { preset: "node" };
67
82
  const preset = resolvedOptions.preset ?? "node";
68
83
  const showBanner = resolvedOptions.banner ?? true;
69
- // Client-chunking strategy (per-route/per-feature splitting of the browser
70
- // bundle). Defaults to the built-in directory strategy (`true`) pre-1.0; pass
71
- // `clientChunks: false` to opt out. Resolved once and forwarded to
72
- // @vitejs/plugin-rsc in both presets. The built-in strategy only splits where it
73
- // recognizes a route structure, so this default is a no-op for flat / host-split
74
- // apps and never duplicates the shared runtime.
75
84
  const clientChunksOption = resolvedOptions.clientChunks ?? true;
76
- // Shared context the built-in strategy reads at build time: the production
77
- // hashes of registered error/notFound fallback modules (-> app-fallback).
78
- // Populated by the discovery plugin in buildStart, before the client build
79
- // invokes the strategy. Only wired when the built-in strategy is active; a
80
- // custom function owns its own grouping.
81
85
  const useBuiltInClientChunks = clientChunksOption === true;
82
86
  const clientChunkCtx: ClientChunkContext | undefined = useBuiltInClientChunks
83
87
  ? { fallbackRefs: new Set<string>() }
@@ -114,24 +118,28 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
114
118
  const pkg = getPublishedPackageName();
115
119
  const nested = (spec: string) => `${pkg} > ${spec}`;
116
120
 
117
- // Mutable ref for router path (node preset only).
118
- // Set immediately when user-specified, or populated by the auto-discover
119
- // config() hook using Vite's resolved root.
120
- const routerRef: { path: string | undefined } = { path: undefined };
121
+ // Mutable ref for the served entry path (node/vercel presets only). Populated
122
+ // by the auto-discover config() hook using Vite's resolved root. `kind` selects
123
+ // the RSC entry template: "router" wraps a single createRouter() app in
124
+ // createRSCHandler; "host" wraps a createHostRouter() instance and serves it
125
+ // via hostRouter.match().
126
+ const routerRef: { path: string | undefined; kind: "router" | "host" } = {
127
+ path: undefined,
128
+ kind: "router",
129
+ };
130
+ // Explicit host-router entry (node/vercel `hostRouter` option), root-relative.
131
+ const explicitHostRouter =
132
+ preset !== "cloudflare"
133
+ ? (resolvedOptions as RangoNodeOptions | RangoVercelOptions).hostRouter
134
+ : undefined;
121
135
 
122
136
  // Build-time prerendering is enabled for both presets.
123
137
  // Collection runs in-process via the RSC dev environment runner during discoverRouters().
124
138
  const prerenderEnabled = true;
125
139
 
126
140
  if (preset === "cloudflare") {
127
- // Cloudflare preset: configure entries for cloudflare worker setup
128
- // Router is not needed here - worker.rsc.tsx imports it directly
129
-
130
- // Dynamically import @vitejs/plugin-rsc
131
141
  const { default: rsc } = await import("@vitejs/plugin-rsc");
132
142
 
133
- // Only client and ssr entries - rsc entry is handled by cloudflare plugin
134
- // Always use virtual modules for cloudflare preset
135
143
  const finalEntries: { client: string; ssr: string } = {
136
144
  client: VIRTUAL_IDS.browser,
137
145
  ssr: VIRTUAL_IDS.ssr,
@@ -142,10 +150,7 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
142
150
  enforce: "pre",
143
151
 
144
152
  config() {
145
- // Configure environments for cloudflare deployment
146
153
  return {
147
- // Exclude rsc-router modules from optimization to prevent module duplication
148
- // This ensures the same Context instance is used by both browser entry and RSC proxy modules
149
154
  optimizeDeps: {
150
155
  exclude: excludeDeps,
151
156
  rolldownOptions: sharedRolldownOptions,
@@ -168,21 +173,12 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
168
173
  client: {
169
174
  build: {
170
175
  rollupOptions: {
171
- // FILE_NAME_CONFLICT (and any other client-build warning) is
172
- // emitted by the CLIENT environment build, which consults THIS
173
- // env's onwarn -- Vite 8's environment builds do NOT propagate
174
- // the top-level build.rollupOptions.onwarn into the client env.
175
- // Wire it here so the suppression runs where the conflicts
176
- // originate (the top-level handler is invoked 0x for these; the
177
- // client-env handler is invoked for all of them).
178
176
  onwarn,
179
177
  output: {
180
178
  manualChunks: getManualChunks,
181
179
  },
182
180
  },
183
181
  },
184
- // Pre-bundle rsc-html-stream to prevent discovery during first request
185
- // Exclude rsc-router modules to ensure same Context instance
186
182
  optimizeDeps: {
187
183
  include: [nested("rsc-html-stream/client")],
188
184
  exclude: excludeDeps,
@@ -190,12 +186,9 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
190
186
  },
191
187
  },
192
188
  ssr: {
193
- // Build SSR inside RSC directory so wrangler can deploy self-contained dist/rsc
194
189
  build: {
195
190
  outDir: "./dist/rsc/ssr",
196
191
  },
197
- // Pre-bundle SSR entry and React for proper module linking with childEnvironments
198
- // All deps must be listed to avoid late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
199
192
  optimizeDeps: {
200
193
  entries: [finalEntries.ssr],
201
194
  include: [
@@ -215,10 +208,7 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
215
208
  },
216
209
  },
217
210
  rsc: {
218
- // RSC environment needs exclude list and esbuild options
219
- // Exclude rsc-router modules to prevent createContext in RSC environment
220
211
  optimizeDeps: {
221
- // Pre-bundle all RSC deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
222
212
  include: [
223
213
  "react",
224
214
  "react/jsx-runtime",
@@ -249,13 +239,7 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
249
239
  });
250
240
 
251
241
  plugins.push(createVirtualEntriesPlugin(finalEntries));
252
-
253
- // Dev-only: RSDW client patch for React Performance Tracks
254
242
  plugins.push(performanceTracksPlugin());
255
-
256
- // Add RSC plugin with cloudflare-specific options
257
- // Note: loadModuleDevProxy should NOT be used with childEnvironments
258
- // since SSR runs in workerd alongside RSC
259
243
  plugins.push(
260
244
  rsc({
261
245
  entries: finalEntries,
@@ -263,13 +247,8 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
263
247
  clientChunks,
264
248
  }) as PluginOption,
265
249
  );
266
-
267
- // Deduplicate client references from third-party packages in dev mode.
268
- // Prevents module duplication when server components import "use client"
269
- // packages that are also imported directly by client components.
270
250
  plugins.push(clientRefDedup());
271
251
  } else {
272
- // Auto-discover router using Vite's resolved root (not process.cwd())
273
252
  plugins.push({
274
253
  name: "@rangojs/router:auto-discover",
275
254
  config(userConfig) {
@@ -277,33 +256,62 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
277
256
  const root = userConfig.root
278
257
  ? resolve(process.cwd(), userConfig.root)
279
258
  : process.cwd();
259
+ const toRootRelative = (abs: string) =>
260
+ (abs.startsWith(root)
261
+ ? "./" + abs.slice(root.length + 1)
262
+ : abs
263
+ ).replaceAll("\\", "/");
264
+ const bulletList = (files: string[]) =>
265
+ files.map((f) => " - " + toRootRelative(f)).join("\n");
266
+
267
+ // 1. Explicit host entry wins: serve the createHostRouter() instance.
268
+ if (explicitHostRouter) {
269
+ routerRef.path = explicitHostRouter.replaceAll("\\", "/");
270
+ routerRef.kind = "host";
271
+ return;
272
+ }
273
+
274
+ // 2. A createHostRouter() file means this is a multi-app host deploy:
275
+ // serve it via the host entry. Checked BEFORE single-router discovery,
276
+ // because a host app may compose just one createRouter() sub-app plus
277
+ // host middleware / domain rules / inline .map() routes -- and a lone
278
+ // sub-app must not shadow the host entry (it would bypass
279
+ // hostRouter.match()).
280
+ const hostCandidates = findHostRouterFiles(root);
281
+ if (hostCandidates.length === 1) {
282
+ routerRef.path = toRootRelative(hostCandidates[0]);
283
+ routerRef.kind = "host";
284
+ return;
285
+ }
286
+ if (hostCandidates.length > 1) {
287
+ throw new Error(
288
+ `[rango] Multiple host routers found:\n${bulletList(hostCandidates)}\n\n` +
289
+ `Set the \`hostRouter\` option to the entry to serve, e.g. rango({ preset: "${preset}", hostRouter: "./src/worker.rsc.tsx" }).`,
290
+ );
291
+ }
292
+
293
+ // 3. No host entry: single createRouter() app.
280
294
  const candidates = findRouterFiles(root);
281
295
  if (candidates.length === 1) {
282
- const abs = candidates[0];
283
- routerRef.path = (
284
- abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs
285
- ).replaceAll("\\", "/");
286
- } else if (candidates.length > 1) {
287
- const list = candidates
288
- .map(
289
- (f) =>
290
- " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f),
291
- )
292
- .join("\n");
293
- throw new Error(`[rango] Multiple routers found:\n${list}`);
296
+ routerRef.path = toRootRelative(candidates[0]);
297
+ routerRef.kind = "router";
298
+ return;
299
+ }
300
+ if (candidates.length > 1) {
301
+ throw new Error(
302
+ `[rango] Multiple routers found:\n${bulletList(candidates)}\n\n` +
303
+ `If this is a multi-app host router, export a createHostRouter() instance and set the \`hostRouter\` option (e.g. rango({ preset: "${preset}", hostRouter: "./src/worker.rsc.tsx" })), or use preset: "cloudflare" where you own the worker entry.`,
304
+ );
294
305
  }
295
- // 0 found: routerRef.path stays undefined, warn at startup via discovery plugin
296
306
  },
297
307
  });
298
308
 
299
- // Always use virtual entries for client, ssr, and rsc
300
309
  const finalEntries = {
301
310
  client: VIRTUAL_IDS.browser,
302
311
  ssr: VIRTUAL_IDS.ssr,
303
312
  rsc: VIRTUAL_IDS.rsc,
304
313
  };
305
314
 
306
- // Dynamically import @vitejs/plugin-rsc
307
315
  const { default: rsc } = await import("@vitejs/plugin-rsc");
308
316
 
309
317
  let hasWarnedDuplicate = false;
@@ -312,8 +320,38 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
312
320
  name: "@rangojs/router:rsc-integration",
313
321
  enforce: "pre",
314
322
 
315
- config() {
323
+ config(_userConfig, configEnv) {
324
+ // Fold NODE_ENV for the vercel preset's build. The cloudflare plugin
325
+ // does this automatically and node apps do it themselves; vercel has no
326
+ // platform plugin, so without this React's CJS dev branch survives and
327
+ // doubles the SSR/RSC bundle (Bundle Hygiene rule #2). Only the exact
328
+ // `process.env.NODE_ENV` token is replaced.
329
+ const vercelDefine =
330
+ preset === "vercel" && configEnv.command === "build"
331
+ ? { "process.env.NODE_ENV": JSON.stringify("production") }
332
+ : undefined;
333
+ // The vercel preset's deployed function has no node_modules, so the
334
+ // server bundles must be fully self-contained. Bundle every dependency
335
+ // into the rsc + ssr builds instead of externalizing them (the node
336
+ // default, which only works because `vite preview` runs where
337
+ // node_modules exists). node: builtins stay external automatically.
338
+ const vercelServerEnv =
339
+ preset === "vercel"
340
+ ? { resolve: { noExternal: true as const } }
341
+ : undefined;
342
+ // Dev only: @vercel/functions is a CJS package (consumed at its root for
343
+ // getCache/waitUntil) whose nested internal requires vite's RSC + SSR dev
344
+ // module runners cannot load directly, so a vercel app using
345
+ // VercelCacheStore crashes on `vite dev`. Pre-bundle it for the server
346
+ // environments (the production build bundles it via noExternal above, so
347
+ // this is serve-only). The preset already requires @vercel/functions at
348
+ // build time, so the unconditional include matches the existing contract.
349
+ const vercelServerInclude =
350
+ preset === "vercel" && configEnv.command === "serve"
351
+ ? ["@vercel/functions"]
352
+ : [];
316
353
  return {
354
+ ...(vercelDefine ? { define: vercelDefine } : {}),
317
355
  optimizeDeps: {
318
356
  exclude: excludeDeps,
319
357
  rolldownOptions: sharedRolldownOptions,
@@ -336,13 +374,6 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
336
374
  client: {
337
375
  build: {
338
376
  rollupOptions: {
339
- // FILE_NAME_CONFLICT (and any other client-build warning) is
340
- // emitted by the CLIENT environment build, which consults THIS
341
- // env's onwarn -- Vite 8's environment builds do NOT propagate
342
- // the top-level build.rollupOptions.onwarn into the client env.
343
- // Wire it here so the suppression runs where the conflicts
344
- // originate (the top-level handler is invoked 0x for these; the
345
- // client-env handler is invoked for all of them).
346
377
  onwarn,
347
378
  output: {
348
379
  manualChunks: getManualChunks,
@@ -363,6 +394,7 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
363
394
  },
364
395
  },
365
396
  ssr: {
397
+ ...(vercelServerEnv ?? {}),
366
398
  optimizeDeps: {
367
399
  entries: [VIRTUAL_IDS.ssr],
368
400
  include: [
@@ -375,12 +407,14 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
375
407
  nested(
376
408
  "@vitejs/plugin-rsc/vendor/react-server-dom/client.edge",
377
409
  ),
410
+ ...vercelServerInclude,
378
411
  ],
379
412
  exclude: excludeDeps,
380
413
  rolldownOptions: sharedRolldownOptions,
381
414
  },
382
415
  },
383
416
  rsc: {
417
+ ...(vercelServerEnv ?? {}),
384
418
  optimizeDeps: {
385
419
  entries: [VIRTUAL_IDS.rsc],
386
420
  include: [
@@ -390,7 +424,14 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
390
424
  nested(
391
425
  "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge",
392
426
  ),
427
+ ...vercelServerInclude,
393
428
  ],
429
+ // Vite 8 does not propagate the top-level optimizeDeps.exclude
430
+ // (set in config()) to non-client envs, so the rsc env must set
431
+ // it explicitly — mirroring the node ssr env and the cloudflare
432
+ // rsc env. Without it a strict-pnpm npm-installed app can try to
433
+ // pre-bundle the router's own subpath entries and fail.
434
+ exclude: excludeDeps,
394
435
  rolldownOptions: sharedRolldownOptions,
395
436
  },
396
437
  },
@@ -406,7 +447,11 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
406
447
  ? "preview"
407
448
  : "dev"
408
449
  : "build";
409
- printBanner(mode, "node", rangoVersion);
450
+ printBanner(
451
+ mode,
452
+ preset === "vercel" ? "vercel" : "node",
453
+ rangoVersion,
454
+ );
410
455
  }
411
456
 
412
457
  const rscMinimalCount = config.plugins.filter(
@@ -423,36 +468,17 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
423
468
  },
424
469
  });
425
470
 
426
- // Add virtual entries plugin (RSC entry generated lazily from routerRef)
427
471
  plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
428
-
429
- // Dev-only: RSDW client patch for React Performance Tracks
430
472
  plugins.push(performanceTracksPlugin());
431
-
432
473
  plugins.push(
433
474
  rsc({
434
475
  entries: finalEntries,
435
476
  clientChunks,
436
477
  }) as PluginOption,
437
478
  );
438
-
439
- // Deduplicate client references from third-party packages in dev mode.
440
- // Prevents module duplication when server components import "use client"
441
- // packages that are also imported directly by client components.
442
479
  plugins.push(clientRefDedup());
443
480
  }
444
481
 
445
- // Fix HMR for "use client" components.
446
- //
447
- // @vitejs/plugin-rsc's hotUpdate returns undefined for "use client" files
448
- // in the RSC environment. Vite then tries to propagate through the RSC
449
- // module graph, but the proxy module has no import.meta.hot.accept()
450
- // boundary, causing a full page reload. The client env would handle it
451
- // fine via React Refresh, but the RSC env's full-reload arrives first.
452
- //
453
- // Fix: in the RSC env, return [] for "use client" files to signal
454
- // "handled, nothing to propagate". The client env is left alone so
455
- // React Refresh processes the update normally.
456
482
  plugins.push({
457
483
  name: "@rangojs/router:client-component-hmr",
458
484
  hotUpdate(ctx) {
@@ -471,74 +497,49 @@ export async function rango(options?: RangoOptions): Promise<PluginOption[]> {
471
497
 
472
498
  try {
473
499
  const source = readFileSync(file, "utf-8");
474
- const trimmed = source.trimStart();
475
- if (
476
- trimmed.startsWith('"use client"') ||
477
- trimmed.startsWith("'use client'")
478
- ) {
479
- // Consume the update in RSC/SSR envs. The proxy module was already
480
- // re-transformed by the RSC plugin's hotUpdate. Without this, Vite
481
- // tries to propagate through the RSC/SSR module graph where the proxy
482
- // has no import.meta.hot.accept() boundary, triggering a full reload.
483
- // The actual component update is handled by React Refresh in the
484
- // client environment.
500
+ if (hasUseClientDirective(source)) {
485
501
  return [];
486
502
  }
487
- } catch {
488
- // File deleted/moved during HMR, let default handling proceed
489
- }
503
+ } catch {}
490
504
  },
491
505
  });
492
506
 
493
507
  plugins.push(exposeActionId());
494
-
495
- // "use cache" directive transform (enforce: "post"):
496
- // Wraps exports with registerCachedFunction() for function-level caching.
497
508
  plugins.push(useCacheTransform());
498
-
499
- // Consolidated plugin for create* ID injection (enforce: "post"):
500
- // loaders, handles, location state, and prerender handlers.
501
509
  plugins.push(exposeInternalIds());
502
-
503
- // Router ID injection runs at normal priority (no enforce) to avoid
504
- // changing Vite's dep optimization timing.
505
510
  plugins.push(exposeRouterId());
506
-
507
- // Add version virtual module plugin for cache invalidation
508
511
  plugins.push(createVersionPlugin());
509
512
 
510
- // Entry path for discovery: user-specified value (if any) or undefined.
511
- // Auto-discovered path is passed separately via routerRef.
512
- // Cloudflare preset: deferred to configResolved (read from resolved Vite env config).
513
513
  const discoveryEntryPath =
514
514
  preset !== "cloudflare" ? routerRef.path : undefined;
515
- // Ref for deferred auto-discovery (node preset only, undefined for cloudflare)
516
515
  const discoveryRouterRef = preset !== "cloudflare" ? routerRef : undefined;
517
516
 
518
- // Version injector: auto-injects VERSION and routes-manifest into the RSC entry.
519
- // For cloudflare preset, the entry is resolved lazily in configResolved.
520
- // For node preset, the virtual entry already includes these imports.
521
517
  if (preset === "cloudflare") {
522
518
  plugins.push(createVersionInjectorPlugin(undefined));
523
519
  }
524
520
 
525
- // Transform CJS vendor files to ESM for browser compatibility
526
- // optimizeDeps.include doesn't work because the file is loaded after initial optimization
527
521
  plugins.push(createCjsToEsmPlugin());
528
-
529
- // Router discovery plugin for build-time manifest generation.
530
- // For cloudflare, the entry is resolved lazily in configResolved from the RSC environment.
531
- // For node, discoveryRouterRef provides the auto-discovered path when not user-specified.
532
522
  plugins.push(
533
523
  createRouterDiscoveryPlugin(discoveryEntryPath, {
534
524
  routerPathRef: discoveryRouterRef,
535
525
  enableBuildPrerender: prerenderEnabled,
536
526
  buildEnv: options?.buildEnv,
537
527
  preset,
528
+ prerenderOnError: options?.prerender?.onError,
529
+ discovery: options?.discovery,
538
530
  clientChunkCtx,
539
531
  }),
540
532
  );
541
533
 
534
+ // Vercel preset: assemble .vercel/output from dist/ after the build. Pushed
535
+ // last so its (ssr-gated) closeBundle runs after the discovery plugin's
536
+ // rsc-env postprocess and after every environment has been written.
537
+ if (preset === "vercel") {
538
+ plugins.push(
539
+ createVercelOutputPlugin(resolvedOptions as RangoVercelOptions),
540
+ );
541
+ }
542
+
542
543
  debugConfig?.(
543
544
  "rango(%s) setup done: %d plugin(s) (%sms)",
544
545
  preset,
@@ -16,6 +16,7 @@ import {
16
16
  formatNestedRouterConflictError,
17
17
  findNestedRouterConflict,
18
18
  findRouterFiles,
19
+ createScanFilter,
19
20
  } from "../build/generate-route-types.js";
20
21
  import { firstCodeMatchIndex } from "../build/route-types/source-scan.js";
21
22
  import { createVersionPlugin } from "./plugins/version-plugin.js";
@@ -326,6 +327,12 @@ export function createRouterDiscoveryPlugin(
326
327
 
327
328
  configResolved(config) {
328
329
  s.projectRoot = config.root;
330
+ // Compile the optional discovery scan filter (glob include/exclude) now
331
+ // that the project root is known. findRouterFiles() below — and the
332
+ // build/HMR rediscovery paths — honor s.scanFilter.
333
+ s.scanFilter = opts?.discovery
334
+ ? createScanFilter(s.projectRoot, opts.discovery)
335
+ : undefined;
329
336
  s.isBuildMode = config.command === "build";
330
337
  viteCommand = config.command as "serve" | "build";
331
338
  viteMode = config.mode;
@@ -424,7 +431,8 @@ export function createRouterDiscoveryPlugin(
424
431
  releaseBuildEnv(s).catch(() => {});
425
432
  });
426
433
 
427
- // Mirror the build-path contract (router-discovery.ts ~line 878):
434
+ // Mirror the build-path contract (the buildStart hook below, which sets
435
+ // __rscRouterDiscoveryActive before running user modules):
428
436
  // set __rscRouterDiscoveryActive before running user modules so any
429
437
  // module-level router.reverse() calls return a placeholder instead
430
438
  // of throwing. The temp Vite server's module runner has its own
@@ -893,10 +901,9 @@ export function createRouterDiscoveryPlugin(
893
901
  if (wantIntercept && result.interceptSegments?.length) {
894
902
  payload = {
895
903
  segments: [...result.segments, ...result.interceptSegments],
896
- handles: {
897
- ...result.handles,
898
- ...(result.interceptHandles || {}),
899
- },
904
+ // Pre-encoded MERGED handle string from the producer (handles are
905
+ // Flight-encoded so Promise/ReactNode values survive the wire).
906
+ handles: result.interceptHandles ?? "",
900
907
  };
901
908
  } else {
902
909
  payload = { segments: result.segments, handles: result.handles };
@@ -905,9 +912,15 @@ export function createRouterDiscoveryPlugin(
905
912
  logResult(200, `match ${result.routeName}`);
906
913
  return;
907
914
  } catch (err: any) {
908
- console.warn(
909
- `[rango] Dev prerender failed for ${pathname}: ${err.message}`,
910
- );
915
+ // matchForPrerender now re-throws render failures instead of baking
916
+ // an error page (issue #587). In dev there is no frozen artifact, so
917
+ // we fall through (404 -> live handler). A `throw new Skip()` is the
918
+ // expected "skip this URL" signal, not a failure, so it stays quiet.
919
+ if (err?.name !== "Skip") {
920
+ console.warn(
921
+ `[rango] Dev prerender error for ${pathname} (serving live instead): ${err.message}`,
922
+ );
923
+ }
911
924
  }
912
925
  }
913
926
 
@@ -1,10 +1,6 @@
1
1
  import type MagicString from "magic-string";
2
2
  import { hashInlineId, buildExportMap } from "../plugins/expose-id-utils.js";
3
3
 
4
- // ---------------------------------------------------------------------------
5
- // Types
6
- // ---------------------------------------------------------------------------
7
-
8
4
  /** Minimal ESTree Program node — avoids importing from `rollup` (not a direct dep). */
9
5
  interface ProgramNode {
10
6
  type: "Program";
@@ -70,10 +66,6 @@ function findImportInsertionPos(
70
66
  return insertionPos;
71
67
  }
72
68
 
73
- // ---------------------------------------------------------------------------
74
- // AST walking helper
75
- // ---------------------------------------------------------------------------
76
-
77
69
  /**
78
70
  * Recursively walk an ESTree AST node, calling `enter` on each node.
79
71
  * Parent is passed for context.
@@ -111,10 +103,6 @@ function walkNode(
111
103
  ancestors.pop();
112
104
  }
113
105
 
114
- // ---------------------------------------------------------------------------
115
- // AST analysis
116
- // ---------------------------------------------------------------------------
117
-
118
106
  /**
119
107
  * Parse the file with Vite's parseAst and find all calls to `fnName`.
120
108
  * Distinguishes between `export const X = fnName(...)` (exportInfo set)
@@ -294,16 +282,23 @@ function isInertExpression(node: any): boolean {
294
282
  (e: any) => e === null || isInertExpression(e),
295
283
  );
296
284
  case "ObjectExpression":
297
- return (node.properties ?? []).every(
298
- (p: any) =>
285
+ return (node.properties ?? []).every((p: any) => {
286
+ // A spread inside an object (`{ ...x }`) is inert iff `x` is inert.
287
+ if (p.type === "SpreadElement" || p.type === "RestElement") {
288
+ return isInertExpression(p.argument);
289
+ }
290
+ return (
299
291
  p.type === "Property" &&
300
292
  (!p.computed || isInertExpression(p.key)) &&
301
- isInertExpression(p.value),
302
- );
293
+ isInertExpression(p.value)
294
+ );
295
+ });
303
296
  case "UnaryExpression":
304
297
  return isInertExpression(node.argument);
305
298
  case "BinaryExpression":
306
299
  return isInertExpression(node.left) && isInertExpression(node.right);
300
+ case "LogicalExpression":
301
+ return isInertExpression(node.left) && isInertExpression(node.right);
307
302
  case "ConditionalExpression":
308
303
  return (
309
304
  isInertExpression(node.test) &&
@@ -426,10 +421,6 @@ export function extractModuleLevelDeclarations(
426
421
  return declarations;
427
422
  }
428
423
 
429
- // ---------------------------------------------------------------------------
430
- // Transform
431
- // ---------------------------------------------------------------------------
432
-
433
424
  /**
434
425
  * Transform inline handler calls by extracting them into virtual modules.
435
426
  * Only processes inline calls (exportInfo === null); export const calls are