@rangojs/router 0.0.0-experimental.6fe6a3cc → 0.0.0-experimental.70

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 (942) hide show
  1. package/README.md +76 -18
  2. package/dist/bin/rango.js +138 -50
  3. package/dist/vite/index.js +839 -429
  4. package/package.json +2 -2
  5. package/skills/cache-guide/SKILL.md +32 -0
  6. package/skills/caching/SKILL.md +45 -4
  7. package/skills/links/SKILL.md +3 -1
  8. package/skills/loader/SKILL.md +53 -43
  9. package/skills/middleware/SKILL.md +2 -0
  10. package/skills/parallel/SKILL.md +126 -0
  11. package/skills/prerender/SKILL.md +110 -68
  12. package/skills/route/SKILL.md +31 -0
  13. package/skills/router-setup/SKILL.md +87 -2
  14. package/skills/typesafety/SKILL.md +10 -0
  15. package/src/__internal.ts +1 -1
  16. package/src/browser/app-version.ts +14 -0
  17. package/src/browser/event-controller.ts +5 -0
  18. package/src/browser/navigation-bridge.ts +17 -6
  19. package/src/browser/navigation-client.ts +115 -58
  20. package/src/browser/navigation-store.ts +43 -8
  21. package/src/browser/navigation-transaction.ts +11 -9
  22. package/src/browser/partial-update.ts +76 -13
  23. package/src/browser/prefetch/cache.ts +57 -5
  24. package/src/browser/prefetch/fetch.ts +38 -23
  25. package/src/browser/prefetch/queue.ts +92 -20
  26. package/src/browser/prefetch/resource-ready.ts +77 -0
  27. package/src/browser/react/Link.tsx +53 -9
  28. package/src/browser/react/NavigationProvider.tsx +40 -4
  29. package/src/browser/react/context.ts +7 -2
  30. package/src/browser/react/use-handle.ts +9 -58
  31. package/src/browser/react/use-router.ts +21 -8
  32. package/src/browser/rsc-router.tsx +134 -59
  33. package/src/browser/scroll-restoration.ts +30 -15
  34. package/src/browser/segment-reconciler.ts +6 -1
  35. package/src/browser/server-action-bridge.ts +8 -6
  36. package/src/browser/types.ts +36 -5
  37. package/src/build/generate-manifest.ts +6 -6
  38. package/src/build/generate-route-types.ts +3 -0
  39. package/src/build/route-types/include-resolution.ts +8 -1
  40. package/src/build/route-types/router-processing.ts +223 -74
  41. package/src/build/route-types/scan-filter.ts +8 -1
  42. package/src/cache/cache-runtime.ts +15 -11
  43. package/src/cache/cache-scope.ts +48 -7
  44. package/src/cache/cf/cf-cache-store.ts +453 -11
  45. package/src/cache/cf/index.ts +5 -1
  46. package/src/cache/document-cache.ts +17 -7
  47. package/src/cache/index.ts +1 -0
  48. package/src/cache/taint.ts +55 -0
  49. package/src/client.tsx +2 -56
  50. package/src/context-var.ts +72 -2
  51. package/src/debug.ts +2 -2
  52. package/src/handle.ts +40 -0
  53. package/src/index.rsc.ts +3 -1
  54. package/src/index.ts +12 -0
  55. package/src/prerender/store.ts +5 -4
  56. package/src/prerender.ts +138 -77
  57. package/src/reverse.ts +22 -1
  58. package/src/route-definition/dsl-helpers.ts +73 -25
  59. package/src/route-definition/helpers-types.ts +10 -6
  60. package/src/route-definition/index.ts +3 -0
  61. package/src/route-definition/redirect.ts +11 -3
  62. package/src/route-definition/resolve-handler-use.ts +149 -0
  63. package/src/route-map-builder.ts +7 -1
  64. package/src/route-types.ts +11 -0
  65. package/src/router/content-negotiation.ts +100 -1
  66. package/src/router/find-match.ts +4 -2
  67. package/src/router/handler-context.ts +79 -23
  68. package/src/router/intercept-resolution.ts +11 -4
  69. package/src/router/lazy-includes.ts +4 -1
  70. package/src/router/loader-resolution.ts +156 -21
  71. package/src/router/logging.ts +5 -2
  72. package/src/router/manifest.ts +9 -3
  73. package/src/router/match-api.ts +124 -189
  74. package/src/router/match-middleware/background-revalidation.ts +30 -2
  75. package/src/router/match-middleware/cache-lookup.ts +92 -16
  76. package/src/router/match-middleware/cache-store.ts +53 -10
  77. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  78. package/src/router/match-middleware/segment-resolution.ts +60 -5
  79. package/src/router/match-result.ts +22 -6
  80. package/src/router/metrics.ts +6 -1
  81. package/src/router/middleware-types.ts +6 -8
  82. package/src/router/middleware.ts +4 -6
  83. package/src/router/navigation-snapshot.ts +182 -0
  84. package/src/router/prerender-match.ts +110 -10
  85. package/src/router/preview-match.ts +30 -102
  86. package/src/router/request-classification.ts +310 -0
  87. package/src/router/route-snapshot.ts +245 -0
  88. package/src/router/router-context.ts +5 -1
  89. package/src/router/router-interfaces.ts +36 -4
  90. package/src/router/router-options.ts +37 -11
  91. package/src/router/segment-resolution/fresh.ts +193 -20
  92. package/src/router/segment-resolution/helpers.ts +29 -24
  93. package/src/router/segment-resolution/loader-cache.ts +1 -0
  94. package/src/router/segment-resolution/revalidation.ts +429 -296
  95. package/src/router/types.ts +1 -0
  96. package/src/router.ts +59 -6
  97. package/src/rsc/handler.ts +472 -372
  98. package/src/rsc/loader-fetch.ts +23 -3
  99. package/src/rsc/manifest-init.ts +5 -1
  100. package/src/rsc/progressive-enhancement.ts +14 -2
  101. package/src/rsc/rsc-rendering.ts +10 -1
  102. package/src/rsc/server-action.ts +8 -0
  103. package/src/rsc/ssr-setup.ts +2 -2
  104. package/src/rsc/types.ts +9 -1
  105. package/src/segment-system.tsx +140 -4
  106. package/src/server/context.ts +140 -14
  107. package/src/server/handle-store.ts +19 -0
  108. package/src/server/loader-registry.ts +9 -8
  109. package/src/server/request-context.ts +185 -19
  110. package/src/ssr/index.tsx +4 -0
  111. package/src/static-handler.ts +18 -6
  112. package/src/types/cache-types.ts +4 -4
  113. package/src/types/handler-context.ts +137 -33
  114. package/src/types/loader-types.ts +36 -9
  115. package/src/types/route-entry.ts +8 -1
  116. package/src/types/segments.ts +2 -0
  117. package/src/urls/path-helper-types.ts +9 -2
  118. package/src/urls/path-helper.ts +48 -13
  119. package/src/urls/pattern-types.ts +12 -0
  120. package/src/urls/response-types.ts +16 -6
  121. package/src/use-loader.tsx +77 -5
  122. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  123. package/src/vite/discovery/discover-routers.ts +5 -1
  124. package/src/vite/discovery/prerender-collection.ts +128 -74
  125. package/src/vite/discovery/state.ts +13 -6
  126. package/src/vite/index.ts +4 -0
  127. package/src/vite/plugin-types.ts +51 -79
  128. package/src/vite/plugins/expose-action-id.ts +1 -3
  129. package/src/vite/plugins/expose-id-utils.ts +12 -0
  130. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  131. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  132. package/src/vite/plugins/performance-tracks.ts +88 -0
  133. package/src/vite/plugins/refresh-cmd.ts +88 -26
  134. package/src/vite/plugins/version-plugin.ts +13 -1
  135. package/src/vite/rango.ts +163 -211
  136. package/src/vite/router-discovery.ts +178 -45
  137. package/src/vite/utils/banner.ts +3 -3
  138. package/src/vite/utils/prerender-utils.ts +18 -0
  139. package/src/vite/utils/shared-utils.ts +3 -2
  140. package/dist/__internal.d.ts +0 -83
  141. package/dist/__internal.d.ts.map +0 -1
  142. package/dist/__internal.js +0 -19
  143. package/dist/__internal.js.map +0 -1
  144. package/dist/__mocks__/version.d.ts +0 -7
  145. package/dist/__mocks__/version.d.ts.map +0 -1
  146. package/dist/__mocks__/version.js +0 -7
  147. package/dist/__mocks__/version.js.map +0 -1
  148. package/dist/__tests__/client-href.test.d.ts +0 -2
  149. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  150. package/dist/__tests__/client-href.test.js +0 -74
  151. package/dist/__tests__/client-href.test.js.map +0 -1
  152. package/dist/__tests__/component-utils.test.d.ts +0 -2
  153. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  154. package/dist/__tests__/component-utils.test.js +0 -51
  155. package/dist/__tests__/component-utils.test.js.map +0 -1
  156. package/dist/__tests__/event-controller.test.d.ts +0 -2
  157. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  158. package/dist/__tests__/event-controller.test.js +0 -538
  159. package/dist/__tests__/event-controller.test.js.map +0 -1
  160. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  161. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  162. package/dist/__tests__/helpers/route-tree.js +0 -374
  163. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  164. package/dist/__tests__/match-result.test.d.ts +0 -2
  165. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  166. package/dist/__tests__/match-result.test.js +0 -154
  167. package/dist/__tests__/match-result.test.js.map +0 -1
  168. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  169. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  170. package/dist/__tests__/navigation-store.test.js +0 -440
  171. package/dist/__tests__/navigation-store.test.js.map +0 -1
  172. package/dist/__tests__/partial-update.test.d.ts +0 -2
  173. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  174. package/dist/__tests__/partial-update.test.js +0 -1009
  175. package/dist/__tests__/partial-update.test.js.map +0 -1
  176. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  177. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  178. package/dist/__tests__/reverse-types.test.js +0 -656
  179. package/dist/__tests__/reverse-types.test.js.map +0 -1
  180. package/dist/__tests__/route-definition.test.d.ts +0 -2
  181. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  182. package/dist/__tests__/route-definition.test.js +0 -55
  183. package/dist/__tests__/route-definition.test.js.map +0 -1
  184. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  185. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  186. package/dist/__tests__/router-helpers.test.js +0 -377
  187. package/dist/__tests__/router-helpers.test.js.map +0 -1
  188. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  189. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  190. package/dist/__tests__/router-integration-2.test.js +0 -426
  191. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  192. package/dist/__tests__/router-integration.test.d.ts +0 -2
  193. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  194. package/dist/__tests__/router-integration.test.js +0 -1051
  195. package/dist/__tests__/router-integration.test.js.map +0 -1
  196. package/dist/__tests__/search-params.test.d.ts +0 -5
  197. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  198. package/dist/__tests__/search-params.test.js +0 -306
  199. package/dist/__tests__/search-params.test.js.map +0 -1
  200. package/dist/__tests__/segment-system.test.d.ts +0 -2
  201. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  202. package/dist/__tests__/segment-system.test.js +0 -627
  203. package/dist/__tests__/segment-system.test.js.map +0 -1
  204. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  205. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  206. package/dist/__tests__/static-handler-types.test.js +0 -63
  207. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  208. package/dist/__tests__/urls.test.d.ts +0 -2
  209. package/dist/__tests__/urls.test.d.ts.map +0 -1
  210. package/dist/__tests__/urls.test.js +0 -421
  211. package/dist/__tests__/urls.test.js.map +0 -1
  212. package/dist/__tests__/use-mount.test.d.ts +0 -2
  213. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  214. package/dist/__tests__/use-mount.test.js +0 -35
  215. package/dist/__tests__/use-mount.test.js.map +0 -1
  216. package/dist/bin/rango.d.ts +0 -2
  217. package/dist/bin/rango.d.ts.map +0 -1
  218. package/dist/bin/rango.js.map +0 -1
  219. package/dist/browser/event-controller.d.ts +0 -191
  220. package/dist/browser/event-controller.d.ts.map +0 -1
  221. package/dist/browser/event-controller.js +0 -559
  222. package/dist/browser/event-controller.js.map +0 -1
  223. package/dist/browser/index.d.ts +0 -2
  224. package/dist/browser/index.d.ts.map +0 -1
  225. package/dist/browser/index.js +0 -14
  226. package/dist/browser/index.js.map +0 -1
  227. package/dist/browser/link-interceptor.d.ts +0 -38
  228. package/dist/browser/link-interceptor.d.ts.map +0 -1
  229. package/dist/browser/link-interceptor.js +0 -99
  230. package/dist/browser/link-interceptor.js.map +0 -1
  231. package/dist/browser/logging.d.ts +0 -10
  232. package/dist/browser/logging.d.ts.map +0 -1
  233. package/dist/browser/logging.js +0 -29
  234. package/dist/browser/logging.js.map +0 -1
  235. package/dist/browser/lru-cache.d.ts +0 -17
  236. package/dist/browser/lru-cache.d.ts.map +0 -1
  237. package/dist/browser/lru-cache.js +0 -50
  238. package/dist/browser/lru-cache.js.map +0 -1
  239. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  240. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  241. package/dist/browser/merge-segment-loaders.js +0 -102
  242. package/dist/browser/merge-segment-loaders.js.map +0 -1
  243. package/dist/browser/navigation-bridge.d.ts +0 -102
  244. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  245. package/dist/browser/navigation-bridge.js +0 -708
  246. package/dist/browser/navigation-bridge.js.map +0 -1
  247. package/dist/browser/navigation-client.d.ts +0 -25
  248. package/dist/browser/navigation-client.d.ts.map +0 -1
  249. package/dist/browser/navigation-client.js +0 -157
  250. package/dist/browser/navigation-client.js.map +0 -1
  251. package/dist/browser/navigation-store.d.ts +0 -101
  252. package/dist/browser/navigation-store.d.ts.map +0 -1
  253. package/dist/browser/navigation-store.js +0 -625
  254. package/dist/browser/navigation-store.js.map +0 -1
  255. package/dist/browser/partial-update.d.ts +0 -75
  256. package/dist/browser/partial-update.d.ts.map +0 -1
  257. package/dist/browser/partial-update.js +0 -426
  258. package/dist/browser/partial-update.js.map +0 -1
  259. package/dist/browser/react/Link.d.ts +0 -86
  260. package/dist/browser/react/Link.d.ts.map +0 -1
  261. package/dist/browser/react/Link.js +0 -128
  262. package/dist/browser/react/Link.js.map +0 -1
  263. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  264. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  265. package/dist/browser/react/NavigationProvider.js +0 -216
  266. package/dist/browser/react/NavigationProvider.js.map +0 -1
  267. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  268. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  269. package/dist/browser/react/ScrollRestoration.js +0 -57
  270. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  271. package/dist/browser/react/context.d.ts +0 -46
  272. package/dist/browser/react/context.d.ts.map +0 -1
  273. package/dist/browser/react/context.js +0 -10
  274. package/dist/browser/react/context.js.map +0 -1
  275. package/dist/browser/react/index.d.ts +0 -11
  276. package/dist/browser/react/index.d.ts.map +0 -1
  277. package/dist/browser/react/index.js +0 -22
  278. package/dist/browser/react/index.js.map +0 -1
  279. package/dist/browser/react/location-state-shared.d.ts +0 -63
  280. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  281. package/dist/browser/react/location-state-shared.js +0 -81
  282. package/dist/browser/react/location-state-shared.js.map +0 -1
  283. package/dist/browser/react/location-state.d.ts +0 -23
  284. package/dist/browser/react/location-state.d.ts.map +0 -1
  285. package/dist/browser/react/location-state.js +0 -29
  286. package/dist/browser/react/location-state.js.map +0 -1
  287. package/dist/browser/react/mount-context.d.ts +0 -24
  288. package/dist/browser/react/mount-context.d.ts.map +0 -1
  289. package/dist/browser/react/mount-context.js +0 -24
  290. package/dist/browser/react/mount-context.js.map +0 -1
  291. package/dist/browser/react/use-action.d.ts +0 -64
  292. package/dist/browser/react/use-action.d.ts.map +0 -1
  293. package/dist/browser/react/use-action.js +0 -134
  294. package/dist/browser/react/use-action.js.map +0 -1
  295. package/dist/browser/react/use-client-cache.d.ts +0 -41
  296. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  297. package/dist/browser/react/use-client-cache.js +0 -39
  298. package/dist/browser/react/use-client-cache.js.map +0 -1
  299. package/dist/browser/react/use-handle.d.ts +0 -31
  300. package/dist/browser/react/use-handle.d.ts.map +0 -1
  301. package/dist/browser/react/use-handle.js +0 -144
  302. package/dist/browser/react/use-handle.js.map +0 -1
  303. package/dist/browser/react/use-href.d.ts +0 -33
  304. package/dist/browser/react/use-href.d.ts.map +0 -1
  305. package/dist/browser/react/use-href.js +0 -39
  306. package/dist/browser/react/use-href.js.map +0 -1
  307. package/dist/browser/react/use-link-status.d.ts +0 -37
  308. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  309. package/dist/browser/react/use-link-status.js +0 -99
  310. package/dist/browser/react/use-link-status.js.map +0 -1
  311. package/dist/browser/react/use-mount.d.ts +0 -25
  312. package/dist/browser/react/use-mount.d.ts.map +0 -1
  313. package/dist/browser/react/use-mount.js +0 -30
  314. package/dist/browser/react/use-mount.js.map +0 -1
  315. package/dist/browser/react/use-navigation.d.ts +0 -27
  316. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  317. package/dist/browser/react/use-navigation.js +0 -87
  318. package/dist/browser/react/use-navigation.js.map +0 -1
  319. package/dist/browser/react/use-segments.d.ts +0 -38
  320. package/dist/browser/react/use-segments.d.ts.map +0 -1
  321. package/dist/browser/react/use-segments.js +0 -130
  322. package/dist/browser/react/use-segments.js.map +0 -1
  323. package/dist/browser/request-controller.d.ts +0 -26
  324. package/dist/browser/request-controller.d.ts.map +0 -1
  325. package/dist/browser/request-controller.js +0 -147
  326. package/dist/browser/request-controller.js.map +0 -1
  327. package/dist/browser/rsc-router.d.ts +0 -129
  328. package/dist/browser/rsc-router.d.ts.map +0 -1
  329. package/dist/browser/rsc-router.js +0 -195
  330. package/dist/browser/rsc-router.js.map +0 -1
  331. package/dist/browser/scroll-restoration.d.ts +0 -93
  332. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  333. package/dist/browser/scroll-restoration.js +0 -321
  334. package/dist/browser/scroll-restoration.js.map +0 -1
  335. package/dist/browser/segment-structure-assert.d.ts +0 -17
  336. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  337. package/dist/browser/segment-structure-assert.js +0 -59
  338. package/dist/browser/segment-structure-assert.js.map +0 -1
  339. package/dist/browser/server-action-bridge.d.ts +0 -26
  340. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  341. package/dist/browser/server-action-bridge.js +0 -668
  342. package/dist/browser/server-action-bridge.js.map +0 -1
  343. package/dist/browser/shallow.d.ts +0 -12
  344. package/dist/browser/shallow.d.ts.map +0 -1
  345. package/dist/browser/shallow.js +0 -34
  346. package/dist/browser/shallow.js.map +0 -1
  347. package/dist/browser/types.d.ts +0 -369
  348. package/dist/browser/types.d.ts.map +0 -1
  349. package/dist/browser/types.js +0 -2
  350. package/dist/browser/types.js.map +0 -1
  351. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  352. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  353. package/dist/build/__tests__/generate-cli.test.js +0 -237
  354. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  355. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  356. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  357. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  358. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  359. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  360. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  361. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  362. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  363. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  364. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  365. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  366. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  367. package/dist/build/generate-manifest.d.ts +0 -81
  368. package/dist/build/generate-manifest.d.ts.map +0 -1
  369. package/dist/build/generate-manifest.js +0 -276
  370. package/dist/build/generate-manifest.js.map +0 -1
  371. package/dist/build/generate-route-types.d.ts +0 -115
  372. package/dist/build/generate-route-types.d.ts.map +0 -1
  373. package/dist/build/generate-route-types.js +0 -740
  374. package/dist/build/generate-route-types.js.map +0 -1
  375. package/dist/build/index.d.ts +0 -21
  376. package/dist/build/index.d.ts.map +0 -1
  377. package/dist/build/index.js +0 -21
  378. package/dist/build/index.js.map +0 -1
  379. package/dist/build/route-trie.d.ts +0 -71
  380. package/dist/build/route-trie.d.ts.map +0 -1
  381. package/dist/build/route-trie.js +0 -175
  382. package/dist/build/route-trie.js.map +0 -1
  383. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  384. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  385. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  386. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  387. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  388. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  389. package/dist/cache/__tests__/document-cache.test.js +0 -345
  390. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  391. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  392. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  393. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  394. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  395. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  396. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  397. package/dist/cache/__tests__/memory-store.test.js +0 -367
  398. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  399. package/dist/cache/cache-scope.d.ts +0 -102
  400. package/dist/cache/cache-scope.d.ts.map +0 -1
  401. package/dist/cache/cache-scope.js +0 -440
  402. package/dist/cache/cache-scope.js.map +0 -1
  403. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  404. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  405. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  406. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  407. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  408. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  409. package/dist/cache/cf/cf-cache-store.js +0 -242
  410. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  411. package/dist/cache/cf/index.d.ts +0 -14
  412. package/dist/cache/cf/index.d.ts.map +0 -1
  413. package/dist/cache/cf/index.js +0 -17
  414. package/dist/cache/cf/index.js.map +0 -1
  415. package/dist/cache/document-cache.d.ts +0 -64
  416. package/dist/cache/document-cache.d.ts.map +0 -1
  417. package/dist/cache/document-cache.js +0 -228
  418. package/dist/cache/document-cache.js.map +0 -1
  419. package/dist/cache/index.d.ts +0 -19
  420. package/dist/cache/index.d.ts.map +0 -1
  421. package/dist/cache/index.js +0 -21
  422. package/dist/cache/index.js.map +0 -1
  423. package/dist/cache/memory-segment-store.d.ts +0 -110
  424. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  425. package/dist/cache/memory-segment-store.js +0 -117
  426. package/dist/cache/memory-segment-store.js.map +0 -1
  427. package/dist/cache/memory-store.d.ts +0 -41
  428. package/dist/cache/memory-store.d.ts.map +0 -1
  429. package/dist/cache/memory-store.js +0 -191
  430. package/dist/cache/memory-store.js.map +0 -1
  431. package/dist/cache/types.d.ts +0 -317
  432. package/dist/cache/types.d.ts.map +0 -1
  433. package/dist/cache/types.js +0 -12
  434. package/dist/cache/types.js.map +0 -1
  435. package/dist/client.d.ts +0 -248
  436. package/dist/client.d.ts.map +0 -1
  437. package/dist/client.js +0 -367
  438. package/dist/client.js.map +0 -1
  439. package/dist/client.rsc.d.ts +0 -26
  440. package/dist/client.rsc.d.ts.map +0 -1
  441. package/dist/client.rsc.js +0 -46
  442. package/dist/client.rsc.js.map +0 -1
  443. package/dist/component-utils.d.ts +0 -36
  444. package/dist/component-utils.d.ts.map +0 -1
  445. package/dist/component-utils.js +0 -61
  446. package/dist/component-utils.js.map +0 -1
  447. package/dist/components/DefaultDocument.d.ts +0 -13
  448. package/dist/components/DefaultDocument.d.ts.map +0 -1
  449. package/dist/components/DefaultDocument.js +0 -15
  450. package/dist/components/DefaultDocument.js.map +0 -1
  451. package/dist/debug.d.ts +0 -58
  452. package/dist/debug.d.ts.map +0 -1
  453. package/dist/debug.js +0 -157
  454. package/dist/debug.js.map +0 -1
  455. package/dist/default-error-boundary.d.ts +0 -11
  456. package/dist/default-error-boundary.d.ts.map +0 -1
  457. package/dist/default-error-boundary.js +0 -45
  458. package/dist/default-error-boundary.js.map +0 -1
  459. package/dist/deps/browser.d.ts +0 -2
  460. package/dist/deps/browser.d.ts.map +0 -1
  461. package/dist/deps/browser.js +0 -3
  462. package/dist/deps/browser.js.map +0 -1
  463. package/dist/deps/html-stream-client.d.ts +0 -2
  464. package/dist/deps/html-stream-client.d.ts.map +0 -1
  465. package/dist/deps/html-stream-client.js +0 -3
  466. package/dist/deps/html-stream-client.js.map +0 -1
  467. package/dist/deps/html-stream-server.d.ts +0 -2
  468. package/dist/deps/html-stream-server.d.ts.map +0 -1
  469. package/dist/deps/html-stream-server.js +0 -3
  470. package/dist/deps/html-stream-server.js.map +0 -1
  471. package/dist/deps/rsc.d.ts +0 -2
  472. package/dist/deps/rsc.d.ts.map +0 -1
  473. package/dist/deps/rsc.js +0 -4
  474. package/dist/deps/rsc.js.map +0 -1
  475. package/dist/deps/ssr.d.ts +0 -2
  476. package/dist/deps/ssr.d.ts.map +0 -1
  477. package/dist/deps/ssr.js +0 -3
  478. package/dist/deps/ssr.js.map +0 -1
  479. package/dist/errors.d.ts +0 -174
  480. package/dist/errors.d.ts.map +0 -1
  481. package/dist/errors.js +0 -241
  482. package/dist/errors.js.map +0 -1
  483. package/dist/handle.d.ts +0 -78
  484. package/dist/handle.d.ts.map +0 -1
  485. package/dist/handle.js +0 -82
  486. package/dist/handle.js.map +0 -1
  487. package/dist/handles/MetaTags.d.ts +0 -14
  488. package/dist/handles/MetaTags.d.ts.map +0 -1
  489. package/dist/handles/MetaTags.js +0 -136
  490. package/dist/handles/MetaTags.js.map +0 -1
  491. package/dist/handles/index.d.ts +0 -6
  492. package/dist/handles/index.d.ts.map +0 -1
  493. package/dist/handles/index.js +0 -6
  494. package/dist/handles/index.js.map +0 -1
  495. package/dist/handles/meta.d.ts +0 -39
  496. package/dist/handles/meta.d.ts.map +0 -1
  497. package/dist/handles/meta.js +0 -202
  498. package/dist/handles/meta.js.map +0 -1
  499. package/dist/host/__tests__/errors.test.d.ts +0 -2
  500. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  501. package/dist/host/__tests__/errors.test.js +0 -76
  502. package/dist/host/__tests__/errors.test.js.map +0 -1
  503. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  504. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  505. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  506. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  507. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  508. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  509. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  510. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  511. package/dist/host/__tests__/router.test.d.ts +0 -2
  512. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  513. package/dist/host/__tests__/router.test.js +0 -241
  514. package/dist/host/__tests__/router.test.js.map +0 -1
  515. package/dist/host/__tests__/testing.test.d.ts +0 -2
  516. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  517. package/dist/host/__tests__/testing.test.js +0 -64
  518. package/dist/host/__tests__/testing.test.js.map +0 -1
  519. package/dist/host/__tests__/utils.test.d.ts +0 -2
  520. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  521. package/dist/host/__tests__/utils.test.js +0 -29
  522. package/dist/host/__tests__/utils.test.js.map +0 -1
  523. package/dist/host/cookie-handler.d.ts +0 -34
  524. package/dist/host/cookie-handler.d.ts.map +0 -1
  525. package/dist/host/cookie-handler.js +0 -124
  526. package/dist/host/cookie-handler.js.map +0 -1
  527. package/dist/host/errors.d.ts +0 -56
  528. package/dist/host/errors.d.ts.map +0 -1
  529. package/dist/host/errors.js +0 -79
  530. package/dist/host/errors.js.map +0 -1
  531. package/dist/host/index.d.ts +0 -29
  532. package/dist/host/index.d.ts.map +0 -1
  533. package/dist/host/index.js +0 -32
  534. package/dist/host/index.js.map +0 -1
  535. package/dist/host/pattern-matcher.d.ts +0 -36
  536. package/dist/host/pattern-matcher.d.ts.map +0 -1
  537. package/dist/host/pattern-matcher.js +0 -172
  538. package/dist/host/pattern-matcher.js.map +0 -1
  539. package/dist/host/router.d.ts +0 -26
  540. package/dist/host/router.d.ts.map +0 -1
  541. package/dist/host/router.js +0 -218
  542. package/dist/host/router.js.map +0 -1
  543. package/dist/host/testing.d.ts +0 -36
  544. package/dist/host/testing.d.ts.map +0 -1
  545. package/dist/host/testing.js +0 -55
  546. package/dist/host/testing.js.map +0 -1
  547. package/dist/host/types.d.ts +0 -115
  548. package/dist/host/types.d.ts.map +0 -1
  549. package/dist/host/types.js +0 -7
  550. package/dist/host/types.js.map +0 -1
  551. package/dist/host/utils.d.ts +0 -21
  552. package/dist/host/utils.d.ts.map +0 -1
  553. package/dist/host/utils.js +0 -23
  554. package/dist/host/utils.js.map +0 -1
  555. package/dist/href-client.d.ts +0 -131
  556. package/dist/href-client.d.ts.map +0 -1
  557. package/dist/href-client.js +0 -64
  558. package/dist/href-client.js.map +0 -1
  559. package/dist/href-context.d.ts +0 -29
  560. package/dist/href-context.d.ts.map +0 -1
  561. package/dist/href-context.js +0 -21
  562. package/dist/href-context.js.map +0 -1
  563. package/dist/index.d.ts +0 -73
  564. package/dist/index.d.ts.map +0 -1
  565. package/dist/index.js +0 -91
  566. package/dist/index.js.map +0 -1
  567. package/dist/index.rsc.d.ts +0 -32
  568. package/dist/index.rsc.d.ts.map +0 -1
  569. package/dist/index.rsc.js +0 -40
  570. package/dist/index.rsc.js.map +0 -1
  571. package/dist/internal-debug.d.ts +0 -2
  572. package/dist/internal-debug.d.ts.map +0 -1
  573. package/dist/internal-debug.js +0 -5
  574. package/dist/internal-debug.js.map +0 -1
  575. package/dist/loader.d.ts +0 -14
  576. package/dist/loader.d.ts.map +0 -1
  577. package/dist/loader.js +0 -20
  578. package/dist/loader.js.map +0 -1
  579. package/dist/loader.rsc.d.ts +0 -19
  580. package/dist/loader.rsc.d.ts.map +0 -1
  581. package/dist/loader.rsc.js +0 -99
  582. package/dist/loader.rsc.js.map +0 -1
  583. package/dist/network-error-thrower.d.ts +0 -17
  584. package/dist/network-error-thrower.d.ts.map +0 -1
  585. package/dist/network-error-thrower.js +0 -14
  586. package/dist/network-error-thrower.js.map +0 -1
  587. package/dist/outlet-context.d.ts +0 -13
  588. package/dist/outlet-context.d.ts.map +0 -1
  589. package/dist/outlet-context.js +0 -3
  590. package/dist/outlet-context.js.map +0 -1
  591. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  592. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  593. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  594. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  595. package/dist/prerender/param-hash.d.ts +0 -16
  596. package/dist/prerender/param-hash.d.ts.map +0 -1
  597. package/dist/prerender/param-hash.js +0 -36
  598. package/dist/prerender/param-hash.js.map +0 -1
  599. package/dist/prerender/store.d.ts +0 -38
  600. package/dist/prerender/store.d.ts.map +0 -1
  601. package/dist/prerender/store.js +0 -61
  602. package/dist/prerender/store.js.map +0 -1
  603. package/dist/prerender.d.ts +0 -66
  604. package/dist/prerender.d.ts.map +0 -1
  605. package/dist/prerender.js +0 -57
  606. package/dist/prerender.js.map +0 -1
  607. package/dist/reverse.d.ts +0 -196
  608. package/dist/reverse.d.ts.map +0 -1
  609. package/dist/reverse.js +0 -78
  610. package/dist/reverse.js.map +0 -1
  611. package/dist/root-error-boundary.d.ts +0 -33
  612. package/dist/root-error-boundary.d.ts.map +0 -1
  613. package/dist/root-error-boundary.js +0 -165
  614. package/dist/root-error-boundary.js.map +0 -1
  615. package/dist/route-content-wrapper.d.ts +0 -46
  616. package/dist/route-content-wrapper.d.ts.map +0 -1
  617. package/dist/route-content-wrapper.js +0 -77
  618. package/dist/route-content-wrapper.js.map +0 -1
  619. package/dist/route-definition.d.ts +0 -421
  620. package/dist/route-definition.d.ts.map +0 -1
  621. package/dist/route-definition.js +0 -868
  622. package/dist/route-definition.js.map +0 -1
  623. package/dist/route-map-builder.d.ts +0 -155
  624. package/dist/route-map-builder.d.ts.map +0 -1
  625. package/dist/route-map-builder.js +0 -237
  626. package/dist/route-map-builder.js.map +0 -1
  627. package/dist/route-types.d.ts +0 -165
  628. package/dist/route-types.d.ts.map +0 -1
  629. package/dist/route-types.js +0 -7
  630. package/dist/route-types.js.map +0 -1
  631. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  632. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  633. package/dist/router/__tests__/handler-context.test.js +0 -65
  634. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  635. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  636. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  637. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  638. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  639. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  640. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  641. package/dist/router/__tests__/match-context.test.js +0 -92
  642. package/dist/router/__tests__/match-context.test.js.map +0 -1
  643. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  644. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  645. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  646. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  647. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  648. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  649. package/dist/router/__tests__/match-result.test.js +0 -457
  650. package/dist/router/__tests__/match-result.test.js.map +0 -1
  651. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  652. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  653. package/dist/router/__tests__/on-error.test.js +0 -678
  654. package/dist/router/__tests__/on-error.test.js.map +0 -1
  655. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  656. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  657. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  658. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  659. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  660. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  661. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  662. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  663. package/dist/router/error-handling.d.ts +0 -77
  664. package/dist/router/error-handling.d.ts.map +0 -1
  665. package/dist/router/error-handling.js +0 -202
  666. package/dist/router/error-handling.js.map +0 -1
  667. package/dist/router/handler-context.d.ts +0 -20
  668. package/dist/router/handler-context.d.ts.map +0 -1
  669. package/dist/router/handler-context.js +0 -198
  670. package/dist/router/handler-context.js.map +0 -1
  671. package/dist/router/intercept-resolution.d.ts +0 -66
  672. package/dist/router/intercept-resolution.d.ts.map +0 -1
  673. package/dist/router/intercept-resolution.js +0 -246
  674. package/dist/router/intercept-resolution.js.map +0 -1
  675. package/dist/router/loader-resolution.d.ts +0 -64
  676. package/dist/router/loader-resolution.d.ts.map +0 -1
  677. package/dist/router/loader-resolution.js +0 -284
  678. package/dist/router/loader-resolution.js.map +0 -1
  679. package/dist/router/logging.d.ts +0 -15
  680. package/dist/router/logging.d.ts.map +0 -1
  681. package/dist/router/logging.js +0 -99
  682. package/dist/router/logging.js.map +0 -1
  683. package/dist/router/manifest.d.ts +0 -22
  684. package/dist/router/manifest.d.ts.map +0 -1
  685. package/dist/router/manifest.js +0 -181
  686. package/dist/router/manifest.js.map +0 -1
  687. package/dist/router/match-api.d.ts +0 -35
  688. package/dist/router/match-api.d.ts.map +0 -1
  689. package/dist/router/match-api.js +0 -406
  690. package/dist/router/match-api.js.map +0 -1
  691. package/dist/router/match-context.d.ts +0 -206
  692. package/dist/router/match-context.d.ts.map +0 -1
  693. package/dist/router/match-context.js +0 -17
  694. package/dist/router/match-context.js.map +0 -1
  695. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  696. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  697. package/dist/router/match-middleware/background-revalidation.js +0 -75
  698. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  699. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  700. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  701. package/dist/router/match-middleware/cache-lookup.js +0 -257
  702. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  703. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  704. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  705. package/dist/router/match-middleware/cache-store.js +0 -108
  706. package/dist/router/match-middleware/cache-store.js.map +0 -1
  707. package/dist/router/match-middleware/index.d.ts +0 -81
  708. package/dist/router/match-middleware/index.d.ts.map +0 -1
  709. package/dist/router/match-middleware/index.js +0 -80
  710. package/dist/router/match-middleware/index.js.map +0 -1
  711. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  712. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  713. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  714. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  715. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  716. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  717. package/dist/router/match-middleware/segment-resolution.js +0 -53
  718. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  719. package/dist/router/match-pipelines.d.ts +0 -147
  720. package/dist/router/match-pipelines.d.ts.map +0 -1
  721. package/dist/router/match-pipelines.js +0 -82
  722. package/dist/router/match-pipelines.js.map +0 -1
  723. package/dist/router/match-result.d.ts +0 -126
  724. package/dist/router/match-result.d.ts.map +0 -1
  725. package/dist/router/match-result.js +0 -93
  726. package/dist/router/match-result.js.map +0 -1
  727. package/dist/router/metrics.d.ts +0 -20
  728. package/dist/router/metrics.d.ts.map +0 -1
  729. package/dist/router/metrics.js +0 -47
  730. package/dist/router/metrics.js.map +0 -1
  731. package/dist/router/middleware.d.ts +0 -249
  732. package/dist/router/middleware.d.ts.map +0 -1
  733. package/dist/router/middleware.js +0 -434
  734. package/dist/router/middleware.js.map +0 -1
  735. package/dist/router/middleware.test.d.ts +0 -2
  736. package/dist/router/middleware.test.d.ts.map +0 -1
  737. package/dist/router/middleware.test.js +0 -816
  738. package/dist/router/middleware.test.js.map +0 -1
  739. package/dist/router/pattern-matching.d.ts +0 -149
  740. package/dist/router/pattern-matching.d.ts.map +0 -1
  741. package/dist/router/pattern-matching.js +0 -349
  742. package/dist/router/pattern-matching.js.map +0 -1
  743. package/dist/router/revalidation.d.ts +0 -44
  744. package/dist/router/revalidation.d.ts.map +0 -1
  745. package/dist/router/revalidation.js +0 -147
  746. package/dist/router/revalidation.js.map +0 -1
  747. package/dist/router/router-context.d.ts +0 -135
  748. package/dist/router/router-context.d.ts.map +0 -1
  749. package/dist/router/router-context.js +0 -36
  750. package/dist/router/router-context.js.map +0 -1
  751. package/dist/router/segment-resolution.d.ts +0 -127
  752. package/dist/router/segment-resolution.d.ts.map +0 -1
  753. package/dist/router/segment-resolution.js +0 -919
  754. package/dist/router/segment-resolution.js.map +0 -1
  755. package/dist/router/trie-matching.d.ts +0 -40
  756. package/dist/router/trie-matching.d.ts.map +0 -1
  757. package/dist/router/trie-matching.js +0 -127
  758. package/dist/router/trie-matching.js.map +0 -1
  759. package/dist/router/types.d.ts +0 -136
  760. package/dist/router/types.d.ts.map +0 -1
  761. package/dist/router/types.js +0 -7
  762. package/dist/router/types.js.map +0 -1
  763. package/dist/router.d.ts +0 -753
  764. package/dist/router.d.ts.map +0 -1
  765. package/dist/router.gen.d.ts +0 -6
  766. package/dist/router.gen.d.ts.map +0 -1
  767. package/dist/router.gen.js +0 -6
  768. package/dist/router.gen.js.map +0 -1
  769. package/dist/router.js +0 -1304
  770. package/dist/router.js.map +0 -1
  771. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  772. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  773. package/dist/rsc/__tests__/helpers.test.js +0 -140
  774. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  775. package/dist/rsc/handler.d.ts +0 -45
  776. package/dist/rsc/handler.d.ts.map +0 -1
  777. package/dist/rsc/handler.js +0 -1172
  778. package/dist/rsc/handler.js.map +0 -1
  779. package/dist/rsc/helpers.d.ts +0 -16
  780. package/dist/rsc/helpers.d.ts.map +0 -1
  781. package/dist/rsc/helpers.js +0 -55
  782. package/dist/rsc/helpers.js.map +0 -1
  783. package/dist/rsc/index.d.ts +0 -22
  784. package/dist/rsc/index.d.ts.map +0 -1
  785. package/dist/rsc/index.js +0 -23
  786. package/dist/rsc/index.js.map +0 -1
  787. package/dist/rsc/nonce.d.ts +0 -9
  788. package/dist/rsc/nonce.d.ts.map +0 -1
  789. package/dist/rsc/nonce.js +0 -18
  790. package/dist/rsc/nonce.js.map +0 -1
  791. package/dist/rsc/types.d.ts +0 -206
  792. package/dist/rsc/types.d.ts.map +0 -1
  793. package/dist/rsc/types.js +0 -8
  794. package/dist/rsc/types.js.map +0 -1
  795. package/dist/search-params.d.ts +0 -103
  796. package/dist/search-params.d.ts.map +0 -1
  797. package/dist/search-params.js +0 -74
  798. package/dist/search-params.js.map +0 -1
  799. package/dist/segment-system.d.ts +0 -75
  800. package/dist/segment-system.d.ts.map +0 -1
  801. package/dist/segment-system.js +0 -336
  802. package/dist/segment-system.js.map +0 -1
  803. package/dist/server/context.d.ts +0 -245
  804. package/dist/server/context.d.ts.map +0 -1
  805. package/dist/server/context.js +0 -197
  806. package/dist/server/context.js.map +0 -1
  807. package/dist/server/fetchable-loader-store.d.ts +0 -18
  808. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  809. package/dist/server/fetchable-loader-store.js +0 -18
  810. package/dist/server/fetchable-loader-store.js.map +0 -1
  811. package/dist/server/handle-store.d.ts +0 -85
  812. package/dist/server/handle-store.d.ts.map +0 -1
  813. package/dist/server/handle-store.js +0 -142
  814. package/dist/server/handle-store.js.map +0 -1
  815. package/dist/server/loader-registry.d.ts +0 -55
  816. package/dist/server/loader-registry.d.ts.map +0 -1
  817. package/dist/server/loader-registry.js +0 -132
  818. package/dist/server/loader-registry.js.map +0 -1
  819. package/dist/server/request-context.d.ts +0 -226
  820. package/dist/server/request-context.d.ts.map +0 -1
  821. package/dist/server/request-context.js +0 -290
  822. package/dist/server/request-context.js.map +0 -1
  823. package/dist/server/root-layout.d.ts +0 -4
  824. package/dist/server/root-layout.d.ts.map +0 -1
  825. package/dist/server/root-layout.js +0 -5
  826. package/dist/server/root-layout.js.map +0 -1
  827. package/dist/server.d.ts +0 -15
  828. package/dist/server.d.ts.map +0 -1
  829. package/dist/server.js +0 -20
  830. package/dist/server.js.map +0 -1
  831. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  832. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  833. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  834. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  835. package/dist/ssr/index.d.ts +0 -98
  836. package/dist/ssr/index.d.ts.map +0 -1
  837. package/dist/ssr/index.js +0 -158
  838. package/dist/ssr/index.js.map +0 -1
  839. package/dist/static-handler.d.ts +0 -50
  840. package/dist/static-handler.d.ts.map +0 -1
  841. package/dist/static-handler.gen.d.ts +0 -5
  842. package/dist/static-handler.gen.d.ts.map +0 -1
  843. package/dist/static-handler.gen.js +0 -5
  844. package/dist/static-handler.gen.js.map +0 -1
  845. package/dist/static-handler.js +0 -29
  846. package/dist/static-handler.js.map +0 -1
  847. package/dist/theme/ThemeProvider.d.ts +0 -20
  848. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  849. package/dist/theme/ThemeProvider.js +0 -240
  850. package/dist/theme/ThemeProvider.js.map +0 -1
  851. package/dist/theme/ThemeScript.d.ts +0 -48
  852. package/dist/theme/ThemeScript.d.ts.map +0 -1
  853. package/dist/theme/ThemeScript.js +0 -13
  854. package/dist/theme/ThemeScript.js.map +0 -1
  855. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  856. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  857. package/dist/theme/__tests__/theme.test.js +0 -103
  858. package/dist/theme/__tests__/theme.test.js.map +0 -1
  859. package/dist/theme/constants.d.ts +0 -29
  860. package/dist/theme/constants.d.ts.map +0 -1
  861. package/dist/theme/constants.js +0 -48
  862. package/dist/theme/constants.js.map +0 -1
  863. package/dist/theme/index.d.ts +0 -31
  864. package/dist/theme/index.d.ts.map +0 -1
  865. package/dist/theme/index.js +0 -36
  866. package/dist/theme/index.js.map +0 -1
  867. package/dist/theme/theme-context.d.ts +0 -40
  868. package/dist/theme/theme-context.d.ts.map +0 -1
  869. package/dist/theme/theme-context.js +0 -60
  870. package/dist/theme/theme-context.js.map +0 -1
  871. package/dist/theme/theme-script.d.ts +0 -27
  872. package/dist/theme/theme-script.d.ts.map +0 -1
  873. package/dist/theme/theme-script.js +0 -147
  874. package/dist/theme/theme-script.js.map +0 -1
  875. package/dist/theme/types.d.ts +0 -163
  876. package/dist/theme/types.d.ts.map +0 -1
  877. package/dist/theme/types.js +0 -11
  878. package/dist/theme/types.js.map +0 -1
  879. package/dist/theme/use-theme.d.ts +0 -12
  880. package/dist/theme/use-theme.d.ts.map +0 -1
  881. package/dist/theme/use-theme.js +0 -40
  882. package/dist/theme/use-theme.js.map +0 -1
  883. package/dist/types.d.ts +0 -1479
  884. package/dist/types.d.ts.map +0 -1
  885. package/dist/types.js +0 -10
  886. package/dist/types.js.map +0 -1
  887. package/dist/urls.d.ts +0 -441
  888. package/dist/urls.d.ts.map +0 -1
  889. package/dist/urls.gen.d.ts +0 -8
  890. package/dist/urls.gen.d.ts.map +0 -1
  891. package/dist/urls.gen.js +0 -8
  892. package/dist/urls.gen.js.map +0 -1
  893. package/dist/urls.js +0 -443
  894. package/dist/urls.js.map +0 -1
  895. package/dist/use-loader.d.ts +0 -127
  896. package/dist/use-loader.d.ts.map +0 -1
  897. package/dist/use-loader.js +0 -237
  898. package/dist/use-loader.js.map +0 -1
  899. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  900. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  901. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  902. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  903. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  904. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  905. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  906. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  907. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  908. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  909. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  910. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  911. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  912. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  913. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  914. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  915. package/dist/vite/ast-handler-extract.d.ts +0 -49
  916. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  917. package/dist/vite/ast-handler-extract.js +0 -249
  918. package/dist/vite/ast-handler-extract.js.map +0 -1
  919. package/dist/vite/expose-action-id.d.ts +0 -19
  920. package/dist/vite/expose-action-id.d.ts.map +0 -1
  921. package/dist/vite/expose-action-id.js +0 -250
  922. package/dist/vite/expose-action-id.js.map +0 -1
  923. package/dist/vite/expose-id-utils.d.ts +0 -69
  924. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  925. package/dist/vite/expose-id-utils.js +0 -289
  926. package/dist/vite/expose-id-utils.js.map +0 -1
  927. package/dist/vite/expose-internal-ids.d.ts +0 -22
  928. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  929. package/dist/vite/expose-internal-ids.js +0 -886
  930. package/dist/vite/expose-internal-ids.js.map +0 -1
  931. package/dist/vite/index.d.ts +0 -149
  932. package/dist/vite/index.d.ts.map +0 -1
  933. package/dist/vite/index.js.map +0 -1
  934. package/dist/vite/index.named-routes.gen.ts +0 -103
  935. package/dist/vite/package-resolution.d.ts +0 -43
  936. package/dist/vite/package-resolution.d.ts.map +0 -1
  937. package/dist/vite/package-resolution.js +0 -112
  938. package/dist/vite/package-resolution.js.map +0 -1
  939. package/dist/vite/virtual-entries.d.ts +0 -25
  940. package/dist/vite/virtual-entries.d.ts.map +0 -1
  941. package/dist/vite/virtual-entries.js +0 -110
  942. package/dist/vite/virtual-entries.js.map +0 -1
