@rangojs/router 0.0.0-experimental.1b930379 → 0.0.0-experimental.1db96a9e

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 (944) hide show
  1. package/AGENTS.md +4 -0
  2. package/README.md +76 -18
  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 +138 -50
  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/dist/browser/react/use-client-cache.js +39 -0
  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/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/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +684 -366
  798. package/dist/vite/index.js.bak +5448 -0
  799. package/dist/vite/index.js.map +1 -0
  800. package/dist/vite/index.named-routes.gen.ts +103 -0
  801. package/dist/vite/package-resolution.d.ts +43 -0
  802. package/dist/vite/package-resolution.d.ts.map +1 -0
  803. package/dist/vite/package-resolution.js +112 -0
  804. package/dist/vite/package-resolution.js.map +1 -0
  805. package/dist/vite/virtual-entries.d.ts +25 -0
  806. package/dist/vite/virtual-entries.d.ts.map +1 -0
  807. package/dist/vite/virtual-entries.js +110 -0
  808. package/dist/vite/virtual-entries.js.map +1 -0
  809. package/package.json +16 -15
  810. package/skills/cache-guide/SKILL.md +32 -0
  811. package/skills/caching/SKILL.md +45 -4
  812. package/skills/links/SKILL.md +3 -1
  813. package/skills/loader/SKILL.md +53 -43
  814. package/skills/middleware/SKILL.md +2 -0
  815. package/skills/parallel/SKILL.md +126 -0
  816. package/skills/prerender/SKILL.md +110 -68
  817. package/skills/route/SKILL.md +31 -0
  818. package/skills/router-setup/SKILL.md +87 -2
  819. package/skills/typesafety/SKILL.md +10 -0
  820. package/src/__internal.ts +1 -1
  821. package/src/browser/app-version.ts +14 -0
  822. package/src/browser/event-controller.ts +5 -0
  823. package/src/browser/navigation-bridge.ts +19 -13
  824. package/src/browser/navigation-client.ts +115 -58
  825. package/src/browser/navigation-store.ts +43 -8
  826. package/src/browser/navigation-transaction.ts +11 -9
  827. package/src/browser/partial-update.ts +80 -15
  828. package/src/browser/prefetch/cache.ts +57 -5
  829. package/src/browser/prefetch/fetch.ts +38 -23
  830. package/src/browser/prefetch/queue.ts +92 -20
  831. package/src/browser/prefetch/resource-ready.ts +77 -0
  832. package/src/browser/react/Link.tsx +53 -9
  833. package/src/browser/react/NavigationProvider.tsx +40 -4
  834. package/src/browser/react/context.ts +7 -2
  835. package/src/browser/react/use-handle.ts +9 -58
  836. package/src/browser/react/use-router.ts +21 -8
  837. package/src/browser/rsc-router.tsx +134 -59
  838. package/src/browser/scroll-restoration.ts +41 -42
  839. package/src/browser/segment-reconciler.ts +6 -1
  840. package/src/browser/server-action-bridge.ts +8 -6
  841. package/src/browser/types.ts +36 -5
  842. package/src/build/generate-manifest.ts +6 -6
  843. package/src/build/generate-route-types.ts +3 -0
  844. package/src/build/route-types/include-resolution.ts +8 -1
  845. package/src/build/route-types/router-processing.ts +223 -74
  846. package/src/build/route-types/scan-filter.ts +8 -1
  847. package/src/cache/cache-runtime.ts +15 -11
  848. package/src/cache/cache-scope.ts +48 -7
  849. package/src/cache/cf/cf-cache-store.ts +453 -11
  850. package/src/cache/cf/index.ts +5 -1
  851. package/src/cache/document-cache.ts +17 -7
  852. package/src/cache/index.ts +1 -0
  853. package/src/cache/taint.ts +55 -0
  854. package/src/client.tsx +2 -56
  855. package/src/context-var.ts +72 -2
  856. package/src/debug.ts +2 -2
  857. package/src/handle.ts +40 -0
  858. package/src/index.rsc.ts +3 -1
  859. package/src/index.ts +12 -0
  860. package/src/prerender/store.ts +5 -4
  861. package/src/prerender.ts +138 -77
  862. package/src/reverse.ts +22 -1
  863. package/src/route-definition/dsl-helpers.ts +73 -25
  864. package/src/route-definition/helpers-types.ts +10 -6
  865. package/src/route-definition/index.ts +3 -0
  866. package/src/route-definition/redirect.ts +11 -3
  867. package/src/route-definition/resolve-handler-use.ts +149 -0
  868. package/src/route-map-builder.ts +7 -1
  869. package/src/route-types.ts +11 -0
  870. package/src/router/content-negotiation.ts +100 -1
  871. package/src/router/find-match.ts +4 -2
  872. package/src/router/handler-context.ts +79 -23
  873. package/src/router/intercept-resolution.ts +11 -4
  874. package/src/router/lazy-includes.ts +4 -1
  875. package/src/router/loader-resolution.ts +156 -21
  876. package/src/router/logging.ts +5 -2
  877. package/src/router/manifest.ts +9 -3
  878. package/src/router/match-api.ts +124 -189
  879. package/src/router/match-middleware/background-revalidation.ts +30 -2
  880. package/src/router/match-middleware/cache-lookup.ts +92 -16
  881. package/src/router/match-middleware/cache-store.ts +53 -10
  882. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  883. package/src/router/match-middleware/segment-resolution.ts +61 -5
  884. package/src/router/match-result.ts +22 -6
  885. package/src/router/metrics.ts +6 -1
  886. package/src/router/middleware-types.ts +6 -8
  887. package/src/router/middleware.ts +4 -6
  888. package/src/router/navigation-snapshot.ts +182 -0
  889. package/src/router/prerender-match.ts +110 -10
  890. package/src/router/preview-match.ts +30 -102
  891. package/src/router/request-classification.ts +310 -0
  892. package/src/router/route-snapshot.ts +245 -0
  893. package/src/router/router-context.ts +6 -1
  894. package/src/router/router-interfaces.ts +36 -4
  895. package/src/router/router-options.ts +37 -11
  896. package/src/router/segment-resolution/fresh.ts +193 -20
  897. package/src/router/segment-resolution/helpers.ts +29 -24
  898. package/src/router/segment-resolution/loader-cache.ts +1 -0
  899. package/src/router/segment-resolution/revalidation.ts +431 -297
  900. package/src/router/segment-wrappers.ts +2 -0
  901. package/src/router/types.ts +1 -0
  902. package/src/router.ts +59 -6
  903. package/src/rsc/handler.ts +464 -368
  904. package/src/rsc/loader-fetch.ts +23 -3
  905. package/src/rsc/manifest-init.ts +5 -1
  906. package/src/rsc/progressive-enhancement.ts +14 -2
  907. package/src/rsc/rsc-rendering.ts +10 -1
  908. package/src/rsc/server-action.ts +8 -0
  909. package/src/rsc/ssr-setup.ts +2 -2
  910. package/src/rsc/types.ts +9 -1
  911. package/src/segment-system.tsx +140 -4
  912. package/src/server/context.ts +140 -14
  913. package/src/server/handle-store.ts +19 -0
  914. package/src/server/loader-registry.ts +9 -8
  915. package/src/server/request-context.ts +185 -19
  916. package/src/ssr/index.tsx +4 -0
  917. package/src/static-handler.ts +18 -6
  918. package/src/types/cache-types.ts +4 -4
  919. package/src/types/handler-context.ts +137 -33
  920. package/src/types/loader-types.ts +36 -9
  921. package/src/types/route-entry.ts +8 -1
  922. package/src/types/segments.ts +2 -0
  923. package/src/urls/path-helper-types.ts +9 -2
  924. package/src/urls/path-helper.ts +48 -13
  925. package/src/urls/pattern-types.ts +12 -0
  926. package/src/urls/response-types.ts +16 -6
  927. package/src/use-loader.tsx +73 -4
  928. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  929. package/src/vite/discovery/discover-routers.ts +5 -1
  930. package/src/vite/discovery/prerender-collection.ts +44 -1
  931. package/src/vite/discovery/state.ts +13 -6
  932. package/src/vite/index.ts +4 -0
  933. package/src/vite/plugin-types.ts +51 -79
  934. package/src/vite/plugins/expose-action-id.ts +1 -3
  935. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  936. package/src/vite/plugins/expose-internal-ids.ts +122 -39
  937. package/src/vite/plugins/performance-tracks.ts +88 -0
  938. package/src/vite/plugins/refresh-cmd.ts +88 -26
  939. package/src/vite/plugins/version-plugin.ts +13 -1
  940. package/src/vite/rango.ts +163 -211
  941. package/src/vite/router-discovery.ts +178 -45
  942. package/src/vite/utils/banner.ts +3 -3
  943. package/src/vite/utils/prerender-utils.ts +18 -0
  944. package/src/vite/utils/shared-utils.ts +3 -2
@@ -292,7 +292,7 @@ function exposeActionId() {
292
292
  }
293
293
  if (!rscPluginApi) {
294
294
  throw new Error(
295
- "[rsc-router] Could not find @vitejs/plugin-rsc. @rangojs/router requires the Vite RSC plugin.\nThe RSC plugin should be included automatically. If you disabled it with\nrango({ rsc: false }), add rsc() before rango() in your config."
295
+ "[rsc-router] Could not find @vitejs/plugin-rsc. @rangojs/router requires the Vite RSC plugin, which is included automatically by rango()."
296
296
  );
297
297
  }
298
298
  if (!isBuild) return;
@@ -910,9 +910,7 @@ function generateWholeFileStubs(cfg, bindings, code, filePath, isBuild) {
910
910
  });
911
911
  return { code: stubs.join("\n") + "\n", map: null };
912
912
  }
