@rangojs/router 0.0.0-experimental.21 → 0.0.0-experimental.21efdd86

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 (961) hide show
  1. package/AGENTS.md +4 -0
  2. package/README.md +122 -30
  3. package/dist/bin/rango.js +138 -50
  4. package/dist/vite/index.js +602 -309
  5. package/package.json +16 -15
  6. package/skills/breadcrumbs/SKILL.md +250 -0
  7. package/skills/cache-guide/SKILL.md +32 -0
  8. package/skills/caching/SKILL.md +49 -8
  9. package/skills/document-cache/SKILL.md +2 -2
  10. package/skills/hooks/SKILL.md +33 -31
  11. package/skills/host-router/SKILL.md +218 -0
  12. package/skills/links/SKILL.md +3 -1
  13. package/skills/loader/SKILL.md +72 -22
  14. package/skills/middleware/SKILL.md +2 -0
  15. package/skills/parallel/SKILL.md +126 -0
  16. package/skills/prerender/SKILL.md +112 -70
  17. package/skills/rango/SKILL.md +0 -1
  18. package/skills/route/SKILL.md +34 -4
  19. package/skills/router-setup/SKILL.md +95 -5
  20. package/skills/typesafety/SKILL.md +35 -23
  21. package/src/__internal.ts +92 -0
  22. package/src/browser/app-version.ts +14 -0
  23. package/src/browser/event-controller.ts +5 -0
  24. package/src/browser/link-interceptor.ts +4 -0
  25. package/src/browser/navigation-bridge.ts +104 -14
  26. package/src/browser/navigation-client.ts +126 -44
  27. package/src/browser/navigation-store.ts +43 -8
  28. package/src/browser/navigation-transaction.ts +11 -9
  29. package/src/browser/partial-update.ts +80 -15
  30. package/src/browser/prefetch/cache.ts +166 -27
  31. package/src/browser/prefetch/fetch.ts +52 -39
  32. package/src/browser/prefetch/policy.ts +6 -0
  33. package/src/browser/prefetch/queue.ts +92 -20
  34. package/src/browser/prefetch/resource-ready.ts +77 -0
  35. package/src/browser/react/Link.tsx +70 -14
  36. package/src/browser/react/NavigationProvider.tsx +40 -4
  37. package/src/browser/react/context.ts +7 -2
  38. package/src/browser/react/use-handle.ts +9 -58
  39. package/src/browser/react/use-router.ts +21 -8
  40. package/src/browser/rsc-router.tsx +143 -60
  41. package/src/browser/scroll-restoration.ts +41 -42
  42. package/src/browser/segment-reconciler.ts +6 -1
  43. package/src/browser/server-action-bridge.ts +8 -6
  44. package/src/browser/types.ts +60 -5
  45. package/src/build/generate-manifest.ts +6 -6
  46. package/src/build/generate-route-types.ts +3 -0
  47. package/src/build/route-trie.ts +19 -3
  48. package/src/build/route-types/include-resolution.ts +8 -1
  49. package/src/build/route-types/router-processing.ts +223 -74
  50. package/src/build/route-types/scan-filter.ts +8 -1
  51. package/src/cache/cache-runtime.ts +15 -11
  52. package/src/cache/cache-scope.ts +48 -7
  53. package/src/cache/cf/cf-cache-store.ts +453 -11
  54. package/src/cache/cf/index.ts +5 -1
  55. package/src/cache/document-cache.ts +17 -7
  56. package/src/cache/index.ts +1 -0
  57. package/src/cache/taint.ts +55 -0
  58. package/src/client.rsc.tsx +2 -1
  59. package/src/client.tsx +3 -102
  60. package/src/context-var.ts +72 -2
  61. package/src/debug.ts +2 -2
  62. package/src/handle.ts +40 -0
  63. package/src/handles/breadcrumbs.ts +66 -0
  64. package/src/handles/index.ts +1 -0
  65. package/src/host/index.ts +0 -3
  66. package/src/index.rsc.ts +6 -36
  67. package/src/index.ts +40 -66
  68. package/src/prerender/store.ts +5 -4
  69. package/src/prerender.ts +138 -77
  70. package/src/reverse.ts +22 -1
  71. package/src/route-definition/dsl-helpers.ts +73 -25
  72. package/src/route-definition/helpers-types.ts +10 -6
  73. package/src/route-definition/index.ts +3 -3
  74. package/src/route-definition/redirect.ts +11 -3
  75. package/src/route-definition/resolve-handler-use.ts +149 -0
  76. package/src/route-map-builder.ts +7 -1
  77. package/src/route-types.ts +11 -0
  78. package/src/router/content-negotiation.ts +100 -1
  79. package/src/router/find-match.ts +4 -2
  80. package/src/router/handler-context.ts +108 -25
  81. package/src/router/intercept-resolution.ts +11 -4
  82. package/src/router/lazy-includes.ts +4 -1
  83. package/src/router/loader-resolution.ts +123 -11
  84. package/src/router/logging.ts +5 -2
  85. package/src/router/manifest.ts +9 -3
  86. package/src/router/match-api.ts +125 -190
  87. package/src/router/match-middleware/background-revalidation.ts +30 -2
  88. package/src/router/match-middleware/cache-lookup.ts +88 -16
  89. package/src/router/match-middleware/cache-store.ts +53 -10
  90. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  91. package/src/router/match-middleware/segment-resolution.ts +61 -5
  92. package/src/router/match-result.ts +22 -15
  93. package/src/router/metrics.ts +238 -13
  94. package/src/router/middleware-types.ts +53 -12
  95. package/src/router/middleware.ts +172 -85
  96. package/src/router/navigation-snapshot.ts +182 -0
  97. package/src/router/pattern-matching.ts +20 -5
  98. package/src/router/prerender-match.ts +114 -10
  99. package/src/router/preview-match.ts +30 -102
  100. package/src/router/request-classification.ts +310 -0
  101. package/src/router/revalidation.ts +27 -7
  102. package/src/router/route-snapshot.ts +245 -0
  103. package/src/router/router-context.ts +6 -1
  104. package/src/router/router-interfaces.ts +50 -5
  105. package/src/router/router-options.ts +50 -19
  106. package/src/router/segment-resolution/fresh.ts +210 -19
  107. package/src/router/segment-resolution/helpers.ts +30 -25
  108. package/src/router/segment-resolution/loader-cache.ts +1 -0
  109. package/src/router/segment-resolution/revalidation.ts +448 -301
  110. package/src/router/segment-wrappers.ts +2 -0
  111. package/src/router/trie-matching.ts +20 -2
  112. package/src/router/types.ts +1 -0
  113. package/src/router.ts +88 -15
  114. package/src/rsc/handler.ts +546 -359
  115. package/src/rsc/index.ts +0 -20
  116. package/src/rsc/manifest-init.ts +5 -1
  117. package/src/rsc/progressive-enhancement.ts +25 -8
  118. package/src/rsc/rsc-rendering.ts +35 -43
  119. package/src/rsc/server-action.ts +16 -10
  120. package/src/rsc/ssr-setup.ts +128 -0
  121. package/src/rsc/types.ts +10 -1
  122. package/src/search-params.ts +16 -13
  123. package/src/segment-system.tsx +140 -4
  124. package/src/server/context.ts +148 -16
  125. package/src/server/loader-registry.ts +9 -8
  126. package/src/server/request-context.ts +186 -29
  127. package/src/server.ts +6 -0
  128. package/src/ssr/index.tsx +4 -0
  129. package/src/static-handler.ts +18 -6
  130. package/src/theme/index.ts +4 -13
  131. package/src/types/cache-types.ts +4 -4
  132. package/src/types/handler-context.ts +149 -49
  133. package/src/types/loader-types.ts +36 -9
  134. package/src/types/route-config.ts +17 -8
  135. package/src/types/route-entry.ts +8 -1
  136. package/src/types/segments.ts +2 -5
  137. package/src/urls/path-helper-types.ts +9 -2
  138. package/src/urls/path-helper.ts +48 -13
  139. package/src/urls/pattern-types.ts +12 -0
  140. package/src/urls/response-types.ts +16 -6
  141. package/src/use-loader.tsx +73 -4
  142. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  143. package/src/vite/discovery/discover-routers.ts +7 -4
  144. package/src/vite/discovery/prerender-collection.ts +14 -1
  145. package/src/vite/discovery/state.ts +13 -6
  146. package/src/vite/index.ts +8 -3
  147. package/src/vite/plugin-types.ts +51 -79
  148. package/src/vite/plugins/expose-action-id.ts +1 -3
  149. package/src/vite/plugins/performance-tracks.ts +88 -0
  150. package/src/vite/plugins/refresh-cmd.ts +127 -0
  151. package/src/vite/plugins/version-plugin.ts +13 -1
  152. package/src/vite/rango.ts +163 -211
  153. package/src/vite/router-discovery.ts +178 -45
  154. package/src/vite/utils/banner.ts +3 -3
  155. package/src/vite/utils/prerender-utils.ts +18 -0
  156. package/src/vite/utils/shared-utils.ts +3 -2
  157. package/dist/__internal.d.ts +0 -83
  158. package/dist/__internal.d.ts.map +0 -1
  159. package/dist/__internal.js +0 -19
  160. package/dist/__internal.js.map +0 -1
  161. package/dist/__mocks__/version.d.ts +0 -7
  162. package/dist/__mocks__/version.d.ts.map +0 -1
  163. package/dist/__mocks__/version.js +0 -7
  164. package/dist/__mocks__/version.js.map +0 -1
  165. package/dist/__tests__/client-href.test.d.ts +0 -2
  166. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  167. package/dist/__tests__/client-href.test.js +0 -74
  168. package/dist/__tests__/client-href.test.js.map +0 -1
  169. package/dist/__tests__/component-utils.test.d.ts +0 -2
  170. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  171. package/dist/__tests__/component-utils.test.js +0 -51
  172. package/dist/__tests__/component-utils.test.js.map +0 -1
  173. package/dist/__tests__/event-controller.test.d.ts +0 -2
  174. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  175. package/dist/__tests__/event-controller.test.js +0 -538
  176. package/dist/__tests__/event-controller.test.js.map +0 -1
  177. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  178. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  179. package/dist/__tests__/helpers/route-tree.js +0 -374
  180. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  181. package/dist/__tests__/match-result.test.d.ts +0 -2
  182. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  183. package/dist/__tests__/match-result.test.js +0 -154
  184. package/dist/__tests__/match-result.test.js.map +0 -1
  185. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  186. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  187. package/dist/__tests__/navigation-store.test.js +0 -440
  188. package/dist/__tests__/navigation-store.test.js.map +0 -1
  189. package/dist/__tests__/partial-update.test.d.ts +0 -2
  190. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  191. package/dist/__tests__/partial-update.test.js +0 -1009
  192. package/dist/__tests__/partial-update.test.js.map +0 -1
  193. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  194. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  195. package/dist/__tests__/reverse-types.test.js +0 -656
  196. package/dist/__tests__/reverse-types.test.js.map +0 -1
  197. package/dist/__tests__/route-definition.test.d.ts +0 -2
  198. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  199. package/dist/__tests__/route-definition.test.js +0 -55
  200. package/dist/__tests__/route-definition.test.js.map +0 -1
  201. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  202. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  203. package/dist/__tests__/router-helpers.test.js +0 -377
  204. package/dist/__tests__/router-helpers.test.js.map +0 -1
  205. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  206. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  207. package/dist/__tests__/router-integration-2.test.js +0 -426
  208. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  209. package/dist/__tests__/router-integration.test.d.ts +0 -2
  210. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  211. package/dist/__tests__/router-integration.test.js +0 -1051
  212. package/dist/__tests__/router-integration.test.js.map +0 -1
  213. package/dist/__tests__/search-params.test.d.ts +0 -5
  214. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  215. package/dist/__tests__/search-params.test.js +0 -306
  216. package/dist/__tests__/search-params.test.js.map +0 -1
  217. package/dist/__tests__/segment-system.test.d.ts +0 -2
  218. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  219. package/dist/__tests__/segment-system.test.js +0 -627
  220. package/dist/__tests__/segment-system.test.js.map +0 -1
  221. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  222. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  223. package/dist/__tests__/static-handler-types.test.js +0 -63
  224. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  225. package/dist/__tests__/urls.test.d.ts +0 -2
  226. package/dist/__tests__/urls.test.d.ts.map +0 -1
  227. package/dist/__tests__/urls.test.js +0 -421
  228. package/dist/__tests__/urls.test.js.map +0 -1
  229. package/dist/__tests__/use-mount.test.d.ts +0 -2
  230. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  231. package/dist/__tests__/use-mount.test.js +0 -35
  232. package/dist/__tests__/use-mount.test.js.map +0 -1
  233. package/dist/bin/rango.d.ts +0 -2
  234. package/dist/bin/rango.d.ts.map +0 -1
  235. package/dist/bin/rango.js.map +0 -1
  236. package/dist/browser/event-controller.d.ts +0 -191
  237. package/dist/browser/event-controller.d.ts.map +0 -1
  238. package/dist/browser/event-controller.js +0 -559
  239. package/dist/browser/event-controller.js.map +0 -1
  240. package/dist/browser/index.d.ts +0 -2
  241. package/dist/browser/index.d.ts.map +0 -1
  242. package/dist/browser/index.js +0 -14
  243. package/dist/browser/index.js.map +0 -1
  244. package/dist/browser/link-interceptor.d.ts +0 -38
  245. package/dist/browser/link-interceptor.d.ts.map +0 -1
  246. package/dist/browser/link-interceptor.js +0 -99
  247. package/dist/browser/link-interceptor.js.map +0 -1
  248. package/dist/browser/logging.d.ts +0 -10
  249. package/dist/browser/logging.d.ts.map +0 -1
  250. package/dist/browser/logging.js +0 -29
  251. package/dist/browser/logging.js.map +0 -1
  252. package/dist/browser/lru-cache.d.ts +0 -17
  253. package/dist/browser/lru-cache.d.ts.map +0 -1
  254. package/dist/browser/lru-cache.js +0 -50
  255. package/dist/browser/lru-cache.js.map +0 -1
  256. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  257. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  258. package/dist/browser/merge-segment-loaders.js +0 -102
  259. package/dist/browser/merge-segment-loaders.js.map +0 -1
  260. package/dist/browser/navigation-bridge.d.ts +0 -102
  261. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  262. package/dist/browser/navigation-bridge.js +0 -708
  263. package/dist/browser/navigation-bridge.js.map +0 -1
  264. package/dist/browser/navigation-client.d.ts +0 -25
  265. package/dist/browser/navigation-client.d.ts.map +0 -1
  266. package/dist/browser/navigation-client.js +0 -157
  267. package/dist/browser/navigation-client.js.map +0 -1
  268. package/dist/browser/navigation-store.d.ts +0 -101
  269. package/dist/browser/navigation-store.d.ts.map +0 -1
  270. package/dist/browser/navigation-store.js +0 -625
  271. package/dist/browser/navigation-store.js.map +0 -1
  272. package/dist/browser/partial-update.d.ts +0 -75
  273. package/dist/browser/partial-update.d.ts.map +0 -1
  274. package/dist/browser/partial-update.js +0 -426
  275. package/dist/browser/partial-update.js.map +0 -1
  276. package/dist/browser/react/Link.d.ts +0 -86
  277. package/dist/browser/react/Link.d.ts.map +0 -1
  278. package/dist/browser/react/Link.js +0 -128
  279. package/dist/browser/react/Link.js.map +0 -1
  280. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  281. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  282. package/dist/browser/react/NavigationProvider.js +0 -216
  283. package/dist/browser/react/NavigationProvider.js.map +0 -1
  284. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  285. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  286. package/dist/browser/react/ScrollRestoration.js +0 -57
  287. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  288. package/dist/browser/react/context.d.ts +0 -46
  289. package/dist/browser/react/context.d.ts.map +0 -1
  290. package/dist/browser/react/context.js +0 -10
  291. package/dist/browser/react/context.js.map +0 -1
  292. package/dist/browser/react/index.d.ts +0 -11
  293. package/dist/browser/react/index.d.ts.map +0 -1
  294. package/dist/browser/react/index.js +0 -22
  295. package/dist/browser/react/index.js.map +0 -1
  296. package/dist/browser/react/location-state-shared.d.ts +0 -63
  297. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  298. package/dist/browser/react/location-state-shared.js +0 -81
  299. package/dist/browser/react/location-state-shared.js.map +0 -1
  300. package/dist/browser/react/location-state.d.ts +0 -23
  301. package/dist/browser/react/location-state.d.ts.map +0 -1
  302. package/dist/browser/react/location-state.js +0 -29
  303. package/dist/browser/react/location-state.js.map +0 -1
  304. package/dist/browser/react/mount-context.d.ts +0 -24
  305. package/dist/browser/react/mount-context.d.ts.map +0 -1
  306. package/dist/browser/react/mount-context.js +0 -24
  307. package/dist/browser/react/mount-context.js.map +0 -1
  308. package/dist/browser/react/use-action.d.ts +0 -64
  309. package/dist/browser/react/use-action.d.ts.map +0 -1
  310. package/dist/browser/react/use-action.js +0 -134
  311. package/dist/browser/react/use-action.js.map +0 -1
  312. package/dist/browser/react/use-client-cache.d.ts +0 -41
  313. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  314. package/dist/browser/react/use-client-cache.js +0 -39
  315. package/dist/browser/react/use-client-cache.js.map +0 -1
  316. package/dist/browser/react/use-handle.d.ts +0 -31
  317. package/dist/browser/react/use-handle.d.ts.map +0 -1
  318. package/dist/browser/react/use-handle.js +0 -144
  319. package/dist/browser/react/use-handle.js.map +0 -1
  320. package/dist/browser/react/use-href.d.ts +0 -33
  321. package/dist/browser/react/use-href.d.ts.map +0 -1
  322. package/dist/browser/react/use-href.js +0 -39
  323. package/dist/browser/react/use-href.js.map +0 -1
  324. package/dist/browser/react/use-link-status.d.ts +0 -37
  325. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  326. package/dist/browser/react/use-link-status.js +0 -99
  327. package/dist/browser/react/use-link-status.js.map +0 -1
  328. package/dist/browser/react/use-mount.d.ts +0 -25
  329. package/dist/browser/react/use-mount.d.ts.map +0 -1
  330. package/dist/browser/react/use-mount.js +0 -30
  331. package/dist/browser/react/use-mount.js.map +0 -1
  332. package/dist/browser/react/use-navigation.d.ts +0 -27
  333. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  334. package/dist/browser/react/use-navigation.js +0 -87
  335. package/dist/browser/react/use-navigation.js.map +0 -1
  336. package/dist/browser/react/use-segments.d.ts +0 -38
  337. package/dist/browser/react/use-segments.d.ts.map +0 -1
  338. package/dist/browser/react/use-segments.js +0 -130
  339. package/dist/browser/react/use-segments.js.map +0 -1
  340. package/dist/browser/request-controller.d.ts +0 -26
  341. package/dist/browser/request-controller.d.ts.map +0 -1
  342. package/dist/browser/request-controller.js +0 -147
  343. package/dist/browser/request-controller.js.map +0 -1
  344. package/dist/browser/rsc-router.d.ts +0 -129
  345. package/dist/browser/rsc-router.d.ts.map +0 -1
  346. package/dist/browser/rsc-router.js +0 -195
  347. package/dist/browser/rsc-router.js.map +0 -1
  348. package/dist/browser/scroll-restoration.d.ts +0 -93
  349. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  350. package/dist/browser/scroll-restoration.js +0 -321
  351. package/dist/browser/scroll-restoration.js.map +0 -1
  352. package/dist/browser/segment-structure-assert.d.ts +0 -17
  353. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  354. package/dist/browser/segment-structure-assert.js +0 -59
  355. package/dist/browser/segment-structure-assert.js.map +0 -1
  356. package/dist/browser/server-action-bridge.d.ts +0 -26
  357. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  358. package/dist/browser/server-action-bridge.js +0 -668
  359. package/dist/browser/server-action-bridge.js.map +0 -1
  360. package/dist/browser/shallow.d.ts +0 -12
  361. package/dist/browser/shallow.d.ts.map +0 -1
  362. package/dist/browser/shallow.js +0 -34
  363. package/dist/browser/shallow.js.map +0 -1
  364. package/dist/browser/types.d.ts +0 -369
  365. package/dist/browser/types.d.ts.map +0 -1
  366. package/dist/browser/types.js +0 -2
  367. package/dist/browser/types.js.map +0 -1
  368. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  369. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  370. package/dist/build/__tests__/generate-cli.test.js +0 -237
  371. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  372. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  373. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  374. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  375. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  376. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  377. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  378. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  379. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  380. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  381. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  382. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  383. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  384. package/dist/build/generate-manifest.d.ts +0 -81
  385. package/dist/build/generate-manifest.d.ts.map +0 -1
  386. package/dist/build/generate-manifest.js +0 -276
  387. package/dist/build/generate-manifest.js.map +0 -1
  388. package/dist/build/generate-route-types.d.ts +0 -115
  389. package/dist/build/generate-route-types.d.ts.map +0 -1
  390. package/dist/build/generate-route-types.js +0 -740
  391. package/dist/build/generate-route-types.js.map +0 -1
  392. package/dist/build/index.d.ts +0 -21
  393. package/dist/build/index.d.ts.map +0 -1
  394. package/dist/build/index.js +0 -21
  395. package/dist/build/index.js.map +0 -1
  396. package/dist/build/route-trie.d.ts +0 -71
  397. package/dist/build/route-trie.d.ts.map +0 -1
  398. package/dist/build/route-trie.js +0 -175
  399. package/dist/build/route-trie.js.map +0 -1
  400. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  401. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  402. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  403. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  404. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  405. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  406. package/dist/cache/__tests__/document-cache.test.js +0 -345
  407. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  408. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  409. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  410. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  411. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  412. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  413. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  414. package/dist/cache/__tests__/memory-store.test.js +0 -367
  415. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  416. package/dist/cache/cache-scope.d.ts +0 -102
  417. package/dist/cache/cache-scope.d.ts.map +0 -1
  418. package/dist/cache/cache-scope.js +0 -440
  419. package/dist/cache/cache-scope.js.map +0 -1
  420. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  421. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  422. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  423. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  424. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  425. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  426. package/dist/cache/cf/cf-cache-store.js +0 -242
  427. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  428. package/dist/cache/cf/index.d.ts +0 -14
  429. package/dist/cache/cf/index.d.ts.map +0 -1
  430. package/dist/cache/cf/index.js +0 -17
  431. package/dist/cache/cf/index.js.map +0 -1
  432. package/dist/cache/document-cache.d.ts +0 -64
  433. package/dist/cache/document-cache.d.ts.map +0 -1
  434. package/dist/cache/document-cache.js +0 -228
  435. package/dist/cache/document-cache.js.map +0 -1
  436. package/dist/cache/index.d.ts +0 -19
  437. package/dist/cache/index.d.ts.map +0 -1
  438. package/dist/cache/index.js +0 -21
  439. package/dist/cache/index.js.map +0 -1
  440. package/dist/cache/memory-segment-store.d.ts +0 -110
  441. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  442. package/dist/cache/memory-segment-store.js +0 -117
  443. package/dist/cache/memory-segment-store.js.map +0 -1
  444. package/dist/cache/memory-store.d.ts +0 -41
  445. package/dist/cache/memory-store.d.ts.map +0 -1
  446. package/dist/cache/memory-store.js +0 -191
  447. package/dist/cache/memory-store.js.map +0 -1
  448. package/dist/cache/types.d.ts +0 -317
  449. package/dist/cache/types.d.ts.map +0 -1
  450. package/dist/cache/types.js +0 -12
  451. package/dist/cache/types.js.map +0 -1
  452. package/dist/client.d.ts +0 -248
  453. package/dist/client.d.ts.map +0 -1
  454. package/dist/client.js +0 -367
  455. package/dist/client.js.map +0 -1
  456. package/dist/client.rsc.d.ts +0 -26
  457. package/dist/client.rsc.d.ts.map +0 -1
  458. package/dist/client.rsc.js +0 -46
  459. package/dist/client.rsc.js.map +0 -1
  460. package/dist/component-utils.d.ts +0 -36
  461. package/dist/component-utils.d.ts.map +0 -1
  462. package/dist/component-utils.js +0 -61
  463. package/dist/component-utils.js.map +0 -1
  464. package/dist/components/DefaultDocument.d.ts +0 -13
  465. package/dist/components/DefaultDocument.d.ts.map +0 -1
  466. package/dist/components/DefaultDocument.js +0 -15
  467. package/dist/components/DefaultDocument.js.map +0 -1
  468. package/dist/debug.d.ts +0 -58
  469. package/dist/debug.d.ts.map +0 -1
  470. package/dist/debug.js +0 -157
  471. package/dist/debug.js.map +0 -1
  472. package/dist/default-error-boundary.d.ts +0 -11
  473. package/dist/default-error-boundary.d.ts.map +0 -1
  474. package/dist/default-error-boundary.js +0 -45
  475. package/dist/default-error-boundary.js.map +0 -1
  476. package/dist/deps/browser.d.ts +0 -2
  477. package/dist/deps/browser.d.ts.map +0 -1
  478. package/dist/deps/browser.js +0 -3
  479. package/dist/deps/browser.js.map +0 -1
  480. package/dist/deps/html-stream-client.d.ts +0 -2
  481. package/dist/deps/html-stream-client.d.ts.map +0 -1
  482. package/dist/deps/html-stream-client.js +0 -3
  483. package/dist/deps/html-stream-client.js.map +0 -1
  484. package/dist/deps/html-stream-server.d.ts +0 -2
  485. package/dist/deps/html-stream-server.d.ts.map +0 -1
  486. package/dist/deps/html-stream-server.js +0 -3
  487. package/dist/deps/html-stream-server.js.map +0 -1
  488. package/dist/deps/rsc.d.ts +0 -2
  489. package/dist/deps/rsc.d.ts.map +0 -1
  490. package/dist/deps/rsc.js +0 -4
  491. package/dist/deps/rsc.js.map +0 -1
  492. package/dist/deps/ssr.d.ts +0 -2
  493. package/dist/deps/ssr.d.ts.map +0 -1
  494. package/dist/deps/ssr.js +0 -3
  495. package/dist/deps/ssr.js.map +0 -1
  496. package/dist/errors.d.ts +0 -174
  497. package/dist/errors.d.ts.map +0 -1
  498. package/dist/errors.js +0 -241
  499. package/dist/errors.js.map +0 -1
  500. package/dist/handle.d.ts +0 -78
  501. package/dist/handle.d.ts.map +0 -1
  502. package/dist/handle.js +0 -82
  503. package/dist/handle.js.map +0 -1
  504. package/dist/handles/MetaTags.d.ts +0 -14
  505. package/dist/handles/MetaTags.d.ts.map +0 -1
  506. package/dist/handles/MetaTags.js +0 -136
  507. package/dist/handles/MetaTags.js.map +0 -1
  508. package/dist/handles/index.d.ts +0 -6
  509. package/dist/handles/index.d.ts.map +0 -1
  510. package/dist/handles/index.js +0 -6
  511. package/dist/handles/index.js.map +0 -1
  512. package/dist/handles/meta.d.ts +0 -39
  513. package/dist/handles/meta.d.ts.map +0 -1
  514. package/dist/handles/meta.js +0 -202
  515. package/dist/handles/meta.js.map +0 -1
  516. package/dist/host/__tests__/errors.test.d.ts +0 -2
  517. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  518. package/dist/host/__tests__/errors.test.js +0 -76
  519. package/dist/host/__tests__/errors.test.js.map +0 -1
  520. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  521. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  522. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  523. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  524. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  525. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  526. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  527. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  528. package/dist/host/__tests__/router.test.d.ts +0 -2
  529. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  530. package/dist/host/__tests__/router.test.js +0 -241
  531. package/dist/host/__tests__/router.test.js.map +0 -1
  532. package/dist/host/__tests__/testing.test.d.ts +0 -2
  533. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  534. package/dist/host/__tests__/testing.test.js +0 -64
  535. package/dist/host/__tests__/testing.test.js.map +0 -1
  536. package/dist/host/__tests__/utils.test.d.ts +0 -2
  537. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  538. package/dist/host/__tests__/utils.test.js +0 -29
  539. package/dist/host/__tests__/utils.test.js.map +0 -1
  540. package/dist/host/cookie-handler.d.ts +0 -34
  541. package/dist/host/cookie-handler.d.ts.map +0 -1
  542. package/dist/host/cookie-handler.js +0 -124
  543. package/dist/host/cookie-handler.js.map +0 -1
  544. package/dist/host/errors.d.ts +0 -56
  545. package/dist/host/errors.d.ts.map +0 -1
  546. package/dist/host/errors.js +0 -79
  547. package/dist/host/errors.js.map +0 -1
  548. package/dist/host/index.d.ts +0 -29
  549. package/dist/host/index.d.ts.map +0 -1
  550. package/dist/host/index.js +0 -32
  551. package/dist/host/index.js.map +0 -1
  552. package/dist/host/pattern-matcher.d.ts +0 -36
  553. package/dist/host/pattern-matcher.d.ts.map +0 -1
  554. package/dist/host/pattern-matcher.js +0 -172
  555. package/dist/host/pattern-matcher.js.map +0 -1
  556. package/dist/host/router.d.ts +0 -26
  557. package/dist/host/router.d.ts.map +0 -1
  558. package/dist/host/router.js +0 -218
  559. package/dist/host/router.js.map +0 -1
  560. package/dist/host/testing.d.ts +0 -36
  561. package/dist/host/testing.d.ts.map +0 -1
  562. package/dist/host/testing.js +0 -55
  563. package/dist/host/testing.js.map +0 -1
  564. package/dist/host/types.d.ts +0 -115
  565. package/dist/host/types.d.ts.map +0 -1
  566. package/dist/host/types.js +0 -7
  567. package/dist/host/types.js.map +0 -1
  568. package/dist/host/utils.d.ts +0 -21
  569. package/dist/host/utils.d.ts.map +0 -1
  570. package/dist/host/utils.js +0 -23
  571. package/dist/host/utils.js.map +0 -1
  572. package/dist/href-client.d.ts +0 -131
  573. package/dist/href-client.d.ts.map +0 -1
  574. package/dist/href-client.js +0 -64
  575. package/dist/href-client.js.map +0 -1
  576. package/dist/href-context.d.ts +0 -29
  577. package/dist/href-context.d.ts.map +0 -1
  578. package/dist/href-context.js +0 -21
  579. package/dist/href-context.js.map +0 -1
  580. package/dist/index.d.ts +0 -73
  581. package/dist/index.d.ts.map +0 -1
  582. package/dist/index.js +0 -91
  583. package/dist/index.js.map +0 -1
  584. package/dist/index.rsc.d.ts +0 -32
  585. package/dist/index.rsc.d.ts.map +0 -1
  586. package/dist/index.rsc.js +0 -40
  587. package/dist/index.rsc.js.map +0 -1
  588. package/dist/internal-debug.d.ts +0 -2
  589. package/dist/internal-debug.d.ts.map +0 -1
  590. package/dist/internal-debug.js +0 -5
  591. package/dist/internal-debug.js.map +0 -1
  592. package/dist/loader.d.ts +0 -14
  593. package/dist/loader.d.ts.map +0 -1
  594. package/dist/loader.js +0 -20
  595. package/dist/loader.js.map +0 -1
  596. package/dist/loader.rsc.d.ts +0 -19
  597. package/dist/loader.rsc.d.ts.map +0 -1
  598. package/dist/loader.rsc.js +0 -99
  599. package/dist/loader.rsc.js.map +0 -1
  600. package/dist/network-error-thrower.d.ts +0 -17
  601. package/dist/network-error-thrower.d.ts.map +0 -1
  602. package/dist/network-error-thrower.js +0 -14
  603. package/dist/network-error-thrower.js.map +0 -1
  604. package/dist/outlet-context.d.ts +0 -13
  605. package/dist/outlet-context.d.ts.map +0 -1
  606. package/dist/outlet-context.js +0 -3
  607. package/dist/outlet-context.js.map +0 -1
  608. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  609. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  610. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  611. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  612. package/dist/prerender/param-hash.d.ts +0 -16
  613. package/dist/prerender/param-hash.d.ts.map +0 -1
  614. package/dist/prerender/param-hash.js +0 -36
  615. package/dist/prerender/param-hash.js.map +0 -1
  616. package/dist/prerender/store.d.ts +0 -38
  617. package/dist/prerender/store.d.ts.map +0 -1
  618. package/dist/prerender/store.js +0 -61
  619. package/dist/prerender/store.js.map +0 -1
  620. package/dist/prerender.d.ts +0 -66
  621. package/dist/prerender.d.ts.map +0 -1
  622. package/dist/prerender.js +0 -57
  623. package/dist/prerender.js.map +0 -1
  624. package/dist/reverse.d.ts +0 -196
  625. package/dist/reverse.d.ts.map +0 -1
  626. package/dist/reverse.js +0 -78
  627. package/dist/reverse.js.map +0 -1
  628. package/dist/root-error-boundary.d.ts +0 -33
  629. package/dist/root-error-boundary.d.ts.map +0 -1
  630. package/dist/root-error-boundary.js +0 -165
  631. package/dist/root-error-boundary.js.map +0 -1
  632. package/dist/route-content-wrapper.d.ts +0 -46
  633. package/dist/route-content-wrapper.d.ts.map +0 -1
  634. package/dist/route-content-wrapper.js +0 -77
  635. package/dist/route-content-wrapper.js.map +0 -1
  636. package/dist/route-definition.d.ts +0 -421
  637. package/dist/route-definition.d.ts.map +0 -1
  638. package/dist/route-definition.js +0 -868
  639. package/dist/route-definition.js.map +0 -1
  640. package/dist/route-map-builder.d.ts +0 -155
  641. package/dist/route-map-builder.d.ts.map +0 -1
  642. package/dist/route-map-builder.js +0 -237
  643. package/dist/route-map-builder.js.map +0 -1
  644. package/dist/route-types.d.ts +0 -165
  645. package/dist/route-types.d.ts.map +0 -1
  646. package/dist/route-types.js +0 -7
  647. package/dist/route-types.js.map +0 -1
  648. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  649. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  650. package/dist/router/__tests__/handler-context.test.js +0 -65
  651. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  652. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  653. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  654. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  655. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  656. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  657. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  658. package/dist/router/__tests__/match-context.test.js +0 -92
  659. package/dist/router/__tests__/match-context.test.js.map +0 -1
  660. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  661. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  662. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  663. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  664. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  665. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  666. package/dist/router/__tests__/match-result.test.js +0 -457
  667. package/dist/router/__tests__/match-result.test.js.map +0 -1
  668. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  669. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  670. package/dist/router/__tests__/on-error.test.js +0 -678
  671. package/dist/router/__tests__/on-error.test.js.map +0 -1
  672. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  673. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  674. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  675. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  676. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  677. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  678. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  679. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  680. package/dist/router/error-handling.d.ts +0 -77
  681. package/dist/router/error-handling.d.ts.map +0 -1
  682. package/dist/router/error-handling.js +0 -202
  683. package/dist/router/error-handling.js.map +0 -1
  684. package/dist/router/handler-context.d.ts +0 -20
  685. package/dist/router/handler-context.d.ts.map +0 -1
  686. package/dist/router/handler-context.js +0 -198
  687. package/dist/router/handler-context.js.map +0 -1
  688. package/dist/router/intercept-resolution.d.ts +0 -66
  689. package/dist/router/intercept-resolution.d.ts.map +0 -1
  690. package/dist/router/intercept-resolution.js +0 -246
  691. package/dist/router/intercept-resolution.js.map +0 -1
  692. package/dist/router/loader-resolution.d.ts +0 -64
  693. package/dist/router/loader-resolution.d.ts.map +0 -1
  694. package/dist/router/loader-resolution.js +0 -284
  695. package/dist/router/loader-resolution.js.map +0 -1
  696. package/dist/router/logging.d.ts +0 -15
  697. package/dist/router/logging.d.ts.map +0 -1
  698. package/dist/router/logging.js +0 -99
  699. package/dist/router/logging.js.map +0 -1
  700. package/dist/router/manifest.d.ts +0 -22
  701. package/dist/router/manifest.d.ts.map +0 -1
  702. package/dist/router/manifest.js +0 -181
  703. package/dist/router/manifest.js.map +0 -1
  704. package/dist/router/match-api.d.ts +0 -35
  705. package/dist/router/match-api.d.ts.map +0 -1
  706. package/dist/router/match-api.js +0 -406
  707. package/dist/router/match-api.js.map +0 -1
  708. package/dist/router/match-context.d.ts +0 -206
  709. package/dist/router/match-context.d.ts.map +0 -1
  710. package/dist/router/match-context.js +0 -17
  711. package/dist/router/match-context.js.map +0 -1
  712. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  713. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  714. package/dist/router/match-middleware/background-revalidation.js +0 -75
  715. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  716. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  717. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  718. package/dist/router/match-middleware/cache-lookup.js +0 -257
  719. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  720. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  721. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  722. package/dist/router/match-middleware/cache-store.js +0 -108
  723. package/dist/router/match-middleware/cache-store.js.map +0 -1
  724. package/dist/router/match-middleware/index.d.ts +0 -81
  725. package/dist/router/match-middleware/index.d.ts.map +0 -1
  726. package/dist/router/match-middleware/index.js +0 -80
  727. package/dist/router/match-middleware/index.js.map +0 -1
  728. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  729. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  730. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  731. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  732. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  733. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  734. package/dist/router/match-middleware/segment-resolution.js +0 -53
  735. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  736. package/dist/router/match-pipelines.d.ts +0 -147
  737. package/dist/router/match-pipelines.d.ts.map +0 -1
  738. package/dist/router/match-pipelines.js +0 -82
  739. package/dist/router/match-pipelines.js.map +0 -1
  740. package/dist/router/match-result.d.ts +0 -126
  741. package/dist/router/match-result.d.ts.map +0 -1
  742. package/dist/router/match-result.js +0 -93
  743. package/dist/router/match-result.js.map +0 -1
  744. package/dist/router/metrics.d.ts +0 -20
  745. package/dist/router/metrics.d.ts.map +0 -1
  746. package/dist/router/metrics.js +0 -47
  747. package/dist/router/metrics.js.map +0 -1
  748. package/dist/router/middleware.d.ts +0 -249
  749. package/dist/router/middleware.d.ts.map +0 -1
  750. package/dist/router/middleware.js +0 -434
  751. package/dist/router/middleware.js.map +0 -1
  752. package/dist/router/middleware.test.d.ts +0 -2
  753. package/dist/router/middleware.test.d.ts.map +0 -1
  754. package/dist/router/middleware.test.js +0 -816
  755. package/dist/router/middleware.test.js.map +0 -1
  756. package/dist/router/pattern-matching.d.ts +0 -149
  757. package/dist/router/pattern-matching.d.ts.map +0 -1
  758. package/dist/router/pattern-matching.js +0 -349
  759. package/dist/router/pattern-matching.js.map +0 -1
  760. package/dist/router/revalidation.d.ts +0 -44
  761. package/dist/router/revalidation.d.ts.map +0 -1
  762. package/dist/router/revalidation.js +0 -147
  763. package/dist/router/revalidation.js.map +0 -1
  764. package/dist/router/router-context.d.ts +0 -135
  765. package/dist/router/router-context.d.ts.map +0 -1
  766. package/dist/router/router-context.js +0 -36
  767. package/dist/router/router-context.js.map +0 -1
  768. package/dist/router/segment-resolution.d.ts +0 -127
  769. package/dist/router/segment-resolution.d.ts.map +0 -1
  770. package/dist/router/segment-resolution.js +0 -919
  771. package/dist/router/segment-resolution.js.map +0 -1
  772. package/dist/router/trie-matching.d.ts +0 -40
  773. package/dist/router/trie-matching.d.ts.map +0 -1
  774. package/dist/router/trie-matching.js +0 -127
  775. package/dist/router/trie-matching.js.map +0 -1
  776. package/dist/router/types.d.ts +0 -136
  777. package/dist/router/types.d.ts.map +0 -1
  778. package/dist/router/types.js +0 -7
  779. package/dist/router/types.js.map +0 -1
  780. package/dist/router.d.ts +0 -753
  781. package/dist/router.d.ts.map +0 -1
  782. package/dist/router.gen.d.ts +0 -6
  783. package/dist/router.gen.d.ts.map +0 -1
  784. package/dist/router.gen.js +0 -6
  785. package/dist/router.gen.js.map +0 -1
  786. package/dist/router.js +0 -1304
  787. package/dist/router.js.map +0 -1
  788. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  789. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  790. package/dist/rsc/__tests__/helpers.test.js +0 -140
  791. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  792. package/dist/rsc/handler.d.ts +0 -45
  793. package/dist/rsc/handler.d.ts.map +0 -1
  794. package/dist/rsc/handler.js +0 -1172
  795. package/dist/rsc/handler.js.map +0 -1
  796. package/dist/rsc/helpers.d.ts +0 -16
  797. package/dist/rsc/helpers.d.ts.map +0 -1
  798. package/dist/rsc/helpers.js +0 -55
  799. package/dist/rsc/helpers.js.map +0 -1
  800. package/dist/rsc/index.d.ts +0 -22
  801. package/dist/rsc/index.d.ts.map +0 -1
  802. package/dist/rsc/index.js +0 -23
  803. package/dist/rsc/index.js.map +0 -1
  804. package/dist/rsc/nonce.d.ts +0 -9
  805. package/dist/rsc/nonce.d.ts.map +0 -1
  806. package/dist/rsc/nonce.js +0 -18
  807. package/dist/rsc/nonce.js.map +0 -1
  808. package/dist/rsc/types.d.ts +0 -206
  809. package/dist/rsc/types.d.ts.map +0 -1
  810. package/dist/rsc/types.js +0 -8
  811. package/dist/rsc/types.js.map +0 -1
  812. package/dist/search-params.d.ts +0 -103
  813. package/dist/search-params.d.ts.map +0 -1
  814. package/dist/search-params.js +0 -74
  815. package/dist/search-params.js.map +0 -1
  816. package/dist/segment-system.d.ts +0 -75
  817. package/dist/segment-system.d.ts.map +0 -1
  818. package/dist/segment-system.js +0 -336
  819. package/dist/segment-system.js.map +0 -1
  820. package/dist/server/context.d.ts +0 -245
  821. package/dist/server/context.d.ts.map +0 -1
  822. package/dist/server/context.js +0 -197
  823. package/dist/server/context.js.map +0 -1
  824. package/dist/server/fetchable-loader-store.d.ts +0 -18
  825. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  826. package/dist/server/fetchable-loader-store.js +0 -18
  827. package/dist/server/fetchable-loader-store.js.map +0 -1
  828. package/dist/server/handle-store.d.ts +0 -85
  829. package/dist/server/handle-store.d.ts.map +0 -1
  830. package/dist/server/handle-store.js +0 -142
  831. package/dist/server/handle-store.js.map +0 -1
  832. package/dist/server/loader-registry.d.ts +0 -55
  833. package/dist/server/loader-registry.d.ts.map +0 -1
  834. package/dist/server/loader-registry.js +0 -132
  835. package/dist/server/loader-registry.js.map +0 -1
  836. package/dist/server/request-context.d.ts +0 -226
  837. package/dist/server/request-context.d.ts.map +0 -1
  838. package/dist/server/request-context.js +0 -290
  839. package/dist/server/request-context.js.map +0 -1
  840. package/dist/server/root-layout.d.ts +0 -4
  841. package/dist/server/root-layout.d.ts.map +0 -1
  842. package/dist/server/root-layout.js +0 -5
  843. package/dist/server/root-layout.js.map +0 -1
  844. package/dist/server.d.ts +0 -15
  845. package/dist/server.d.ts.map +0 -1
  846. package/dist/server.js +0 -20
  847. package/dist/server.js.map +0 -1
  848. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  849. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  850. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  851. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  852. package/dist/ssr/index.d.ts +0 -98
  853. package/dist/ssr/index.d.ts.map +0 -1
  854. package/dist/ssr/index.js +0 -158
  855. package/dist/ssr/index.js.map +0 -1
  856. package/dist/static-handler.d.ts +0 -50
  857. package/dist/static-handler.d.ts.map +0 -1
  858. package/dist/static-handler.gen.d.ts +0 -5
  859. package/dist/static-handler.gen.d.ts.map +0 -1
  860. package/dist/static-handler.gen.js +0 -5
  861. package/dist/static-handler.gen.js.map +0 -1
  862. package/dist/static-handler.js +0 -29
  863. package/dist/static-handler.js.map +0 -1
  864. package/dist/theme/ThemeProvider.d.ts +0 -20
  865. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  866. package/dist/theme/ThemeProvider.js +0 -240
  867. package/dist/theme/ThemeProvider.js.map +0 -1
  868. package/dist/theme/ThemeScript.d.ts +0 -48
  869. package/dist/theme/ThemeScript.d.ts.map +0 -1
  870. package/dist/theme/ThemeScript.js +0 -13
  871. package/dist/theme/ThemeScript.js.map +0 -1
  872. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  873. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  874. package/dist/theme/__tests__/theme.test.js +0 -103
  875. package/dist/theme/__tests__/theme.test.js.map +0 -1
  876. package/dist/theme/constants.d.ts +0 -29
  877. package/dist/theme/constants.d.ts.map +0 -1
  878. package/dist/theme/constants.js +0 -48
  879. package/dist/theme/constants.js.map +0 -1
  880. package/dist/theme/index.d.ts +0 -31
  881. package/dist/theme/index.d.ts.map +0 -1
  882. package/dist/theme/index.js +0 -36
  883. package/dist/theme/index.js.map +0 -1
  884. package/dist/theme/theme-context.d.ts +0 -40
  885. package/dist/theme/theme-context.d.ts.map +0 -1
  886. package/dist/theme/theme-context.js +0 -60
  887. package/dist/theme/theme-context.js.map +0 -1
  888. package/dist/theme/theme-script.d.ts +0 -27
  889. package/dist/theme/theme-script.d.ts.map +0 -1
  890. package/dist/theme/theme-script.js +0 -147
  891. package/dist/theme/theme-script.js.map +0 -1
  892. package/dist/theme/types.d.ts +0 -163
  893. package/dist/theme/types.d.ts.map +0 -1
  894. package/dist/theme/types.js +0 -11
  895. package/dist/theme/types.js.map +0 -1
  896. package/dist/theme/use-theme.d.ts +0 -12
  897. package/dist/theme/use-theme.d.ts.map +0 -1
  898. package/dist/theme/use-theme.js +0 -40
  899. package/dist/theme/use-theme.js.map +0 -1
  900. package/dist/types.d.ts +0 -1479
  901. package/dist/types.d.ts.map +0 -1
  902. package/dist/types.js +0 -10
  903. package/dist/types.js.map +0 -1
  904. package/dist/urls.d.ts +0 -441
  905. package/dist/urls.d.ts.map +0 -1
  906. package/dist/urls.gen.d.ts +0 -8
  907. package/dist/urls.gen.d.ts.map +0 -1
  908. package/dist/urls.gen.js +0 -8
  909. package/dist/urls.gen.js.map +0 -1
  910. package/dist/urls.js +0 -443
  911. package/dist/urls.js.map +0 -1
  912. package/dist/use-loader.d.ts +0 -127
  913. package/dist/use-loader.d.ts.map +0 -1
  914. package/dist/use-loader.js +0 -237
  915. package/dist/use-loader.js.map +0 -1
  916. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  917. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  918. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  919. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  920. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  921. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  922. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  923. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  924. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  925. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  926. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  927. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  928. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  929. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  930. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  931. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  932. package/dist/vite/ast-handler-extract.d.ts +0 -49
  933. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  934. package/dist/vite/ast-handler-extract.js +0 -249
  935. package/dist/vite/ast-handler-extract.js.map +0 -1
  936. package/dist/vite/expose-action-id.d.ts +0 -19
  937. package/dist/vite/expose-action-id.d.ts.map +0 -1
  938. package/dist/vite/expose-action-id.js +0 -250
  939. package/dist/vite/expose-action-id.js.map +0 -1
  940. package/dist/vite/expose-id-utils.d.ts +0 -69
  941. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  942. package/dist/vite/expose-id-utils.js +0 -289
  943. package/dist/vite/expose-id-utils.js.map +0 -1
  944. package/dist/vite/expose-internal-ids.d.ts +0 -22
  945. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  946. package/dist/vite/expose-internal-ids.js +0 -886
  947. package/dist/vite/expose-internal-ids.js.map +0 -1
  948. package/dist/vite/index.d.ts +0 -149
  949. package/dist/vite/index.d.ts.map +0 -1
  950. package/dist/vite/index.js.map +0 -1
  951. package/dist/vite/index.named-routes.gen.ts +0 -103
  952. package/dist/vite/package-resolution.d.ts +0 -43
  953. package/dist/vite/package-resolution.d.ts.map +0 -1
  954. package/dist/vite/package-resolution.js +0 -112
  955. package/dist/vite/package-resolution.js.map +0 -1
  956. package/dist/vite/virtual-entries.d.ts +0 -25
  957. package/dist/vite/virtual-entries.d.ts.map +0 -1
  958. package/dist/vite/virtual-entries.js +0 -110
  959. package/dist/vite/virtual-entries.js.map +0 -1
  960. package/skills/testing/SKILL.md +0 -226
  961. package/src/route-definition/route-function.ts +0 -119