@@ -18,6 +18,9 @@ function hashId(filePath, exportName) {
18
18
  const hash = crypto.createHash("sha256").update(input).digest("hex");
19
19
  return `${hash.slice(0, 8)}#${exportName}`;
20
20
  }
21
+ function makeStubId(filePath, exportName, isBuild) {
22
+ return isBuild ? hashId(filePath, exportName) : `${filePath}#${exportName}`;
23
+ }
21
24
  function hashInlineId(filePath, lineNumber, index) {
22
25
  const input = index !== void 0 && index > 0 ? `${filePath}:${lineNumber}:${index}` : `${filePath}:${lineNumber}`;
23
26
  return crypto.createHash("sha256").update(input).digest("hex").slice(0, 8);
@@ -292,7 +295,7 @@ function exposeActionId() {
292
295
  }
293
296
  if (!rscPluginApi) {
294
297
  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."
298
+ "[rsc-router] Could not find @vitejs/plugin-rsc. @rangojs/router requires the Vite RSC plugin, which is included automatically by rango()."
296
299
  );
297
300
  }
298
301
  if (!isBuild) return;
@@ -910,9 +913,7 @@ function generateWholeFileStubs(cfg, bindings, code, filePath, isBuild) {
910
913
  });
911
914
  return { code: stubs.join("\n") + "\n", map: null };
