@rangojs/router 0.0.0-experimental.20 → 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 +726 -386
  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 +57 -15
  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 +61 -89
  143. package/src/vite/discovery/discover-routers.ts +7 -4
  144. package/src/vite/discovery/prerender-collection.ts +48 -15
  145. package/src/vite/discovery/state.ts +17 -13
  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 +182 -45
  154. package/src/vite/utils/banner.ts +3 -3
  155. package/src/vite/utils/prerender-utils.ts +78 -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
@@ -1,6 +1,6 @@
1
1
  // src/vite/rango.ts
2
2
  import { readFileSync as readFileSync7 } from "node:fs";
3
- import { resolve as resolve8 } from "node:path";
3
+ import { resolve as resolve9 } from "node:path";
4
4
 
5
5
  // src/vite/plugins/expose-action-id.ts
6
6
  import MagicString from "magic-string";
@@ -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.20",
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
  `;
@@ -3024,8 +3139,10 @@ function createCjsToEsmPlugin() {
3024
3139
 
3025
3140
  // src/vite/router-discovery.ts
3026
3141
  import { createServer as createViteServer } from "vite";
3027
- import { resolve as resolve7 } from "node:path";
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 {
@@ -3207,10 +3324,10 @@ function createDiscoveryState(entryPath, opts) {
3207
3324
  perRouterTrieMap: /* @__PURE__ */ new Map(),
3208
3325
  perRouterPrecomputedMap: /* @__PURE__ */ new Map(),
3209
3326
  perRouterManifestDataMap: /* @__PURE__ */ new Map(),
3210
- prerenderCollectedData: null,
3211
- staticCollectedData: null,
3212
- handlerChunkInfo: null,
3213
- staticHandlerChunkInfo: null,
3327
+ prerenderManifestEntries: null,
3328
+ staticManifestEntries: 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,12 +3428,28 @@ 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
 
3310
3442
  // src/vite/utils/prerender-utils.ts
3443
+ import { createHash as createHash4 } from "node:crypto";
3444
+ import {
3445
+ copyFileSync,
3446
+ existsSync as existsSync4,
3447
+ mkdirSync,
3448
+ rmSync,
3449
+ statSync,
3450
+ writeFileSync as writeFileSync2
3451
+ } from "node:fs";
3452
+ import { resolve as resolve5 } from "node:path";
3311
3453
  function escapeRegExp2(str) {
3312
3454
  return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3313
3455
  }
@@ -3316,6 +3458,7 @@ function encodePathParam(value) {
3316
3458
  }
3317
3459
  function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
3318
3460
  let result = pattern;
3461
+ let hadOmittedOptional = false;
3319
3462
  for (const [key, value] of Object.entries(params)) {
3320
3463
  const escaped = escapeRegExp2(key);
3321
3464
  result = result.replace(
@@ -3324,6 +3467,15 @@ function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
3324
3467
  );
3325
3468
  result = result.replace(`*${key}`, encode(value));
3326
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
+ }
3327
3479
  return result;
3328
3480
  }
3329
3481
  async function runWithConcurrency(items, concurrency, fn) {
@@ -3386,6 +3538,37 @@ function notifyOnError(registry, error, phase, routeKey, pathname, skipped) {
3386
3538
  break;
3387
3539
  }
3388
3540
  }
3541
+ function getStagedAssetDir(projectRoot) {
3542
+ return resolve5(projectRoot, "node_modules/.rangojs-router-build/rsc-assets");
3543
+ }
3544
+ function resetStagedBuildAssets(projectRoot) {
3545
+ rmSync(getStagedAssetDir(projectRoot), { recursive: true, force: true });
3546
+ }
3547
+ function stageBuildAssetModule(projectRoot, prefix, exportValue) {
3548
+ const stagedDir = getStagedAssetDir(projectRoot);
3549
+ mkdirSync(stagedDir, { recursive: true });
3550
+ const contentHash = createHash4("sha256").update(exportValue).digest("hex").slice(0, 8);
3551
+ const fileName = `${prefix}-${contentHash}.js`;
3552
+ const filePath = resolve5(stagedDir, fileName);
3553
+ if (!existsSync4(filePath)) {
3554
+ writeFileSync2(filePath, `export default ${exportValue};
3555
+ `);
3556
+ }
3557
+ return fileName;
3558
+ }
3559
+ function copyStagedBuildAssets(projectRoot, fileNames) {
3560
+ const stagedDir = getStagedAssetDir(projectRoot);
3561
+ const distAssetsDir = resolve5(projectRoot, "dist/rsc/assets");
3562
+ mkdirSync(distAssetsDir, { recursive: true });
3563
+ let totalBytes = 0;
3564
+ for (const fileName of new Set(fileNames)) {
3565
+ const stagedPath = resolve5(stagedDir, fileName);
3566
+ const distPath = resolve5(distAssetsDir, fileName);
3567
+ copyFileSync(stagedPath, distPath);
3568
+ totalBytes += statSync(stagedPath).size;
3569
+ }
3570
+ return totalBytes;
3571
+ }
3389
3572
 
3390
3573
  // src/vite/discovery/prerender-collection.ts
3391
3574
  async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
@@ -3404,11 +3587,12 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3404
3587
  for (const { manifest } of allManifests) {
3405
3588
  if (!manifest.prerenderRoutes) continue;
3406
3589
  const defs = manifest._prerenderDefs || {};
3590
+ const passthroughSet = new Set(manifest.passthroughRoutes || []);
3407
3591
  for (const routeName of manifest.prerenderRoutes) {
3408
3592
  const pattern = manifest.routeManifest[routeName];
3409
3593
  if (!pattern) continue;
3410
3594
  const def = defs[routeName];
3411
- const isPassthroughRoute = !!def?.options?.passthrough;
3595
+ const isPassthroughRoute = passthroughSet.has(routeName);
3412
3596
  const hasDynamic = pattern.includes(":") || pattern.includes("*");
3413
3597
  if (!hasDynamic) {
3414
3598
  entries.push({
@@ -3421,12 +3605,20 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3421
3605
  if (def?.getParams) {
3422
3606
  try {
3423
3607
  const buildVars = {};
3608
+ const buildEnv = state.resolvedBuildEnv;
3424
3609
  const getParamsCtx = {
3425
3610
  build: true,
3611
+ dev: !state.isBuildMode,
3426
3612
  set: ((keyOrVar, value) => {
3427
3613
  contextSet(buildVars, keyOrVar, value);
3428
3614
  }),
3429
- 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
+ }
3430
3622
  };
3431
3623
  const paramsList = await def.getParams(getParamsCtx);
3432
3624
  const concurrency = def.options?.concurrency ?? 1;
@@ -3487,7 +3679,7 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3487
3679
  `[rsc-router] Pre-rendering ${entries.length} URL(s)${concurrencyNote}...`
3488
3680
  );
3489
3681
  const { hashParams } = await rscEnv.runner.import("@rangojs/router/build");
3490
- const collectedData = {};
3682
+ const manifestEntries = {};
3491
3683
  let doneCount = 0;
3492
3684
  let skipCount = 0;
3493
3685
  const startTotal = performance.now();
@@ -3505,7 +3697,8 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3505
3697
  entry.urlPath,
3506
3698
  {},
3507
3699
  entry.buildVars,
3508
- entry.isPassthroughRoute
3700
+ entry.isPassthroughRoute,
3701
+ state.resolvedBuildEnv
3509
3702
  );
3510
3703
  if (!result) continue;
3511
3704
  if (result.passthrough) {
@@ -3517,18 +3710,30 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3517
3710
  break;
3518
3711
  }
3519
3712
  const paramHash = hashParams(result.params || {});
3520
- collectedData[`${result.routeName}/${paramHash}`] = {
3713
+ const mainKey = `${result.routeName}/${paramHash}`;
3714
+ const mainValue = JSON.stringify({
3521
3715
  segments: result.segments,
3522
3716
  handles: result.handles
3523
- };
3717
+ });
3718
+ manifestEntries[mainKey] = stageBuildAssetModule(
3719
+ state.projectRoot,
3720
+ "__pr",
3721
+ mainValue
3722
+ );
3524
3723
  if (result.interceptSegments?.length) {
3525
- collectedData[`${result.routeName}/${paramHash}/i`] = {
3724
+ const interceptKey = `${result.routeName}/${paramHash}/i`;
3725
+ const interceptValue = JSON.stringify({
3526
3726
  segments: [...result.segments, ...result.interceptSegments],
3527
3727
  handles: {
3528
3728
  ...result.handles,
3529
3729
  ...result.interceptHandles || {}
3530
3730
  }
3531
- };
3731
+ });
3732
+ manifestEntries[interceptKey] = stageBuildAssetModule(
3733
+ state.projectRoot,
3734
+ "__pr",
3735
+ interceptValue
3736
+ );
3532
3737
  }
3533
3738
  const elapsed = (performance.now() - startUrl).toFixed(0);
3534
3739
  console.log(
@@ -3572,7 +3777,7 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3572
3777
  }
3573
3778
  const totalElapsed = (performance.now() - startTotal).toFixed(0);
3574
3779
  if (doneCount > 0) {
3575
- state.prerenderCollectedData = collectedData;
3780
+ state.prerenderManifestEntries = manifestEntries;
3576
3781
  }
3577
3782
  const parts = [`${doneCount} done`];
3578
3783
  if (skipCount > 0) parts.push(`${skipCount} skipped`);
@@ -3583,7 +3788,7 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3583
3788
  async function renderStaticHandlers(state, rscEnv, registry) {
3584
3789
  if (!state.opts?.enableBuildPrerender || !state.isBuildMode || !state.resolvedStaticModules?.size)
3585
3790
  return;
3586
- const collected = {};
3791
+ const manifestEntries = {};
3587
3792
  let staticDone = 0;
3588
3793
  let staticSkip = 0;
3589
3794
  let totalStaticCount = 0;
@@ -3617,10 +3822,18 @@ async function renderStaticHandlers(state, rscEnv, registry) {
3617
3822
  const result = await routerInstance.renderStaticSegment(
3618
3823
  def.handler,
3619
3824
  def.$$id,
3620
- def.$$routePrefix
3825
+ def.$$routePrefix,
3826
+ state.resolvedBuildEnv,
3827
+ !state.isBuildMode
3621
3828
  );
3622
3829
  if (result) {
3623
- collected[def.$$id] = result;
3830
+ const hasHandles = Object.keys(result.handles).length > 0;
3831
+ const exportValue = hasHandles ? JSON.stringify(result) : JSON.stringify(result.encoded);
3832
+ manifestEntries[def.$$id] = stageBuildAssetModule(
3833
+ state.projectRoot,
3834
+ "__st",
3835
+ exportValue
3836
+ );
3624
3837
  const elapsed = (performance.now() - startHandler).toFixed(0);
3625
3838
  console.log(
3626
3839
  `[rsc-router] OK ${name.padEnd(40)} (${elapsed}ms)`
@@ -3657,7 +3870,7 @@ async function renderStaticHandlers(state, rscEnv, registry) {
3657
3870
  }
3658
3871
  const totalStaticElapsed = (performance.now() - startStatic).toFixed(0);
3659
3872
  if (staticDone > 0) {
3660
- state.staticCollectedData = collected;
3873
+ state.staticManifestEntries = manifestEntries;
3661
3874
  }
3662
3875
  const staticParts = [`${staticDone} done`];
3663
3876
  if (staticSkip > 0) staticParts.push(`${staticSkip} skipped`);
@@ -3674,8 +3887,7 @@ async function discoverRouters(state, rscEnv) {
3674
3887
  let registry = serverMod.RouterRegistry;
3675
3888
  if (!registry || registry.size === 0) {
3676
3889
  try {
3677
- const hostMod = await rscEnv.runner.import("@rangojs/router/host");
3678
- const hostRegistry = hostMod.HostRouterRegistry;
3890
+ const hostRegistry = serverMod.HostRouterRegistry;
3679
3891
  if (hostRegistry && hostRegistry.size > 0) {
3680
3892
  console.log(
3681
3893
  `[rsc-router] Found ${hostRegistry.size} host router(s), resolving lazy handlers...`
@@ -3737,7 +3949,11 @@ async function discoverRouters(state, rscEnv) {
3737
3949
  if (!router.urlpatterns || !generateManifestFull) {
3738
3950
  continue;
3739
3951
  }
3740
- const manifest = generateManifestFull(router.urlpatterns, routerMountIndex);
3952
+ const manifest = generateManifestFull(
3953
+ router.urlpatterns,
3954
+ routerMountIndex,
3955
+ router.__basename ? { urlPrefix: router.__basename } : void 0
3956
+ );
3741
3957
  routerMountIndex++;
3742
3958
  allManifests.push({ id, manifest });
3743
3959
  const routeCount = Object.keys(manifest.routeManifest).length;
@@ -3879,8 +4095,8 @@ async function discoverRouters(state, rscEnv) {
3879
4095
  }
3880
4096
 
3881
4097
  // src/vite/discovery/route-types-writer.ts
3882
- import { dirname as dirname3, basename, join as join3, resolve as resolve5 } from "node:path";
3883
- import { readFileSync as readFileSync4, writeFileSync as writeFileSync2, existsSync as existsSync4, unlinkSync as unlinkSync2 } from "node:fs";
4098
+ import { dirname as dirname3, basename, join as join2, resolve as resolve6 } from "node:path";
4099
+ import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, existsSync as existsSync5, unlinkSync as unlinkSync2 } from "node:fs";
3884
4100
  function filterUserNamedRoutes(manifest) {
3885
4101
  const filtered = {};
3886
4102
  for (const [name, pattern] of Object.entries(manifest)) {
@@ -3900,7 +4116,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
3900
4116
  /\.(tsx?|jsx?)$/,
3901
4117
  ""
3902
4118
  );
3903
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4119
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
3904
4120
  try {
3905
4121
  preContent.set(outPath, readFileSync4(outPath, "utf-8"));
3906
4122
  } catch {
@@ -3913,8 +4129,8 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
3913
4129
  /\.(tsx?|jsx?)$/,
3914
4130
  ""
3915
4131
  );
3916
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
3917
- if (!existsSync4(outPath)) continue;
4132
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
4133
+ if (!existsSync5(outPath)) continue;
3918
4134
  try {
3919
4135
  const content = readFileSync4(outPath, "utf-8");
3920
4136
  if (content !== preContent.get(outPath)) {
@@ -3928,10 +4144,10 @@ function writeRouteTypesFiles(state) {
3928
4144
  if (state.perRouterManifests.length === 0) return;
3929
4145
  try {
3930
4146
  const entryDir = dirname3(
3931
- resolve5(state.projectRoot, state.resolvedEntryPath)
4147
+ resolve6(state.projectRoot, state.resolvedEntryPath)
3932
4148
  );
3933
- const oldCombinedPath = join3(entryDir, "named-routes.gen.ts");
3934
- if (existsSync4(oldCombinedPath)) {
4149
+ const oldCombinedPath = join2(entryDir, "named-routes.gen.ts");
4150
+ if (existsSync5(oldCombinedPath)) {
3935
4151
  unlinkSync2(oldCombinedPath);
3936
4152
  console.log(
3937
4153
  `[rsc-router] Removed stale combined route types: ${oldCombinedPath}`
@@ -3955,7 +4171,7 @@ Set an explicit \`id\` on createRouter() or check the call site.`
3955
4171
  }