@@ -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;
@@ -1745,7 +1745,7 @@ import { resolve } from "node:path";
1745
1745
  // package.json
1746
1746
  var package_default = {
1747
1747
  name: "@rangojs/router",
1748
- version: "0.0.0-experimental.21",
1748
+ version: "0.0.0-experimental.21efdd86",
1749
1749
  description: "Django-inspired RSC router with composable URL patterns",
1750
1750
  keywords: [
1751
1751
  "react",
@@ -1887,7 +1887,7 @@ var package_default = {
1887
1887
  "test:unit:watch": "vitest"
1888
1888
  },
1889
1889
  dependencies: {
1890
- "@vitejs/plugin-rsc": "^0.5.14",
1890
+ "@vitejs/plugin-rsc": "^0.5.19",
1891
1891
  "magic-string": "^0.30.17",
1892
1892
  picomatch: "^4.0.3",
1893
1893
  "rsc-html-stream": "^0.0.7"
@@ -2095,31 +2095,7 @@ declare global {
2095
2095
  }
2096
2096
 
2097
2097
  // src/build/route-types/scan-filter.ts
2098
- import { join, relative } from "node:path";
2099
2098
  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
2099
 
2124
2100
  // src/build/route-types/per-module-writer.ts
2125
2101
  import ts4 from "typescript";
@@ -2341,7 +2317,7 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
2341
2317
  }
2342
2318
  return routeMap;
2343
2319
  }
2344
- function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut) {
2320
+ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock) {
2345
2321
  visited = visited ?? /* @__PURE__ */ new Set();
2346
2322
  const realPath = resolve2(filePath);
2347
2323
  const key = variableName ? `${realPath}:${variableName}` : realPath;
@@ -2357,7 +2333,9 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
2357
2333
  return { routes: {}, searchSchemas: {} };
2358
2334
  }