912
915
  }
913
- function generateExprStubs(cfg, bindings, code, filePath, sourceId, isBuild) {
914
- if (bindings.length === 0) return null;
915
- const s = new MagicString2(code);
916
+ function stubHandlerExprs(cfg, bindings, s, filePath, isBuild) {
916
917
  let hasChanges = false;
917
918
  for (const binding of bindings) {
918
919
  const exportName = binding.exportNames[0];
@@ -924,15 +925,7 @@ function generateExprStubs(cfg, bindings, code, filePath, sourceId, isBuild) {
924
925
  );
925
926
  hasChanges = true;
926
927
  }
927
- if (!hasChanges) return null;
928
- return {
929
- code: s.toString(),
930
- map: s.generateMap({
931
- source: sourceId,
932
- includeContent: true,
933
- hires: "boundary"
934
- })
935
- };
928
+ return hasChanges;
936
929
  }
937
930
  function transformHandlerIds(cfg, bindings, s, filePath, isBuild) {
938
931
  let hasChanges = false;
@@ -1269,15 +1262,6 @@ ${lazyImports.join(",\n")}
1269
1262
  isBuild
1270
1263
  );
1271
1264
  if (wholeFile) return wholeFile;
1272
- const exprStubs = generateExprStubs(
1273
- PRERENDER_CONFIG,
1274
- bindings,
1275
- code,
1276
- filePath,
1277
- id,
1278
- isBuild
1279
- );
1280
- if (exprStubs) return exprStubs;
1281
1265
  }