3956
4172
  const routerDir = dirname3(sourceFile);
3957
4173
  const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
3958
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4174
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
3959
4175
  const userRoutes = filterUserNamedRoutes(routeManifest);
3960
4176
  let effectiveSearchSchemas = routeSearchSchemas;
3961
4177
  if ((!effectiveSearchSchemas || Object.keys(effectiveSearchSchemas).length === 0) && sourceFile) {
@@ -3975,10 +4191,10 @@ Set an explicit \`id\` on createRouter() or check the call site.`
3975
4191
  userRoutes,
3976
4192
  effectiveSearchSchemas && Object.keys(effectiveSearchSchemas).length > 0 ? effectiveSearchSchemas : void 0
3977
4193
  );
3978
- const existing = existsSync4(outPath) ? readFileSync4(outPath, "utf-8") : null;
4194
+ const existing = existsSync5(outPath) ? readFileSync4(outPath, "utf-8") : null;
3979
4195
  if (existing !== source) {
3980
4196
  markSelfGenWrite(state, outPath, source);
3981
- writeFileSync2(outPath, source);
4197
+ writeFileSync3(outPath, source);
3982
4198
  console.log(`[rsc-router] Generated route types -> ${outPath}`);
3983
4199
  }
3984
4200
  }
@@ -4020,21 +4236,21 @@ function supplementGenFilesWithRuntimeRoutes(state) {
4020
4236
  }