913
- function generateExprStubs(cfg, bindings, code, filePath, sourceId, isBuild) {
914
- if (bindings.length === 0) return null;
915
- const s = new MagicString2(code);
913
+ function stubHandlerExprs(cfg, bindings, s, filePath, isBuild) {
916
914
  let hasChanges = false;
917
915
  for (const binding of bindings) {
918
916
  const exportName = binding.exportNames[0];
@@ -924,15 +922,7 @@ function generateExprStubs(cfg, bindings, code, filePath, sourceId, isBuild) {
924
922
  );
925
923
  hasChanges = true;
926
924
  }
927
- if (!hasChanges) return null;
928
- return {
929
- code: s.toString(),
930
- map: s.generateMap({
931
- source: sourceId,
932
- includeContent: true,
933
- hires: "boundary"
934
- })
935
- };
925
+ return hasChanges;
936
926
  }
937
927
  function transformHandlerIds(cfg, bindings, s, filePath, isBuild) {
938
928
  let hasChanges = false;
@@ -1269,15 +1259,6 @@ ${lazyImports.join(",\n")}
1269
1259
  isBuild
1270
1260
  );
1271
1261
  if (wholeFile) return wholeFile;
1272
- const exprStubs = generateExprStubs(
1273
- PRERENDER_CONFIG,
1274
- bindings,
1275
- code,
1276
- filePath,
1277
- id,
1278
- isBuild
1279
- );
1280
- if (exprStubs) return exprStubs;
1281
1262
  }
1282
1263
  if (hasPrerenderHandlerCode && isRscEnv && isBuild) {
1283
1264
  const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
@@ -1329,15 +1310,57 @@ ${lazyImports.join(",\n")}
1329
1310
  isBuild
1330
1311
  );
1331
1312
  if (wholeFile) return wholeFile;
1332
- const exprStubs = generateExprStubs(
1333
- STATIC_CONFIG,
1334
- bindings,
1335
- code,
1336
- filePath,
1337
- id,
1338
- isBuild
1339
- );
1340
- if (exprStubs) return exprStubs;
1313
+ }
1314
+ if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
1315
+ const allBindings = [];
1316
+ if (hasLoaderCode) {
1317
+ allBindings.push(...getBindings(code, getFnNames("createLoader")));
1318
+ }
1319
+ if (hasHandleCode) {
1320
+ allBindings.push(...getBindings(code, getFnNames("createHandle")));
1321
+ }
1322
+ if (hasLocationStateCode) {
1323
+ allBindings.push(
1324
+ ...getBindings(code, getFnNames("createLocationState"))
1325
+ );
1326
+ }
1327
+ if (hasPrerenderHandlerCode) {
1328
+ allBindings.push(
1329
+ ...getBindings(code, getFnNames(PRERENDER_CONFIG.fnName))
1330
+ );
1331
+ }
1332
+ if (hasStaticHandlerCode) {
1333
+ allBindings.push(
1334
+ ...getBindings(code, getFnNames(STATIC_CONFIG.fnName))
1335
+ );
1336
+ }
1337
+ if (allBindings.length > 0 && isExportOnlyFile(code, allBindings)) {
1338
+ const stubs = [];
1339
+ for (const binding of allBindings) {
1340
+ const name = binding.exportNames[0];
1341
+ const stubId = isBuild ? hashId(filePath, name) : `${filePath}#${name}`;
1342
+ const fnCall = code.slice(
1343
+ binding.callExprStart,
1344
+ binding.callOpenParenPos + 1
1345
+ );
1346
+ let brand = "loader";
1347
+ if (hasPrerenderHandlerCode && getFnNames(PRERENDER_CONFIG.fnName).some(
1348
+ (n) => fnCall.includes(n)
1349
+ )) {
1350
+ brand = PRERENDER_CONFIG.brand;
1351
+ } else if (hasStaticHandlerCode && getFnNames(STATIC_CONFIG.fnName).some((n) => fnCall.includes(n))) {
1352
+ brand = STATIC_CONFIG.brand;
1353
+ } else if (hasHandleCode && getFnNames("createHandle").some((n) => fnCall.includes(n))) {
1354
+ brand = "handle";
1355
+ } else if (hasLocationStateCode && getFnNames("createLocationState").some((n) => fnCall.includes(n))) {
1356
+ brand = "locationState";
1357
+ }
1358
+ stubs.push(
1359
+ `export const ${name} = { __brand: "${brand}", $$id: "${stubId}" };`
1360
+ );
1361
+ }
1362
+ return { code: stubs.join("\n") + "\n", map: null };
1363
+ }
1341
1364
  }
1342
1365
  if (hasStaticHandlerCode && isRscEnv && isBuild) {
1343
1366
  const fnNames = getFnNames(STATIC_CONFIG.fnName);
@@ -1372,25 +1395,41 @@ ${lazyImports.join(",\n")}
1372
1395
  isBuild
1373
1396
  ) || changed;
1374
1397
  }