1282
1266
  if (hasPrerenderHandlerCode && isRscEnv && isBuild) {
1283
1267
  const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
@@ -1329,15 +1313,134 @@ ${lazyImports.join(",\n")}
1329
1313
  isBuild
1330
1314
  );
1331
1315
  if (wholeFile) return wholeFile;
1332
- const exprStubs = generateExprStubs(
1333
- STATIC_CONFIG,
1334
- bindings,
1335
- code,
1336
- filePath,
1337
- id,
1338
- isBuild
1339
- );
1340
- if (exprStubs) return exprStubs;
1316
+ }
1317
+ if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
1318
+ const prerenderFnNames = hasPrerenderHandlerCode ? getFnNames(PRERENDER_CONFIG.fnName) : [];
1319
+ const staticFnNames = hasStaticHandlerCode ? getFnNames(STATIC_CONFIG.fnName) : [];
1320
+ const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
1321
+ const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
1322
+ const lsFnNames = hasLocationStateCode ? getFnNames("createLocationState") : [];
1323
+ const allBindings = [];
1324
+ for (const fnNames of [
1325
+ prerenderFnNames,
1326
+ staticFnNames,
1327
+ loaderFnNames,
1328
+ handleFnNames,
1329
+ lsFnNames
1330
+ ]) {
1331
+ if (fnNames.length > 0) {
1332
+ allBindings.push(...getBindings(code, fnNames));
1333
+ }
1334
+ }
1335
+ let canStubWholeFile = allBindings.length > 0 && isExportOnlyFile(code, allBindings);
1336
+ if (canStubWholeFile && (handleFnNames.length > 0 || lsFnNames.length > 0)) {
1337
+ const exportedLocals = new Set(allBindings.map((b) => b.localName));
1338
+ const strippedBindings = [];
1339
+ const localDeclPattern = /(?:^|;|\n)\s*(?:const|let|var|function)\s+(\w+)/g;
1340
+ let declMatch;
1341
+ while ((declMatch = localDeclPattern.exec(code)) !== null) {
1342
+ const name = declMatch[1];
1343
+ if (!exportedLocals.has(name) && !/^_c\d*$/.test(name)) {
1344
+ strippedBindings.push(name);
1345
+ }
1346
+ }
1347
+ const importPattern = /import\s*\{([^}]*)\}\s*from\s*["'](?!@rangojs\/router)[^"']*["']/g;
1348
+ let importMatch;
1349
+ while ((importMatch = importPattern.exec(code)) !== null) {
1350
+ for (const spec of importMatch[1].split(",")) {
1351
+ const m = spec.trim().match(/^[A-Za-z_$][\w$]*(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);
1352
+ if (m) strippedBindings.push(m[1] || m[0].trim().split(/\s/)[0]);
1353
+ }
1354
+ }
1355
+ const defaultImportPattern = /import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
1356
+ while ((importMatch = defaultImportPattern.exec(code)) !== null) {
1357
+ strippedBindings.push(importMatch[1]);
1358
+ }
1359
+ const nsImportPattern = /import\s+\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
1360
+ while ((importMatch = nsImportPattern.exec(code)) !== null) {
1361
+ strippedBindings.push(importMatch[1]);
1362
+ }
1363
+ if (strippedBindings.length > 0) {
1364
+ const preservedBindings = allBindings.filter((b) => {
1365
+ const fc = code.slice(b.callExprStart, b.callOpenParenPos + 1);
1366
+ return handleFnNames.some((n) => fc.includes(n)) || lsFnNames.some((n) => fc.includes(n));
1367
+ });
1368
+ const strippedRe = new RegExp(
1369
+ `\\b(?:${strippedBindings.join("|")})\\b`
1370
+ );
1371
+ canStubWholeFile = !preservedBindings.some((b) => {
1372
+ const expr = code.slice(b.callExprStart, b.callCloseParenPos + 1);
1373
+ return strippedRe.test(expr);
1374
+ });
1375
+ }
1376
+ }
1377
+ if (canStubWholeFile) {
1378
+ const lines = [];
1379
+ const neededImports = [];
1380
+ if (handleFnNames.length > 0) neededImports.push("createHandle");
1381
+ if (lsFnNames.length > 0) neededImports.push("createLocationState");
1382
+ if (neededImports.length > 0) {
1383
+ lines.push(
1384
+ `import { ${neededImports.join(", ")} } from "@rangojs/router";`
1385
+ );
1386
+ }
1387
+ for (const binding of allBindings) {
1388
+ const fnCall = code.slice(
1389
+ binding.callExprStart,
1390
+ binding.callOpenParenPos + 1
1391
+ );
1392
+ const isHandle = handleFnNames.some((n) => fnCall.includes(n));
1393
+ const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
1394
+ const primaryName = binding.exportNames[0];
1395
+ const stubId = makeStubId(filePath, primaryName, isBuild);
1396
+ if (isHandle || isLocationState) {
1397
+ const rawArgs = code.slice(binding.callOpenParenPos + 1, binding.callCloseParenPos).replace(/\b_c\d*\s*=\s*/g, "");
1398
+ const canonicalName = isHandle ? "createHandle" : "createLocationState";
1399
+ const activeFnNames = isHandle ? handleFnNames : lsFnNames;
1400
+ let rawCallee = code.slice(
1401
+ binding.callExprStart,
1402
+ binding.callOpenParenPos
1403
+ );
1404
+ for (const alias of activeFnNames) {
1405
+ if (alias !== canonicalName && rawCallee.startsWith(alias)) {
1406
+ rawCallee = canonicalName + rawCallee.slice(alias.length);
1407
+ break;
1408
+ }
1409
+ }
1410
+ if (isHandle) {
1411
+ const idParam = binding.argCount === 0 ? `undefined, "${stubId}"` : `, "${stubId}"`;
1412
+ lines.push(
1413
+ `export const ${primaryName} = ${rawCallee}(${rawArgs}${idParam});`
1414
+ );
1415
+ lines.push(`${primaryName}.$$id = "${stubId}";`);
1416
+ } else {
1417
+ lines.push(
1418
+ `export const ${primaryName} = ${rawCallee}(${rawArgs});`
1419
+ );
1420
+ lines.push(
1421
+ `${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`
1422
+ );
1423
+ }
1424
+ for (const name of binding.exportNames.slice(1)) {
1425
+ lines.push(`export const ${name} = ${primaryName};`);
1426
+ }
1427
+ } else {
1428
+ let brand = "loader";
1429
+ if (prerenderFnNames.some((n) => fnCall.includes(n))) {
1430
+ brand = PRERENDER_CONFIG.brand;
1431
+ } else if (staticFnNames.some((n) => fnCall.includes(n))) {
1432
+ brand = STATIC_CONFIG.brand;
1433
+ }
1434
+ lines.push(
1435
+ `export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`
1436
+ );
1437
+ for (const name of binding.exportNames.slice(1)) {
1438
+ lines.push(`export const ${name} = ${primaryName};`);
1439
+ }
1440
+ }
1441
+ }
1442
+ return { code: lines.join("\n") + "\n", map: null };
1443
+ }
1341
1444
  }
1342
1445
  if (hasStaticHandlerCode && isRscEnv && isBuild) {
1343
1446
  const fnNames = getFnNames(STATIC_CONFIG.fnName);
@@ -1372,25 +1475,41 @@ ${lazyImports.join(",\n")}
1372
1475
  isBuild
1373
1476
  ) || changed;
1374
1477
  }