4021
4237
  const routerDir = dirname3(sourceFile);
4022
4238
  const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
4023
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4239
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
4024
4240
  const source = generateRouteTypesSource(
4025
4241
  mergedRoutes,
4026
4242
  Object.keys(mergedSearchSchemas).length > 0 ? mergedSearchSchemas : void 0
4027
4243
  );
4028
- const existing = existsSync4(outPath) ? readFileSync4(outPath, "utf-8") : null;
4244
+ const existing = existsSync5(outPath) ? readFileSync4(outPath, "utf-8") : null;
4029
4245
  if (existing !== source) {
4030
4246
  markSelfGenWrite(state, outPath, source);
4031
- writeFileSync2(outPath, source);
4247
+ writeFileSync3(outPath, source);
4032
4248
  }
4033
4249
  }
4034
4250
  }
4035
4251
 
4036
4252
  // src/vite/discovery/virtual-module-codegen.ts
4037
- 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";
4038
4254
  function generateRoutesManifestModule(state) {
4039
4255
  const hasManifest = state.mergedRouteManifest && Object.keys(state.mergedRouteManifest).length > 0;
4040
4256
  if (hasManifest) {
@@ -4049,7 +4265,7 @@ function generateRoutesManifestModule(state) {
4049
4265
  /\.(tsx?|jsx?)$/,
4050
4266
  ""
4051
4267
  );
4052
- const genPath = join4(
4268
+ const genPath = join3(
4053
4269
  routerDir,
4054
4270
  `${routerBasename}.named-routes.gen.js`
4055
4271
  ).replaceAll("\\", "/");
@@ -4146,7 +4362,7 @@ function generatePerRouterModule(state, routerId) {
4146
4362
  /\.(tsx?|jsx?)$/,
4147
4363
  ""
4148
4364
  );
4149
- const genPath = join4(
4365
+ const genPath = join3(
4150
4366
  routerDir,
4151
4367
  `${routerBasename}.named-routes.gen.js`
4152
4368
  ).replaceAll("\\", "/");
@@ -4173,100 +4389,90 @@ function generatePerRouterModule(state, routerId) {
4173
4389
  }
4174
4390
 
4175
4391
  // src/vite/discovery/bundle-postprocess.ts
4176
- import { resolve as resolve6 } from "node:path";
4177
- import { createHash as createHash4 } from "node:crypto";
4178
- import { readFileSync as readFileSync5, writeFileSync as writeFileSync3, existsSync as existsSync5, mkdirSync } from "node:fs";
4392
+ import { resolve as resolve7 } from "node:path";
4393
+ import { readFileSync as readFileSync5, writeFileSync as writeFileSync4, existsSync as existsSync6 } from "node:fs";
4179
4394
  function postprocessBundle(state) {
4180
- const hasPrerenderData = state.prerenderCollectedData && Object.keys(state.prerenderCollectedData).length > 0;
4181
- const hasStaticData = state.staticCollectedData && Object.keys(state.staticCollectedData).length > 0;
4395
+ const hasPrerenderData = state.prerenderManifestEntries && Object.keys(state.prerenderManifestEntries).length > 0;
4396
+ const hasStaticData = state.staticManifestEntries && Object.keys(state.staticManifestEntries).length > 0;
4182
4397
  if (!hasPrerenderData && !hasStaticData) return;
4183
- const rscEntryPath = resolve6(
4398
+ const rscEntryPath = resolve7(
4184
4399
  state.projectRoot,
4185
4400
  "dist/rsc",
4186
4401
  state.rscEntryFileName ?? "index.js"
4187
4402
  );
4188
4403
  const evictionTargets = [
4189
4404
  {
4190
- info: state.handlerChunkInfo,
4405
+ infos: state.handlerChunkInfoMap.values(),
4191
4406
  fnName: "Prerender",
4192
4407
  brand: "prerenderHandler",
4193
4408
  label: "handler code from RSC bundle"
4194
4409
  },
4195
4410
  {
4196
- info: state.staticHandlerChunkInfo,
4411
+ infos: state.staticHandlerChunkInfoMap.values(),
4197
4412
  fnName: "Static",
4198
4413
  brand: "staticHandler",
4199
4414
  label: "static handler code"
4200
4415
  }
4201
4416
  ];
4202
4417
  for (const target of evictionTargets) {
4203
- if (!target.info) continue;
4204
- const chunkPath = resolve6(
4205
- state.projectRoot,
4206
- "dist/rsc",
4207
- target.info.fileName
4208
- );
4209
- try {
4210
- const code = readFileSync5(chunkPath, "utf-8");
4211
- const result = evictHandlerCode(
4212
- code,
4213
- target.info.exports,
4214
- target.fnName,
4215
- target.brand
4216
- );
4217
- if (result) {
4218
- writeFileSync3(chunkPath, result.code);
4219
- const savedKB = (result.savedBytes / 1024).toFixed(1);
4220
- console.log(
4221
- `[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}`
4222
4438
  );
4223
4439
  }
4224
- } catch (replaceErr) {
4225
- console.warn(
4226
- `[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
4227
- );
4228
4440
  }
4229
4441
  }
4230
- state.handlerChunkInfo = null;
4231
- state.staticHandlerChunkInfo = null;
4232
- if (hasPrerenderData && existsSync5(rscEntryPath)) {
4442
+ state.handlerChunkInfoMap.clear();
4443
+ state.staticHandlerChunkInfoMap.clear();
4444
+ if (hasPrerenderData && existsSync6(rscEntryPath)) {
4233
4445
  const rscCode = readFileSync5(rscEntryPath, "utf-8");
4234
4446
  if (!rscCode.includes("__prerender-manifest.js")) {
4235
4447
  try {
4236
- const assetsDir = resolve6(state.projectRoot, "dist/rsc/assets");
4237
- mkdirSync(assetsDir, { recursive: true });
4238
- const manifestEntries = [];
4239
- let totalBytes = 0;
4240
- for (const [key, entry] of Object.entries(
4241
- state.prerenderCollectedData
4448
+ let totalBytes = copyStagedBuildAssets(
4449
+ state.projectRoot,
4450
+ Object.values(state.prerenderManifestEntries)
4451
+ );
4452
+ const manifestMap = {};
4453
+ for (const [key, assetFileName] of Object.entries(
4454
+ state.prerenderManifestEntries
4242
4455
  )) {
4243
- const entryJson = JSON.stringify(entry);
4244
- const contentHash = createHash4("sha256").update(entryJson).digest("hex").slice(0, 8);
4245
- const assetFileName = `__pr-${contentHash}.js`;
4246
- const assetPath = resolve6(assetsDir, assetFileName);
4247
- const assetCode = `export default ${entryJson};
4248
- `;
4249
- writeFileSync3(assetPath, assetCode);
4250
- totalBytes += Buffer.byteLength(assetCode);
4251
- manifestEntries.push(
4252
- `${JSON.stringify(key)}:()=>import("./assets/${assetFileName}")`
4253
- );
4456
+ manifestMap[key] = `./assets/${assetFileName}`;
4254
4457
  }
4255
- const manifestCode = `const m={${manifestEntries.join(",")}};export default m;
4256
- `;
4257
- const manifestPath = resolve6(
4458
+ const manifestCode = [
4459
+ `const m=JSON.parse('${JSON.stringify(manifestMap).replace(/'/g, "\\'")}');`,
4460
+ `export function loadPrerenderAsset(s){return import(s)}`,
4461
+ `export default m;`,
4462
+ ""
4463
+ ].join("\n");
4464
+ const manifestPath = resolve7(
4258
4465
  state.projectRoot,
4259
4466
  "dist/rsc/__prerender-manifest.js"
4260
4467
  );
4261
- writeFileSync3(manifestPath, manifestCode);
4468
+ writeFileSync4(manifestPath, manifestCode);
4262
4469
  totalBytes += Buffer.byteLength(manifestCode);
4263
- const injection = `import __pm from "./__prerender-manifest.js";
4264
- globalThis.__PRERENDER_MANIFEST = __pm;
4470
+ const injection = `globalThis.__loadPrerenderManifestModule = () => import("./__prerender-manifest.js");
4265
4471
  `;
4266
- writeFileSync3(rscEntryPath, injection + rscCode);
4472
+ writeFileSync4(rscEntryPath, injection + rscCode);
4267
4473
  const totalKB = (totalBytes / 1024).toFixed(1);
4268
4474
  console.log(
4269
- `[rsc-router] Wrote prerender assets (${totalKB} KB total, ${Object.keys(state.prerenderCollectedData).length} entries)`
4475
+ `[rsc-router] Wrote prerender assets (${totalKB} KB total, ${Object.keys(state.prerenderManifestEntries).length} entries)`
4270
4476
  );
4271
4477
  } catch (err) {
4272
4478
  throw new Error(
@@ -4275,44 +4481,36 @@ globalThis.__PRERENDER_MANIFEST = __pm;
4275
4481
  }
4276
4482
  }
4277
4483
  }
4278
- if (hasStaticData && existsSync5(rscEntryPath)) {
4484
+ if (hasStaticData && existsSync6(rscEntryPath)) {
4279
4485
  const rscCode = readFileSync5(rscEntryPath, "utf-8");
4280
- if (!rscCode.includes("__STATIC_MANIFEST")) {
4486
+ if (!rscCode.includes("__static-manifest.js")) {
4281
4487
  try {
4282
- const assetsDir = resolve6(state.projectRoot, "dist/rsc/assets");
4283
- mkdirSync(assetsDir, { recursive: true });
4284
4488
  const manifestEntries = [];
4285
- let totalBytes = 0;
4286
- for (const [handlerId, { encoded, handles }] of Object.entries(
4287
- state.staticCollectedData
4489
+ let totalBytes = copyStagedBuildAssets(
4490
+ state.projectRoot,
4491
+ Object.values(state.staticManifestEntries)
4492
+ );
4493
+ for (const [handlerId, assetFileName] of Object.entries(
4494
+ state.staticManifestEntries
4288
4495
  )) {
4289
- const hasHandles = Object.keys(handles).length > 0;
4290
- const exportValue = hasHandles ? JSON.stringify({ encoded, handles }) : JSON.stringify(encoded);
4291
- const contentHash = createHash4("sha256").update(exportValue).digest("hex").slice(0, 8);
4292
- const assetFileName = `__st-${contentHash}.js`;
4293
- const assetPath = resolve6(assetsDir, assetFileName);
4294
- const assetCode = `export default ${exportValue};
4295
- `;
4296
- writeFileSync3(assetPath, assetCode);
4297
- totalBytes += Buffer.byteLength(assetCode);
4298
4496
  manifestEntries.push(
4299
4497
  `${JSON.stringify(handlerId)}:()=>import("./assets/${assetFileName}")`
4300
4498
  );
4301
4499
  }
4302
4500
  const manifestCode = `const m={${manifestEntries.join(",")}};globalThis.__STATIC_MANIFEST=m;export default m;
4303
4501
  `;
4304
- const manifestPath = resolve6(
4502
+ const manifestPath = resolve7(
4305
4503
  state.projectRoot,
4306
4504
  "dist/rsc/__static-manifest.js"
4307
4505
  );
4308
- writeFileSync3(manifestPath, manifestCode);
4506
+ writeFileSync4(manifestPath, manifestCode);
4309
4507
  totalBytes += Buffer.byteLength(manifestCode);
4310
4508
  const injection = `import "./__static-manifest.js";
4311
4509
  `;
4312
- writeFileSync3(rscEntryPath, injection + rscCode);
4510
+ writeFileSync4(rscEntryPath, injection + rscCode);
4313
4511
  const totalKB = (totalBytes / 1024).toFixed(1);
4314
4512
  console.log(
4315
- `[rsc-router] Wrote static assets (${totalKB} KB total, ${Object.keys(state.staticCollectedData).length} entries)`
4513
+ `[rsc-router] Wrote static assets (${totalKB} KB total, ${Object.keys(state.staticManifestEntries).length} entries)`
4316
4514
  );
4317
4515
  } catch (err) {
4318
4516
  throw new Error(
@@ -4354,8 +4552,67 @@ async function createTempRscServer(state, options = {}) {
4354
4552
  ]
4355
4553
  });
4356
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
+ }
4357
4612
  function createRouterDiscoveryPlugin(entryPath, opts) {
4358
4613
  const s = createDiscoveryState(entryPath, opts);
4614
+ let viteCommand = "build";
4615
+ let viteMode = "production";
4359
4616
  return {
4360
4617
  name: "@rangojs/router:discovery",
4361
4618
  config() {
@@ -4364,31 +4621,13 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4364
4621
  __RANGO_DEBUG__: JSON.stringify(!!process.env.INTERNAL_RANGO_DEBUG)
4365
4622
  }
4366
4623
  };
4367
- if (opts?.enableBuildPrerender) {
4368
- config.environments = {
4369
- rsc: {
4370
- build: {
4371
- rollupOptions: {
4372
- output: {
4373
- manualChunks(id) {
4374
- if (s.resolvedPrerenderModules?.has(id)) {
4375
- return "__prerender-handlers";
4376
- }
4377
- if (s.resolvedStaticModules?.has(id)) {
4378
- return "__static-handlers";
4379
- }
4380
- }
4381
- }
4382
- }
4383
- }
4384
- }
4385
- };
4386
- }
4387
4624
  return config;
4388
4625
  },
4389
4626
  configResolved(config) {
4390
4627
  s.projectRoot = config.root;
4391
4628
  s.isBuildMode = config.command === "build";
4629
+ viteCommand = config.command;
4630
+ viteMode = config.mode;
4392
4631
  s.userResolveAlias = config.resolve.alias;
4393
4632
  if (!s.resolvedEntryPath && opts?.routerPathRef?.path) {
4394
4633
  s.resolvedEntryPath = opts.routerPathRef.path;
@@ -4402,12 +4641,6 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4402
4641
  s.resolvedEntryPath = entries[0];
4403
4642
  }
4404
4643
  }
4405
- if (opts?.include || opts?.exclude) {
4406
- s.scanFilter = createScanFilter(s.projectRoot, {
4407
- include: opts.include,
4408
- exclude: opts.exclude
4409
- });
4410
- }
4411
4644
  if (opts?.staticRouteTypesGeneration !== false) {
4412
4645
  s.cachedRouterFiles = findRouterFiles(s.projectRoot, s.scanFilter);
4413
4646
  writeCombinedRouteTypesWithTracking(s, { preserveIfLarger: true });
@@ -4427,8 +4660,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4427
4660
  if (globalThis.__rscRouterDiscoveryActive) return;
4428
4661
  s.devServer = server;
4429
4662
  let resolveDiscovery;
4430
- const discoveryPromise = new Promise((resolve9) => {
4431
- resolveDiscovery = resolve9;
4663
+ const discoveryPromise = new Promise((resolve10) => {
4664
+ resolveDiscovery = resolve10;
4432
4665
  });
4433
4666
  const getDevServerOrigin = () => server.resolvedUrls?.local?.[0]?.replace(/\/$/, "") || `http://localhost:${server.config.server.port || 5173}`;
4434
4667
  let prerenderTempServer = null;
@@ -4439,6 +4672,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4439
4672
  });
4440
4673
  prerenderTempServer = null;
4441
4674
  }
4675
+ releaseBuildEnv(s).catch(() => {
4676
+ });
4442
4677
  });
4443
4678
  async function getOrCreateTempServer() {
4444
4679
  if (prerenderNodeRegistry) {
@@ -4469,6 +4704,7 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4469
4704
  if (!rscEnv?.runner) {
4470
4705
  s.devServerOrigin = getDevServerOrigin();
4471
4706
  try {
4707
+ await acquireBuildEnv(s, viteCommand, viteMode);
4472
4708
  const tempRscEnv = await getOrCreateTempServer();
4473
4709
  if (tempRscEnv) {
4474
4710
  await discoverRouters(s, tempRscEnv);
@@ -4484,6 +4720,7 @@ ${err.stack}`
4484
4720
  return;
4485
4721
  }
4486
4722
  try {
4723
+ await acquireBuildEnv(s, viteCommand, viteMode);
4487
4724
  const serverMod = await rscEnv.runner.import(
4488
4725
  "@rangojs/router/server"
4489
4726
  );
@@ -4503,8 +4740,8 @@ ${err.stack}`
4503
4740
  resolveDiscovery();
4504
4741
  }
4505
4742
  };
4506
- s.discoveryDone = new Promise((resolve9) => {
4507
- setTimeout(() => discover().then(resolve9, resolve9), 0);
4743
+ s.discoveryDone = new Promise((resolve10) => {
4744
+ setTimeout(() => discover().then(resolve10, resolve10), 0);
4508
4745
  });
4509
4746
  let mainRegistry = null;
4510
4747
  const propagateDiscoveryState = async (rscEnv) => {
@@ -4548,7 +4785,26 @@ ${err.stack}`
4548
4785
  res.end("Missing pathname");
4549
4786
  return;
4550
4787
  }
4551
- 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
+ }
4552
4808
  if (!registry) {
4553
4809
  if (!prerenderNodeRegistry) {
4554
4810
  await getOrCreateTempServer();
@@ -4570,7 +4826,10 @@ ${err.stack}`
4570
4826
  pathname,
4571
4827
  {},
4572
4828
  void 0,
4573
- wantPassthrough
4829
+ wantPassthrough,
4830
+ s.resolvedBuildEnv,
4831
+ true
4832
+ // devMode: check getParams for passthrough routes
4574
4833
  );
4575
4834
  if (!result) continue;
4576
4835
  if (result.passthrough) continue;
@@ -4673,7 +4932,7 @@ ${err.stack}`
4673
4932
  if (hasCreateRouter) {
4674
4933
  const nestedRouterConflict = findNestedRouterConflict([
4675
4934
  ...s.cachedRouterFiles ?? [],
4676
- resolve7(filePath)
4935
+ resolve8(filePath)
4677
4936
  ]);
4678
4937
  if (nestedRouterConflict) {
4679
4938
  server.config.logger.error(
@@ -4703,6 +4962,10 @@ ${err.stack}`
4703
4962
  async buildStart() {
4704
4963
  if (!s.isBuildMode) return;
4705
4964
  if (s.mergedRouteManifest !== null) return;
4965
+ resetStagedBuildAssets(s.projectRoot);
4966
+ s.prerenderManifestEntries = null;
4967
+ s.staticManifestEntries = null;
4968
+ await acquireBuildEnv(s, viteCommand, viteMode);
4706
4969
  let tempServer = null;
4707
4970
  globalThis.__rscRouterDiscoveryActive = true;
4708
4971
  try {
@@ -4742,6 +5005,7 @@ ${details}`
4742
5005
  if (tempServer) {
4743
5006
  await tempServer.close();
4744
5007
  }
5008
+ await releaseBuildEnv(s);
4745
5009
  }
4746
5010
  },
4747
5011
  // Virtual module: provides the pre-generated route manifest as a JS module
@@ -4784,20 +5048,30 @@ ${details}`
4784
5048
  }
4785
5049
  if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
4786
5050
  return;
5051
+ s.handlerChunkInfoMap.clear();
5052
+ s.staticHandlerChunkInfoMap.clear();
4787
5053
  for (const [fileName, chunk] of Object.entries(bundle)) {
4788
5054
  if (chunk.type !== "chunk") continue;
4789
- if (fileName.includes("__prerender-handlers") && s.resolvedPrerenderModules?.size) {
5055
+ if (s.resolvedPrerenderModules?.size) {
4790
5056
  const handlers = extractHandlerExportsFromChunk(
4791
5057
  chunk.code,
4792
5058
  s.resolvedPrerenderModules,
4793
5059
  "Prerender",
4794
- true
5060
+ false
4795
5061
  );
4796
5062
  if (handlers.length > 0) {
4797
- 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
+ }
4798
5072
  }
4799
5073
  }
4800
- if (fileName.includes("__static-handlers") && s.resolvedStaticModules?.size) {
5074
+ if (s.resolvedStaticModules?.size) {
4801
5075
  const handlers = extractHandlerExportsFromChunk(
4802
5076
  chunk.code,
4803
5077
  s.resolvedStaticModules,
@@ -4805,7 +5079,15 @@ ${details}`
4805
5079
  false
4806
5080
  );
4807
5081
  if (handlers.length > 0) {
4808
- 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
+ }
4809
5091
  }
4810
5092
  }
4811
5093
  }
@@ -4832,8 +5114,16 @@ async function rango(options) {
4832
5114
  const showBanner = resolvedOptions.banner ?? true;
4833
5115
  const plugins = [];
4834
5116
  const rangoAliases = getPackageAliases();
4835
- const excludeDeps = getExcludeDeps();
4836
- 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
+ ];
4837
5127
  const routerRef = { path: void 0 };
4838
5128
  const prerenderEnabled = true;
4839
5129
  if (preset === "cloudflare") {
@@ -4929,6 +5219,7 @@ async function rango(options) {
4929
5219
  }
4930
5220
  });
4931
5221
  plugins.push(createVirtualEntriesPlugin(finalEntries));
5222
+ plugins.push(performanceTracksPlugin());
4932
5223
  plugins.push(
4933
5224
  rsc({
4934
5225
  entries: finalEntries,
@@ -4937,153 +5228,122 @@ async function rango(options) {
4937
5228
  );
4938
5229
  plugins.push(clientRefDedup());
4939
5230
  } else {
4940
- const nodeOptions = resolvedOptions;
4941
- routerRef.path = nodeOptions.router;
4942
- if (!routerRef.path) {
4943
- plugins.push({
4944
- name: "@rangojs/router:auto-discover",
4945
- config(userConfig) {
4946
- if (routerRef.path) return;
4947
- const root = userConfig.root ? resolve8(process.cwd(), userConfig.root) : process.cwd();
4948
- const filter = createScanFilter(root, {
4949
- include: resolvedOptions.include,
4950
- exclude: resolvedOptions.exclude
4951
- });
4952
- const candidates = findRouterFiles(root, filter);
4953
- if (candidates.length === 1) {
4954
- const abs = candidates[0];
4955
- routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
4956
- } else if (candidates.length > 1) {
4957
- const list = candidates.map(
4958
- (f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
4959
- ).join("\n");
4960
- throw new Error(
4961
- `[rsc-router] Multiple routers found. Specify \`router\` to choose one:
4962
- ${list}`
4963
- );
4964
- }
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}`);
4965
5246
  }
4966
- });
4967
- }
4968
- const rscOption = nodeOptions.rsc ?? true;
4969
- if (rscOption !== false) {
4970
- const { default: rsc } = await import("@vitejs/plugin-rsc");
4971
- const userEntries = typeof rscOption === "boolean" ? {} : rscOption.entries || {};
4972
- const finalEntries = {
4973
- client: userEntries.client ?? VIRTUAL_IDS.browser,
4974
- ssr: userEntries.ssr ?? VIRTUAL_IDS.ssr,
4975
- rsc: userEntries.rsc ?? VIRTUAL_IDS.rsc
4976
- };
4977
- rscEntryPath = userEntries.rsc ?? null;
4978
- let hasWarnedDuplicate = false;
4979
- plugins.push({
4980
- name: "@rangojs/router:rsc-integration",
4981
- enforce: "pre",
4982
- config() {
4983
- const useVirtualClient = finalEntries.client === VIRTUAL_IDS.browser;
4984
- const useVirtualSSR = finalEntries.ssr === VIRTUAL_IDS.ssr;
4985
- const useVirtualRSC = finalEntries.rsc === VIRTUAL_IDS.rsc;
4986
- return {
4987
- // Exclude rsc-router modules from optimization to prevent module duplication
4988
- // This ensures the same Context instance is used by both browser entry and RSC proxy modules
4989
- optimizeDeps: {
4990
- exclude: excludeDeps,
4991
- esbuildOptions: sharedEsbuildOptions
4992
- },
4993
- build: {
4994
- rollupOptions: { onwarn }
4995
- },
4996
- resolve: {
4997
- alias: rangoAliases
4998
- },
4999
- environments: {
5000
- client: {
5001
- build: {
5002
- rollupOptions: {
5003
- output: {
5004
- manualChunks: getManualChunks
5005
- }
5006
- }
5007
- },
5008
- // Always exclude rsc-router modules, conditionally add virtual entry
5009
- optimizeDeps: {
5010
- // Pre-bundle React and rsc-html-stream to prevent late discovery
5011
- // triggering ERR_OUTDATED_OPTIMIZED_DEP on cold starts
5012
- include: [
5013
- "react",
5014
- "react-dom",
5015
- "react/jsx-runtime",
5016
- "react/jsx-dev-runtime",
5017
- "rsc-html-stream/client"
5018
- ],
5019
- exclude: excludeDeps,
5020
- esbuildOptions: sharedEsbuildOptions,
5021
- ...useVirtualClient && {
5022
- // Tell Vite to scan the virtual entry for dependencies
5023
- entries: [VIRTUAL_IDS.browser]
5024
- }
5025
- }
5026
- },
5027
- ...useVirtualSSR && {
5028
- ssr: {
5029
- optimizeDeps: {
5030
- entries: [VIRTUAL_IDS.ssr],
5031
- // Pre-bundle all SSR deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
5032
- include: [
5033
- "react",
5034
- "react-dom",
5035
- "react-dom/server.edge",
5036
- "react-dom/static.edge",
5037
- "react/jsx-runtime",
5038
- "react/jsx-dev-runtime",
5039
- "@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
5040
- ],
5041
- exclude: excludeDeps,
5042
- 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
5043
5277
  }
5044
5278
  }
5045
5279
  },
5046
- ...useVirtualRSC && {
5047
- rsc: {
5048
- optimizeDeps: {
5049
- entries: [VIRTUAL_IDS.rsc],
5050
- // Pre-bundle all RSC deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
5051
- include: [
5052
- "react",
5053
- "react/jsx-runtime",
5054
- "react/jsx-dev-runtime",
5055
- "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
5056
- ],
5057
- esbuildOptions: sharedEsbuildOptions
5058
- }
5059
- }
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
5060
5319
  }
5061
5320
  }
5062
- };
5063
- },
5064
- configResolved(config) {
5065
- if (showBanner) {
5066
- const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
5067
- printBanner(mode, "node", rangoVersion);
5068
- }
5069
- const rscMinimalCount = config.plugins.filter(
5070
- (p) => p.name === "rsc:minimal"
5071
- ).length;
5072
- if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
5073
- hasWarnedDuplicate = true;
5074
- console.warn(
5075
- "[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your config or use rango({ rsc: false }) for manual configuration."
5076
- );
5077
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);
5078
5328
  }
5079
- });
5080
- plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
5081
- plugins.push(
5082
- rsc({
5083
- entries: finalEntries
5084
- })
5085
- );
5086
- }
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
+ );
5087
5347
  plugins.push(clientRefDedup());
5088
5348
  }
5089
5349
  plugins.push({
@@ -5111,22 +5371,102 @@ ${list}`
5111
5371
  plugins.push(createVersionPlugin());
5112
5372
  const discoveryEntryPath = preset !== "cloudflare" ? routerRef.path : void 0;
5113
5373
  const discoveryRouterRef = preset !== "cloudflare" ? routerRef : void 0;
5114
- const injectorEntryPath = rscEntryPath ?? (preset === "cloudflare" ? void 0 : null);
5115
- if (injectorEntryPath !== null) {
5116
- plugins.push(createVersionInjectorPlugin(injectorEntryPath));
5374
+ if (preset === "cloudflare") {
5375
+ plugins.push(createVersionInjectorPlugin(void 0));
5117
5376
  }
5118
5377
  plugins.push(createCjsToEsmPlugin());
5119
5378
  plugins.push(
5120
5379
  createRouterDiscoveryPlugin(discoveryEntryPath, {
5121
5380
  routerPathRef: discoveryRouterRef,
5122
5381
  enableBuildPrerender: prerenderEnabled,
5123
- staticRouteTypesGeneration: resolvedOptions.staticRouteTypesGeneration,
5124
- include: resolvedOptions.include,
5125
- exclude: resolvedOptions.exclude
5382
+ buildEnv: options?.buildEnv,
5383
+ preset
5126
5384
  })
5127
5385
  );
5128
5386
  return plugins;
5129
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
+ }
5130
5469
  export {
5470
+ poke,
5131
5471
  rango
5132
5472
  };