1375
- if (hasPrerenderHandlerCode && isRscEnv) {
1398
+ if (hasPrerenderHandlerCode) {
1376
1399
  const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
1377
- changed = transformHandlerIds(
1378
- PRERENDER_CONFIG,
1379
- getBindings(code, fnNames),
1380
- s,
1381
- filePath,
1382
- isBuild
1383
- ) || changed;
1400
+ const bindings = getBindings(code, fnNames);
1401
+ if (isRscEnv) {
1402
+ changed = transformHandlerIds(
1403
+ PRERENDER_CONFIG,
1404
+ bindings,
1405
+ s,
1406
+ filePath,
1407
+ isBuild
1408
+ ) || changed;
1409
+ } else {
1410
+ changed = stubHandlerExprs(
1411
+ PRERENDER_CONFIG,
1412
+ bindings,
1413
+ s,
1414
+ filePath,
1415
+ isBuild
1416
+ ) || changed;
1417
+ }
1384
1418
  }
1385
- if (hasStaticHandlerCode && isRscEnv) {
1419
+ if (hasStaticHandlerCode) {
1386
1420
  const fnNames = getFnNames(STATIC_CONFIG.fnName);
1387
- changed = transformHandlerIds(
1388
- STATIC_CONFIG,
1389
- getBindings(code, fnNames),
1390
- s,
1391
- filePath,
1392
- isBuild
1393
- ) || changed;
1421
+ const bindings = getBindings(code, fnNames);
1422
+ if (isRscEnv) {
1423
+ changed = transformHandlerIds(
1424
+ STATIC_CONFIG,
1425
+ bindings,
1426
+ s,
1427
+ filePath,
1428
+ isBuild
1429
+ ) || changed;
1430
+ } else {
1431
+ changed = stubHandlerExprs(STATIC_CONFIG, bindings, s, filePath, isBuild) || changed;
1432
+ }
1394
1433
  }
1395
1434
  if (!changed) return;
1396
1435
  return {
@@ -1745,7 +1784,7 @@ import { resolve } from "node:path";
1745
1784
  // package.json
1746
1785
  var package_default = {
1747
1786
  name: "@rangojs/router",
1748
- version: "0.0.0-experimental.1b930379",
1787
+ version: "0.0.0-experimental.1db96a9e",
1749
1788
  description: "Django-inspired RSC router with composable URL patterns",
1750
1789
  keywords: [
1751
1790
  "react",
@@ -1887,7 +1926,7 @@ var package_default = {
1887
1926
  "test:unit:watch": "vitest"
1888
1927
  },
1889
1928
  dependencies: {
1890
- "@vitejs/plugin-rsc": "^0.5.14",
1929
+ "@vitejs/plugin-rsc": "^0.5.19",
1891
1930
  "magic-string": "^0.30.17",
1892
1931
  picomatch: "^4.0.3",
1893
1932
  "rsc-html-stream": "^0.0.7"
@@ -2095,31 +2134,7 @@ declare global {
2095
2134
  }
2096
2135
 
2097
2136
  // src/build/route-types/scan-filter.ts
2098
- import { join, relative } from "node:path";
2099
2137
  import picomatch from "picomatch";
2100
- var DEFAULT_EXCLUDE_PATTERNS = [
2101
- "**/__tests__/**",
2102
- "**/__mocks__/**",
2103
- "**/dist/**",
2104
- "**/coverage/**",
2105
- "**/*.test.{ts,tsx,js,jsx}",
2106
- "**/*.spec.{ts,tsx,js,jsx}"
2107
- ];
2108
- function createScanFilter(root, opts) {
2109
- const { include, exclude } = opts;
2110
- const hasInclude = include && include.length > 0;
2111
- const hasCustomExclude = exclude !== void 0;
2112
- if (!hasInclude && !hasCustomExclude) return void 0;
2113
- const effectiveExclude = exclude ?? DEFAULT_EXCLUDE_PATTERNS;
2114
- const includeMatcher = hasInclude ? picomatch(include) : null;
2115
- const excludeMatcher = effectiveExclude.length > 0 ? picomatch(effectiveExclude) : null;
2116
- return (absolutePath) => {
2117
- const rel = relative(root, absolutePath);
2118
- if (excludeMatcher && excludeMatcher(rel)) return false;
2119
- if (includeMatcher) return includeMatcher(rel);
2120
- return true;
2121
- };
2122
- }
2123
2138
 
2124
2139
  // src/build/route-types/per-module-writer.ts
2125
2140
  import ts4 from "typescript";
@@ -2341,7 +2356,7 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
2341
2356
  }
2342
2357
  return routeMap;
2343
2358
  }
2344
- function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut) {
2359
+ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock) {
2345
2360
  visited = visited ?? /* @__PURE__ */ new Set();
2346
2361
  const realPath = resolve2(filePath);
2347
2362
  const key = variableName ? `${realPath}:${variableName}` : realPath;
@@ -2357,7 +2372,9 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
2357
2372
  return { routes: {}, searchSchemas: {} };
2358
2373
  }
2359
2374
  let block;
2360
- if (variableName) {
2375
+ if (inlineBlock) {
2376
+ block = inlineBlock;
2377
+ } else if (variableName) {
2361
2378
  const extracted = extractUrlsBlockForVariable(source, variableName);
2362
2379
  if (!extracted) return { routes: {}, searchSchemas: {} };
2363
2380
  block = extracted;
@@ -2386,7 +2403,7 @@ import {
2386
2403
  readdirSync
2387
2404
  } from "node:fs";
2388
2405
  import {
2389
- join as join2,
2406
+ join,
2390
2407
  dirname as dirname2,
2391
2408
  resolve as resolve3,
2392
2409
  sep,
@@ -2406,7 +2423,7 @@ function countPublicRouteEntries(source) {
2406
2423
  }
2407
2424
  var ROUTER_CALL_PATTERN = /\bcreateRouter\s*[<(]/;
2408
2425
  function isRoutableSourceFile(name) {
2409
- return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.");
2426
+ return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.") && !name.includes(".test.") && !name.includes(".spec.");
2410
2427
  }
2411
2428
  function findRouterFilesRecursive(dir, filter, results) {
2412
2429
  let entries;
@@ -2421,9 +2438,10 @@ function findRouterFilesRecursive(dir, filter, results) {
2421
2438
  const childDirs = [];
2422
2439
  const routerFilesInDir = [];
2423
2440
  for (const entry of entries) {
2424
- const fullPath = join2(dir, entry.name);
2441
+ const fullPath = join(dir, entry.name);
2425
2442
  if (entry.isDirectory()) {
2426
- if (entry.name === "node_modules" || entry.name.startsWith(".")) continue;
2443
+ if (entry.name === "node_modules" || entry.name === "dist" || entry.name === "coverage" || entry.name === "__tests__" || entry.name === "__mocks__" || entry.name.startsWith("."))
2444
+ continue;
2427
2445
  childDirs.push(fullPath);
2428
2446
  continue;
2429
2447
  }
@@ -2475,7 +2493,7 @@ Router root: ${conflict.ancestor}
2475
2493
  Nested router: ${conflict.nested}
2476
2494
  Move the nested router into a sibling directory or configure it as a separate app root.`;
2477
2495
  }
2478
- function extractUrlsVariableFromRouter(code) {
2496
+ function extractUrlsFromRouter(code) {
2479
2497
  const sourceFile = ts5.createSourceFile(
2480
2498
  "router.tsx",
2481
2499
  code,
@@ -2489,24 +2507,70 @@ function extractUrlsVariableFromRouter(code) {
2489
2507
  const callee = node.expression;
2490
2508
  return ts5.isIdentifier(callee) && callee.text === "createRouter";
2491
2509
  }
2510
+ function isInlineBuilder(node) {
2511
+ return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
2512
+ }
2513
+ function isRoutesOnCreateRouter(node) {
2514
+ if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
2515
+ return false;
2516
+ let inner = node.expression.expression;
2517
+ while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
2518
+ inner = inner.expression.expression;
2519
+ }
2520
+ return isCreateRouterCall(inner);
2521
+ }
2492
2522
  function visit(node) {
2493
2523
  if (result) return;
2494
- if (ts5.isCallExpression(node) && ts5.isPropertyAccessExpression(node.expression) && node.expression.name.text === "routes" && node.arguments.length >= 1 && ts5.isIdentifier(node.arguments[0])) {
2495
- let inner = node.expression.expression;
2496
- while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
2497
- inner = inner.expression.expression;
2498
- }
2499
- if (isCreateRouterCall(inner)) {
2500
- result = node.arguments[0].text;
2501
- return;
2524
+ if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
2525
+ const arg = node.arguments[0];
2526
+ if (ts5.isIdentifier(arg)) {
2527
+ result = { kind: "variable", name: arg.text };
2528
+ } else if (isInlineBuilder(arg)) {
2529
+ result = { kind: "inline", block: arg.getText(sourceFile) };
2502
2530
  }
2531
+ return;
2503
2532
  }
2504
2533
  if (isCreateRouterCall(node)) {
2505
2534
  const callExpr = node;
2506
- for (const arg of callExpr.arguments) {
2535
+ for (const callArg of callExpr.arguments) {
2536
+ if (ts5.isObjectLiteralExpression(callArg)) {
2537
+ for (const prop of callArg.properties) {
2538
+ if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
2539
+ if (ts5.isIdentifier(prop.initializer)) {
2540
+ result = { kind: "variable", name: prop.initializer.text };
2541
+ } else if (isInlineBuilder(prop.initializer)) {
2542
+ result = {
2543
+ kind: "inline",
2544
+ block: prop.initializer.getText(sourceFile)
2545
+ };
2546
+ }
2547
+ return;
2548
+ }
2549
+ }
2550
+ }
2551
+ }
2552
+ }
2553
+ ts5.forEachChild(node, visit);
2554
+ }
2555
+ visit(sourceFile);
2556
+ return result;
2557
+ }
2558
+ function extractBasenameFromRouter(code) {
2559
+ const sourceFile = ts5.createSourceFile(
2560
+ "router.tsx",
2561
+ code,
2562
+ ts5.ScriptTarget.Latest,
2563
+ true,
2564
+ ts5.ScriptKind.TSX
2565
+ );
2566
+ let result;
2567
+ function visit(node) {
2568
+ if (result !== void 0) return;
2569
+ if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
2570
+ for (const arg of node.arguments) {
2507
2571
  if (ts5.isObjectLiteralExpression(arg)) {
2508
2572
  for (const prop of arg.properties) {
2509
- if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls" && ts5.isIdentifier(prop.initializer)) {
2573
+ if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
2510
2574
  result = prop.initializer.text;
2511
2575
  return;
2512
2576
  }
@@ -2519,6 +2583,19 @@ function extractUrlsVariableFromRouter(code) {
2519
2583
  visit(sourceFile);
2520
2584
  return result;
2521
2585
  }
2586
+ function applyBasenameToRoutes(result, basename3) {
2587
+ const prefixed = {};
2588
+ for (const [name, pattern] of Object.entries(result.routes)) {
2589
+ if (pattern === "/") {
2590
+ prefixed[name] = basename3;
2591
+ } else if (basename3.endsWith("/") && pattern.startsWith("/")) {
2592
+ prefixed[name] = basename3 + pattern.slice(1);
2593
+ } else {
2594
+ prefixed[name] = basename3 + pattern;
2595
+ }
2596
+ }
2597
+ return { routes: prefixed, searchSchemas: result.searchSchemas };
2598
+ }
2522
2599
  function buildCombinedRouteMapForRouterFile(routerFilePath) {
2523
2600
  let routerSource;
2524
2601
  try {
@@ -2526,19 +2603,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
2526
2603
  } catch {
2527
2604
  return { routes: {}, searchSchemas: {} };
2528
2605
  }
2529
- const urlsVarName = extractUrlsVariableFromRouter(routerSource);
2530
- if (!urlsVarName) {
2606
+ const extraction = extractUrlsFromRouter(routerSource);
2607
+ if (!extraction) {
2531
2608
  return { routes: {}, searchSchemas: {} };
2532
2609
  }
2533
- const imported = resolveImportedVariable(routerSource, urlsVarName);
2534
- if (imported) {
2535
- const targetFile = resolveImportPath(imported.specifier, routerFilePath);
2536
- if (!targetFile) {
2537
- return { routes: {}, searchSchemas: {} };
2610
+ const rawBasename = extractBasenameFromRouter(routerSource);
2611
+ const basename3 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
2612
+ let result;
2613
+ if (extraction.kind === "inline") {
2614
+ result = buildCombinedRouteMapWithSearch(
2615
+ routerFilePath,
2616
+ void 0,
2617
+ void 0,
2618
+ void 0,
2619
+ extraction.block
2620
+ );
2621
+ } else {
2622
+ const imported = resolveImportedVariable(routerSource, extraction.name);
2623
+ if (imported) {
2624
+ const targetFile = resolveImportPath(imported.specifier, routerFilePath);
2625
+ if (!targetFile) {
2626
+ return { routes: {}, searchSchemas: {} };
2627
+ }
2628
+ result = buildCombinedRouteMapWithSearch(
2629
+ targetFile,
2630
+ imported.exportedName
2631
+ );
2632
+ } else {
2633
+ result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
2538
2634
  }
2539
- return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
2540
2635
  }
2541
- return buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
2636
+ if (basename3) {
2637
+ result = applyBasenameToRoutes(result, basename3);
2638
+ }
2639
+ return result;
2542
2640
  }
2543
2641
  function findRouterFiles(root, filter) {
2544
2642
  const result = [];
@@ -2547,7 +2645,7 @@ function findRouterFiles(root, filter) {
2547
2645
  }
2548
2646
  function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
2549
2647
  try {
2550
- const oldCombinedPath = join2(root, "src", "named-routes.gen.ts");
2648
+ const oldCombinedPath = join(root, "src", "named-routes.gen.ts");
2551
2649
  if (existsSync3(oldCombinedPath)) {
2552
2650
  unlinkSync(oldCombinedPath);
2553
2651
  console.log(
@@ -2563,31 +2661,21 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
2563
2661
  throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
2564
2662
  }
2565
2663
  for (const routerFilePath of routerFilePaths) {
2566
- let routerSource;
2567
- try {
2568
- routerSource = readFileSync2(routerFilePath, "utf-8");
2569
- } catch {
2570
- continue;
2571
- }
2572
- const urlsVarName = extractUrlsVariableFromRouter(routerSource);
2573
- if (!urlsVarName) continue;
2574
- let result;
2575
- const imported = resolveImportedVariable(routerSource, urlsVarName);
2576
- if (imported) {
2577
- const targetFile = resolveImportPath(imported.specifier, routerFilePath);
2578
- if (!targetFile) continue;
2579
- result = buildCombinedRouteMapWithSearch(
2580
- targetFile,
2581
- imported.exportedName
2582
- );
2583
- } else {
2584
- result = buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
2664
+ const result = buildCombinedRouteMapForRouterFile(routerFilePath);
2665
+ if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
2666
+ let routerSource;
2667
+ try {
2668
+ routerSource = readFileSync2(routerFilePath, "utf-8");
2669
+ } catch {
2670
+ continue;
2671
+ }
2672
+ if (!extractUrlsFromRouter(routerSource)) continue;
2585
2673
  }
2586
2674
  const routerBasename = pathBasename(routerFilePath).replace(
2587
2675
  /\.(tsx?|jsx?)$/,
2588
2676
  ""
2589
2677
  );
2590
- const outPath = join2(
2678
+ const outPath = join(
2591
2679
  dirname2(routerFilePath),
2592
2680
  `${routerBasename}.named-routes.gen.ts`
2593
2681
  );
@@ -2717,8 +2805,9 @@ function createVersionPlugin() {
2717
2805
  let isDev = false;
2718
2806
  let server = null;
2719
2807
  const clientModuleSignatures = /* @__PURE__ */ new Map();
2808
+ let versionCounter = 0;
2720
2809
  const bumpVersion = (reason) => {
2721
- currentVersion = Date.now().toString(16);
2810
+ currentVersion = Date.now().toString(16) + String(++versionCounter);
2722
2811
  console.log(`[rsc-router] ${reason}, version updated: ${currentVersion}`);
2723
2812
  const rscEnv = server?.environments?.rsc;
2724
2813
  const versionMod = rscEnv?.moduleGraph?.getModuleById(
@@ -2774,6 +2863,9 @@ function createVersionPlugin() {
2774
2863
  if (!isDev) return;
2775
2864
  const isRscModule = this.environment?.name === "rsc";
2776
2865
  if (!isRscModule) return;
2866
+ if (ctx.modules.length === 1 && ctx.modules[0].id === "\0" + VIRTUAL_IDS.version) {
2867
+ return;
2868
+ }
2777
2869
  if (isCodeModule(ctx.file)) {
2778
2870
  const filePath = normalizeModuleId(ctx.file);
2779
2871
  const previousSignature = clientModuleSignatures.get(filePath);
@@ -2803,6 +2895,68 @@ function createVersionPlugin() {
2803
2895
 
2804
2896
  // src/vite/utils/shared-utils.ts
2805
2897
  import * as Vite from "vite";
2898
+
2899
+ // src/vite/plugins/performance-tracks.ts
2900
+ import { readFile } from "node:fs/promises";
2901
+ var RSDW_PATCH_RE = /((?:var|let|const)\s+\w+\s*=\s*root\._children\s*,\s*(\w+)\s*=\s*root\._debugInfo\s*[;,])/;
2902
+ function buildPatchReplacement(match, debugInfoVar) {
2903
+ return `${match}
2904
+ if (${debugInfoVar} && 0 === ${debugInfoVar}.length && "fulfilled" === root.status) {
2905
+ var _resolved = "function" === typeof resolveLazy ? resolveLazy(root.value) : root.value;
2906
+ if ("object" === typeof _resolved && null !== _resolved && isArrayImpl(_resolved._debugInfo)) {
2907
+ ${debugInfoVar} = _resolved._debugInfo;
2908
+ }
2909
+ }`;
2910
+ }
2911
+ function patchRsdwClientDebugInfoRecovery(code) {
2912
+ const match = code.match(RSDW_PATCH_RE);
2913
+ if (!match) {
2914
+ return { code, debugInfoVar: null };
2915
+ }
2916
+ return {
2917
+ code: code.replace(match[1], buildPatchReplacement(match[1], match[2])),
2918
+ debugInfoVar: match[2]
2919
+ };
2920
+ }
2921
+ function performanceTracksOptimizeDepsPlugin() {
2922
+ return {
2923
+ name: "@rangojs/router:performance-tracks-optimize-deps",
2924
+ setup(build) {
2925
+ build.onLoad(
2926
+ {
2927
+ filter: /react-server-dom-webpack-client\.browser\.(development|production)\.js$/
2928
+ },
2929
+ async (args) => {
2930
+ const code = await readFile(args.path, "utf8");
2931
+ const patched = patchRsdwClientDebugInfoRecovery(code);
2932
+ return {
2933
+ contents: patched.code,
2934
+ loader: "js"
2935
+ };
2936
+ }
2937
+ );
2938
+ }
2939
+ };
2940
+ }
2941
+ function performanceTracksPlugin() {
2942
+ return {
2943
+ name: "@rangojs/router:performance-tracks",
2944
+ transform(code, id) {
2945
+ if (!id.includes("react-server-dom") || !id.includes("client")) return;
2946
+ const patched = patchRsdwClientDebugInfoRecovery(code);
2947
+ if (!patched.debugInfoVar) return;
2948
+ if (process.env.INTERNAL_RANGO_DEBUG)
2949
+ console.log(
2950
+ "[perf-tracks] patched RSDW client (var:",
2951
+ patched.debugInfoVar,
2952
+ ")"
2953
+ );
2954
+ return patched.code;
2955
+ }
2956
+ };
2957
+ }
2958
+
2959
+ // src/vite/utils/shared-utils.ts
2806
2960
  var versionEsbuildPlugin = {
2807
2961
  name: "@rangojs/router-version",
2808
2962
  setup(build) {
@@ -2820,7 +2974,7 @@ var versionEsbuildPlugin = {
2820
2974
  }
2821
2975
  };
2822
2976
  var sharedEsbuildOptions = {
2823
- plugins: [versionEsbuildPlugin]
2977
+ plugins: [versionEsbuildPlugin, performanceTracksOptimizeDepsPlugin()]
2824
2978
  };
2825
2979
  function createVirtualEntriesPlugin(entries, routerPathRef) {
2826
2980
  const virtualModules = {};
@@ -2903,11 +3057,11 @@ ${dim} \u2571${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2
2903
3057
  ${dim} ${reset}${bold}\u2551 \u2551${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2727. \u2571${reset}
2904
3058
  ${dim} ${reset}${bold}\u2554\u2557 \u2551 \u2551 \u2551 \u2551${reset}${dim} * \u2571${reset}
2905
3059
  ${dim} ${reset}${bold}\u2551\u2551 \u2551 \u2551 \u2551 \u2551 \u2566\u2550\u2557\u2554\u2550\u2557\u2554\u2557\u2554\u2554\u2550\u2557\u2554\u2550\u2557${reset}${dim} \u2727 \u2726${reset}
2906
- ${dim} ${reset}${bold}\u2550\u2563\u2551 \u2551 \u2560\u2550\u255D \u2551 \u2560\u2566\u255D\u2560\u2550\u2563\u2551\u2551\u2551\u2551 \u2566\u2551 \u2551${reset}${dim} * \u2727${reset}
3060
+ ${dim} ${reset}${bold}\u2551\u2551 \u2551 \u2560\u2550\u255D \u2551 \u2560\u2566\u255D\u2560\u2550\u2563\u2551\u2551\u2551\u2551 \u2566\u2551 \u2551${reset}${dim} * \u2727${reset}
2907
3061
  ${dim} ${reset}${bold}\u2551\u255A\u2550\u255D \u2554\u2550\u2550\u2550\u255D \u2569\u255A\u2550\u2569 \u2569\u255D\u255A\u255D\u255A\u2550\u255D\u255A\u2550\u255D${reset}${dim} \u2726 . *${reset}
2908
3062
  ${dim} ${reset}${bold}\u255A\u2550\u2550\u2557 \u2551${reset}${dim} * RSC Wrangler \u2727 \u2726${reset}
2909
- ${dim} * ${reset}${bold}\u2551 \u2560\u2550${reset}${dim} * \u2727. \u2571${reset}
2910
- ${bold}\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2569\u2550\u2550\u2550${reset}${dim} \u2726 *${reset}
3063
+ ${dim} * ${reset}${bold}\u2551 \u2551${reset}${dim} * \u2727. \u2571${reset}
3064
+ ${dim} ${reset}${bold}\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550${reset}${dim} \u2726 *${reset}
2911
3065
 
2912
3066
  v${version} \xB7 ${preset} \xB7 ${mode}
2913
3067
  `;
@@ -3026,6 +3180,8 @@ function createCjsToEsmPlugin() {
3026
3180
  import { createServer as createViteServer } from "vite";
3027
3181
  import { resolve as resolve8 } from "node:path";
3028
3182
  import { readFileSync as readFileSync6 } from "node:fs";
3183
+ import { createRequire } from "node:module";
3184
+ import { pathToFileURL } from "node:url";
3029
3185
 
3030
3186
  // src/vite/plugins/virtual-stub-plugin.ts
3031
3187
  function createVirtualStubPlugin() {
@@ -3052,7 +3208,7 @@ function createVirtualStubPlugin() {
3052
3208
  }
3053
3209
 
3054
3210
  // src/vite/plugins/client-ref-hashing.ts
3055
- import { relative as relative2 } from "node:path";
3211
+ import { relative } from "node:path";
3056
3212
  import { createHash as createHash2 } from "node:crypto";
3057
3213
  var CLIENT_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-package-proxy/";
3058
3214
  var CLIENT_IN_SERVER_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/";
@@ -3065,10 +3221,10 @@ function computeProductionHash(projectRoot, refKey) {
3065
3221
  const absPath = decodeURIComponent(
3066
3222
  refKey.slice(CLIENT_IN_SERVER_PKG_PROXY_PREFIX.length)
3067
3223
  );
3068
- toHash = relative2(projectRoot, absPath).replaceAll("\\", "/");
3224
+ toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
3069
3225
  } else if (refKey.startsWith(FS_PREFIX)) {
3070
3226
  const absPath = refKey.slice(FS_PREFIX.length - 1);
3071
- toHash = relative2(projectRoot, absPath).replaceAll("\\", "/");
3227
+ toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
3072
3228
  } else if (refKey.startsWith("/")) {
3073
3229
  toHash = refKey.slice(1);
3074
3230
  } else {
@@ -3209,8 +3365,8 @@ function createDiscoveryState(entryPath, opts) {
3209
3365
  perRouterManifestDataMap: /* @__PURE__ */ new Map(),
3210
3366
  prerenderManifestEntries: null,
3211
3367
  staticManifestEntries: null,
3212
- handlerChunkInfo: null,
3213
- staticHandlerChunkInfo: null,
3368
+ handlerChunkInfoMap: /* @__PURE__ */ new Map(),
3369
+ staticHandlerChunkInfoMap: /* @__PURE__ */ new Map(),
3214
3370
  rscEntryFileName: null,
3215
3371
  resolvedPrerenderModules: void 0,
3216
3372
  resolvedStaticModules: void 0,
@@ -3293,8 +3449,17 @@ function jsonParseExpression(value) {
3293
3449
  }
3294
3450
 
3295
3451
  // src/context-var.ts
3452
+ var NON_CACHEABLE_KEYS = /* @__PURE__ */ Symbol.for(
3453
+ "rango:non-cacheable-keys"
3454
+ );
3455
+ function getNonCacheableKeys(variables) {
3456
+ if (!variables[NON_CACHEABLE_KEYS]) {
3457
+ variables[NON_CACHEABLE_KEYS] = /* @__PURE__ */ new Set();
3458
+ }
3459
+ return variables[NON_CACHEABLE_KEYS];
3460
+ }
3296
3461
  var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
3297
- function contextSet(variables, keyOrVar, value) {
3462
+ function contextSet(variables, keyOrVar, value, options) {
3298
3463
  if (typeof keyOrVar === "string") {
3299
3464
  if (FORBIDDEN_KEYS.has(keyOrVar)) {
3300
3465
  throw new Error(
@@ -3302,8 +3467,14 @@ function contextSet(variables, keyOrVar, value) {
3302
3467
  );
3303
3468
  }
3304
3469
  variables[keyOrVar] = value;
3470
+ if (options?.cache === false) {
3471
+ getNonCacheableKeys(variables).add(keyOrVar);
3472
+ }
3305
3473
  } else {
3306
3474
  variables[keyOrVar.key] = value;
3475
+ if (options?.cache === false) {
3476
+ getNonCacheableKeys(variables).add(keyOrVar.key);
3477
+ }
3307
3478
  }
3308
3479
  }
3309
3480
 
@@ -3326,6 +3497,7 @@ function encodePathParam(value) {
3326
3497
  }
3327
3498
  function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
3328
3499
  let result = pattern;
3500
+ let hadOmittedOptional = false;
3329
3501
  for (const [key, value] of Object.entries(params)) {
3330
3502
  const escaped = escapeRegExp2(key);
3331
3503
  result = result.replace(
@@ -3334,6 +3506,15 @@ function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
3334
3506
  );
3335
3507
  result = result.replace(`*${key}`, encode(value));
3336
3508
  }
3509
+ result = result.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?\?/g, () => {
3510
+ hadOmittedOptional = true;
3511
+ return "";
3512
+ });
3513
+ if (hadOmittedOptional) {
3514
+ const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
3515
+ result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
3516
+ if (hadTrailingSlash && !result.endsWith("/")) result += "/";
3517
+ }
3337
3518
  return result;
3338
3519
  }
3339
3520
  async function runWithConcurrency(items, concurrency, fn) {
@@ -3442,14 +3623,33 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3442
3623
  if (!params) return pattern;
3443
3624
  return substituteRouteParams(pattern, params);
3444
3625
  };
3626
+ let resolvedRoutes = 0;
3627
+ let totalDynamic = 0;
3628
+ for (const { manifest } of allManifests) {
3629
+ if (!manifest.prerenderRoutes) continue;
3630
+ for (const routeName of manifest.prerenderRoutes) {
3631
+ const pattern = manifest.routeManifest[routeName];
3632
+ if (pattern && (pattern.includes(":") || pattern.includes("*"))) {
3633
+ totalDynamic++;
3634
+ }
3635
+ }
3636
+ }
3637
+ const paramsStart = performance.now();
3638
+ const progressInterval = totalDynamic > 0 ? setInterval(() => {
3639
+ const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
3640
+ console.log(
3641
+ `[rsc-router] Resolving prerender params... ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
3642
+ );
3643
+ }, 5e3) : void 0;
3445
3644
  for (const { manifest } of allManifests) {
3446
3645
  if (!manifest.prerenderRoutes) continue;
3447
3646
  const defs = manifest._prerenderDefs || {};
3647
+ const passthroughSet = new Set(manifest.passthroughRoutes || []);
3448
3648
  for (const routeName of manifest.prerenderRoutes) {
3449
3649
  const pattern = manifest.routeManifest[routeName];
3450
3650
  if (!pattern) continue;
3451
3651
  const def = defs[routeName];
3452
- const isPassthroughRoute = !!def?.options?.passthrough;
3652
+ const isPassthroughRoute = passthroughSet.has(routeName);
3453
3653
  const hasDynamic = pattern.includes(":") || pattern.includes("*");
3454
3654
  if (!hasDynamic) {
3455
3655
  entries.push({
@@ -3462,12 +3662,20 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3462
3662
  if (def?.getParams) {
3463
3663
  try {
3464
3664
  const buildVars = {};
3665
+ const buildEnv = state.resolvedBuildEnv;
3465
3666
  const getParamsCtx = {
3466
3667
  build: true,
3668
+ dev: !state.isBuildMode,
3467
3669
  set: ((keyOrVar, value) => {
3468
3670
  contextSet(buildVars, keyOrVar, value);
3469
3671
  }),
3470
- reverse: getParamsReverse
3672
+ reverse: getParamsReverse,
3673
+ get env() {
3674
+ if (buildEnv !== void 0) return buildEnv;
3675
+ throw new Error(
3676
+ "[rsc-router] ctx.env is not available during build-time getParams(). Configure buildEnv in your rango() plugin options to enable build-time env access."
3677
+ );
3678
+ }
3471
3679
  };
3472
3680
  const paramsList = await def.getParams(getParamsCtx);
3473
3681
  const concurrency = def.options?.concurrency ?? 1;
@@ -3492,7 +3700,9 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3492
3700
  isPassthroughRoute
3493
3701
  });
3494
3702
  }
3703
+ resolvedRoutes++;
3495
3704
  } catch (err) {
3705
+ resolvedRoutes++;
3496
3706
  if (err.name === "Skip") {
3497
3707
  console.log(
3498
3708
  `[rsc-router] SKIP route "${routeName}" - ${err.message}`
@@ -3521,6 +3731,7 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3521
3731
  }
3522
3732
  }
3523
3733
  }
3734
+ if (progressInterval) clearInterval(progressInterval);
3524
3735
  if (entries.length === 0) return;
3525
3736
  const maxConcurrency = Math.max(...entries.map((e) => e.concurrency));
3526
3737
  const concurrencyNote = maxConcurrency > 1 ? ` (concurrency: ${maxConcurrency})` : "";
@@ -3546,7 +3757,8 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3546
3757
  entry.urlPath,
3547
3758
  {},
3548
3759
  entry.buildVars,
3549
- entry.isPassthroughRoute
3760
+ entry.isPassthroughRoute,
3761
+ state.resolvedBuildEnv
3550
3762
  );
3551
3763
  if (!result) continue;
3552
3764
  if (result.passthrough) {
@@ -3670,7 +3882,9 @@ async function renderStaticHandlers(state, rscEnv, registry) {
3670
3882
  const result = await routerInstance.renderStaticSegment(
3671
3883
  def.handler,
3672
3884
  def.$$id,
3673
- def.$$routePrefix
3885
+ def.$$routePrefix,
3886
+ state.resolvedBuildEnv,
3887
+ !state.isBuildMode
3674
3888
  );
3675
3889
  if (result) {
3676
3890
  const hasHandles = Object.keys(result.handles).length > 0;
@@ -3795,7 +4009,11 @@ async function discoverRouters(state, rscEnv) {
3795
4009
  if (!router.urlpatterns || !generateManifestFull) {
3796
4010
  continue;
3797
4011
  }
3798
- const manifest = generateManifestFull(router.urlpatterns, routerMountIndex);
4012
+ const manifest = generateManifestFull(
4013
+ router.urlpatterns,
4014
+ routerMountIndex,
4015
+ router.__basename ? { urlPrefix: router.__basename } : void 0
4016
+ );
3799
4017
  routerMountIndex++;
3800
4018
  allManifests.push({ id, manifest });
3801
4019
  const routeCount = Object.keys(manifest.routeManifest).length;
@@ -3937,7 +4155,7 @@ async function discoverRouters(state, rscEnv) {
3937
4155
  }
3938
4156
 
3939
4157
  // src/vite/discovery/route-types-writer.ts
3940
- import { dirname as dirname3, basename, join as join3, resolve as resolve6 } from "node:path";
4158
+ import { dirname as dirname3, basename, join as join2, resolve as resolve6 } from "node:path";
3941
4159
  import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, existsSync as existsSync5, unlinkSync as unlinkSync2 } from "node:fs";
3942
4160
  function filterUserNamedRoutes(manifest) {
3943
4161
  const filtered = {};
@@ -3958,7 +4176,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
3958
4176
  /\.(tsx?|jsx?)$/,
3959
4177
  ""
3960
4178
  );
3961
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4179
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
3962
4180
  try {
3963
4181
  preContent.set(outPath, readFileSync4(outPath, "utf-8"));
3964
4182
  } catch {
@@ -3971,7 +4189,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
3971
4189
  /\.(tsx?|jsx?)$/,
3972
4190
  ""
3973
4191
  );
3974
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4192
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
3975
4193
  if (!existsSync5(outPath)) continue;
3976
4194
  try {
3977
4195
  const content = readFileSync4(outPath, "utf-8");
@@ -3988,7 +4206,7 @@ function writeRouteTypesFiles(state) {
3988
4206
  const entryDir = dirname3(
3989
4207
  resolve6(state.projectRoot, state.resolvedEntryPath)
3990
4208
  );
3991
- const oldCombinedPath = join3(entryDir, "named-routes.gen.ts");
4209
+ const oldCombinedPath = join2(entryDir, "named-routes.gen.ts");
3992
4210
  if (existsSync5(oldCombinedPath)) {
3993
4211
  unlinkSync2(oldCombinedPath);
3994
4212
  console.log(
@@ -4013,7 +4231,7 @@ Set an explicit \`id\` on createRouter() or check the call site.`
4013
4231
  }
4014
4232
  const routerDir = dirname3(sourceFile);
4015
4233
  const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
4016
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4234
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
4017
4235
  const userRoutes = filterUserNamedRoutes(routeManifest);
4018
4236
  let effectiveSearchSchemas = routeSearchSchemas;
4019
4237
  if ((!effectiveSearchSchemas || Object.keys(effectiveSearchSchemas).length === 0) && sourceFile) {
@@ -4078,7 +4296,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
4078
4296
  }
4079
4297
  const routerDir = dirname3(sourceFile);
4080
4298
  const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
4081
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4299
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
4082
4300
  const source = generateRouteTypesSource(
4083
4301
  mergedRoutes,
4084
4302
  Object.keys(mergedSearchSchemas).length > 0 ? mergedSearchSchemas : void 0
@@ -4092,7 +4310,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
4092
4310
  }
4093
4311
 
4094
4312
  // src/vite/discovery/virtual-module-codegen.ts
4095
- import { dirname as dirname4, basename as basename2, join as join4 } from "node:path";
4313
+ import { dirname as dirname4, basename as basename2, join as join3 } from "node:path";
4096
4314
  function generateRoutesManifestModule(state) {
4097
4315
  const hasManifest = state.mergedRouteManifest && Object.keys(state.mergedRouteManifest).length > 0;
4098
4316
  if (hasManifest) {
@@ -4107,7 +4325,7 @@ function generateRoutesManifestModule(state) {
4107
4325
  /\.(tsx?|jsx?)$/,
4108
4326
  ""
4109
4327
  );
4110
- const genPath = join4(
4328
+ const genPath = join3(
4111
4329
  routerDir,
4112
4330
  `${routerBasename}.named-routes.gen.js`
4113
4331
  ).replaceAll("\\", "/");
@@ -4204,7 +4422,7 @@ function generatePerRouterModule(state, routerId) {
4204
4422
  /\.(tsx?|jsx?)$/,
4205
4423
  ""
4206
4424
  );
4207
- const genPath = join4(
4425
+ const genPath = join3(
4208
4426
  routerDir,
4209
4427
  `${routerBasename}.named-routes.gen.js`
4210
4428
  ).replaceAll("\\", "/");
@@ -4244,48 +4462,45 @@ function postprocessBundle(state) {
4244
4462
  );
4245
4463
  const evictionTargets = [
4246
4464
  {
4247
- info: state.handlerChunkInfo,
4465
+ infos: state.handlerChunkInfoMap.values(),
4248
4466
  fnName: "Prerender",
4249
4467
  brand: "prerenderHandler",
4250
4468
  label: "handler code from RSC bundle"
4251
4469
  },
4252
4470
  {
4253
- info: state.staticHandlerChunkInfo,
4471
+ infos: state.staticHandlerChunkInfoMap.values(),
4254
4472
  fnName: "Static",
4255
4473
  brand: "staticHandler",
4256
4474
  label: "static handler code"
4257
4475
  }
4258
4476
  ];
4259
4477
  for (const target of evictionTargets) {
4260
- if (!target.info) continue;
4261
- const chunkPath = resolve7(
4262
- state.projectRoot,
4263
- "dist/rsc",
4264
- target.info.fileName
4265
- );
4266
- try {
4267
- const code = readFileSync5(chunkPath, "utf-8");
4268
- const result = evictHandlerCode(
4269
- code,
4270
- target.info.exports,
4271
- target.fnName,
4272
- target.brand
4273
- );
4274
- if (result) {
4275
- writeFileSync4(chunkPath, result.code);
4276
- const savedKB = (result.savedBytes / 1024).toFixed(1);
4277
- console.log(
4278
- `[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${target.info.fileName}`
4478
+ for (const info of target.infos) {
4479
+ const chunkPath = resolve7(state.projectRoot, "dist/rsc", info.fileName);
4480
+ try {
4481
+ const code = readFileSync5(chunkPath, "utf-8");
4482
+ const result = evictHandlerCode(
4483
+ code,
4484
+ info.exports,
4485
+ target.fnName,
4486
+ target.brand
4487
+ );
4488
+ if (result) {
4489
+ writeFileSync4(chunkPath, result.code);
4490
+ const savedKB = (result.savedBytes / 1024).toFixed(1);
4491
+ console.log(
4492
+ `[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${info.fileName}`
4493
+ );
4494
+ }
4495
+ } catch (replaceErr) {
4496
+ console.warn(
4497
+ `[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
4279
4498
  );
4280
4499
  }
4281
- } catch (replaceErr) {
4282
- console.warn(
4283
- `[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
4284
- );
4285
4500
  }
4286
4501
  }
4287
- state.handlerChunkInfo = null;
4288
- state.staticHandlerChunkInfo = null;
4502
+ state.handlerChunkInfoMap.clear();
4503
+ state.staticHandlerChunkInfoMap.clear();
4289
4504
  if (hasPrerenderData && existsSync6(rscEntryPath)) {
4290
4505
  const rscCode = readFileSync5(rscEntryPath, "utf-8");
4291
4506
  if (!rscCode.includes("__prerender-manifest.js")) {
@@ -4328,7 +4543,7 @@ function postprocessBundle(state) {
4328
4543
  }
4329
4544
  if (hasStaticData && existsSync6(rscEntryPath)) {
4330
4545
  const rscCode = readFileSync5(rscEntryPath, "utf-8");
4331
- if (!rscCode.includes("__STATIC_MANIFEST")) {
4546
+ if (!rscCode.includes("__static-manifest.js")) {
4332
4547
  try {
4333
4548
  const manifestEntries = [];
4334
4549
  let totalBytes = copyStagedBuildAssets(
@@ -4397,8 +4612,67 @@ async function createTempRscServer(state, options = {}) {
4397
4612
  ]
4398
4613
  });
4399
4614
  }
4615
+ async function resolveBuildEnv(option, factoryCtx) {
4616
+ if (!option) return null;
4617
+ if (option === "auto") {
4618
+ if (factoryCtx.preset !== "cloudflare") {
4619
+ throw new Error(
4620
+ '[rsc-router] buildEnv: "auto" is only supported with preset: "cloudflare". Use a factory function or plain object for other presets.'
4621
+ );
4622
+ }
4623
+ try {
4624
+ const userRequire = createRequire(
4625
+ resolve8(factoryCtx.root, "package.json")
4626
+ );
4627
+ const wranglerPath = userRequire.resolve("wrangler");
4628
+ const { getPlatformProxy } = await import(pathToFileURL(wranglerPath).href);
4629
+ const proxy = await getPlatformProxy();
4630
+ return {
4631
+ env: proxy.env,
4632
+ dispose: proxy.dispose
4633
+ };
4634
+ } catch (err) {
4635
+ throw new Error(
4636
+ `[rsc-router] buildEnv: "auto" requires wrangler to be installed.
4637
+ Install it with: pnpm add -D wrangler
4638
+ ${err.message}`
4639
+ );
4640
+ }
4641
+ }
4642
+ if (typeof option === "function") {
4643
+ return await option(factoryCtx);
4644
+ }
4645
+ return { env: option };
4646
+ }
4647
+ async function acquireBuildEnv(s, command, mode) {
4648
+ const option = s.opts?.buildEnv;
4649
+ if (!option) return false;
4650
+ const result = await resolveBuildEnv(option, {
4651
+ root: s.projectRoot,
4652
+ mode,
4653
+ command,
4654
+ preset: s.opts?.preset ?? "node"
4655
+ });
4656
+ if (!result) return false;
4657
+ s.resolvedBuildEnv = result.env;
4658
+ s.buildEnvDispose = result.dispose ?? null;
4659
+ return true;
4660
+ }
4661
+ async function releaseBuildEnv(s) {
4662
+ if (s.buildEnvDispose) {
4663
+ try {
4664
+ await s.buildEnvDispose();
4665
+ } catch (err) {
4666
+ console.warn(`[rsc-router] buildEnv dispose failed: ${err.message}`);
4667
+ }
4668
+ s.buildEnvDispose = null;
4669
+ }
4670
+ s.resolvedBuildEnv = void 0;
4671
+ }
4400
4672
  function createRouterDiscoveryPlugin(entryPath, opts) {
4401
4673
  const s = createDiscoveryState(entryPath, opts);
4674
+ let viteCommand = "build";
4675
+ let viteMode = "production";
4402
4676
  return {
4403
4677
  name: "@rangojs/router:discovery",
4404
4678
  config() {
@@ -4407,31 +4681,13 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4407
4681
  __RANGO_DEBUG__: JSON.stringify(!!process.env.INTERNAL_RANGO_DEBUG)
4408
4682
  }
4409
4683
  };
4410
- if (opts?.enableBuildPrerender) {
4411
- config.environments = {
4412
- rsc: {
4413
- build: {
4414
- rollupOptions: {
4415
- output: {
4416
- manualChunks(id) {
4417
- if (s.resolvedPrerenderModules?.has(id)) {
4418
- return "__prerender-handlers";
4419
- }
4420
- if (s.resolvedStaticModules?.has(id)) {
4421
- return "__static-handlers";
4422
- }
4423
- }
4424
- }
4425
- }
4426
- }
4427
- }
4428
- };
4429
- }
4430
4684
  return config;
4431
4685
  },
4432
4686
  configResolved(config) {
4433
4687
  s.projectRoot = config.root;
4434
4688
  s.isBuildMode = config.command === "build";
4689
+ viteCommand = config.command;
4690
+ viteMode = config.mode;
4435
4691
  s.userResolveAlias = config.resolve.alias;
4436
4692
  if (!s.resolvedEntryPath && opts?.routerPathRef?.path) {
4437
4693
  s.resolvedEntryPath = opts.routerPathRef.path;
@@ -4445,12 +4701,6 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4445
4701
  s.resolvedEntryPath = entries[0];
4446
4702
  }
4447
4703
  }
4448
- if (opts?.include || opts?.exclude) {
4449
- s.scanFilter = createScanFilter(s.projectRoot, {
4450
- include: opts.include,
4451
- exclude: opts.exclude
4452
- });
4453
- }
4454
4704
  if (opts?.staticRouteTypesGeneration !== false) {
4455
4705
  s.cachedRouterFiles = findRouterFiles(s.projectRoot, s.scanFilter);
4456
4706
  writeCombinedRouteTypesWithTracking(s, { preserveIfLarger: true });
@@ -4482,6 +4732,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4482
4732
  });
4483
4733
  prerenderTempServer = null;
4484
4734
  }
4735
+ releaseBuildEnv(s).catch(() => {
4736
+ });
4485
4737
  });
4486
4738
  async function getOrCreateTempServer() {
4487
4739
  if (prerenderNodeRegistry) {
@@ -4512,6 +4764,7 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4512
4764
  if (!rscEnv?.runner) {
4513
4765
  s.devServerOrigin = getDevServerOrigin();
4514
4766
  try {
4767
+ await acquireBuildEnv(s, viteCommand, viteMode);
4515
4768
  const tempRscEnv = await getOrCreateTempServer();
4516
4769
  if (tempRscEnv) {
4517
4770
  await discoverRouters(s, tempRscEnv);
@@ -4527,6 +4780,7 @@ ${err.stack}`
4527
4780
  return;
4528
4781
  }
4529
4782
  try {
4783
+ await acquireBuildEnv(s, viteCommand, viteMode);
4530
4784
  const serverMod = await rscEnv.runner.import(
4531
4785
  "@rangojs/router/server"
4532
4786
  );
@@ -4591,7 +4845,26 @@ ${err.stack}`
4591
4845
  res.end("Missing pathname");
4592
4846
  return;
4593
4847
  }
4594
- let registry = mainRegistry;
4848
+ const rscEnv = server.environments?.rsc;
4849
+ let registry = null;
4850
+ if (rscEnv?.runner && s.resolvedEntryPath) {
4851
+ try {
4852
+ await rscEnv.runner.import(s.resolvedEntryPath);
4853
+ const serverMod = await rscEnv.runner.import(
4854
+ "@rangojs/router/server"
4855
+ );
4856
+ registry = serverMod.RouterRegistry ?? null;
4857
+ } catch (err) {
4858
+ console.warn(
4859
+ `[rsc-router] Dev prerender module refresh failed: ${err.message}`
4860
+ );
4861
+ res.statusCode = 500;
4862
+ res.end(`Prerender handler error: ${err.message}`);
4863
+ return;
4864
+ }
4865
+ } else {
4866
+ registry = mainRegistry;
4867
+ }
4595
4868
  if (!registry) {
4596
4869
  if (!prerenderNodeRegistry) {
4597
4870
  await getOrCreateTempServer();
@@ -4613,7 +4886,10 @@ ${err.stack}`
4613
4886
  pathname,
4614
4887
  {},
4615
4888
  void 0,
4616
- wantPassthrough
4889
+ wantPassthrough,
4890
+ s.resolvedBuildEnv,
4891
+ true
4892
+ // devMode: check getParams for passthrough routes
4617
4893
  );
4618
4894
  if (!result) continue;
4619
4895
  if (result.passthrough) continue;
@@ -4749,6 +5025,7 @@ ${err.stack}`
4749
5025
  resetStagedBuildAssets(s.projectRoot);
4750
5026
  s.prerenderManifestEntries = null;
4751
5027
  s.staticManifestEntries = null;
5028
+ await acquireBuildEnv(s, viteCommand, viteMode);
4752
5029
  let tempServer = null;
4753
5030
  globalThis.__rscRouterDiscoveryActive = true;
4754
5031
  try {
@@ -4788,6 +5065,7 @@ ${details}`
4788
5065
  if (tempServer) {
4789
5066
  await tempServer.close();
4790
5067
  }
5068
+ await releaseBuildEnv(s);
4791
5069
  }
4792
5070
  },
4793
5071
  // Virtual module: provides the pre-generated route manifest as a JS module
@@ -4830,20 +5108,30 @@ ${details}`
4830
5108
  }
4831
5109
  if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
4832
5110
  return;
5111
+ s.handlerChunkInfoMap.clear();
5112
+ s.staticHandlerChunkInfoMap.clear();
4833
5113
  for (const [fileName, chunk] of Object.entries(bundle)) {
4834
5114
  if (chunk.type !== "chunk") continue;
4835
- if (fileName.includes("__prerender-handlers") && s.resolvedPrerenderModules?.size) {
5115
+ if (s.resolvedPrerenderModules?.size) {
4836
5116
  const handlers = extractHandlerExportsFromChunk(
4837
5117
  chunk.code,
4838
5118
  s.resolvedPrerenderModules,
4839
5119
  "Prerender",
4840
- true
5120
+ false
4841
5121
  );
4842
5122
  if (handlers.length > 0) {
4843
- s.handlerChunkInfo = { fileName, exports: handlers };
5123
+ const existing = s.handlerChunkInfoMap.get(fileName);
5124
+ if (existing) {
5125
+ existing.exports.push(...handlers);
5126
+ } else {
5127
+ s.handlerChunkInfoMap.set(fileName, {
5128
+ fileName,
5129
+ exports: handlers
5130
+ });
5131
+ }
4844
5132
  }
4845
5133
  }
4846
- if (fileName.includes("__static-handlers") && s.resolvedStaticModules?.size) {
5134
+ if (s.resolvedStaticModules?.size) {
4847
5135
  const handlers = extractHandlerExportsFromChunk(
4848
5136
  chunk.code,
4849
5137
  s.resolvedStaticModules,
@@ -4851,7 +5139,15 @@ ${details}`
4851
5139
  false
4852
5140
  );
4853
5141
  if (handlers.length > 0) {
4854
- s.staticHandlerChunkInfo = { fileName, exports: handlers };
5142
+ const existing = s.staticHandlerChunkInfoMap.get(fileName);
5143
+ if (existing) {
5144
+ existing.exports.push(...handlers);
5145
+ } else {
5146
+ s.staticHandlerChunkInfoMap.set(fileName, {
5147
+ fileName,
5148
+ exports: handlers
5149
+ });
5150
+ }
4855
5151
  }
4856
5152
  }
4857
5153
  }
@@ -4878,8 +5174,16 @@ async function rango(options) {
4878
5174
  const showBanner = resolvedOptions.banner ?? true;
4879
5175
  const plugins = [];
4880
5176
  const rangoAliases = getPackageAliases();
4881
- const excludeDeps = getExcludeDeps();
4882
- let rscEntryPath = null;
5177
+ const excludeDeps = [
5178
+ ...getExcludeDeps(),
5179
+ // The public browser entry re-exports the RSDW browser client.
5180
+ // Excluding both keeps Vite from freezing the unpatched bundle into
5181
+ // .vite/deps before our source transforms run.
5182
+ "@vitejs/plugin-rsc/browser",
5183
+ // Keep the browser RSDW client out of Vite's dep optimizer so our
5184
+ // cjs-to-esm transform can patch the real file.
5185
+ "@vitejs/plugin-rsc/vendor/react-server-dom/client.browser"
5186
+ ];
4883
5187
  const routerRef = { path: void 0 };
4884
5188
  const prerenderEnabled = true;
4885
5189
  if (preset === "cloudflare") {
@@ -4975,6 +5279,7 @@ async function rango(options) {
4975
5279
  }
4976
5280
  });
4977
5281
  plugins.push(createVirtualEntriesPlugin(finalEntries));
5282
+ plugins.push(performanceTracksPlugin());
4978
5283
  plugins.push(
4979
5284
  rsc({
4980
5285
  entries: finalEntries,
@@ -4983,153 +5288,122 @@ async function rango(options) {
4983
5288
  );
4984
5289
  plugins.push(clientRefDedup());
4985
5290
  } else {
4986
- const nodeOptions = resolvedOptions;
4987
- routerRef.path = nodeOptions.router;
4988
- if (!routerRef.path) {
4989
- plugins.push({
4990
- name: "@rangojs/router:auto-discover",
4991
- config(userConfig) {
4992
- if (routerRef.path) return;
4993
- const root = userConfig.root ? resolve9(process.cwd(), userConfig.root) : process.cwd();
4994
- const filter = createScanFilter(root, {
4995
- include: resolvedOptions.include,
4996
- exclude: resolvedOptions.exclude
4997
- });
4998
- const candidates = findRouterFiles(root, filter);
4999
- if (candidates.length === 1) {
5000
- const abs = candidates[0];
5001
- routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
5002
- } else if (candidates.length > 1) {
5003
- const list = candidates.map(
5004
- (f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
5005
- ).join("\n");
5006
- throw new Error(
5007
- `[rsc-router] Multiple routers found. Specify \`router\` to choose one:
5008
- ${list}`
5009
- );
5010
- }
5291
+ plugins.push({
5292
+ name: "@rangojs/router:auto-discover",
5293
+ config(userConfig) {
5294
+ if (routerRef.path) return;
5295
+ const root = userConfig.root ? resolve9(process.cwd(), userConfig.root) : process.cwd();
5296
+ const candidates = findRouterFiles(root);
5297
+ if (candidates.length === 1) {
5298
+ const abs = candidates[0];
5299
+ routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
5300
+ } else if (candidates.length > 1) {
5301
+ const list = candidates.map(
5302
+ (f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
5303
+ ).join("\n");
5304
+ throw new Error(`[rsc-router] Multiple routers found:
5305
+ ${list}`);
5011
5306
  }
5012
- });
5013
- }
5014
- const rscOption = nodeOptions.rsc ?? true;
5015
- if (rscOption !== false) {
5016
- const { default: rsc } = await import("@vitejs/plugin-rsc");
5017
- const userEntries = typeof rscOption === "boolean" ? {} : rscOption.entries || {};
5018
- const finalEntries = {
5019
- client: userEntries.client ?? VIRTUAL_IDS.browser,
5020
- ssr: userEntries.ssr ?? VIRTUAL_IDS.ssr,
5021
- rsc: userEntries.rsc ?? VIRTUAL_IDS.rsc
5022
- };
5023
- rscEntryPath = userEntries.rsc ?? null;
5024
- let hasWarnedDuplicate = false;
5025
- plugins.push({
5026
- name: "@rangojs/router:rsc-integration",
5027
- enforce: "pre",
5028
- config() {
5029
- const useVirtualClient = finalEntries.client === VIRTUAL_IDS.browser;
5030
- const useVirtualSSR = finalEntries.ssr === VIRTUAL_IDS.ssr;
5031
- const useVirtualRSC = finalEntries.rsc === VIRTUAL_IDS.rsc;
5032
- return {
5033
- // Exclude rsc-router modules from optimization to prevent module duplication
5034
- // This ensures the same Context instance is used by both browser entry and RSC proxy modules
5035
- optimizeDeps: {
5036
- exclude: excludeDeps,
5037
- esbuildOptions: sharedEsbuildOptions
5038
- },
5039
- build: {
5040
- rollupOptions: { onwarn }
5041
- },
5042
- resolve: {
5043
- alias: rangoAliases
5044
- },
5045
- environments: {
5046
- client: {
5047
- build: {
5048
- rollupOptions: {
5049
- output: {
5050
- manualChunks: getManualChunks
5051
- }
5052
- }
5053
- },
5054
- // Always exclude rsc-router modules, conditionally add virtual entry
5055
- optimizeDeps: {
5056
- // Pre-bundle React and rsc-html-stream to prevent late discovery
5057
- // triggering ERR_OUTDATED_OPTIMIZED_DEP on cold starts
5058
- include: [
5059
- "react",
5060
- "react-dom",
5061
- "react/jsx-runtime",
5062
- "react/jsx-dev-runtime",
5063
- "rsc-html-stream/client"
5064
- ],
5065
- exclude: excludeDeps,
5066
- esbuildOptions: sharedEsbuildOptions,
5067
- ...useVirtualClient && {
5068
- // Tell Vite to scan the virtual entry for dependencies
5069
- entries: [VIRTUAL_IDS.browser]
5070
- }
5071
- }
5072
- },
5073
- ...useVirtualSSR && {
5074
- ssr: {
5075
- optimizeDeps: {
5076
- entries: [VIRTUAL_IDS.ssr],
5077
- // Pre-bundle all SSR deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
5078
- include: [
5079
- "react",
5080
- "react-dom",
5081
- "react-dom/server.edge",
5082
- "react-dom/static.edge",
5083
- "react/jsx-runtime",
5084
- "react/jsx-dev-runtime",
5085
- "@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
5086
- ],
5087
- exclude: excludeDeps,
5088
- esbuildOptions: sharedEsbuildOptions
5307
+ }
5308
+ });
5309
+ const finalEntries = {
5310
+ client: VIRTUAL_IDS.browser,
5311
+ ssr: VIRTUAL_IDS.ssr,
5312
+ rsc: VIRTUAL_IDS.rsc
5313
+ };
5314
+ const { default: rsc } = await import("@vitejs/plugin-rsc");
5315
+ let hasWarnedDuplicate = false;
5316
+ plugins.push({
5317
+ name: "@rangojs/router:rsc-integration",
5318
+ enforce: "pre",
5319
+ config() {
5320
+ return {
5321
+ optimizeDeps: {
5322
+ exclude: excludeDeps,
5323
+ esbuildOptions: sharedEsbuildOptions
5324
+ },
5325
+ build: {
5326
+ rollupOptions: { onwarn }
5327
+ },
5328
+ resolve: {
5329
+ alias: rangoAliases
5330
+ },
5331
+ environments: {
5332
+ client: {
5333
+ build: {
5334
+ rollupOptions: {
5335
+ output: {
5336
+ manualChunks: getManualChunks
5089
5337
  }
5090
5338
  }
5091
5339
  },
5092
- ...useVirtualRSC && {
5093
- rsc: {
5094
- optimizeDeps: {
5095
- entries: [VIRTUAL_IDS.rsc],
5096
- // Pre-bundle all RSC deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
5097
- include: [
5098
- "react",
5099
- "react/jsx-runtime",
5100
- "react/jsx-dev-runtime",
5101
- "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
5102
- ],
5103
- esbuildOptions: sharedEsbuildOptions
5104
- }
5105
- }
5340
+ optimizeDeps: {
5341
+ include: [
5342
+ "react",
5343
+ "react-dom",
5344
+ "react/jsx-runtime",
5345
+ "react/jsx-dev-runtime",
5346
+ "rsc-html-stream/client"
5347
+ ],
5348
+ exclude: excludeDeps,
5349
+ esbuildOptions: sharedEsbuildOptions,
5350
+ entries: [VIRTUAL_IDS.browser]
5351
+ }
5352
+ },
5353
+ ssr: {
5354
+ optimizeDeps: {
5355
+ entries: [VIRTUAL_IDS.ssr],
5356
+ include: [
5357
+ "react",
5358
+ "react-dom",
5359
+ "react-dom/server.edge",
5360
+ "react-dom/static.edge",
5361
+ "react/jsx-runtime",
5362
+ "react/jsx-dev-runtime",
5363
+ "@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
5364
+ ],
5365
+ exclude: excludeDeps,
5366
+ esbuildOptions: sharedEsbuildOptions
5367
+ }
5368
+ },
5369
+ rsc: {
5370
+ optimizeDeps: {
5371
+ entries: [VIRTUAL_IDS.rsc],
5372
+ include: [
5373
+ "react",
5374
+ "react/jsx-runtime",
5375
+ "react/jsx-dev-runtime",
5376
+ "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
5377
+ ],
5378
+ esbuildOptions: sharedEsbuildOptions
5106
5379
  }
5107
5380
  }
5108
- };
5109
- },
5110
- configResolved(config) {
5111
- if (showBanner) {
5112
- const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
5113
- printBanner(mode, "node", rangoVersion);
5114
- }
5115
- const rscMinimalCount = config.plugins.filter(
5116
- (p) => p.name === "rsc:minimal"
5117
- ).length;
5118
- if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
5119
- hasWarnedDuplicate = true;
5120
- console.warn(
5121
- "[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your config or use rango({ rsc: false }) for manual configuration."
5122
- );
5123
5381
  }
5382
+ };
5383
+ },
5384
+ configResolved(config) {
5385
+ if (showBanner) {
5386
+ const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
5387
+ printBanner(mode, "node", rangoVersion);
5124
5388
  }
5125
- });
5126
- plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
5127
- plugins.push(
5128
- rsc({
5129
- entries: finalEntries
5130
- })
5131
- );
5132
- }
5389
+ const rscMinimalCount = config.plugins.filter(
5390
+ (p) => p.name === "rsc:minimal"
5391
+ ).length;
5392
+ if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
5393
+ hasWarnedDuplicate = true;
5394
+ console.warn(
5395
+ "[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your vite config \u2014 rango() includes it automatically."
5396
+ );
5397
+ }
5398
+ }
5399
+ });
5400
+ plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
5401
+ plugins.push(performanceTracksPlugin());
5402
+ plugins.push(
5403
+ rsc({
5404
+ entries: finalEntries
5405
+ })
5406
+ );
5133
5407
  plugins.push(clientRefDedup());
5134
5408
  }
5135
5409
  plugins.push({
@@ -5157,18 +5431,16 @@ ${list}`
5157
5431
  plugins.push(createVersionPlugin());
5158
5432
  const discoveryEntryPath = preset !== "cloudflare" ? routerRef.path : void 0;
5159
5433
  const discoveryRouterRef = preset !== "cloudflare" ? routerRef : void 0;
5160
- const injectorEntryPath = rscEntryPath ?? (preset === "cloudflare" ? void 0 : null);
5161
- if (injectorEntryPath !== null) {
5162
- plugins.push(createVersionInjectorPlugin(injectorEntryPath));
5434
+ if (preset === "cloudflare") {
5435
+ plugins.push(createVersionInjectorPlugin(void 0));
5163
5436
  }
5164
5437
  plugins.push(createCjsToEsmPlugin());
5165
5438
  plugins.push(
5166
5439
  createRouterDiscoveryPlugin(discoveryEntryPath, {
5167
5440
  routerPathRef: discoveryRouterRef,
5168
5441
  enableBuildPrerender: prerenderEnabled,
5169
- staticRouteTypesGeneration: resolvedOptions.staticRouteTypesGeneration,
5170
- include: resolvedOptions.include,
5171
- exclude: resolvedOptions.exclude
5442
+ buildEnv: options?.buildEnv,
5443
+ preset
5172
5444
  })
5173
5445
  );
5174
5446
  return plugins;
@@ -5181,29 +5453,75 @@ function poke() {
5181
5453
  apply: "serve",
5182
5454
  configureServer(server) {
5183
5455
  const stdin = process.stdin;
5184
- const previousRawMode = stdin.isTTY ? stdin.isRaw : null;
5456
+ const debug = process.env.RANGO_POKE_DEBUG === "1";
5457
+ const triggerReload = (source) => {
5458
+ server.hot.send({ type: "full-reload", path: "*" });
5459
+ server.config.logger.info(` browser reload (${source})`, {
5460
+ timestamp: true
5461
+ });
5462
+ };
5463
+ const toBuffer = (chunk) => {
5464
+ return typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
5465
+ };
5466
+ const formatChunk = (chunk) => {
5467
+ const data = toBuffer(chunk);
5468
+ const hex = Array.from(data).map((byte) => `0x${byte.toString(16).padStart(2, "0")}`).join(" ");
5469
+ const ascii = Array.from(data).map((byte) => {
5470
+ if (byte >= 32 && byte <= 126) return String.fromCharCode(byte);
5471
+ if (byte === 10) return "\\n";
5472
+ if (byte === 13) return "\\r";
5473
+ if (byte === 9) return "\\t";
5474
+ return ".";
5475
+ }).join("");
5476
+ return `len=${data.length} hex=[${hex}] ascii="${ascii}"`;
5477
+ };
5478
+ const readCtrlR = (chunk) => {
5479
+ const data = typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
5480
+ return data.length === 1 && data[0] === 18;
5481
+ };
5482
+ const readSubmittedCommands = (chunk) => {
5483
+ const text = toBuffer(chunk).toString("utf8").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
5484
+ if (!text.includes("\n")) return [];
5485
+ const lines = text.split("\n");
5486
+ lines.pop();
5487
+ return lines;
5488
+ };
5489
+ if (debug) {
5490
+ server.config.logger.info(
5491
+ ` poke debug enabled (isTTY=${stdin.isTTY ? "yes" : "no"}, isRaw=${stdin.isTTY ? stdin.isRaw ? "yes" : "no" : "n/a"})`,
5492
+ { timestamp: true }
5493
+ );
5494
+ }
5185
5495
  if (stdin.isTTY) {
5186
- stdin.setRawMode(true);
5496
+ server.config.logger.info(
5497
+ " poke ready: press e + enter to reload browser (ctrl+r also works when available)",
5498
+ { timestamp: true }
5499
+ );
5187
5500
  }
5188
5501
  const onData = (data) => {
5189
- if (data.length !== 1) return;
5190
- if (data[0] === 3) {
5191
- process.emit("SIGINT", "SIGINT");
5192
- return;
5193
- }
5194
- if (data[0] === 18) {
5195
- server.hot.send({ type: "full-reload", path: "*" });
5196
- server.config.logger.info(" browser reload (ctrl+r)", {
5502
+ if (debug) {
5503
+ server.config.logger.info(` poke stdin ${formatChunk(data)}`, {
5197
5504
  timestamp: true
5198
5505
  });
5199
5506
  }
5507
+ if (readCtrlR(data)) {
5508
+ triggerReload("ctrl+r");
5509
+ return;
5510
+ }
5511
+ for (const command of readSubmittedCommands(data)) {
5512
+ if (command === "e") {
5513
+ triggerReload("e+enter");
5514
+ return;
5515
+ }
5516
+ if (command === "\x1Br") {
5517
+ triggerReload("option+r+enter");
5518
+ return;
5519
+ }
5520
+ }
5200
5521
  };
5201
5522
  stdin.on("data", onData);
5202
5523
  server.httpServer?.on("close", () => {
5203
5524
  stdin.off("data", onData);
5204
- if (stdin.isTTY && previousRawMode !== null) {
5205
- stdin.setRawMode(previousRawMode);
5206
- }
5207
5525
  });
5208
5526
  }
5209
5527
  };