1375
- if (hasPrerenderHandlerCode && isRscEnv) {
1478
+ if (hasPrerenderHandlerCode) {
1376
1479
  const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
1377
- changed = transformHandlerIds(
1378
- PRERENDER_CONFIG,
1379
- getBindings(code, fnNames),
1380
- s,
1381
- filePath,
1382
- isBuild
1383
- ) || changed;
1480
+ const bindings = getBindings(code, fnNames);
1481
+ if (isRscEnv) {
1482
+ changed = transformHandlerIds(
1483
+ PRERENDER_CONFIG,
1484
+ bindings,
1485
+ s,
1486
+ filePath,
1487
+ isBuild
1488
+ ) || changed;
1489
+ } else {
1490
+ changed = stubHandlerExprs(
1491
+ PRERENDER_CONFIG,
1492
+ bindings,
1493
+ s,
1494
+ filePath,
1495
+ isBuild
1496
+ ) || changed;
1497
+ }
1384
1498
  }
1385
- if (hasStaticHandlerCode && isRscEnv) {
1499
+ if (hasStaticHandlerCode) {
1386
1500
  const fnNames = getFnNames(STATIC_CONFIG.fnName);
1387
- changed = transformHandlerIds(
1388
- STATIC_CONFIG,
1389
- getBindings(code, fnNames),
1390
- s,
1391
- filePath,
1392
- isBuild
1393
- ) || changed;
1501
+ const bindings = getBindings(code, fnNames);
1502
+ if (isRscEnv) {
1503
+ changed = transformHandlerIds(
1504
+ STATIC_CONFIG,
1505
+ bindings,
1506
+ s,
1507
+ filePath,
1508
+ isBuild
1509
+ ) || changed;
1510
+ } else {
1511
+ changed = stubHandlerExprs(STATIC_CONFIG, bindings, s, filePath, isBuild) || changed;
1512
+ }
1394
1513
  }
1395
1514
  if (!changed) return;
1396
1515
  return {
@@ -1745,7 +1864,7 @@ import { resolve } from "node:path";
1745
1864
  // package.json
1746
1865
  var package_default = {
1747
1866
  name: "@rangojs/router",
1748
- version: "0.0.0-experimental.6fe6a3cc",
1867
+ version: "0.0.0-experimental.70",
1749
1868
  description: "Django-inspired RSC router with composable URL patterns",
1750
1869
  keywords: [
1751
1870
  "react",
@@ -1887,7 +2006,7 @@ var package_default = {
1887
2006
  "test:unit:watch": "vitest"
1888
2007
  },
1889
2008
  dependencies: {
1890
- "@vitejs/plugin-rsc": "^0.5.14",
2009
+ "@vitejs/plugin-rsc": "^0.5.19",
1891
2010
  "magic-string": "^0.30.17",
1892
2011
  picomatch: "^4.0.3",
1893
2012
  "rsc-html-stream": "^0.0.7"
@@ -2095,31 +2214,7 @@ declare global {
2095
2214
  }
2096
2215
 
2097
2216
  // src/build/route-types/scan-filter.ts
2098
- import { join, relative } from "node:path";
2099
2217
  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
2218
 
2124
2219
  // src/build/route-types/per-module-writer.ts
2125
2220
  import ts4 from "typescript";
@@ -2341,7 +2436,7 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
2341
2436
  }
2342
2437
  return routeMap;
2343
2438
  }
2344
- function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut) {
2439
+ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock) {
2345
2440
  visited = visited ?? /* @__PURE__ */ new Set();
2346
2441
  const realPath = resolve2(filePath);
2347
2442
  const key = variableName ? `${realPath}:${variableName}` : realPath;
@@ -2357,7 +2452,9 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
2357
2452
  return { routes: {}, searchSchemas: {} };
2358
2453
  }
2359
2454
  let block;
2360
- if (variableName) {
2455
+ if (inlineBlock) {
2456
+ block = inlineBlock;
2457
+ } else if (variableName) {
2361
2458
  const extracted = extractUrlsBlockForVariable(source, variableName);
2362
2459
  if (!extracted) return { routes: {}, searchSchemas: {} };
2363
2460
  block = extracted;
@@ -2386,7 +2483,7 @@ import {
2386
2483
  readdirSync
2387
2484
  } from "node:fs";
2388
2485
  import {
2389
- join as join2,
2486
+ join,
2390
2487
  dirname as dirname2,
2391
2488
  resolve as resolve3,
2392
2489
  sep,
@@ -2406,7 +2503,7 @@ function countPublicRouteEntries(source) {
2406
2503
  }
2407
2504
  var ROUTER_CALL_PATTERN = /\bcreateRouter\s*[<(]/;
2408
2505
  function isRoutableSourceFile(name) {
2409
- return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.");
2506
+ return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.") && !name.includes(".test.") && !name.includes(".spec.");
2410
2507
  }
2411
2508
  function findRouterFilesRecursive(dir, filter, results) {
2412
2509
  let entries;
@@ -2421,9 +2518,10 @@ function findRouterFilesRecursive(dir, filter, results) {
2421
2518
  const childDirs = [];
2422
2519
  const routerFilesInDir = [];
2423
2520
  for (const entry of entries) {
2424
- const fullPath = join2(dir, entry.name);
2521
+ const fullPath = join(dir, entry.name);
2425
2522
  if (entry.isDirectory()) {
2426
- if (entry.name === "node_modules" || entry.name.startsWith(".")) continue;
2523
+ if (entry.name === "node_modules" || entry.name === "dist" || entry.name === "coverage" || entry.name === "__tests__" || entry.name === "__mocks__" || entry.name.startsWith("."))
2524
+ continue;
2427
2525
  childDirs.push(fullPath);
2428
2526
  continue;
2429
2527
  }
@@ -2475,7 +2573,7 @@ Router root: ${conflict.ancestor}
2475
2573
  Nested router: ${conflict.nested}
2476
2574
  Move the nested router into a sibling directory or configure it as a separate app root.`;
2477
2575
  }
2478
- function extractUrlsVariableFromRouter(code) {
2576
+ function extractUrlsFromRouter(code) {
2479
2577
  const sourceFile = ts5.createSourceFile(
2480
2578
  "router.tsx",
2481
2579
  code,
@@ -2489,24 +2587,70 @@ function extractUrlsVariableFromRouter(code) {
2489
2587
  const callee = node.expression;
2490
2588
  return ts5.isIdentifier(callee) && callee.text === "createRouter";
2491
2589
  }
2590
+ function isInlineBuilder(node) {
2591
+ return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
2592
+ }
2593
+ function isRoutesOnCreateRouter(node) {
2594
+ if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
2595
+ return false;
2596
+ let inner = node.expression.expression;
2597
+ while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
2598
+ inner = inner.expression.expression;
2599
+ }
2600
+ return isCreateRouterCall(inner);
2601
+ }
2492
2602
  function visit(node) {
2493
2603
  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;
2604
+ if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
2605
+ const arg = node.arguments[0];
2606
+ if (ts5.isIdentifier(arg)) {
2607
+ result = { kind: "variable", name: arg.text };
2608
+ } else if (isInlineBuilder(arg)) {
2609
+ result = { kind: "inline", block: arg.getText(sourceFile) };
2502
2610
  }
2611
+ return;
2503
2612
  }
2504
2613
  if (isCreateRouterCall(node)) {
2505
2614
  const callExpr = node;
2506
- for (const arg of callExpr.arguments) {
2615
+ for (const callArg of callExpr.arguments) {
2616
+ if (ts5.isObjectLiteralExpression(callArg)) {
2617
+ for (const prop of callArg.properties) {
2618
+ if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
2619
+ if (ts5.isIdentifier(prop.initializer)) {
2620
+ result = { kind: "variable", name: prop.initializer.text };
2621
+ } else if (isInlineBuilder(prop.initializer)) {
2622
+ result = {
2623
+ kind: "inline",
2624
+ block: prop.initializer.getText(sourceFile)
2625
+ };
2626
+ }
2627
+ return;
2628
+ }
2629
+ }
2630
+ }
2631
+ }
2632
+ }
2633
+ ts5.forEachChild(node, visit);
2634
+ }
2635
+ visit(sourceFile);
2636
+ return result;
2637
+ }
2638
+ function extractBasenameFromRouter(code) {
2639
+ const sourceFile = ts5.createSourceFile(
2640
+ "router.tsx",
2641
+ code,
2642
+ ts5.ScriptTarget.Latest,
2643
+ true,
2644
+ ts5.ScriptKind.TSX
2645
+ );
2646
+ let result;
2647
+ function visit(node) {
2648
+ if (result !== void 0) return;
2649
+ if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
2650
+ for (const arg of node.arguments) {
2507
2651
  if (ts5.isObjectLiteralExpression(arg)) {
2508
2652
  for (const prop of arg.properties) {
2509
- if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls" && ts5.isIdentifier(prop.initializer)) {
2653
+ if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
2510
2654
  result = prop.initializer.text;
2511
2655
  return;
2512
2656
  }
@@ -2519,6 +2663,19 @@ function extractUrlsVariableFromRouter(code) {
2519
2663
  visit(sourceFile);
2520
2664
  return result;
2521
2665
  }
2666
+ function applyBasenameToRoutes(result, basename3) {
2667
+ const prefixed = {};
2668
+ for (const [name, pattern] of Object.entries(result.routes)) {
2669
+ if (pattern === "/") {
2670
+ prefixed[name] = basename3;
2671
+ } else if (basename3.endsWith("/") && pattern.startsWith("/")) {
2672
+ prefixed[name] = basename3 + pattern.slice(1);
2673
+ } else {
2674
+ prefixed[name] = basename3 + pattern;
2675
+ }
2676
+ }
2677
+ return { routes: prefixed, searchSchemas: result.searchSchemas };
2678
+ }
2522
2679
  function buildCombinedRouteMapForRouterFile(routerFilePath) {
2523
2680
  let routerSource;
2524
2681
  try {
@@ -2526,19 +2683,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
2526
2683
  } catch {
2527
2684
  return { routes: {}, searchSchemas: {} };
2528
2685
  }
2529
- const urlsVarName = extractUrlsVariableFromRouter(routerSource);
2530
- if (!urlsVarName) {
2686
+ const extraction = extractUrlsFromRouter(routerSource);
2687
+ if (!extraction) {
2531
2688
  return { routes: {}, searchSchemas: {} };
2532
2689
  }
2533
- const imported = resolveImportedVariable(routerSource, urlsVarName);
2534
- if (imported) {
2535
- const targetFile = resolveImportPath(imported.specifier, routerFilePath);
2536
- if (!targetFile) {
2537
- return { routes: {}, searchSchemas: {} };
2690
+ const rawBasename = extractBasenameFromRouter(routerSource);
2691
+ const basename3 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
2692
+ let result;
2693
+ if (extraction.kind === "inline") {
2694
+ result = buildCombinedRouteMapWithSearch(
2695
+ routerFilePath,
2696
+ void 0,
2697
+ void 0,
2698
+ void 0,
2699
+ extraction.block
2700
+ );
2701
+ } else {
2702
+ const imported = resolveImportedVariable(routerSource, extraction.name);
2703
+ if (imported) {
2704
+ const targetFile = resolveImportPath(imported.specifier, routerFilePath);
2705
+ if (!targetFile) {
2706
+ return { routes: {}, searchSchemas: {} };
2707
+ }
2708
+ result = buildCombinedRouteMapWithSearch(
2709
+ targetFile,
2710
+ imported.exportedName
2711
+ );
2712
+ } else {
2713
+ result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
2538
2714
  }
2539
- return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
2540
2715
  }
2541
- return buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
2716
+ if (basename3) {
2717
+ result = applyBasenameToRoutes(result, basename3);
2718
+ }
2719
+ return result;
2542
2720
  }
2543
2721
  function findRouterFiles(root, filter) {
2544
2722
  const result = [];
@@ -2547,7 +2725,7 @@ function findRouterFiles(root, filter) {
2547
2725
  }
2548
2726
  function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
2549
2727
  try {
2550
- const oldCombinedPath = join2(root, "src", "named-routes.gen.ts");
2728
+ const oldCombinedPath = join(root, "src", "named-routes.gen.ts");
2551
2729
  if (existsSync3(oldCombinedPath)) {
2552
2730
  unlinkSync(oldCombinedPath);
2553
2731
  console.log(
@@ -2563,31 +2741,21 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
2563
2741
  throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
2564
2742
  }
2565
2743
  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);
2744
+ const result = buildCombinedRouteMapForRouterFile(routerFilePath);
2745
+ if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
2746
+ let routerSource;
2747
+ try {
2748
+ routerSource = readFileSync2(routerFilePath, "utf-8");
2749
+ } catch {
2750
+ continue;
2751
+ }
2752
+ if (!extractUrlsFromRouter(routerSource)) continue;
2585
2753
  }
2586
2754
  const routerBasename = pathBasename(routerFilePath).replace(
2587
2755
  /\.(tsx?|jsx?)$/,
2588
2756
  ""
2589
2757
  );
2590
- const outPath = join2(
2758
+ const outPath = join(
2591
2759
  dirname2(routerFilePath),
2592
2760
  `${routerBasename}.named-routes.gen.ts`
2593
2761
  );
@@ -2717,8 +2885,9 @@ function createVersionPlugin() {
2717
2885
  let isDev = false;
2718
2886
  let server = null;
2719
2887
  const clientModuleSignatures = /* @__PURE__ */ new Map();
2888
+ let versionCounter = 0;
2720
2889
  const bumpVersion = (reason) => {
2721
- currentVersion = Date.now().toString(16);
2890
+ currentVersion = Date.now().toString(16) + String(++versionCounter);
2722
2891
  console.log(`[rsc-router] ${reason}, version updated: ${currentVersion}`);
2723
2892
  const rscEnv = server?.environments?.rsc;
2724
2893
  const versionMod = rscEnv?.moduleGraph?.getModuleById(
@@ -2774,6 +2943,9 @@ function createVersionPlugin() {
2774
2943
  if (!isDev) return;
2775
2944
  const isRscModule = this.environment?.name === "rsc";
2776
2945
  if (!isRscModule) return;
2946
+ if (ctx.modules.length === 1 && ctx.modules[0].id === "\0" + VIRTUAL_IDS.version) {
2947
+ return;
2948
+ }
2777
2949
  if (isCodeModule(ctx.file)) {
2778
2950
  const filePath = normalizeModuleId(ctx.file);
2779
2951
  const previousSignature = clientModuleSignatures.get(filePath);
@@ -2803,6 +2975,68 @@ function createVersionPlugin() {
2803
2975
 
2804
2976
  // src/vite/utils/shared-utils.ts
2805
2977
  import * as Vite from "vite";
2978
+
2979
+ // src/vite/plugins/performance-tracks.ts
2980
+ import { readFile } from "node:fs/promises";
2981
+ var RSDW_PATCH_RE = /((?:var|let|const)\s+\w+\s*=\s*root\._children\s*,\s*(\w+)\s*=\s*root\._debugInfo\s*[;,])/;
2982
+ function buildPatchReplacement(match, debugInfoVar) {
2983
+ return `${match}
2984
+ if (${debugInfoVar} && 0 === ${debugInfoVar}.length && "fulfilled" === root.status) {
2985
+ var _resolved = "function" === typeof resolveLazy ? resolveLazy(root.value) : root.value;
2986
+ if ("object" === typeof _resolved && null !== _resolved && isArrayImpl(_resolved._debugInfo)) {
2987
+ ${debugInfoVar} = _resolved._debugInfo;
2988
+ }
2989
+ }`;
2990
+ }
2991
+ function patchRsdwClientDebugInfoRecovery(code) {
2992
+ const match = code.match(RSDW_PATCH_RE);
2993
+ if (!match) {
2994
+ return { code, debugInfoVar: null };
2995
+ }
2996
+ return {
2997
+ code: code.replace(match[1], buildPatchReplacement(match[1], match[2])),
2998
+ debugInfoVar: match[2]
2999
+ };
3000
+ }
3001
+ function performanceTracksOptimizeDepsPlugin() {
3002
+ return {
3003
+ name: "@rangojs/router:performance-tracks-optimize-deps",
3004
+ setup(build) {
3005
+ build.onLoad(
3006
+ {
3007
+ filter: /react-server-dom-webpack-client\.browser\.(development|production)\.js$/
3008
+ },
3009
+ async (args) => {
3010
+ const code = await readFile(args.path, "utf8");
3011
+ const patched = patchRsdwClientDebugInfoRecovery(code);
3012
+ return {
3013
+ contents: patched.code,
3014
+ loader: "js"
3015
+ };
3016
+ }
3017
+ );
3018
+ }
3019
+ };
3020
+ }
3021
+ function performanceTracksPlugin() {
3022
+ return {
3023
+ name: "@rangojs/router:performance-tracks",
3024
+ transform(code, id) {
3025
+ if (!id.includes("react-server-dom") || !id.includes("client")) return;
3026
+ const patched = patchRsdwClientDebugInfoRecovery(code);
3027
+ if (!patched.debugInfoVar) return;
3028
+ if (process.env.INTERNAL_RANGO_DEBUG)
3029
+ console.log(
3030
+ "[perf-tracks] patched RSDW client (var:",
3031
+ patched.debugInfoVar,
3032
+ ")"
3033
+ );
3034
+ return patched.code;
3035
+ }
3036
+ };
3037
+ }
3038
+
3039
+ // src/vite/utils/shared-utils.ts
2806
3040
  var versionEsbuildPlugin = {
2807
3041
  name: "@rangojs/router-version",
2808
3042
  setup(build) {
@@ -2820,7 +3054,7 @@ var versionEsbuildPlugin = {
2820
3054
  }
2821
3055
  };
2822
3056
  var sharedEsbuildOptions = {
2823
- plugins: [versionEsbuildPlugin]
3057
+ plugins: [versionEsbuildPlugin, performanceTracksOptimizeDepsPlugin()]
2824
3058
  };
2825
3059
  function createVirtualEntriesPlugin(entries, routerPathRef) {
2826
3060
  const virtualModules = {};
@@ -2903,11 +3137,11 @@ ${dim} \u2571${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2
2903
3137
  ${dim} ${reset}${bold}\u2551 \u2551${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2727. \u2571${reset}
2904
3138
  ${dim} ${reset}${bold}\u2554\u2557 \u2551 \u2551 \u2551 \u2551${reset}${dim} * \u2571${reset}
2905
3139
  ${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}
3140
+ ${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
3141
  ${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
3142
  ${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}
3143
+ ${dim} * ${reset}${bold}\u2551 \u2551${reset}${dim} * \u2727. \u2571${reset}
3144
+ ${dim} ${reset}${bold}\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550${reset}${dim} \u2726 *${reset}
2911
3145
 
2912
3146
  v${version} \xB7 ${preset} \xB7 ${mode}
2913
3147
  `;
@@ -3026,6 +3260,8 @@ function createCjsToEsmPlugin() {
3026
3260
  import { createServer as createViteServer } from "vite";
3027
3261
  import { resolve as resolve8 } from "node:path";
3028
3262
  import { readFileSync as readFileSync6 } from "node:fs";
3263
+ import { createRequire } from "node:module";
3264
+ import { pathToFileURL } from "node:url";
3029
3265
 
3030
3266
  // src/vite/plugins/virtual-stub-plugin.ts
3031
3267
  function createVirtualStubPlugin() {
@@ -3052,7 +3288,7 @@ function createVirtualStubPlugin() {
3052
3288
  }
3053
3289
 
3054
3290
  // src/vite/plugins/client-ref-hashing.ts
3055
- import { relative as relative2 } from "node:path";
3291
+ import { relative } from "node:path";
3056
3292
  import { createHash as createHash2 } from "node:crypto";
3057
3293
  var CLIENT_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-package-proxy/";
3058
3294
  var CLIENT_IN_SERVER_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/";
@@ -3065,10 +3301,10 @@ function computeProductionHash(projectRoot, refKey) {
3065
3301
  const absPath = decodeURIComponent(
3066
3302
  refKey.slice(CLIENT_IN_SERVER_PKG_PROXY_PREFIX.length)
3067
3303
  );
3068
- toHash = relative2(projectRoot, absPath).replaceAll("\\", "/");
3304
+ toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
3069
3305
  } else if (refKey.startsWith(FS_PREFIX)) {
3070
3306
  const absPath = refKey.slice(FS_PREFIX.length - 1);
3071
- toHash = relative2(projectRoot, absPath).replaceAll("\\", "/");
3307
+ toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
3072
3308
  } else if (refKey.startsWith("/")) {
3073
3309
  toHash = refKey.slice(1);
3074
3310
  } else {
@@ -3209,8 +3445,8 @@ function createDiscoveryState(entryPath, opts) {
3209
3445
  perRouterManifestDataMap: /* @__PURE__ */ new Map(),
3210
3446
  prerenderManifestEntries: null,
3211
3447
  staticManifestEntries: null,
3212
- handlerChunkInfo: null,
3213
- staticHandlerChunkInfo: null,
3448
+ handlerChunkInfoMap: /* @__PURE__ */ new Map(),
3449
+ staticHandlerChunkInfoMap: /* @__PURE__ */ new Map(),
3214
3450
  rscEntryFileName: null,
3215
3451
  resolvedPrerenderModules: void 0,
3216
3452
  resolvedStaticModules: void 0,
@@ -3293,8 +3529,17 @@ function jsonParseExpression(value) {
3293
3529
  }
3294
3530
 
3295
3531
  // src/context-var.ts
3532
+ var NON_CACHEABLE_KEYS = /* @__PURE__ */ Symbol.for(
3533
+ "rango:non-cacheable-keys"
3534
+ );
3535
+ function getNonCacheableKeys(variables) {
3536
+ if (!variables[NON_CACHEABLE_KEYS]) {
3537
+ variables[NON_CACHEABLE_KEYS] = /* @__PURE__ */ new Set();
3538
+ }
3539
+ return variables[NON_CACHEABLE_KEYS];
3540
+ }
3296
3541
  var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
3297
- function contextSet(variables, keyOrVar, value) {
3542
+ function contextSet(variables, keyOrVar, value, options) {
3298
3543
  if (typeof keyOrVar === "string") {
3299
3544
  if (FORBIDDEN_KEYS.has(keyOrVar)) {
3300
3545
  throw new Error(
@@ -3302,8 +3547,14 @@ function contextSet(variables, keyOrVar, value) {
3302
3547
  );
3303
3548
  }
3304
3549
  variables[keyOrVar] = value;
3550
+ if (options?.cache === false) {
3551
+ getNonCacheableKeys(variables).add(keyOrVar);
3552
+ }
3305
3553
  } else {
3306
3554
  variables[keyOrVar.key] = value;
3555
+ if (options?.cache === false) {
3556
+ getNonCacheableKeys(variables).add(keyOrVar.key);
3557
+ }
3307
3558
  }
3308
3559
  }
3309
3560
 
@@ -3326,6 +3577,7 @@ function encodePathParam(value) {
3326
3577
  }
3327
3578
  function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
3328
3579
  let result = pattern;
3580
+ let hadOmittedOptional = false;
3329
3581
  for (const [key, value] of Object.entries(params)) {
3330
3582
  const escaped = escapeRegExp2(key);
3331
3583
  result = result.replace(
@@ -3334,6 +3586,15 @@ function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
3334
3586
  );
3335
3587
  result = result.replace(`*${key}`, encode(value));
3336
3588
  }
3589
+ result = result.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?\?/g, () => {
3590
+ hadOmittedOptional = true;
3591
+ return "";
3592
+ });
3593
+ if (hadOmittedOptional) {
3594
+ const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
3595
+ result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
3596
+ if (hadTrailingSlash && !result.endsWith("/")) result += "/";
3597
+ }
3337
3598
  return result;
3338
3599
  }
3339
3600
  async function runWithConcurrency(items, concurrency, fn) {
@@ -3442,84 +3703,126 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3442
3703
  if (!params) return pattern;
3443
3704
  return substituteRouteParams(pattern, params);
3444
3705
  };
3706
+ let resolvedRoutes = 0;
3707
+ let totalDynamic = 0;
3445
3708
  for (const { manifest } of allManifests) {
3446
3709
  if (!manifest.prerenderRoutes) continue;
3447
- const defs = manifest._prerenderDefs || {};
3448
3710
  for (const routeName of manifest.prerenderRoutes) {
3449
3711
  const pattern = manifest.routeManifest[routeName];
3450
- if (!pattern) continue;
3451
- const def = defs[routeName];
3452
- const isPassthroughRoute = !!def?.options?.passthrough;
3453
- const hasDynamic = pattern.includes(":") || pattern.includes("*");
3454
- if (!hasDynamic) {
3455
- entries.push({
3456
- urlPath: pattern.replace(/\/$/, "") || "/",
3457
- routeName,
3458
- concurrency: 1,
3459
- isPassthroughRoute
3460
- });
3461
- } else {
3462
- if (def?.getParams) {
3463
- try {
3464
- const buildVars = {};
3465
- const getParamsCtx = {
3466
- build: true,
3467
- set: ((keyOrVar, value) => {
3468
- contextSet(buildVars, keyOrVar, value);
3469
- }),
3470
- reverse: getParamsReverse
3471
- };
3472
- const paramsList = await def.getParams(getParamsCtx);
3473
- const concurrency = def.options?.concurrency ?? 1;
3474
- const hasBuildVars = Object.keys(buildVars).length > 0 || Object.getOwnPropertySymbols(buildVars).length > 0;
3475
- for (const params of paramsList) {
3476
- let url = substituteRouteParams(
3477
- pattern,
3478
- params,
3479
- encodePathParam
3480
- );
3481
- if (url.includes("*")) {
3482
- const wildcardValue = params["*"] ?? params.splat;
3483
- if (wildcardValue !== void 0) {
3484
- url = url.replace(/\*[^/]*$/, encodePathParam(wildcardValue));
3712
+ if (pattern && (pattern.includes(":") || pattern.includes("*"))) {
3713
+ totalDynamic++;
3714
+ }
3715
+ }
3716
+ }
3717
+ const paramsStart = performance.now();
3718
+ const progressInterval = totalDynamic > 0 ? setInterval(() => {
3719
+ const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
3720
+ console.log(
3721
+ `[rsc-router] Resolving prerender params... ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
3722
+ );
3723
+ }, 5e3) : void 0;
3724
+ try {
3725
+ for (const { manifest } of allManifests) {
3726
+ if (!manifest.prerenderRoutes) continue;
3727
+ const defs = manifest._prerenderDefs || {};
3728
+ const passthroughSet = new Set(manifest.passthroughRoutes || []);
3729
+ for (const routeName of manifest.prerenderRoutes) {
3730
+ const pattern = manifest.routeManifest[routeName];
3731
+ if (!pattern) continue;
3732
+ const def = defs[routeName];
3733
+ const isPassthroughRoute = passthroughSet.has(routeName);
3734
+ const hasDynamic = pattern.includes(":") || pattern.includes("*");
3735
+ if (!hasDynamic) {
3736
+ entries.push({
3737
+ urlPath: pattern.replace(/\/$/, "") || "/",
3738
+ routeName,
3739
+ concurrency: 1,
3740
+ isPassthroughRoute
3741
+ });
3742
+ } else {
3743
+ if (def?.getParams) {
3744
+ try {
3745
+ const buildVars = {};
3746
+ const buildEnv = state.resolvedBuildEnv;
3747
+ const getParamsCtx = {
3748
+ build: true,
3749
+ dev: !state.isBuildMode,
3750
+ set: ((keyOrVar, value) => {
3751
+ contextSet(buildVars, keyOrVar, value);
3752
+ }),
3753
+ reverse: getParamsReverse,
3754
+ get env() {
3755
+ if (buildEnv !== void 0) return buildEnv;
3756
+ throw new Error(
3757
+ "[rsc-router] ctx.env is not available during build-time getParams(). Configure buildEnv in your rango() plugin options to enable build-time env access."
3758
+ );
3759
+ }
3760
+ };
3761
+ const paramsList = await def.getParams(getParamsCtx);
3762
+ const concurrency = def.options?.concurrency ?? 1;
3763
+ const hasBuildVars = Object.keys(buildVars).length > 0 || Object.getOwnPropertySymbols(buildVars).length > 0;
3764
+ for (const params of paramsList) {
3765
+ let url = substituteRouteParams(
3766
+ pattern,
3767
+ params,
3768
+ encodePathParam
3769
+ );
3770
+ if (url.includes("*")) {
3771
+ const wildcardValue = params["*"] ?? params.splat;
3772
+ if (wildcardValue !== void 0) {
3773
+ url = url.replace(
3774
+ /\*[^/]*$/,
3775
+ encodePathParam(wildcardValue)
3776
+ );
3777
+ }
3485
3778
  }
3779
+ entries.push({
3780
+ urlPath: url.replace(/\/$/, "") || "/",
3781
+ routeName,
3782
+ concurrency,
3783
+ ...hasBuildVars ? { buildVars } : {},
3784
+ isPassthroughRoute
3785
+ });
3486
3786
  }
3487
- entries.push({
3488
- urlPath: url.replace(/\/$/, "") || "/",
3489
- routeName,
3490
- concurrency,
3491
- ...hasBuildVars ? { buildVars } : {},
3492
- isPassthroughRoute
3493
- });
3494
- }
3495
- } catch (err) {
3496
- if (err.name === "Skip") {
3497
- console.log(
3498
- `[rsc-router] SKIP route "${routeName}" - ${err.message}`
3499
- );
3500
- notifyOnError(
3501
- registry,
3502
- err,
3503
- "prerender",
3504
- routeName,
3505
- void 0,
3506
- true
3787
+ resolvedRoutes++;
3788
+ } catch (err) {
3789
+ resolvedRoutes++;
3790
+ if (err.name === "Skip") {
3791
+ console.log(
3792
+ `[rsc-router] SKIP route "${routeName}" - ${err.message}`
3793
+ );
3794
+ notifyOnError(
3795
+ registry,
3796
+ err,
3797
+ "prerender",
3798
+ routeName,
3799
+ void 0,
3800
+ true
3801
+ );
3802
+ continue;
3803
+ }
3804
+ console.error(
3805
+ `[rsc-router] Failed to get params for prerender route "${routeName}": ${err.message}`
3507
3806
  );
3508
- continue;
3807
+ notifyOnError(registry, err, "prerender", routeName);
3808
+ throw err;
3509
3809
  }
3510
- console.error(
3511
- `[rsc-router] Failed to get params for prerender route "${routeName}": ${err.message}`
3810
+ } else {
3811
+ console.warn(
3812
+ `[rsc-router] Dynamic prerender route "${routeName}" has no getParams(), skipping`
3512
3813
  );
3513
- notifyOnError(registry, err, "prerender", routeName);
3514
- throw err;
3515
3814
  }
3516
- } else {
3517
- console.warn(
3518
- `[rsc-router] Dynamic prerender route "${routeName}" has no getParams(), skipping`
3519
- );
3520
3815
  }
3521
3816
  }
3522
3817
  }
3818
+ } finally {
3819
+ if (progressInterval) {
3820
+ clearInterval(progressInterval);
3821
+ const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
3822
+ console.log(
3823
+ `[rsc-router] Resolved prerender params: ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
3824
+ );
3825
+ }
3523
3826
  }
3524
3827
  if (entries.length === 0) return;
3525
3828
  const maxConcurrency = Math.max(...entries.map((e) => e.concurrency));
@@ -3546,7 +3849,8 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
3546
3849
  entry.urlPath,
3547
3850
  {},
3548
3851
  entry.buildVars,
3549
- entry.isPassthroughRoute
3852
+ entry.isPassthroughRoute,
3853
+ state.resolvedBuildEnv
3550
3854
  );
3551
3855
  if (!result) continue;
3552
3856
  if (result.passthrough) {
@@ -3670,7 +3974,9 @@ async function renderStaticHandlers(state, rscEnv, registry) {
3670
3974
  const result = await routerInstance.renderStaticSegment(
3671
3975
  def.handler,
3672
3976
  def.$$id,
3673
- def.$$routePrefix
3977
+ def.$$routePrefix,
3978
+ state.resolvedBuildEnv,
3979
+ !state.isBuildMode
3674
3980
  );
3675
3981
  if (result) {
3676
3982
  const hasHandles = Object.keys(result.handles).length > 0;
@@ -3795,7 +4101,11 @@ async function discoverRouters(state, rscEnv) {
3795
4101
  if (!router.urlpatterns || !generateManifestFull) {
3796
4102
  continue;
3797
4103
  }
3798
- const manifest = generateManifestFull(router.urlpatterns, routerMountIndex);
4104
+ const manifest = generateManifestFull(
4105
+ router.urlpatterns,
4106
+ routerMountIndex,
4107
+ router.__basename ? { urlPrefix: router.__basename } : void 0
4108
+ );
3799
4109
  routerMountIndex++;
3800
4110
  allManifests.push({ id, manifest });
3801
4111
  const routeCount = Object.keys(manifest.routeManifest).length;
@@ -3937,7 +4247,7 @@ async function discoverRouters(state, rscEnv) {
3937
4247
  }
3938
4248
 
3939
4249
  // src/vite/discovery/route-types-writer.ts
3940
- import { dirname as dirname3, basename, join as join3, resolve as resolve6 } from "node:path";
4250
+ import { dirname as dirname3, basename, join as join2, resolve as resolve6 } from "node:path";
3941
4251
  import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, existsSync as existsSync5, unlinkSync as unlinkSync2 } from "node:fs";
3942
4252
  function filterUserNamedRoutes(manifest) {
3943
4253
  const filtered = {};
@@ -3958,7 +4268,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
3958
4268
  /\.(tsx?|jsx?)$/,
3959
4269
  ""
3960
4270
  );
3961
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4271
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
3962
4272
  try {
3963
4273
  preContent.set(outPath, readFileSync4(outPath, "utf-8"));
3964
4274
  } catch {
@@ -3971,7 +4281,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
3971
4281
  /\.(tsx?|jsx?)$/,
3972
4282
  ""
3973
4283
  );
3974
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4284
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
3975
4285
  if (!existsSync5(outPath)) continue;
3976
4286
  try {
3977
4287
  const content = readFileSync4(outPath, "utf-8");
@@ -3988,7 +4298,7 @@ function writeRouteTypesFiles(state) {
3988
4298
  const entryDir = dirname3(
3989
4299
  resolve6(state.projectRoot, state.resolvedEntryPath)
3990
4300
  );
3991
- const oldCombinedPath = join3(entryDir, "named-routes.gen.ts");
4301
+ const oldCombinedPath = join2(entryDir, "named-routes.gen.ts");
3992
4302
  if (existsSync5(oldCombinedPath)) {
3993
4303
  unlinkSync2(oldCombinedPath);
3994
4304
  console.log(
@@ -4013,7 +4323,7 @@ Set an explicit \`id\` on createRouter() or check the call site.`
4013
4323
  }
4014
4324
  const routerDir = dirname3(sourceFile);
4015
4325
  const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
4016
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4326
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
4017
4327
  const userRoutes = filterUserNamedRoutes(routeManifest);
4018
4328
  let effectiveSearchSchemas = routeSearchSchemas;
4019
4329
  if ((!effectiveSearchSchemas || Object.keys(effectiveSearchSchemas).length === 0) && sourceFile) {
@@ -4078,7 +4388,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
4078
4388
  }
4079
4389
  const routerDir = dirname3(sourceFile);
4080
4390
  const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
4081
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
4391
+ const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
4082
4392
  const source = generateRouteTypesSource(
4083
4393
  mergedRoutes,
4084
4394
  Object.keys(mergedSearchSchemas).length > 0 ? mergedSearchSchemas : void 0
@@ -4092,7 +4402,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
4092
4402
  }
4093
4403
 
4094
4404
  // src/vite/discovery/virtual-module-codegen.ts
4095
- import { dirname as dirname4, basename as basename2, join as join4 } from "node:path";
4405
+ import { dirname as dirname4, basename as basename2, join as join3 } from "node:path";
4096
4406
  function generateRoutesManifestModule(state) {
4097
4407
  const hasManifest = state.mergedRouteManifest && Object.keys(state.mergedRouteManifest).length > 0;
4098
4408
  if (hasManifest) {
@@ -4107,7 +4417,7 @@ function generateRoutesManifestModule(state) {
4107
4417
  /\.(tsx?|jsx?)$/,
4108
4418
  ""
4109
4419
  );
4110
- const genPath = join4(
4420
+ const genPath = join3(
4111
4421
  routerDir,
4112
4422
  `${routerBasename}.named-routes.gen.js`
4113
4423
  ).replaceAll("\\", "/");
@@ -4204,7 +4514,7 @@ function generatePerRouterModule(state, routerId) {
4204
4514
  /\.(tsx?|jsx?)$/,
4205
4515
  ""
4206
4516
  );
4207
- const genPath = join4(
4517
+ const genPath = join3(
4208
4518
  routerDir,
4209
4519
  `${routerBasename}.named-routes.gen.js`
4210
4520
  ).replaceAll("\\", "/");
@@ -4244,48 +4554,45 @@ function postprocessBundle(state) {
4244
4554
  );
4245
4555
  const evictionTargets = [
4246
4556
  {
4247
- info: state.handlerChunkInfo,
4557
+ infos: state.handlerChunkInfoMap.values(),
4248
4558
  fnName: "Prerender",
4249
4559
  brand: "prerenderHandler",
4250
4560
  label: "handler code from RSC bundle"
4251
4561
  },
4252
4562
  {
4253
- info: state.staticHandlerChunkInfo,
4563
+ infos: state.staticHandlerChunkInfoMap.values(),
4254
4564
  fnName: "Static",
4255
4565
  brand: "staticHandler",
4256
4566
  label: "static handler code"
4257
4567
  }
4258
4568
  ];
4259
4569
  for (const target of evictionTargets) {
4260
- if (!target.info) continue;
4261
- const chunkPath = resolve7(
4262
- state.projectRoot,
4263
- "dist/rsc",
4264
- target.info.fileName
4265
- );
4266
- try {
4267
- const code = readFileSync5(chunkPath, "utf-8");
4268
- const result = evictHandlerCode(
4269
- code,
4270
- target.info.exports,
4271
- target.fnName,
4272
- target.brand
4273
- );
4274
- if (result) {
4275
- writeFileSync4(chunkPath, result.code);
4276
- const savedKB = (result.savedBytes / 1024).toFixed(1);
4277
- console.log(
4278
- `[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${target.info.fileName}`
4570
+ for (const info of target.infos) {
4571
+ const chunkPath = resolve7(state.projectRoot, "dist/rsc", info.fileName);
4572
+ try {
4573
+ const code = readFileSync5(chunkPath, "utf-8");
4574
+ const result = evictHandlerCode(
4575
+ code,
4576
+ info.exports,
4577
+ target.fnName,
4578
+ target.brand
4579
+ );
4580
+ if (result) {
4581
+ writeFileSync4(chunkPath, result.code);
4582
+ const savedKB = (result.savedBytes / 1024).toFixed(1);
4583
+ console.log(
4584
+ `[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${info.fileName}`
4585
+ );
4586
+ }
4587
+ } catch (replaceErr) {
4588
+ console.warn(
4589
+ `[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
4279
4590
  );
4280
4591
  }
4281
- } catch (replaceErr) {
4282
- console.warn(
4283
- `[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
4284
- );
4285
4592
  }
4286
4593
  }
4287
- state.handlerChunkInfo = null;
4288
- state.staticHandlerChunkInfo = null;
4594
+ state.handlerChunkInfoMap.clear();
4595
+ state.staticHandlerChunkInfoMap.clear();
4289
4596
  if (hasPrerenderData && existsSync6(rscEntryPath)) {
4290
4597
  const rscCode = readFileSync5(rscEntryPath, "utf-8");
4291
4598
  if (!rscCode.includes("__prerender-manifest.js")) {
@@ -4328,7 +4635,7 @@ function postprocessBundle(state) {
4328
4635
  }
4329
4636
  if (hasStaticData && existsSync6(rscEntryPath)) {
4330
4637
  const rscCode = readFileSync5(rscEntryPath, "utf-8");
4331
- if (!rscCode.includes("__STATIC_MANIFEST")) {
4638
+ if (!rscCode.includes("__static-manifest.js")) {
4332
4639
  try {
4333
4640
  const manifestEntries = [];
4334
4641
  let totalBytes = copyStagedBuildAssets(
@@ -4397,8 +4704,67 @@ async function createTempRscServer(state, options = {}) {
4397
4704
  ]
4398
4705
  });
4399
4706
  }
4707
+ async function resolveBuildEnv(option, factoryCtx) {
4708
+ if (!option) return null;
4709
+ if (option === "auto") {
4710
+ if (factoryCtx.preset !== "cloudflare") {
4711
+ throw new Error(
4712
+ '[rsc-router] buildEnv: "auto" is only supported with preset: "cloudflare". Use a factory function or plain object for other presets.'
4713
+ );
4714
+ }
4715
+ try {
4716
+ const userRequire = createRequire(
4717
+ resolve8(factoryCtx.root, "package.json")
4718
+ );
4719
+ const wranglerPath = userRequire.resolve("wrangler");
4720
+ const { getPlatformProxy } = await import(pathToFileURL(wranglerPath).href);
4721
+ const proxy = await getPlatformProxy();
4722
+ return {
4723
+ env: proxy.env,
4724
+ dispose: proxy.dispose
4725
+ };
4726
+ } catch (err) {
4727
+ throw new Error(
4728
+ `[rsc-router] buildEnv: "auto" requires wrangler to be installed.
4729
+ Install it with: pnpm add -D wrangler
4730
+ ${err.message}`
4731
+ );
4732
+ }
4733
+ }
4734
+ if (typeof option === "function") {
4735
+ return await option(factoryCtx);
4736
+ }
4737
+ return { env: option };
4738
+ }
4739
+ async function acquireBuildEnv(s, command, mode) {
4740
+ const option = s.opts?.buildEnv;
4741
+ if (!option) return false;
4742
+ const result = await resolveBuildEnv(option, {
4743
+ root: s.projectRoot,
4744
+ mode,
4745
+ command,
4746
+ preset: s.opts?.preset ?? "node"
4747
+ });
4748
+ if (!result) return false;
4749
+ s.resolvedBuildEnv = result.env;
4750
+ s.buildEnvDispose = result.dispose ?? null;
4751
+ return true;
4752
+ }
4753
+ async function releaseBuildEnv(s) {
4754
+ if (s.buildEnvDispose) {
4755
+ try {
4756
+ await s.buildEnvDispose();
4757
+ } catch (err) {
4758
+ console.warn(`[rsc-router] buildEnv dispose failed: ${err.message}`);
4759
+ }
4760
+ s.buildEnvDispose = null;
4761
+ }
4762
+ s.resolvedBuildEnv = void 0;
4763
+ }
4400
4764
  function createRouterDiscoveryPlugin(entryPath, opts) {
4401
4765
  const s = createDiscoveryState(entryPath, opts);
4766
+ let viteCommand = "build";
4767
+ let viteMode = "production";
4402
4768
  return {
4403
4769
  name: "@rangojs/router:discovery",
4404
4770
  config() {
@@ -4407,31 +4773,13 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4407
4773
  __RANGO_DEBUG__: JSON.stringify(!!process.env.INTERNAL_RANGO_DEBUG)
4408
4774
  }
4409
4775
  };
4410
- if (opts?.enableBuildPrerender) {
4411
- config.environments = {
4412
- rsc: {
4413
- build: {
4414
- rollupOptions: {
4415
- output: {
4416
- manualChunks(id) {
4417
- if (s.resolvedPrerenderModules?.has(id)) {
4418
- return "__prerender-handlers";
4419
- }
4420
- if (s.resolvedStaticModules?.has(id)) {
4421
- return "__static-handlers";
4422
- }
4423
- }
4424
- }
4425
- }
4426
- }
4427
- }
4428
- };
4429
- }
4430
4776
  return config;
4431
4777
  },
4432
4778
  configResolved(config) {
4433
4779
  s.projectRoot = config.root;
4434
4780
  s.isBuildMode = config.command === "build";
4781
+ viteCommand = config.command;
4782
+ viteMode = config.mode;
4435
4783
  s.userResolveAlias = config.resolve.alias;
4436
4784
  if (!s.resolvedEntryPath && opts?.routerPathRef?.path) {
4437
4785
  s.resolvedEntryPath = opts.routerPathRef.path;
@@ -4445,12 +4793,6 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4445
4793
  s.resolvedEntryPath = entries[0];
4446
4794
  }
4447
4795
  }
4448
- if (opts?.include || opts?.exclude) {
4449
- s.scanFilter = createScanFilter(s.projectRoot, {
4450
- include: opts.include,
4451
- exclude: opts.exclude
4452
- });
4453
- }
4454
4796
  if (opts?.staticRouteTypesGeneration !== false) {
4455
4797
  s.cachedRouterFiles = findRouterFiles(s.projectRoot, s.scanFilter);
4456
4798
  writeCombinedRouteTypesWithTracking(s, { preserveIfLarger: true });
@@ -4482,6 +4824,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4482
4824
  });
4483
4825
  prerenderTempServer = null;
4484
4826
  }
4827
+ releaseBuildEnv(s).catch(() => {
4828
+ });
4485
4829
  });
4486
4830
  async function getOrCreateTempServer() {
4487
4831
  if (prerenderNodeRegistry) {
@@ -4512,6 +4856,7 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
4512
4856
  if (!rscEnv?.runner) {
4513
4857
  s.devServerOrigin = getDevServerOrigin();
4514
4858
  try {
4859
+ await acquireBuildEnv(s, viteCommand, viteMode);
4515
4860
  const tempRscEnv = await getOrCreateTempServer();
4516
4861
  if (tempRscEnv) {
4517
4862
  await discoverRouters(s, tempRscEnv);
@@ -4527,6 +4872,7 @@ ${err.stack}`
4527
4872
  return;
4528
4873
  }
4529
4874
  try {
4875
+ await acquireBuildEnv(s, viteCommand, viteMode);
4530
4876
  const serverMod = await rscEnv.runner.import(
4531
4877
  "@rangojs/router/server"
4532
4878
  );
@@ -4591,7 +4937,26 @@ ${err.stack}`
4591
4937
  res.end("Missing pathname");
4592
4938
  return;
4593
4939
  }
4594
- let registry = mainRegistry;
4940
+ const rscEnv = server.environments?.rsc;
4941
+ let registry = null;
4942
+ if (rscEnv?.runner && s.resolvedEntryPath) {
4943
+ try {
4944
+ await rscEnv.runner.import(s.resolvedEntryPath);
4945
+ const serverMod = await rscEnv.runner.import(
4946
+ "@rangojs/router/server"
4947
+ );
4948
+ registry = serverMod.RouterRegistry ?? null;
4949
+ } catch (err) {
4950
+ console.warn(
4951
+ `[rsc-router] Dev prerender module refresh failed: ${err.message}`
4952
+ );
4953
+ res.statusCode = 500;
4954
+ res.end(`Prerender handler error: ${err.message}`);
4955
+ return;
4956
+ }
4957
+ } else {
4958
+ registry = mainRegistry;
4959
+ }
4595
4960
  if (!registry) {
4596
4961
  if (!prerenderNodeRegistry) {
4597
4962
  await getOrCreateTempServer();
@@ -4613,7 +4978,10 @@ ${err.stack}`
4613
4978
  pathname,
4614
4979
  {},
4615
4980
  void 0,
4616
- wantPassthrough
4981
+ wantPassthrough,
4982
+ s.resolvedBuildEnv,
4983
+ true
4984
+ // devMode: check getParams for passthrough routes
4617
4985
  );
4618
4986
  if (!result) continue;
4619
4987
  if (result.passthrough) continue;
@@ -4749,6 +5117,7 @@ ${err.stack}`
4749
5117
  resetStagedBuildAssets(s.projectRoot);
4750
5118
  s.prerenderManifestEntries = null;
4751
5119
  s.staticManifestEntries = null;
5120
+ await acquireBuildEnv(s, viteCommand, viteMode);
4752
5121
  let tempServer = null;
4753
5122
  globalThis.__rscRouterDiscoveryActive = true;
4754
5123
  try {
@@ -4788,6 +5157,7 @@ ${details}`
4788
5157
  if (tempServer) {
4789
5158
  await tempServer.close();
4790
5159
  }
5160
+ await releaseBuildEnv(s);
4791
5161
  }
4792
5162
  },
4793
5163
  // Virtual module: provides the pre-generated route manifest as a JS module
@@ -4830,20 +5200,30 @@ ${details}`
4830
5200
  }
4831
5201
  if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
4832
5202
  return;
5203
+ s.handlerChunkInfoMap.clear();
5204
+ s.staticHandlerChunkInfoMap.clear();
4833
5205
  for (const [fileName, chunk] of Object.entries(bundle)) {
4834
5206
  if (chunk.type !== "chunk") continue;
4835
- if (fileName.includes("__prerender-handlers") && s.resolvedPrerenderModules?.size) {
5207
+ if (s.resolvedPrerenderModules?.size) {
4836
5208
  const handlers = extractHandlerExportsFromChunk(
4837
5209
  chunk.code,
4838
5210
  s.resolvedPrerenderModules,
4839
5211
  "Prerender",
4840
- true
5212
+ false
4841
5213
  );
4842
5214
  if (handlers.length > 0) {
4843
- s.handlerChunkInfo = { fileName, exports: handlers };
5215
+ const existing = s.handlerChunkInfoMap.get(fileName);
5216
+ if (existing) {
5217
+ existing.exports.push(...handlers);
5218
+ } else {
5219
+ s.handlerChunkInfoMap.set(fileName, {
5220
+ fileName,
5221
+ exports: handlers
5222
+ });
5223
+ }
4844
5224
  }
4845
5225
  }
4846
- if (fileName.includes("__static-handlers") && s.resolvedStaticModules?.size) {
5226
+ if (s.resolvedStaticModules?.size) {
4847
5227
  const handlers = extractHandlerExportsFromChunk(
4848
5228
  chunk.code,
4849
5229
  s.resolvedStaticModules,
@@ -4851,7 +5231,15 @@ ${details}`
4851
5231
  false
4852
5232
  );
4853
5233
  if (handlers.length > 0) {
4854
- s.staticHandlerChunkInfo = { fileName, exports: handlers };
5234
+ const existing = s.staticHandlerChunkInfoMap.get(fileName);
5235
+ if (existing) {
5236
+ existing.exports.push(...handlers);
5237
+ } else {
5238
+ s.staticHandlerChunkInfoMap.set(fileName, {
5239
+ fileName,
5240
+ exports: handlers
5241
+ });
5242
+ }
4855
5243
  }
4856
5244
  }
4857
5245
  }
@@ -4878,8 +5266,16 @@ async function rango(options) {
4878
5266
  const showBanner = resolvedOptions.banner ?? true;
4879
5267
  const plugins = [];
4880
5268
  const rangoAliases = getPackageAliases();
4881
- const excludeDeps = getExcludeDeps();
4882
- let rscEntryPath = null;
5269
+ const excludeDeps = [
5270
+ ...getExcludeDeps(),
5271
+ // The public browser entry re-exports the RSDW browser client.
5272
+ // Excluding both keeps Vite from freezing the unpatched bundle into
5273
+ // .vite/deps before our source transforms run.
5274
+ "@vitejs/plugin-rsc/browser",
5275
+ // Keep the browser RSDW client out of Vite's dep optimizer so our
5276
+ // cjs-to-esm transform can patch the real file.
5277
+ "@vitejs/plugin-rsc/vendor/react-server-dom/client.browser"
5278
+ ];
4883
5279
  const routerRef = { path: void 0 };
4884
5280
  const prerenderEnabled = true;
4885
5281
  if (preset === "cloudflare") {
@@ -4975,6 +5371,7 @@ async function rango(options) {
4975
5371
  }
4976
5372
  });
4977
5373
  plugins.push(createVirtualEntriesPlugin(finalEntries));
5374
+ plugins.push(performanceTracksPlugin());
4978
5375
  plugins.push(
4979
5376
  rsc({
4980
5377
  entries: finalEntries,
@@ -4983,153 +5380,122 @@ async function rango(options) {
4983
5380
  );
4984
5381
  plugins.push(clientRefDedup());
4985
5382
  } else {
4986
- const nodeOptions = resolvedOptions;
4987
- routerRef.path = nodeOptions.router;
4988
- if (!routerRef.path) {
4989
- plugins.push({
4990
- name: "@rangojs/router:auto-discover",
4991
- config(userConfig) {
4992
- if (routerRef.path) return;
4993
- const root = userConfig.root ? resolve9(process.cwd(), userConfig.root) : process.cwd();
4994
- const filter = createScanFilter(root, {
4995
- include: resolvedOptions.include,
4996
- exclude: resolvedOptions.exclude
4997
- });
4998
- const candidates = findRouterFiles(root, filter);
4999
- if (candidates.length === 1) {
5000
- const abs = candidates[0];
5001
- routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
5002
- } else if (candidates.length > 1) {
5003
- const list = candidates.map(
5004
- (f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
5005
- ).join("\n");
5006
- throw new Error(
5007
- `[rsc-router] Multiple routers found. Specify \`router\` to choose one:
5008
- ${list}`
5009
- );
5010
- }
5383
+ plugins.push({
5384
+ name: "@rangojs/router:auto-discover",
5385
+ config(userConfig) {
5386
+ if (routerRef.path) return;
5387
+ const root = userConfig.root ? resolve9(process.cwd(), userConfig.root) : process.cwd();
5388
+ const candidates = findRouterFiles(root);
5389
+ if (candidates.length === 1) {
5390
+ const abs = candidates[0];
5391
+ routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
5392
+ } else if (candidates.length > 1) {
5393
+ const list = candidates.map(
5394
+ (f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
5395
+ ).join("\n");
5396
+ throw new Error(`[rsc-router] Multiple routers found:
5397
+ ${list}`);
5011
5398
  }
5012
- });
5013
- }
5014
- const rscOption = nodeOptions.rsc ?? true;
5015
- if (rscOption !== false) {
5016
- const { default: rsc } = await import("@vitejs/plugin-rsc");
5017
- const userEntries = typeof rscOption === "boolean" ? {} : rscOption.entries || {};
5018
- const finalEntries = {
5019
- client: userEntries.client ?? VIRTUAL_IDS.browser,
5020
- ssr: userEntries.ssr ?? VIRTUAL_IDS.ssr,
5021
- rsc: userEntries.rsc ?? VIRTUAL_IDS.rsc
5022
- };
5023
- rscEntryPath = userEntries.rsc ?? null;
5024
- let hasWarnedDuplicate = false;
5025
- plugins.push({
5026
- name: "@rangojs/router:rsc-integration",
5027
- enforce: "pre",
5028
- config() {
5029
- const useVirtualClient = finalEntries.client === VIRTUAL_IDS.browser;
5030
- const useVirtualSSR = finalEntries.ssr === VIRTUAL_IDS.ssr;
5031
- const useVirtualRSC = finalEntries.rsc === VIRTUAL_IDS.rsc;
5032
- return {
5033
- // Exclude rsc-router modules from optimization to prevent module duplication
5034
- // This ensures the same Context instance is used by both browser entry and RSC proxy modules
5035
- optimizeDeps: {
5036
- exclude: excludeDeps,
5037
- esbuildOptions: sharedEsbuildOptions
5038
- },
5039
- build: {
5040
- rollupOptions: { onwarn }
5041
- },
5042
- resolve: {
5043
- alias: rangoAliases
5044
- },
5045
- environments: {
5046
- client: {
5047
- build: {
5048
- rollupOptions: {
5049
- output: {
5050
- manualChunks: getManualChunks
5051
- }
5052
- }
5053
- },
5054
- // Always exclude rsc-router modules, conditionally add virtual entry
5055
- optimizeDeps: {
5056
- // Pre-bundle React and rsc-html-stream to prevent late discovery
5057
- // triggering ERR_OUTDATED_OPTIMIZED_DEP on cold starts
5058
- include: [
5059
- "react",
5060
- "react-dom",
5061
- "react/jsx-runtime",
5062
- "react/jsx-dev-runtime",
5063
- "rsc-html-stream/client"
5064
- ],
5065
- exclude: excludeDeps,
5066
- esbuildOptions: sharedEsbuildOptions,
5067
- ...useVirtualClient && {
5068
- // Tell Vite to scan the virtual entry for dependencies
5069
- entries: [VIRTUAL_IDS.browser]
5070
- }
5071
- }
5072
- },
5073
- ...useVirtualSSR && {
5074
- ssr: {
5075
- optimizeDeps: {
5076
- entries: [VIRTUAL_IDS.ssr],
5077
- // Pre-bundle all SSR deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
5078
- include: [
5079
- "react",
5080
- "react-dom",
5081
- "react-dom/server.edge",
5082
- "react-dom/static.edge",
5083
- "react/jsx-runtime",
5084
- "react/jsx-dev-runtime",
5085
- "@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
5086
- ],
5087
- exclude: excludeDeps,
5088
- esbuildOptions: sharedEsbuildOptions
5399
+ }
5400
+ });
5401
+ const finalEntries = {
5402
+ client: VIRTUAL_IDS.browser,
5403
+ ssr: VIRTUAL_IDS.ssr,
5404
+ rsc: VIRTUAL_IDS.rsc
5405
+ };
5406
+ const { default: rsc } = await import("@vitejs/plugin-rsc");
5407
+ let hasWarnedDuplicate = false;
5408
+ plugins.push({
5409
+ name: "@rangojs/router:rsc-integration",
5410
+ enforce: "pre",
5411
+ config() {
5412
+ return {
5413
+ optimizeDeps: {
5414
+ exclude: excludeDeps,
5415
+ esbuildOptions: sharedEsbuildOptions
5416
+ },
5417
+ build: {
5418
+ rollupOptions: { onwarn }
5419
+ },
5420
+ resolve: {
5421
+ alias: rangoAliases
5422
+ },
5423
+ environments: {
5424
+ client: {
5425
+ build: {
5426
+ rollupOptions: {
5427
+ output: {
5428
+ manualChunks: getManualChunks
5089
5429
  }
5090
5430
  }
5091
5431
  },
5092
- ...useVirtualRSC && {
5093
- rsc: {
5094
- optimizeDeps: {
5095
- entries: [VIRTUAL_IDS.rsc],
5096
- // Pre-bundle all RSC deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
5097
- include: [
5098
- "react",
5099
- "react/jsx-runtime",
5100
- "react/jsx-dev-runtime",
5101
- "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
5102
- ],
5103
- esbuildOptions: sharedEsbuildOptions
5104
- }
5105
- }
5432
+ optimizeDeps: {
5433
+ include: [
5434
+ "react",
5435
+ "react-dom",
5436
+ "react/jsx-runtime",
5437
+ "react/jsx-dev-runtime",
5438
+ "rsc-html-stream/client"
5439
+ ],
5440
+ exclude: excludeDeps,
5441
+ esbuildOptions: sharedEsbuildOptions,
5442
+ entries: [VIRTUAL_IDS.browser]
5443
+ }
5444
+ },
5445
+ ssr: {
5446
+ optimizeDeps: {
5447
+ entries: [VIRTUAL_IDS.ssr],
5448
+ include: [
5449
+ "react",
5450
+ "react-dom",
5451
+ "react-dom/server.edge",
5452
+ "react-dom/static.edge",
5453
+ "react/jsx-runtime",
5454
+ "react/jsx-dev-runtime",
5455
+ "@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
5456
+ ],
5457
+ exclude: excludeDeps,
5458
+ esbuildOptions: sharedEsbuildOptions
5459
+ }
5460
+ },
5461
+ rsc: {
5462
+ optimizeDeps: {
5463
+ entries: [VIRTUAL_IDS.rsc],
5464
+ include: [
5465
+ "react",
5466
+ "react/jsx-runtime",
5467
+ "react/jsx-dev-runtime",
5468
+ "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
5469
+ ],
5470
+ esbuildOptions: sharedEsbuildOptions
5106
5471
  }
5107
5472
  }
5108
- };
5109
- },
5110
- configResolved(config) {
5111
- if (showBanner) {
5112
- const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
5113
- printBanner(mode, "node", rangoVersion);
5114
- }
5115
- const rscMinimalCount = config.plugins.filter(
5116
- (p) => p.name === "rsc:minimal"
5117
- ).length;
5118
- if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
5119
- hasWarnedDuplicate = true;
5120
- console.warn(
5121
- "[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your config or use rango({ rsc: false }) for manual configuration."
5122
- );
5123
5473
  }
5474
+ };
5475
+ },
5476
+ configResolved(config) {
5477
+ if (showBanner) {
5478
+ const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
5479
+ printBanner(mode, "node", rangoVersion);
5124
5480
  }
5125
- });
5126
- plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
5127
- plugins.push(
5128
- rsc({
5129
- entries: finalEntries
5130
- })
5131
- );
5132
- }
5481
+ const rscMinimalCount = config.plugins.filter(
5482
+ (p) => p.name === "rsc:minimal"
5483
+ ).length;
5484
+ if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
5485
+ hasWarnedDuplicate = true;
5486
+ console.warn(
5487
+ "[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your vite config \u2014 rango() includes it automatically."
5488
+ );
5489
+ }
5490
+ }
5491
+ });
5492
+ plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
5493
+ plugins.push(performanceTracksPlugin());
5494
+ plugins.push(
5495
+ rsc({
5496
+ entries: finalEntries
5497
+ })
5498
+ );
5133
5499
  plugins.push(clientRefDedup());
5134
5500
  }
5135
5501
  plugins.push({
@@ -5157,18 +5523,16 @@ ${list}`
5157
5523
  plugins.push(createVersionPlugin());
5158
5524
  const discoveryEntryPath = preset !== "cloudflare" ? routerRef.path : void 0;
5159
5525
  const discoveryRouterRef = preset !== "cloudflare" ? routerRef : void 0;
5160
- const injectorEntryPath = rscEntryPath ?? (preset === "cloudflare" ? void 0 : null);
5161
- if (injectorEntryPath !== null) {
5162
- plugins.push(createVersionInjectorPlugin(injectorEntryPath));
5526
+ if (preset === "cloudflare") {
5527
+ plugins.push(createVersionInjectorPlugin(void 0));
5163
5528
  }
5164
5529
  plugins.push(createCjsToEsmPlugin());
5165
5530
  plugins.push(
5166
5531
  createRouterDiscoveryPlugin(discoveryEntryPath, {
5167
5532
  routerPathRef: discoveryRouterRef,
5168
5533
  enableBuildPrerender: prerenderEnabled,
5169
- staticRouteTypesGeneration: resolvedOptions.staticRouteTypesGeneration,
5170
- include: resolvedOptions.include,
5171
- exclude: resolvedOptions.exclude
5534
+ buildEnv: options?.buildEnv,
5535
+ preset
5172
5536
  })
5173
5537
  );
5174
5538
  return plugins;
@@ -5181,29 +5545,75 @@ function poke() {
5181
5545
  apply: "serve",
5182
5546
  configureServer(server) {
5183
5547
  const stdin = process.stdin;
5184
- const previousRawMode = stdin.isTTY ? stdin.isRaw : null;
5548
+ const debug = process.env.RANGO_POKE_DEBUG === "1";
5549
+ const triggerReload = (source) => {
5550
+ server.hot.send({ type: "full-reload", path: "*" });
5551
+ server.config.logger.info(` browser reload (${source})`, {
5552
+ timestamp: true
5553
+ });
5554
+ };
5555
+ const toBuffer = (chunk) => {
5556
+ return typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
5557
+ };
5558
+ const formatChunk = (chunk) => {
5559
+ const data = toBuffer(chunk);
5560
+ const hex = Array.from(data).map((byte) => `0x${byte.toString(16).padStart(2, "0")}`).join(" ");
5561
+ const ascii = Array.from(data).map((byte) => {
5562
+ if (byte >= 32 && byte <= 126) return String.fromCharCode(byte);
5563
+ if (byte === 10) return "\\n";
5564
+ if (byte === 13) return "\\r";
5565
+ if (byte === 9) return "\\t";
5566
+ return ".";
5567
+ }).join("");
5568
+ return `len=${data.length} hex=[${hex}] ascii="${ascii}"`;
5569
+ };
5570
+ const readCtrlR = (chunk) => {
5571
+ const data = typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
5572
+ return data.length === 1 && data[0] === 18;
5573
+ };
5574
+ const readSubmittedCommands = (chunk) => {
5575
+ const text = toBuffer(chunk).toString("utf8").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
5576
+ if (!text.includes("\n")) return [];
5577
+ const lines = text.split("\n");
5578
+ lines.pop();
5579
+ return lines;
5580
+ };
5581
+ if (debug) {
5582
+ server.config.logger.info(
5583
+ ` poke debug enabled (isTTY=${stdin.isTTY ? "yes" : "no"}, isRaw=${stdin.isTTY ? stdin.isRaw ? "yes" : "no" : "n/a"})`,
5584
+ { timestamp: true }
5585
+ );
5586
+ }
5185
5587
  if (stdin.isTTY) {
5186
- stdin.setRawMode(true);
5588
+ server.config.logger.info(
5589
+ " poke ready: press e + enter to reload browser (ctrl+r also works when available)",
5590
+ { timestamp: true }
5591
+ );
5187
5592
  }
5188
5593
  const onData = (data) => {
5189
- if (data.length !== 1) return;
5190
- if (data[0] === 3) {
5191
- process.emit("SIGINT", "SIGINT");
5192
- return;
5193
- }
5194
- if (data[0] === 18) {
5195
- server.hot.send({ type: "full-reload", path: "*" });
5196
- server.config.logger.info(" browser reload (ctrl+r)", {
5594
+ if (debug) {
5595
+ server.config.logger.info(` poke stdin ${formatChunk(data)}`, {
5197
5596
  timestamp: true
5198
5597
  });
5199
5598
  }
5599
+ if (readCtrlR(data)) {
5600
+ triggerReload("ctrl+r");
5601
+ return;
5602
+ }
5603
+ for (const command of readSubmittedCommands(data)) {
5604
+ if (command === "e") {
5605
+ triggerReload("e+enter");
5606
+ return;
5607
+ }
5608
+ if (command === "\x1Br") {
5609
+ triggerReload("option+r+enter");
5610
+ return;
5611
+ }
5612
+ }
5200
5613
  };
5201
5614
  stdin.on("data", onData);
5202
5615
  server.httpServer?.on("close", () => {
5203
5616
  stdin.off("data", onData);
5204
- if (stdin.isTTY && previousRawMode !== null) {
5205
- stdin.setRawMode(previousRawMode);
5206
- }
5207
5617
  });
5208
5618
  }
5209
5619
  };