2359
2335
  let block;
2360
- if (variableName) {
2336
+ if (inlineBlock) {
2337
+ block = inlineBlock;
2338
+ } else if (variableName) {
2361
2339
  const extracted = extractUrlsBlockForVariable(source, variableName);
2362
2340
  if (!extracted) return { routes: {}, searchSchemas: {} };
2363
2341
  block = extracted;
@@ -2386,7 +2364,7 @@ import {
2386
2364
  readdirSync
2387
2365
  } from "node:fs";
2388
2366
  import {
2389
- join as join2,
2367
+ join,
2390
2368
  dirname as dirname2,
2391
2369
  resolve as resolve3,
2392
2370
  sep,
@@ -2406,7 +2384,7 @@ function countPublicRouteEntries(source) {
2406
2384
  }
2407
2385
  var ROUTER_CALL_PATTERN = /\bcreateRouter\s*[<(]/;
2408
2386
  function isRoutableSourceFile(name) {
2409
- return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.");
2387
+ return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.") && !name.includes(".test.") && !name.includes(".spec.");
2410
2388
  }
2411
2389
  function findRouterFilesRecursive(dir, filter, results) {
2412
2390
  let entries;
@@ -2421,9 +2399,10 @@ function findRouterFilesRecursive(dir, filter, results) {
2421
2399
  const childDirs = [];
2422
2400
  const routerFilesInDir = [];
2423
2401
  for (const entry of entries) {
2424
- const fullPath = join2(dir, entry.name);
2402
+ const fullPath = join(dir, entry.name);
2425
2403
  if (entry.isDirectory()) {
2426
- if (entry.name === "node_modules" || entry.name.startsWith(".")) continue;
2404
+ if (entry.name === "node_modules" || entry.name === "dist" || entry.name === "coverage" || entry.name === "__tests__" || entry.name === "__mocks__" || entry.name.startsWith("."))
2405
+ continue;
2427
2406
  childDirs.push(fullPath);
2428
2407
  continue;
2429
2408
  }
@@ -2475,7 +2454,7 @@ Router root: ${conflict.ancestor}
2475
2454
  Nested router: ${conflict.nested}
2476
2455
  Move the nested router into a sibling directory or configure it as a separate app root.`;
2477
2456
  }
2478
- function extractUrlsVariableFromRouter(code) {
2457
+ function extractUrlsFromRouter(code) {
2479
2458
  const sourceFile = ts5.createSourceFile(
2480
2459
  "router.tsx",
2481
2460
  code,
@@ -2489,24 +2468,70 @@ function extractUrlsVariableFromRouter(code) {
2489
2468
  const callee = node.expression;
2490
2469
  return ts5.isIdentifier(callee) && callee.text === "createRouter";
2491
2470
  }
2471
+ function isInlineBuilder(node) {
2472
+ return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
2473
+ }
2474
+ function isRoutesOnCreateRouter(node) {
2475
+ if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
2476
+ return false;
2477
+ let inner = node.expression.expression;
2478
+ while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
2479
+ inner = inner.expression.expression;
2480
+ }
2481
+ return isCreateRouterCall(inner);
2482
+ }
2492
2483
  function visit(node) {
2493
2484
  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;
2485
+ if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
2486
+ const arg = node.arguments[0];
2487
+ if (ts5.isIdentifier(arg)) {
2488
+ result = { kind: "variable", name: arg.text };
2489
+ } else if (isInlineBuilder(arg)) {
2490
+ result = { kind: "inline", block: arg.getText(sourceFile) };
2502
2491
  }
2492
+ return;
2503
2493
  }
2504
2494
  if (isCreateRouterCall(node)) {
2505
2495
  const callExpr = node;
2506
- for (const arg of callExpr.arguments) {
2496
+ for (const callArg of callExpr.arguments) {
2497
+ if (ts5.isObjectLiteralExpression(callArg)) {
2498
+ for (const prop of callArg.properties) {
2499
+ if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
2500
+ if (ts5.isIdentifier(prop.initializer)) {
2501
+ result = { kind: "variable", name: prop.initializer.text };
2502
+ } else if (isInlineBuilder(prop.initializer)) {
2503
+ result = {
2504
+ kind: "inline",
2505
+ block: prop.initializer.getText(sourceFile)
2506
+ };
2507
+ }
2508
+ return;
2509
+ }
2510
+ }
2511
+ }
2512
+ }
2513
+ }
2514
+ ts5.forEachChild(node, visit);
2515
+ }
2516
+ visit(sourceFile);
2517
+ return result;
2518
+ }
2519
+ function extractBasenameFromRouter(code) {
2520
+ const sourceFile = ts5.createSourceFile(
2521
+ "router.tsx",
2522
+ code,
2523
+ ts5.ScriptTarget.Latest,
2524
+ true,
2525
+ ts5.ScriptKind.TSX
2526
+ );
2527
+ let result;
2528
+ function visit(node) {
2529
+ if (result !== void 0) return;
2530
+ if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
2531
+ for (const arg of node.arguments) {
2507
2532
  if (ts5.isObjectLiteralExpression(arg)) {
2508
2533
  for (const prop of arg.properties) {
2509
- if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls" && ts5.isIdentifier(prop.initializer)) {
2534
+ if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
2510
2535
  result = prop.initializer.text;
2511
2536
  return;
2512
2537
  }
@@ -2519,6 +2544,19 @@ function extractUrlsVariableFromRouter(code) {
2519
2544
  visit(sourceFile);
2520
2545
  return result;
2521
2546
  }
2547
+ function applyBasenameToRoutes(result, basename3) {
2548
+ const prefixed = {};
2549
+ for (const [name, pattern] of Object.entries(result.routes)) {
2550
+ if (pattern === "/") {
2551
+ prefixed[name] = basename3;
2552
+ } else if (basename3.endsWith("/") && pattern.startsWith("/")) {
2553
+ prefixed[name] = basename3 + pattern.slice(1);
2554
+ } else {
2555
+ prefixed[name] = basename3 + pattern;
2556
+ }
2557
+ }
2558
+ return { routes: prefixed, searchSchemas: result.searchSchemas };
2559
+ }
2522
2560
  function buildCombinedRouteMapForRouterFile(routerFilePath) {
2523
2561
  let routerSource;
2524
2562
  try {
@@ -2526,19 +2564,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
2526
2564
  } catch {
2527
2565
  return { routes: {}, searchSchemas: {} };
2528
2566
  }
2529
- const urlsVarName = extractUrlsVariableFromRouter(routerSource);
2530
- if (!urlsVarName) {
2567
+ const extraction = extractUrlsFromRouter(routerSource);
2568
+ if (!extraction) {
2531
2569
  return { routes: {}, searchSchemas: {} };
2532
2570
  }
2533
- const imported = resolveImportedVariable(routerSource, urlsVarName);
2534
- if (imported) {
2535
- const targetFile = resolveImportPath(imported.specifier, routerFilePath);
2536
- if (!targetFile) {
2537
- return { routes: {}, searchSchemas: {} };
2571
+ const rawBasename = extractBasenameFromRouter(routerSource);
2572
+ const basename3 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
2573
+ let result;
2574
+ if (extraction.kind === "inline") {
2575
+ result = buildCombinedRouteMapWithSearch(
2576
+ routerFilePath,
2577
+ void 0,
2578
+ void 0,
2579
+ void 0,
2580
+ extraction.block
2581
+ );
2582
+ } else {
2583
+ const imported = resolveImportedVariable(routerSource, extraction.name);
2584
+ if (imported) {
2585
+ const targetFile = resolveImportPath(imported.specifier, routerFilePath);
2586
+ if (!targetFile) {
2587
+ return { routes: {}, searchSchemas: {} };
2588
+ }
2589
+ result = buildCombinedRouteMapWithSearch(
2590
+ targetFile,
2591
+ imported.exportedName
2592
+ );
2593
+ } else {
2594
+ result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
2538
2595
  }
2539
- return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
2540
2596
  }
2541
- return buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
2597
+ if (basename3) {
2598
+ result = applyBasenameToRoutes(result, basename3);
2599
+ }
2600
+ return result;
2542
2601
  }
2543
2602
  function findRouterFiles(root, filter) {
2544
2603
  const result = [];
@@ -2547,7 +2606,7 @@ function findRouterFiles(root, filter) {
2547
2606
  }
2548
2607
  function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
2549
2608
  try {
2550
- const oldCombinedPath = join2(root, "src", "named-routes.gen.ts");
2609
+ const oldCombinedPath = join(root, "src", "named-routes.gen.ts");
2551
2610
  if (existsSync3(oldCombinedPath)) {
2552
2611
  unlinkSync(oldCombinedPath);
2553
2612
  console.log(
@@ -2563,31 +2622,21 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
2563
2622
  throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
2564
2623
  }
2565
2624
  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);
2625
+ const result = buildCombinedRouteMapForRouterFile(routerFilePath);
2626
+ if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
2627
+ let routerSource;
2628
+ try {
2629
+ routerSource = readFileSync2(routerFilePath, "utf-8");
2630
+ } catch {
2631
+ continue;
2632
+ }
2633
+ if (!extractUrlsFromRouter(routerSource)) continue;
2585
2634
  }
2586
2635
  const routerBasename = pathBasename(routerFilePath).replace(
2587
2636
  /\.(tsx?|jsx?)$/,
2588
2637
  ""
2589
2638
  );
2590
- const outPath = join2(
2639
+ const outPath = join(
2591
2640
  dirname2(routerFilePath),
2592
2641
  `${routerBasename}.named-routes.gen.ts`
2593
2642
  );
@@ -2717,8 +2766,9 @@ function createVersionPlugin() {
2717
2766
  let isDev = false;
2718
2767
  let server = null;
2719
2768
  const clientModuleSignatures = /* @__PURE__ */ new Map();
2769
+ let versionCounter = 0;
2720
2770
  const bumpVersion = (reason) => {
2721
- currentVersion = Date.now().toString(16);
2771
+ currentVersion = Date.now().toString(16) + String(++versionCounter);
2722
2772
  console.log(`[rsc-router] ${reason}, version updated: ${currentVersion}`);
2723
2773
  const rscEnv = server?.environments?.rsc;
2724
2774
  const versionMod = rscEnv?.moduleGraph?.getModuleById(
@@ -2774,6 +2824,9 @@ function createVersionPlugin() {
2774
2824
  if (!isDev) return;
2775
2825
  const isRscModule = this.environment?.name === "rsc";
2776
2826
  if (!isRscModule) return;
2827
+ if (ctx.modules.length === 1 && ctx.modules[0].id === "\0" + VIRTUAL_IDS.version) {
2828
+ return;
2829
+ }
2777
2830
  if (isCodeModule(ctx.file)) {
2778
2831
  const filePath = normalizeModuleId(ctx.file);
2779
2832
  const previousSignature = clientModuleSignatures.get(filePath);
@@ -2803,6 +2856,68 @@ function createVersionPlugin() {
2803
2856
 
2804
2857
  // src/vite/utils/shared-utils.ts
2805
2858
  import * as Vite from "vite";
2859
+
2860
+ // src/vite/plugins/performance-tracks.ts
2861
+ import { readFile } from "node:fs/promises";
2862
+ var RSDW_PATCH_RE = /((?:var|let|const)\s+\w+\s*=\s*root\._children\s*,\s*(\w+)\s*=\s*root\._debugInfo\s*[;,])/;
2863
+ function buildPatchReplacement(match, debugInfoVar) {
2864
+ return `${match}
2865
+ if (${debugInfoVar} && 0 === ${debugInfoVar}.length && "fulfilled" === root.status) {
2866
+ var _resolved = "function" === typeof resolveLazy ? resolveLazy(root.value) : root.value;
2867
+ if ("object" === typeof _resolved && null !== _resolved && isArrayImpl(_resolved._debugInfo)) {
2868
+ ${debugInfoVar} = _resolved._debugInfo;
2869
+ }
2870
+ }`;
2871
+ }
2872
+ function patchRsdwClientDebugInfoRecovery(code) {
2873
+ const match = code.match(RSDW_PATCH_RE);
2874
+ if (!match) {
2875
+ return { code, debugInfoVar: null };
2876
+ }
2877
+ return {
2878
+ code: code.replace(match[1], buildPatchReplacement(match[1], match[2])),
2879
+ debugInfoVar: match[2]
2880
+ };
2881
+ }
2882
+ function performanceTracksOptimizeDepsPlugin() {
2883
+ return {
2884
+ name: "@rangojs/router:performance-tracks-optimize-deps",
2885
+ setup(build) {
2886
+ build.onLoad(
2887
+ {
2888
+ filter: /react-server-dom-webpack-client\.browser\.(development|production)\.js$/
2889
+ },
2890
+ async (args) => {
2891
+ const code = await readFile(args.path, "utf8");
2892
+ const patched = patchRsdwClientDebugInfoRecovery(code);
2893
+ return {
2894
+ contents: patched.code,
2895
+ loader: "js"
2896
+ };
2897
+ }
2898
+ );
2899
+ }
2900
+ };
2901
+ }
2902
+ function performanceTracksPlugin() {
2903
+ return {
2904
+ name: "@rangojs/router:performance-tracks",
2905
+ transform(code, id) {
2906
+ if (!id.includes("react-server-dom") || !id.includes("client")) return;
2907
+ const patched = patchRsdwClientDebugInfoRecovery(code);
2908
+ if (!patched.debugInfoVar) return;
2909
+ if (process.env.INTERNAL_RANGO_DEBUG)
2910
+ console.log(
2911
+ "[perf-tracks] patched RSDW client (var:",
2912
+ patched.debugInfoVar,
2913
+ ")"
2914
+ );
2915
+ return patched.code;
2916
+ }
2917
+ };
2918
+ }
2919
+
2920
+ // src/vite/utils/shared-utils.ts
2806
2921
  var versionEsbuildPlugin = {
2807
2922
  name: "@rangojs/router-version",
2808
2923
  setup(build) {
@@ -2820,7 +2935,7 @@ var versionEsbuildPlugin = {
2820
2935
  }
2821
2936
  };
2822
2937
  var sharedEsbuildOptions = {
2823
- plugins: [versionEsbuildPlugin]
2938
+ plugins: [versionEsbuildPlugin, performanceTracksOptimizeDepsPlugin()]
2824
2939
  };
2825
2940
  function createVirtualEntriesPlugin(entries, routerPathRef) {
2826
2941
  const virtualModules = {};
@@ -2903,11 +3018,11 @@ ${dim} \u2571${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2
2903
3018
  ${dim} ${reset}${bold}\u2551 \u2551${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2727. \u2571${reset}
2904
3019
  ${dim} ${reset}${bold}\u2554\u2557 \u2551 \u2551 \u2551 \u2551${reset}${dim} * \u2571${reset}
2905
3020
  ${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}
3021
+ ${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
3022
  ${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
3023
  ${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}
3024
+ ${dim} * ${reset}${bold}\u2551 \u2551${reset}${dim} * \u2727. \u2571${reset}
3025
+ ${dim} ${reset}${bold}\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550${reset}${dim} \u2726 *${reset}
2911
3026
 
2912
3027
  v${version} \xB7 ${preset} \xB7 ${mode}
2913
3028
  `;
@@ -3026,6 +3141,8 @@ function createCjsToEsmPlugin() {
3026
3141
  import { createServer as createViteServer } from "vite";
3027
3142
  import { resolve as resolve8 } from "node:path";
3028
3143
  import { readFileSync as readFileSync6 } from "node:fs";
3144
+ import { createRequire } from "node:module";
3145
+ import { pathToFileURL } from "node:url";
3029
3146
 
3030
3147
  // src/vite/plugins/virtual-stub-plugin.ts
3031
3148
  function createVirtualStubPlugin() {
@@ -3052,7 +3169,7 @@ function createVirtualStubPlugin() {
3052
3169
  }
3053
3170
 
3054
3171
  // src/vite/plugins/client-ref-hashing.ts
3055
- import { relative as relative2 } from "node:path";
3172
+ import { relative } from "node:path";
3056
3173
  import { createHash as createHash2 } from "node:crypto";
3057
3174
  var CLIENT_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-package-proxy/";
3058
3175
  var CLIENT_IN_SERVER_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/";
@@ -3065,10 +3182,10 @@ function computeProductionHash(projectRoot, refKey) {
3065
3182
  const absPath = decodeURIComponent(
3066
3183
  refKey.slice(CLIENT_IN_SERVER_PKG_PROXY_PREFIX.length)
3067
3184
  );
3068
- toHash = relative2(projectRoot, absPath).replaceAll("\\", "/");
3185
+ toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
3069
3186
  } else if (refKey.startsWith(FS_PREFIX)) {
3070
3187
  const absPath = refKey.slice(FS_PREFIX.length - 1);
3071
- toHash = relative2(projectRoot, absPath).replaceAll("\\", "/");
3188
+ toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
3072
3189
  } else if (refKey.startsWith("/")) {
3073
3190
  toHash = refKey.slice(1);
3074
3191
  } else {
@@ -3209,8 +3326,8 @@ function createDiscoveryState(entryPath, opts) {
3209
3326
  perRouterManifestDataMap: /* @__PURE__ */ new Map(),
3210
3327
  prerenderManifestEntries: null,
3211
3328
  staticManifestEntries: null,
3212
- handlerChunkInfo: null,
3213
- staticHandlerChunkInfo: null,
3329
+ handlerChunkInfoMap: /* @__PURE__ */ new Map(),
3330
+ staticHandlerChunkInfoMap: /* @__PURE__ */ new Map(),
3214
3331
  rscEntryFileName: null,
3215
3332
  resolvedPrerenderModules: void 0,
3216
3333
  resolvedStaticModules: void 0,
@@ -3293,8 +3410,17 @@ function jsonParseExpression(value) {
3293
3410
  }
3294
3411
 
3295
3412
  // src/context-var.ts
3413
+ var NON_CACHEABLE_KEYS = /* @__PURE__ */ Symbol.for(
3414
+ "rango:non-cacheable-keys"
3415
+ );
3416
+ function getNonCacheableKeys(variables) {
3417
+ if (!variables[NON_CACHEABLE_KEYS]) {
3418
+ variables[NON_CACHEABLE_KEYS] = /* @__PURE__ */ new Set();
3419
+ }
3420
+ return variables[NON_CACHEABLE_KEYS];
3421
+ }
3296
3422
  var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
3297
- function contextSet(variables, keyOrVar, value) {
3423
+ function contextSet(variables, keyOrVar, value, options) {
3298
3424
  if (typeof keyOrVar === "string") {
3299
3425
  if (FORBIDDEN_KEYS.has(keyOrVar)) {
3300
3426
  throw new Error(
@@ -3302,8 +3428,14 @@ function contextSet(variables, keyOrVar, value) {
3302
3428
  );
3303
3429
  }
3304
3430
  variables[keyOrVar] = value;
3431
+ if (options?.cache === false) {
3432
+ getNonCacheableKeys(variables).add(keyOrVar);
3433
+ }
3305
3434
  } else {
3306
3435
  variables[keyOrVar.key] = value;
3436
+ if (options?.cache === false) {
3437
+ getNonCacheableKeys(variables).add(keyOrVar.key);
3438
+ }
3307
3439
  }
3308
3440
  }
3309
3441
 
@@ -3326,6 +3458,7 @@ function encodePathParam(value) {
3326
3458
  }
3327
3459
  function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
3328
3460
  let result = pattern;
3461
+ let hadOmittedOptional = false;
3329
3462
  for (const [key, value] of Object.entries(params)) {
3330
3463
  const escaped = escapeRegExp2(key);
3331
3464
  result = result.replace(
@@ -3334,6 +3467,15 @@ function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
3334
3467
  );
3335
3468
  result = result.replace(`*${key}`, encode(value));
3336
3469
  }
3470
+ result = result.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?\?/g, () => {
3471
+ hadOmittedOptional = true;
3472
+ return "";
3473
+ });
3474
+ if (hadOmittedOptional) {
3475
+ const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
3476
+ result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
3477
+ if (hadTrailingSlash && !result.endsWith("/")) result += "/";
3478
+ }
3337
3479
  return result;
3338
3480
  }
3339
3481
  async function runWithConcurrency(items, concurrency, fn) {
@@ -3445,11 +3587,12 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3445
3587
  for (const { manifest } of allManifests) {
3446
3588
  if (!manifest.prerenderRoutes) continue;
3447
3589
  const defs = manifest._prerenderDefs || {};
3590
+ const passthroughSet = new Set(manifest.passthroughRoutes || []);
3448
3591
  for (const routeName of manifest.prerenderRoutes) {
3449
3592
  const pattern = manifest.routeManifest[routeName];
3450
3593
  if (!pattern) continue;
3451
3594
  const def = defs[routeName];
3452
- const isPassthroughRoute = !!def?.options?.passthrough;
3595
+ const isPassthroughRoute = passthroughSet.has(routeName);
3453
3596
  const hasDynamic = pattern.includes(":") || pattern.includes("*");
3454
3597
  if (!hasDynamic) {
3455
3598
  entries.push({
@@ -3462,12 +3605,20 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3462
3605
  if (def?.getParams) {
3463
3606
  try {
3464
3607
  const buildVars = {};
3608
+ const buildEnv = state.resolvedBuildEnv;
3465
3609
  const getParamsCtx = {
3466
3610
  build: true,
3611
+ dev: !state.isBuildMode,
3467
3612
  set: ((keyOrVar, value) => {
3468
3613
  contextSet(buildVars, keyOrVar, value);
3469
3614
  }),
3470
- reverse: getParamsReverse
3615
+ reverse: getParamsReverse,
3616
+ get env() {
3617
+ if (buildEnv !== void 0) return buildEnv;
3618
+ throw new Error(
3619
+ "[rsc-router] ctx.env is not available during build-time getParams(). Configure buildEnv in your rango() plugin options to enable build-time env access."
3620
+ );
3621
+ }
3471
3622
  };
3472
3623
  const paramsList = await def.getParams(getParamsCtx);
3473
3624
  const concurrency = def.options?.concurrency ?? 1;
@@ -3546,7 +3697,8 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3546
3697
  entry.urlPath,
3547
3698
  {},
3548
3699
  entry.buildVars,
3549
- entry.isPassthroughRoute
3700
+ entry.isPassthroughRoute,
3701
+ state.resolvedBuildEnv
3550
3702
  );
3551
3703
  if (!result) continue;
3552
3704
  if (result.passthrough) {
@@ -3670,7 +3822,9 @@ async function renderStaticHandlers(state, rscEnv, registry) {
3670
3822
  const result = await routerInstance.renderStaticSegment(
3671
3823
  def.handler,
3672
3824
  def.$$id,
3673
- def.$$routePrefix
3825
+ def.$$routePrefix,
3826
+ state.resolvedBuildEnv,
3827
+ !state.isBuildMode
3674
3828
  );
3675
3829
  if (result) {
3676
3830
  const hasHandles = Object.keys(result.handles).length > 0;
@@ -3733,8 +3887,7 @@ async function discoverRouters(state, rscEnv) {
3733
3887
  let registry = serverMod.RouterRegistry;
3734
3888
  if (!registry || registry.size === 0) {
3735
3889
  try {
3736
- const hostMod = await rscEnv.runner.import("@rangojs/router/host");
3737
- const hostRegistry = hostMod.HostRouterRegistry;
3890
+ const hostRegistry = serverMod.HostRouterRegistry;
3738
3891
  if (hostRegistry && hostRegistry.size > 0) {
3739
3892
  console.log(
3740
3893
  `[rsc-router] Found ${hostRegistry.size} host router(s), resolving lazy handlers...`
@@ -3796,7 +3949,11 @@ async function discoverRouters(state, rscEnv) {
3796
3949
  if (!router.urlpatterns || !generateManifestFull) {
3797
3950
  continue;
3798
3951
  }
3799
- const manifest = generateManifestFull(router.urlpatterns, routerMountIndex);
3952
+ const manifest = generateManifestFull(
3953
+ router.urlpatterns,
3954
+ routerMountIndex,
3955
+ router.__basename ? { urlPrefix: router.__basename } : void 0
3956
+ );
3800
3957
  routerMountIndex++;
3801
3958
  allManifests.push({ id, manifest });
3802
3959
  const routeCount = Object.keys(manifest.routeManifest).length;
@@ -3938,7 +4095,7 @@ async function discoverRouters(state, rscEnv) {
3938
4095
  }
3939
4096
 
3940
4097
  // src/vite/discovery/route-types-writer.ts
3941
- import { dirname as dirname3, basename, join as join3, resolve as resolve6 } from "node:path";
4098
+ import { dirname as dirname3, basename, join as join2, resolve as resolve6 } from "node:path";
3942
4099
  import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, existsSync as existsSync5, unlinkSync as unlinkSync2 } from "node:fs";
3943
4100
  function filterUserNamedRoutes(manifest) {
3944
4101
  const filtered = {};
@@ -3959,7 +4116,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
3959
4116
  /\.(tsx?|jsx?)$/,
3960
4117
  ""
3961
4118
  );
3962
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4119
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
3963
4120
  try {
3964
4121
  preContent.set(outPath, readFileSync4(outPath, "utf-8"));
3965
4122
  } catch {
@@ -3972,7 +4129,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
3972
4129
  /\.(tsx?|jsx?)$/,
3973
4130
  ""
3974
4131
  );
3975
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4132
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
3976
4133
  if (!existsSync5(outPath)) continue;
3977
4134
  try {
3978
4135
  const content = readFileSync4(outPath, "utf-8");
@@ -3989,7 +4146,7 @@ function writeRouteTypesFiles(state) {
3989
4146
  const entryDir = dirname3(
3990
4147
  resolve6(state.projectRoot, state.resolvedEntryPath)
3991
4148
  );
3992
- const oldCombinedPath = join3(entryDir, "named-routes.gen.ts");
4149
+ const oldCombinedPath = join2(entryDir, "named-routes.gen.ts");
3993
4150
  if (existsSync5(oldCombinedPath)) {
3994
4151
  unlinkSync2(oldCombinedPath);
3995
4152
  console.log(
@@ -4014,7 +4171,7 @@ Set an explicit \`id\` on createRouter() or check the call site.`
4014
4171
  }
4015
4172
  const routerDir = dirname3(sourceFile);
4016
4173
  const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
4017
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4174
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
4018
4175
  const userRoutes = filterUserNamedRoutes(routeManifest);
4019
4176
  let effectiveSearchSchemas = routeSearchSchemas;
4020
4177
  if ((!effectiveSearchSchemas || Object.keys(effectiveSearchSchemas).length === 0) && sourceFile) {
@@ -4079,7 +4236,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
4079
4236
  }
4080
4237
  const routerDir = dirname3(sourceFile);
4081
4238
  const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
4082
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4239
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
4083
4240
  const source = generateRouteTypesSource(
4084
4241
  mergedRoutes,
4085
4242
  Object.keys(mergedSearchSchemas).length > 0 ? mergedSearchSchemas : void 0
@@ -4093,7 +4250,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
4093
4250
  }
4094
4251
 
4095
4252
  // src/vite/discovery/virtual-module-codegen.ts
4096
- import { dirname as dirname4, basename as basename2, join as join4 } from "node:path";
4253
+ import { dirname as dirname4, basename as basename2, join as join3 } from "node:path";
4097
4254
  function generateRoutesManifestModule(state) {
4098
4255
  const hasManifest = state.mergedRouteManifest && Object.keys(state.mergedRouteManifest).length > 0;
4099
4256
  if (hasManifest) {
@@ -4108,7 +4265,7 @@ function generateRoutesManifestModule(state) {
4108
4265
  /\.(tsx?|jsx?)$/,
4109
4266
  ""
4110
4267
  );
4111
- const genPath = join4(
4268
+ const genPath = join3(
4112
4269
  routerDir,
4113
4270
  `${routerBasename}.named-routes.gen.js`
4114
4271
  ).replaceAll("\\", "/");
@@ -4205,7 +4362,7 @@ function generatePerRouterModule(state, routerId) {
4205
4362
  /\.(tsx?|jsx?)$/,
4206
4363
  ""
4207
4364
  );
4208
- const genPath = join4(
4365
+ const genPath = join3(
4209
4366
  routerDir,
4210
4367
  `${routerBasename}.named-routes.gen.js`
4211
4368
  ).replaceAll("\\", "/");
@@ -4245,48 +4402,45 @@ function postprocessBundle(state) {
4245
4402
  );
4246
4403
  const evictionTargets = [
4247
4404
  {
4248
- info: state.handlerChunkInfo,
4405
+ infos: state.handlerChunkInfoMap.values(),
4249
4406
  fnName: "Prerender",
4250
4407
  brand: "prerenderHandler",
4251
4408
  label: "handler code from RSC bundle"
4252
4409
  },
4253
4410
  {
4254
- info: state.staticHandlerChunkInfo,
4411
+ infos: state.staticHandlerChunkInfoMap.values(),
4255
4412
  fnName: "Static",
4256
4413
  brand: "staticHandler",
4257
4414
  label: "static handler code"
4258
4415
  }
4259
4416
  ];
4260
4417
  for (const target of evictionTargets) {
4261
- if (!target.info) continue;
4262
- const chunkPath = resolve7(
4263
- state.projectRoot,
4264
- "dist/rsc",
4265
- target.info.fileName
4266
- );
4267
- try {
4268
- const code = readFileSync5(chunkPath, "utf-8");
4269
- const result = evictHandlerCode(
4270
- code,
4271
- target.info.exports,
4272
- target.fnName,
4273
- target.brand
4274
- );
4275
- if (result) {
4276
- writeFileSync4(chunkPath, result.code);
4277
- const savedKB = (result.savedBytes / 1024).toFixed(1);
4278
- console.log(
4279
- `[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${target.info.fileName}`
4418
+ for (const info of target.infos) {
4419
+ const chunkPath = resolve7(state.projectRoot, "dist/rsc", info.fileName);
4420
+ try {
4421
+ const code = readFileSync5(chunkPath, "utf-8");
4422
+ const result = evictHandlerCode(
4423
+ code,
4424
+ info.exports,
4425
+ target.fnName,
4426
+ target.brand
4427
+ );
4428
+ if (result) {
4429
+ writeFileSync4(chunkPath, result.code);
4430
+ const savedKB = (result.savedBytes / 1024).toFixed(1);
4431
+ console.log(
4432
+ `[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${info.fileName}`
4433
+ );
4434
+ }
4435
+ } catch (replaceErr) {
4436
+ console.warn(
4437
+ `[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
4280
4438
  );
4281
4439
  }
4282
- } catch (replaceErr) {
4283
- console.warn(
4284
- `[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
4285
- );
4286
4440
  }
4287
4441
  }
4288
- state.handlerChunkInfo = null;
4289
- state.staticHandlerChunkInfo = null;
4442
+ state.handlerChunkInfoMap.clear();
4443
+ state.staticHandlerChunkInfoMap.clear();
4290
4444
  if (hasPrerenderData && existsSync6(rscEntryPath)) {
4291
4445
  const rscCode = readFileSync5(rscEntryPath, "utf-8");
4292
4446
  if (!rscCode.includes("__prerender-manifest.js")) {
@@ -4329,7 +4483,7 @@ function postprocessBundle(state) {
4329
4483
  }
4330
4484
  if (hasStaticData && existsSync6(rscEntryPath)) {
4331
4485
  const rscCode = readFileSync5(rscEntryPath, "utf-8");
4332
- if (!rscCode.includes("__STATIC_MANIFEST")) {
4486
+ if (!rscCode.includes("__static-manifest.js")) {
4333
4487
  try {
4334
4488
  const manifestEntries = [];
4335
4489
  let totalBytes = copyStagedBuildAssets(
@@ -4398,8 +4552,67 @@ async function createTempRscServer(state, options = {}) {
4398
4552
  ]
4399
4553
  });
4400
4554
  }
4555
+ async function resolveBuildEnv(option, factoryCtx) {
4556
+ if (!option) return null;
4557
+ if (option === "auto") {
4558
+ if (factoryCtx.preset !== "cloudflare") {
4559
+ throw new Error(
4560
+ '[rsc-router] buildEnv: "auto" is only supported with preset: "cloudflare". Use a factory function or plain object for other presets.'
4561
+ );
4562
+ }
4563
+ try {
4564
+ const userRequire = createRequire(
4565
+ resolve8(factoryCtx.root, "package.json")
4566
+ );
4567
+ const wranglerPath = userRequire.resolve("wrangler");
4568
+ const { getPlatformProxy } = await import(pathToFileURL(wranglerPath).href);
4569
+ const proxy = await getPlatformProxy();
4570
+ return {
4571
+ env: proxy.env,
4572
+ dispose: proxy.dispose
4573
+ };
4574
+ } catch (err) {
4575
+ throw new Error(
4576
+ `[rsc-router] buildEnv: "auto" requires wrangler to be installed.
4577
+ Install it with: pnpm add -D wrangler
4578
+ ${err.message}`
4579
+ );
4580
+ }
4581
+ }
4582
+ if (typeof option === "function") {
4583
+ return await option(factoryCtx);
4584
+ }
4585
+ return { env: option };
4586
+ }
4587
+ async function acquireBuildEnv(s, command, mode) {
4588
+ const option = s.opts?.buildEnv;
4589
+ if (!option) return false;
4590
+ const result = await resolveBuildEnv(option, {
4591
+ root: s.projectRoot,
4592
+ mode,
4593
+ command,
4594
+ preset: s.opts?.preset ?? "node"
4595
+ });
4596
+ if (!result) return false;
4597
+ s.resolvedBuildEnv = result.env;
4598
+ s.buildEnvDispose = result.dispose ?? null;
4599
+ return true;
4600
+ }
4601
+ async function releaseBuildEnv(s) {
4602
+ if (s.buildEnvDispose) {
4603
+ try {
4604
+ await s.buildEnvDispose();
4605
+ } catch (err) {
4606
+ console.warn(`[rsc-router] buildEnv dispose failed: ${err.message}`);
4607
+ }
4608
+ s.buildEnvDispose = null;
4609
+ }
4610
+ s.resolvedBuildEnv = void 0;
4611
+ }
4401
4612
  function createRouterDiscoveryPlugin(entryPath, opts) {
4402
4613
  const s = createDiscoveryState(entryPath, opts);
4614
+ let viteCommand = "build";
4615
+ let viteMode = "production";
4403
4616
  return {
4404
4617
  name: "@rangojs/router:discovery",
4405
4618
  config() {
@@ -4408,31 +4621,13 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4408
4621
  __RANGO_DEBUG__: JSON.stringify(!!process.env.INTERNAL_RANGO_DEBUG)
4409
4622
  }
4410
4623
  };
4411
- if (opts?.enableBuildPrerender) {
4412
- config.environments = {
4413
- rsc: {
4414
- build: {
4415
- rollupOptions: {
4416
- output: {
4417
- manualChunks(id) {
4418
- if (s.resolvedPrerenderModules?.has(id)) {
4419
- return "__prerender-handlers";
4420
- }
4421
- if (s.resolvedStaticModules?.has(id)) {
4422
- return "__static-handlers";
4423
- }
4424
- }
4425
- }
4426
- }
4427
- }
4428
- }
4429
- };
4430
- }
4431
4624
  return config;
4432
4625
  },
4433
4626
  configResolved(config) {
4434
4627
  s.projectRoot = config.root;
4435
4628
  s.isBuildMode = config.command === "build";
4629
+ viteCommand = config.command;
4630
+ viteMode = config.mode;
4436
4631
  s.userResolveAlias = config.resolve.alias;
4437
4632
  if (!s.resolvedEntryPath && opts?.routerPathRef?.path) {
4438
4633
  s.resolvedEntryPath = opts.routerPathRef.path;
@@ -4446,12 +4641,6 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4446
4641
  s.resolvedEntryPath = entries[0];
4447
4642
  }
4448
4643
  }
4449
- if (opts?.include || opts?.exclude) {
4450
- s.scanFilter = createScanFilter(s.projectRoot, {
4451
- include: opts.include,
4452
- exclude: opts.exclude
4453
- });
4454
- }
4455
4644
  if (opts?.staticRouteTypesGeneration !== false) {
4456
4645
  s.cachedRouterFiles = findRouterFiles(s.projectRoot, s.scanFilter);
4457
4646
  writeCombinedRouteTypesWithTracking(s, { preserveIfLarger: true });
@@ -4483,6 +4672,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4483
4672
  });
4484
4673
  prerenderTempServer = null;
4485
4674
  }
4675
+ releaseBuildEnv(s).catch(() => {
4676
+ });
4486
4677
  });
4487
4678
  async function getOrCreateTempServer() {
4488
4679
  if (prerenderNodeRegistry) {
@@ -4513,6 +4704,7 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4513
4704
  if (!rscEnv?.runner) {
4514
4705
  s.devServerOrigin = getDevServerOrigin();
4515
4706
  try {
4707
+ await acquireBuildEnv(s, viteCommand, viteMode);
4516
4708
  const tempRscEnv = await getOrCreateTempServer();
4517
4709
  if (tempRscEnv) {
4518
4710
  await discoverRouters(s, tempRscEnv);
@@ -4528,6 +4720,7 @@ ${err.stack}`
4528
4720
  return;
4529
4721
  }
4530
4722
  try {
4723
+ await acquireBuildEnv(s, viteCommand, viteMode);
4531
4724
  const serverMod = await rscEnv.runner.import(
4532
4725
  "@rangojs/router/server"
4533
4726
  );
@@ -4592,7 +4785,26 @@ ${err.stack}`
4592
4785
  res.end("Missing pathname");
4593
4786
  return;
4594
4787
  }
4595
- let registry = mainRegistry;
4788
+ const rscEnv = server.environments?.rsc;
4789
+ let registry = null;
4790
+ if (rscEnv?.runner && s.resolvedEntryPath) {
4791
+ try {
4792
+ await rscEnv.runner.import(s.resolvedEntryPath);
4793
+ const serverMod = await rscEnv.runner.import(
4794
+ "@rangojs/router/server"
4795
+ );
4796
+ registry = serverMod.RouterRegistry ?? null;
4797
+ } catch (err) {
4798
+ console.warn(
4799
+ `[rsc-router] Dev prerender module refresh failed: ${err.message}`
4800
+ );
4801
+ res.statusCode = 500;
4802
+ res.end(`Prerender handler error: ${err.message}`);
4803
+ return;
4804
+ }
4805
+ } else {
4806
+ registry = mainRegistry;
4807
+ }
4596
4808
  if (!registry) {
4597
4809
  if (!prerenderNodeRegistry) {
4598
4810
  await getOrCreateTempServer();
@@ -4614,7 +4826,10 @@ ${err.stack}`
4614
4826
  pathname,
4615
4827
  {},
4616
4828
  void 0,
4617
- wantPassthrough
4829
+ wantPassthrough,
4830
+ s.resolvedBuildEnv,
4831
+ true
4832
+ // devMode: check getParams for passthrough routes
4618
4833
  );
4619
4834
  if (!result) continue;
4620
4835
  if (result.passthrough) continue;
@@ -4750,6 +4965,7 @@ ${err.stack}`
4750
4965
  resetStagedBuildAssets(s.projectRoot);
4751
4966
  s.prerenderManifestEntries = null;
4752
4967
  s.staticManifestEntries = null;
4968
+ await acquireBuildEnv(s, viteCommand, viteMode);
4753
4969
  let tempServer = null;
4754
4970
  globalThis.__rscRouterDiscoveryActive = true;
4755
4971
  try {
@@ -4789,6 +5005,7 @@ ${details}`
4789
5005
  if (tempServer) {
4790
5006
  await tempServer.close();
4791
5007
  }
5008
+ await releaseBuildEnv(s);
4792
5009
  }
4793
5010
  },
4794
5011
  // Virtual module: provides the pre-generated route manifest as a JS module
@@ -4831,20 +5048,30 @@ ${details}`
4831
5048
  }
4832
5049
  if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
4833
5050
  return;
5051
+ s.handlerChunkInfoMap.clear();
5052
+ s.staticHandlerChunkInfoMap.clear();
4834
5053
  for (const [fileName, chunk] of Object.entries(bundle)) {
4835
5054
  if (chunk.type !== "chunk") continue;
4836
- if (fileName.includes("__prerender-handlers") && s.resolvedPrerenderModules?.size) {
5055
+ if (s.resolvedPrerenderModules?.size) {
4837
5056
  const handlers = extractHandlerExportsFromChunk(
4838
5057
  chunk.code,
4839
5058
  s.resolvedPrerenderModules,
4840
5059
  "Prerender",
4841
- true
5060
+ false
4842
5061
  );
4843
5062
  if (handlers.length > 0) {
4844
- s.handlerChunkInfo = { fileName, exports: handlers };
5063
+ const existing = s.handlerChunkInfoMap.get(fileName);
5064
+ if (existing) {
5065
+ existing.exports.push(...handlers);
5066
+ } else {
5067
+ s.handlerChunkInfoMap.set(fileName, {
5068
+ fileName,
5069
+ exports: handlers
5070
+ });
5071
+ }
4845
5072
  }
4846
5073
  }
4847
- if (fileName.includes("__static-handlers") && s.resolvedStaticModules?.size) {
5074
+ if (s.resolvedStaticModules?.size) {
4848
5075
  const handlers = extractHandlerExportsFromChunk(
4849
5076
  chunk.code,
4850
5077
  s.resolvedStaticModules,
@@ -4852,7 +5079,15 @@ ${details}`
4852
5079
  false
4853
5080
  );
4854
5081
  if (handlers.length > 0) {
4855
- s.staticHandlerChunkInfo = { fileName, exports: handlers };
5082
+ const existing = s.staticHandlerChunkInfoMap.get(fileName);
5083
+ if (existing) {
5084
+ existing.exports.push(...handlers);
5085
+ } else {
5086
+ s.staticHandlerChunkInfoMap.set(fileName, {
5087
+ fileName,
5088
+ exports: handlers
5089
+ });
5090
+ }
4856
5091
  }
4857
5092
  }
4858
5093
  }
@@ -4879,8 +5114,16 @@ async function rango(options) {
4879
5114
  const showBanner = resolvedOptions.banner ?? true;
4880
5115
  const plugins = [];
4881
5116
  const rangoAliases = getPackageAliases();
4882
- const excludeDeps = getExcludeDeps();
4883
- let rscEntryPath = null;
5117
+ const excludeDeps = [
5118
+ ...getExcludeDeps(),
5119
+ // The public browser entry re-exports the RSDW browser client.
5120
+ // Excluding both keeps Vite from freezing the unpatched bundle into
5121
+ // .vite/deps before our source transforms run.
5122
+ "@vitejs/plugin-rsc/browser",
5123
+ // Keep the browser RSDW client out of Vite's dep optimizer so our
5124
+ // cjs-to-esm transform can patch the real file.
5125
+ "@vitejs/plugin-rsc/vendor/react-server-dom/client.browser"
5126
+ ];
4884
5127
  const routerRef = { path: void 0 };
4885
5128
  const prerenderEnabled = true;
4886
5129
  if (preset === "cloudflare") {
@@ -4976,6 +5219,7 @@ async function rango(options) {
4976
5219
  }
4977
5220
  });
4978
5221
  plugins.push(createVirtualEntriesPlugin(finalEntries));
5222
+ plugins.push(performanceTracksPlugin());
4979
5223
  plugins.push(
4980
5224
  rsc({
4981
5225
  entries: finalEntries,
@@ -4984,153 +5228,122 @@ async function rango(options) {
4984
5228
  );
4985
5229
  plugins.push(clientRefDedup());
4986
5230
  } else {
4987
- const nodeOptions = resolvedOptions;
4988
- routerRef.path = nodeOptions.router;
4989
- if (!routerRef.path) {
4990
- plugins.push({
4991
- name: "@rangojs/router:auto-discover",
4992
- config(userConfig) {
4993
- if (routerRef.path) return;
4994
- const root = userConfig.root ? resolve9(process.cwd(), userConfig.root) : process.cwd();
4995
- const filter = createScanFilter(root, {
4996
- include: resolvedOptions.include,
4997
- exclude: resolvedOptions.exclude
4998
- });
4999
- const candidates = findRouterFiles(root, filter);
5000
- if (candidates.length === 1) {
5001
- const abs = candidates[0];
5002
- routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
5003
- } else if (candidates.length > 1) {
5004
- const list = candidates.map(
5005
- (f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
5006
- ).join("\n");
5007
- throw new Error(
5008
- `[rsc-router] Multiple routers found. Specify \`router\` to choose one:
5009
- ${list}`
5010
- );
5011
- }
5231
+ plugins.push({
5232
+ name: "@rangojs/router:auto-discover",
5233
+ config(userConfig) {
5234
+ if (routerRef.path) return;
5235
+ const root = userConfig.root ? resolve9(process.cwd(), userConfig.root) : process.cwd();
5236
+ const candidates = findRouterFiles(root);
5237
+ if (candidates.length === 1) {
5238
+ const abs = candidates[0];
5239
+ routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
5240
+ } else if (candidates.length > 1) {
5241
+ const list = candidates.map(
5242
+ (f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
5243
+ ).join("\n");
5244
+ throw new Error(`[rsc-router] Multiple routers found:
5245
+ ${list}`);
5012
5246
  }
5013
- });
5014
- }
5015
- const rscOption = nodeOptions.rsc ?? true;
5016
- if (rscOption !== false) {
5017
- const { default: rsc } = await import("@vitejs/plugin-rsc");
5018
- const userEntries = typeof rscOption === "boolean" ? {} : rscOption.entries || {};
5019
- const finalEntries = {
5020
- client: userEntries.client ?? VIRTUAL_IDS.browser,
5021
- ssr: userEntries.ssr ?? VIRTUAL_IDS.ssr,
5022
- rsc: userEntries.rsc ?? VIRTUAL_IDS.rsc
5023
- };
5024
- rscEntryPath = userEntries.rsc ?? null;
5025
- let hasWarnedDuplicate = false;
5026
- plugins.push({
5027
- name: "@rangojs/router:rsc-integration",
5028
- enforce: "pre",
5029
- config() {
5030
- const useVirtualClient = finalEntries.client === VIRTUAL_IDS.browser;
5031
- const useVirtualSSR = finalEntries.ssr === VIRTUAL_IDS.ssr;
5032
- const useVirtualRSC = finalEntries.rsc === VIRTUAL_IDS.rsc;
5033
- return {
5034
- // Exclude rsc-router modules from optimization to prevent module duplication
5035
- // This ensures the same Context instance is used by both browser entry and RSC proxy modules
5036
- optimizeDeps: {
5037
- exclude: excludeDeps,
5038
- esbuildOptions: sharedEsbuildOptions
5039
- },
5040
- build: {
5041
- rollupOptions: { onwarn }
5042
- },
5043
- resolve: {
5044
- alias: rangoAliases
5045
- },
5046
- environments: {
5047
- client: {
5048
- build: {
5049
- rollupOptions: {
5050
- output: {
5051
- manualChunks: getManualChunks
5052
- }
5053
- }
5054
- },
5055
- // Always exclude rsc-router modules, conditionally add virtual entry
5056
- optimizeDeps: {
5057
- // Pre-bundle React and rsc-html-stream to prevent late discovery
5058
- // triggering ERR_OUTDATED_OPTIMIZED_DEP on cold starts
5059
- include: [
5060
- "react",
5061
- "react-dom",
5062
- "react/jsx-runtime",
5063
- "react/jsx-dev-runtime",
5064
- "rsc-html-stream/client"
5065
- ],
5066
- exclude: excludeDeps,
5067
- esbuildOptions: sharedEsbuildOptions,
5068
- ...useVirtualClient && {
5069
- // Tell Vite to scan the virtual entry for dependencies
5070
- entries: [VIRTUAL_IDS.browser]
5071
- }
5072
- }
5073
- },
5074
- ...useVirtualSSR && {
5075
- ssr: {
5076
- optimizeDeps: {
5077
- entries: [VIRTUAL_IDS.ssr],
5078
- // Pre-bundle all SSR deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
5079
- include: [
5080
- "react",
5081
- "react-dom",
5082
- "react-dom/server.edge",
5083
- "react-dom/static.edge",
5084
- "react/jsx-runtime",
5085
- "react/jsx-dev-runtime",
5086
- "@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
5087
- ],
5088
- exclude: excludeDeps,
5089
- esbuildOptions: sharedEsbuildOptions
5247
+ }
5248
+ });
5249
+ const finalEntries = {
5250
+ client: VIRTUAL_IDS.browser,
5251
+ ssr: VIRTUAL_IDS.ssr,
5252
+ rsc: VIRTUAL_IDS.rsc
5253
+ };
5254
+ const { default: rsc } = await import("@vitejs/plugin-rsc");
5255
+ let hasWarnedDuplicate = false;
5256
+ plugins.push({
5257
+ name: "@rangojs/router:rsc-integration",
5258
+ enforce: "pre",
5259
+ config() {
5260
+ return {
5261
+ optimizeDeps: {
5262
+ exclude: excludeDeps,
5263
+ esbuildOptions: sharedEsbuildOptions
5264
+ },
5265
+ build: {
5266
+ rollupOptions: { onwarn }
5267
+ },
5268
+ resolve: {
5269
+ alias: rangoAliases
5270
+ },
5271
+ environments: {
5272
+ client: {
5273
+ build: {
5274
+ rollupOptions: {
5275
+ output: {
5276
+ manualChunks: getManualChunks
5090
5277
  }
5091
5278
  }
5092
5279
  },
5093
- ...useVirtualRSC && {
5094
- rsc: {
5095
- optimizeDeps: {
5096
- entries: [VIRTUAL_IDS.rsc],
5097
- // Pre-bundle all RSC deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
5098
- include: [
5099
- "react",
5100
- "react/jsx-runtime",
5101
- "react/jsx-dev-runtime",
5102
- "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
5103
- ],
5104
- esbuildOptions: sharedEsbuildOptions
5105
- }
5106
- }
5280
+ optimizeDeps: {
5281
+ include: [
5282
+ "react",
5283
+ "react-dom",
5284
+ "react/jsx-runtime",
5285
+ "react/jsx-dev-runtime",
5286
+ "rsc-html-stream/client"
5287
+ ],
5288
+ exclude: excludeDeps,
5289
+ esbuildOptions: sharedEsbuildOptions,
5290
+ entries: [VIRTUAL_IDS.browser]
5291
+ }
5292
+ },
5293
+ ssr: {
5294
+ optimizeDeps: {
5295
+ entries: [VIRTUAL_IDS.ssr],
5296
+ include: [
5297
+ "react",
5298
+ "react-dom",
5299
+ "react-dom/server.edge",
5300
+ "react-dom/static.edge",
5301
+ "react/jsx-runtime",
5302
+ "react/jsx-dev-runtime",
5303
+ "@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
5304
+ ],
5305
+ exclude: excludeDeps,
5306
+ esbuildOptions: sharedEsbuildOptions
5307
+ }
5308
+ },
5309
+ rsc: {
5310
+ optimizeDeps: {
5311
+ entries: [VIRTUAL_IDS.rsc],
5312
+ include: [
5313
+ "react",
5314
+ "react/jsx-runtime",
5315
+ "react/jsx-dev-runtime",
5316
+ "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
5317
+ ],
5318
+ esbuildOptions: sharedEsbuildOptions
5107
5319
  }
5108
5320
  }
5109
- };
5110
- },
5111
- configResolved(config) {
5112
- if (showBanner) {
5113
- const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
5114
- printBanner(mode, "node", rangoVersion);
5115
- }
5116
- const rscMinimalCount = config.plugins.filter(
5117
- (p) => p.name === "rsc:minimal"
5118
- ).length;
5119
- if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
5120
- hasWarnedDuplicate = true;
5121
- console.warn(
5122
- "[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your config or use rango({ rsc: false }) for manual configuration."
5123
- );
5124
5321
  }
5322
+ };
5323
+ },
5324
+ configResolved(config) {
5325
+ if (showBanner) {
5326
+ const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
5327
+ printBanner(mode, "node", rangoVersion);
5125
5328
  }
5126
- });
5127
- plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
5128
- plugins.push(
5129
- rsc({
5130
- entries: finalEntries
5131
- })
5132
- );
5133
- }
5329
+ const rscMinimalCount = config.plugins.filter(
5330
+ (p) => p.name === "rsc:minimal"
5331
+ ).length;
5332
+ if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
5333
+ hasWarnedDuplicate = true;
5334
+ console.warn(
5335
+ "[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your vite config \u2014 rango() includes it automatically."
5336
+ );
5337
+ }
5338
+ }
5339
+ });
5340
+ plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
5341
+ plugins.push(performanceTracksPlugin());
5342
+ plugins.push(
5343
+ rsc({
5344
+ entries: finalEntries
5345
+ })
5346
+ );
5134
5347
  plugins.push(clientRefDedup());
5135
5348
  }
5136
5349
  plugins.push({
@@ -5158,22 +5371,102 @@ ${list}`
5158
5371
  plugins.push(createVersionPlugin());
5159
5372
  const discoveryEntryPath = preset !== "cloudflare" ? routerRef.path : void 0;
5160
5373
  const discoveryRouterRef = preset !== "cloudflare" ? routerRef : void 0;
5161
- const injectorEntryPath = rscEntryPath ?? (preset === "cloudflare" ? void 0 : null);
5162
- if (injectorEntryPath !== null) {
5163
- plugins.push(createVersionInjectorPlugin(injectorEntryPath));
5374
+ if (preset === "cloudflare") {
5375
+ plugins.push(createVersionInjectorPlugin(void 0));
5164
5376
  }
5165
5377
  plugins.push(createCjsToEsmPlugin());
5166
5378
  plugins.push(
5167
5379
  createRouterDiscoveryPlugin(discoveryEntryPath, {
5168
5380
  routerPathRef: discoveryRouterRef,
5169
5381
  enableBuildPrerender: prerenderEnabled,
5170
- staticRouteTypesGeneration: resolvedOptions.staticRouteTypesGeneration,
5171
- include: resolvedOptions.include,
5172
- exclude: resolvedOptions.exclude
5382
+ buildEnv: options?.buildEnv,
5383
+ preset
5173
5384
  })
5174
5385
  );
5175
5386
  return plugins;
5176
5387
  }
5388
+
5389
+ // src/vite/plugins/refresh-cmd.ts
5390
+ function poke() {
5391
+ return {
5392
+ name: "vite-plugin-poke",
5393
+ apply: "serve",
5394
+ configureServer(server) {
5395
+ const stdin = process.stdin;
5396
+ const debug = process.env.RANGO_POKE_DEBUG === "1";
5397
+ const triggerReload = (source) => {
5398
+ server.hot.send({ type: "full-reload", path: "*" });
5399
+ server.config.logger.info(` browser reload (${source})`, {
5400
+ timestamp: true
5401
+ });
5402
+ };
5403
+ const toBuffer = (chunk) => {
5404
+ return typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
5405
+ };
5406
+ const formatChunk = (chunk) => {
5407
+ const data = toBuffer(chunk);
5408
+ const hex = Array.from(data).map((byte) => `0x${byte.toString(16).padStart(2, "0")}`).join(" ");
5409
+ const ascii = Array.from(data).map((byte) => {
5410
+ if (byte >= 32 && byte <= 126) return String.fromCharCode(byte);
5411
+ if (byte === 10) return "\\n";
5412
+ if (byte === 13) return "\\r";
5413
+ if (byte === 9) return "\\t";
5414
+ return ".";
5415
+ }).join("");
5416
+ return `len=${data.length} hex=[${hex}] ascii="${ascii}"`;
5417
+ };
5418
+ const readCtrlR = (chunk) => {
5419
+ const data = typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
5420
+ return data.length === 1 && data[0] === 18;
5421
+ };
5422
+ const readSubmittedCommands = (chunk) => {
5423
+ const text = toBuffer(chunk).toString("utf8").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
5424
+ if (!text.includes("\n")) return [];
5425
+ const lines = text.split("\n");
5426
+ lines.pop();
5427
+ return lines;
5428
+ };
5429
+ if (debug) {
5430
+ server.config.logger.info(
5431
+ ` poke debug enabled (isTTY=${stdin.isTTY ? "yes" : "no"}, isRaw=${stdin.isTTY ? stdin.isRaw ? "yes" : "no" : "n/a"})`,
5432
+ { timestamp: true }
5433
+ );
5434
+ }
5435
+ if (stdin.isTTY) {
5436
+ server.config.logger.info(
5437
+ " poke ready: press e + enter to reload browser (ctrl+r also works when available)",
5438
+ { timestamp: true }
5439
+ );
5440
+ }
5441
+ const onData = (data) => {
5442
+ if (debug) {
5443
+ server.config.logger.info(` poke stdin ${formatChunk(data)}`, {
5444
+ timestamp: true
5445
+ });
5446
+ }
5447
+ if (readCtrlR(data)) {
5448
+ triggerReload("ctrl+r");
5449
+ return;
5450
+ }
5451
+ for (const command of readSubmittedCommands(data)) {
5452
+ if (command === "e") {
5453
+ triggerReload("e+enter");
5454
+ return;
5455
+ }
5456
+ if (command === "\x1Br") {
5457
+ triggerReload("option+r+enter");
5458
+ return;
5459
+ }
5460
+ }
5461
+ };
5462
+ stdin.on("data", onData);
5463
+ server.httpServer?.on("close", () => {
5464
+ stdin.off("data", onData);
5465
+ });
5466
+ }
5467
+ };
5468
+ }
5177
5469
  export {
5470
+ poke,
5178
5471
  rango
5179
5472
  };