@rangojs/router 0.0.0-experimental.f2d1a2f1 → 0.0.0-experimental.f4a8e8de

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 (1301) hide show
  1. package/AGENTS.md +8 -4
  2. package/README.md +318 -821
  3. package/dist/bin/rango.js +925 -271
  4. package/dist/testing/vitest.js +82 -0
  5. package/dist/types/__internal.d.ts +127 -0
  6. package/dist/types/bin/rango.d.ts +1 -0
  7. package/dist/types/browser/action-coordinator.d.ts +57 -0
  8. package/dist/types/browser/action-fence.d.ts +33 -0
  9. package/dist/types/browser/app-shell.d.ts +34 -0
  10. package/dist/types/browser/app-version.d.ts +6 -0
  11. package/dist/types/browser/connection-warmup.d.ts +31 -0
  12. package/dist/types/browser/cookie-name.d.ts +66 -0
  13. package/dist/types/browser/dev-discovery.d.ts +11 -0
  14. package/dist/types/browser/event-controller.d.ts +231 -0
  15. package/dist/types/browser/history-state.d.ts +26 -0
  16. package/dist/types/browser/index.d.ts +1 -0
  17. package/dist/types/browser/intercept-utils.d.ts +30 -0
  18. package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
  19. package/dist/types/browser/link-interceptor.d.ts +53 -0
  20. package/dist/types/browser/logging.d.ts +33 -0
  21. package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
  22. package/dist/types/browser/navigation-bridge.d.ts +39 -0
  23. package/dist/types/browser/navigation-client.d.ts +17 -0
  24. package/dist/types/browser/navigation-store-handle.d.ts +25 -0
  25. package/dist/types/browser/navigation-store.d.ts +85 -0
  26. package/dist/types/browser/navigation-transaction.d.ts +75 -0
  27. package/dist/types/browser/network-error-handler.d.ts +35 -0
  28. package/dist/types/browser/notify-listeners.d.ts +2 -0
  29. package/dist/types/browser/partial-update.d.ts +61 -0
  30. package/dist/types/browser/prefetch/cache.d.ts +224 -0
  31. package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
  32. package/dist/types/browser/prefetch/fetch.d.ts +52 -0
  33. package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
  34. package/dist/types/browser/prefetch/loader.d.ts +12 -0
  35. package/dist/types/browser/prefetch/observer.d.ts +24 -0
  36. package/dist/types/browser/prefetch/policy.d.ts +13 -0
  37. package/dist/types/browser/prefetch/queue.d.ts +48 -0
  38. package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
  39. package/dist/types/browser/prefetch/runtime.d.ts +2 -0
  40. package/dist/types/browser/rango-state.d.ts +56 -0
  41. package/dist/types/browser/react/Link.d.ts +132 -0
  42. package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
  43. package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
  44. package/dist/types/browser/react/context.d.ts +57 -0
  45. package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
  46. package/dist/types/browser/react/index.d.ts +1 -0
  47. package/dist/types/browser/react/location-state-shared.d.ts +162 -0
  48. package/dist/types/browser/react/location-state.d.ts +29 -0
  49. package/dist/types/browser/react/mount-context.d.ts +23 -0
  50. package/dist/types/browser/react/nonce-context.d.ts +14 -0
  51. package/dist/types/browser/react/shallow-equal.d.ts +5 -0
  52. package/dist/types/browser/react/use-action.d.ts +61 -0
  53. package/dist/types/browser/react/use-handle.d.ts +21 -0
  54. package/dist/types/browser/react/use-href.d.ts +32 -0
  55. package/dist/types/browser/react/use-link-status.d.ts +36 -0
  56. package/dist/types/browser/react/use-mount.d.ts +24 -0
  57. package/dist/types/browser/react/use-navigation.d.ts +15 -0
  58. package/dist/types/browser/react/use-params.d.ts +21 -0
  59. package/dist/types/browser/react/use-pathname.d.ts +13 -0
  60. package/dist/types/browser/react/use-reverse.d.ts +40 -0
  61. package/dist/types/browser/react/use-router.d.ts +23 -0
  62. package/dist/types/browser/react/use-search-params.d.ts +19 -0
  63. package/dist/types/browser/react/use-segments.d.ts +29 -0
  64. package/dist/types/browser/response-adapter.d.ts +58 -0
  65. package/dist/types/browser/rsc-router.d.ts +146 -0
  66. package/dist/types/browser/scroll-restoration.d.ts +103 -0
  67. package/dist/types/browser/segment-reconciler.d.ts +74 -0
  68. package/dist/types/browser/segment-structure-assert.d.ts +16 -0
  69. package/dist/types/browser/server-action-bridge.d.ts +29 -0
  70. package/dist/types/browser/types.d.ts +546 -0
  71. package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
  72. package/dist/types/build/collect-fallback-refs.d.ts +5 -0
  73. package/dist/types/build/generate-manifest.d.ts +106 -0
  74. package/dist/types/build/generate-route-types.d.ts +8 -0
  75. package/dist/types/build/index.d.ts +21 -0
  76. package/dist/types/build/merge-full-manifests.d.ts +3 -0
  77. package/dist/types/build/prefix-tree-utils.d.ts +56 -0
  78. package/dist/types/build/route-trie.d.ts +20 -0
  79. package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
  80. package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
  81. package/dist/types/build/route-types/codegen.d.ts +16 -0
  82. package/dist/types/build/route-types/include-resolution.d.ts +74 -0
  83. package/dist/types/build/route-types/param-extraction.d.ts +13 -0
  84. package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
  85. package/dist/types/build/route-types/router-processing.d.ts +81 -0
  86. package/dist/types/build/route-types/scan-filter.d.ts +17 -0
  87. package/dist/types/build/route-types/source-scan.d.ts +13 -0
  88. package/dist/types/build/runtime-discovery.d.ts +24 -0
  89. package/dist/types/cache/background-task.d.ts +21 -0
  90. package/dist/types/cache/cache-error.d.ts +71 -0
  91. package/dist/types/cache/cache-exec-scope.d.ts +31 -0
  92. package/dist/types/cache/cache-key-utils.d.ts +43 -0
  93. package/dist/types/cache/cache-policy.d.ts +59 -0
  94. package/dist/types/cache/cache-runtime.d.ts +51 -0
  95. package/dist/types/cache/cache-scope.d.ts +215 -0
  96. package/dist/types/cache/cache-tag.d.ts +79 -0
  97. package/dist/types/cache/cf/cf-base64.d.ts +4 -0
  98. package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
  99. package/dist/types/cache/cf/cf-cache-store.d.ts +616 -0
  100. package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
  101. package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
  102. package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
  103. package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
  104. package/dist/types/cache/cf/index.d.ts +4 -0
  105. package/dist/types/cache/document-cache.d.ts +71 -0
  106. package/dist/types/cache/handle-capture.d.ts +23 -0
  107. package/dist/types/cache/handle-snapshot.d.ts +39 -0
  108. package/dist/types/cache/index.d.ts +9 -0
  109. package/dist/types/cache/memory-segment-store.d.ts +163 -0
  110. package/dist/types/cache/profile-registry.d.ts +40 -0
  111. package/dist/types/cache/read-through-swr.d.ts +61 -0
  112. package/dist/types/cache/search-params-filter.d.ts +64 -0
  113. package/dist/types/cache/segment-codec.d.ts +78 -0
  114. package/dist/types/cache/shell-snapshot.d.ts +186 -0
  115. package/dist/types/cache/tag-invalidation.d.ts +74 -0
  116. package/dist/types/cache/taint.d.ts +77 -0
  117. package/dist/types/cache/types.d.ts +503 -0
  118. package/dist/types/cache/vercel/index.d.ts +1 -0
  119. package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
  120. package/dist/types/client-urls/client-root.d.ts +38 -0
  121. package/dist/types/client-urls/client-urls.d.ts +5 -0
  122. package/dist/types/client-urls/navigation.d.ts +38 -0
  123. package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
  124. package/dist/types/client-urls/server-projection.d.ts +57 -0
  125. package/dist/types/client-urls/types.d.ts +132 -0
  126. package/dist/types/client.d.ts +191 -0
  127. package/dist/types/client.rsc.d.ts +41 -0
  128. package/dist/types/cloudflare/index.d.ts +7 -0
  129. package/dist/types/cloudflare/tracing.d.ts +57 -0
  130. package/dist/types/component-utils.d.ts +46 -0
  131. package/dist/types/components/DefaultDocument.d.ts +13 -0
  132. package/dist/types/context-var.d.ts +84 -0
  133. package/dist/types/debug.d.ts +57 -0
  134. package/dist/types/decode-loader-results.d.ts +42 -0
  135. package/dist/types/default-error-boundary.d.ts +10 -0
  136. package/dist/types/defer.d.ts +89 -0
  137. package/dist/types/deps/browser.d.ts +1 -0
  138. package/dist/types/deps/html-stream-client.d.ts +1 -0
  139. package/dist/types/deps/html-stream-server.d.ts +1 -0
  140. package/dist/types/deps/rsc.d.ts +1 -0
  141. package/dist/types/deps/ssr.d.ts +1 -0
  142. package/dist/types/dev-discovery-protocol.d.ts +5 -0
  143. package/dist/types/encode-kv.d.ts +35 -0
  144. package/dist/types/errors.d.ts +227 -0
  145. package/dist/types/escape-script.d.ts +44 -0
  146. package/dist/types/handle.d.ts +93 -0
  147. package/dist/types/handles/MetaTags.d.ts +17 -0
  148. package/dist/types/handles/Scripts.d.ts +38 -0
  149. package/dist/types/handles/breadcrumbs.d.ts +43 -0
  150. package/dist/types/handles/deferred-resolution.d.ts +53 -0
  151. package/dist/types/handles/is-thenable.d.ts +10 -0
  152. package/dist/types/handles/meta.d.ts +43 -0
  153. package/dist/types/handles/script.d.ts +139 -0
  154. package/dist/types/host/cookie-handler.d.ts +8 -0
  155. package/dist/types/host/errors.d.ts +40 -0
  156. package/dist/types/host/index.d.ts +33 -0
  157. package/dist/types/host/pattern-matcher.d.ts +30 -0
  158. package/dist/types/host/router.d.ts +12 -0
  159. package/dist/types/host/testing.d.ts +41 -0
  160. package/dist/types/host/types.d.ts +148 -0
  161. package/dist/types/host/utils.d.ts +20 -0
  162. package/dist/types/href-client.d.ts +214 -0
  163. package/dist/types/index.d.ts +113 -0
  164. package/dist/types/index.rsc.d.ts +52 -0
  165. package/dist/types/internal-debug.d.ts +1 -0
  166. package/dist/types/loader-redirect.d.ts +18 -0
  167. package/dist/types/loader-store.d.ts +193 -0
  168. package/dist/types/loader.d.ts +18 -0
  169. package/dist/types/loader.rsc.d.ts +18 -0
  170. package/dist/types/missing-id-error.d.ts +1 -0
  171. package/dist/types/outlet-context.d.ts +24 -0
  172. package/dist/types/outlet-provider.d.ts +14 -0
  173. package/dist/types/prerender/build-shell-capture.d.ts +104 -0
  174. package/dist/types/prerender/param-hash.d.ts +6 -0
  175. package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
  176. package/dist/types/prerender/store.d.ts +63 -0
  177. package/dist/types/prerender.d.ts +292 -0
  178. package/dist/types/redirect-origin.d.ts +67 -0
  179. package/dist/types/regex-escape.d.ts +6 -0
  180. package/dist/types/render-error-thrower.d.ts +13 -0
  181. package/dist/types/response-utils.d.ts +35 -0
  182. package/dist/types/reverse.d.ts +206 -0
  183. package/dist/types/root-error-boundary.d.ts +32 -0
  184. package/dist/types/route-content-wrapper.d.ts +81 -0
  185. package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
  186. package/dist/types/route-definition/helper-factories.d.ts +22 -0
  187. package/dist/types/route-definition/helpers-types.d.ts +393 -0
  188. package/dist/types/route-definition/index.d.ts +7 -0
  189. package/dist/types/route-definition/redirect.d.ts +48 -0
  190. package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
  191. package/dist/types/route-definition/use-item-types.d.ts +1 -0
  192. package/dist/types/route-definition.d.ts +1 -0
  193. package/dist/types/route-map-builder.d.ts +102 -0
  194. package/dist/types/route-name.d.ts +27 -0
  195. package/dist/types/route-types.d.ts +172 -0
  196. package/dist/types/router/basename.d.ts +10 -0
  197. package/dist/types/router/content-negotiation.d.ts +91 -0
  198. package/dist/types/router/debug-manifest.d.ts +7 -0
  199. package/dist/types/router/error-handling.d.ts +110 -0
  200. package/dist/types/router/find-match.d.ts +19 -0
  201. package/dist/types/router/handler-context.d.ts +41 -0
  202. package/dist/types/router/instrument.d.ts +191 -0
  203. package/dist/types/router/intercept-resolution.d.ts +91 -0
  204. package/dist/types/router/lazy-includes.d.ts +26 -0
  205. package/dist/types/router/loader-resolution.d.ts +85 -0
  206. package/dist/types/router/logging.d.ts +41 -0
  207. package/dist/types/router/manifest.d.ts +8 -0
  208. package/dist/types/router/match-api.d.ts +19 -0
  209. package/dist/types/router/match-context.d.ts +184 -0
  210. package/dist/types/router/match-handlers.d.ts +48 -0
  211. package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
  212. package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
  213. package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
  214. package/dist/types/router/match-middleware/index.d.ts +80 -0
  215. package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
  216. package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
  217. package/dist/types/router/match-pipelines.d.ts +103 -0
  218. package/dist/types/router/match-result.d.ts +114 -0
  219. package/dist/types/router/metrics.d.ts +6 -0
  220. package/dist/types/router/middleware-types.d.ts +74 -0
  221. package/dist/types/router/middleware.d.ts +116 -0
  222. package/dist/types/router/navigation-snapshot.d.ts +51 -0
  223. package/dist/types/router/params-util.d.ts +8 -0
  224. package/dist/types/router/parse-pattern.d.ts +38 -0
  225. package/dist/types/router/pattern-matching.d.ts +169 -0
  226. package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
  227. package/dist/types/router/prefetch-default.d.ts +28 -0
  228. package/dist/types/router/prefetch-limits.d.ts +20 -0
  229. package/dist/types/router/prerender-match.d.ts +53 -0
  230. package/dist/types/router/preview-match.d.ts +22 -0
  231. package/dist/types/router/request-classification.d.ts +104 -0
  232. package/dist/types/router/revalidation.d.ts +64 -0
  233. package/dist/types/router/route-snapshot.d.ts +112 -0
  234. package/dist/types/router/route-trie-builder.d.ts +77 -0
  235. package/dist/types/router/router-context.d.ts +137 -0
  236. package/dist/types/router/router-interfaces.d.ts +461 -0
  237. package/dist/types/router/router-options.d.ts +792 -0
  238. package/dist/types/router/router-registry.d.ts +15 -0
  239. package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
  240. package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
  241. package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
  242. package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
  243. package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
  244. package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
  245. package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
  246. package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
  247. package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
  248. package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
  249. package/dist/types/router/segment-resolution.d.ts +3 -0
  250. package/dist/types/router/segment-wrappers.d.ts +53 -0
  251. package/dist/types/router/state-cookie-name.d.ts +1 -0
  252. package/dist/types/router/substitute-pattern-params.d.ts +23 -0
  253. package/dist/types/router/telemetry-otel.d.ts +113 -0
  254. package/dist/types/router/telemetry.d.ts +216 -0
  255. package/dist/types/router/timeout.d.ts +107 -0
  256. package/dist/types/router/tracing.d.ts +139 -0
  257. package/dist/types/router/transition-when.d.ts +13 -0
  258. package/dist/types/router/trie-matching.d.ts +32 -0
  259. package/dist/types/router/types.d.ts +98 -0
  260. package/dist/types/router/url-params.d.ts +26 -0
  261. package/dist/types/router.d.ts +7 -0
  262. package/dist/types/rsc/capture-queue.d.ts +49 -0
  263. package/dist/types/rsc/full-payload.d.ts +22 -0
  264. package/dist/types/rsc/handler-context.d.ts +32 -0
  265. package/dist/types/rsc/handler.d.ts +9 -0
  266. package/dist/types/rsc/helpers.d.ts +127 -0
  267. package/dist/types/rsc/index.d.ts +17 -0
  268. package/dist/types/rsc/json-route-result.d.ts +20 -0
  269. package/dist/types/rsc/loader-fetch.d.ts +14 -0
  270. package/dist/types/rsc/manifest-init.d.ts +18 -0
  271. package/dist/types/rsc/nonce.d.ts +28 -0
  272. package/dist/types/rsc/origin-guard.d.ts +50 -0
  273. package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
  274. package/dist/types/rsc/redirect-guard.d.ts +37 -0
  275. package/dist/types/rsc/render-pipeline.d.ts +148 -0
  276. package/dist/types/rsc/response-cache-serve.d.ts +46 -0
  277. package/dist/types/rsc/response-error.d.ts +19 -0
  278. package/dist/types/rsc/response-route-handler.d.ts +29 -0
  279. package/dist/types/rsc/routine-plan.d.ts +124 -0
  280. package/dist/types/rsc/rsc-rendering.d.ts +18 -0
  281. package/dist/types/rsc/runtime-warnings.d.ts +22 -0
  282. package/dist/types/rsc/server-action.d.ts +68 -0
  283. package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
  284. package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
  285. package/dist/types/rsc/shell-capture.d.ts +406 -0
  286. package/dist/types/rsc/shell-serve.d.ts +189 -0
  287. package/dist/types/rsc/ssr-setup.d.ts +73 -0
  288. package/dist/types/rsc/stream-idle.d.ts +60 -0
  289. package/dist/types/rsc/transition-gate.d.ts +23 -0
  290. package/dist/types/rsc/types.d.ts +328 -0
  291. package/dist/types/runtime-env.d.ts +1 -0
  292. package/dist/types/search-params.d.ts +125 -0
  293. package/dist/types/segment-content-promise.d.ts +13 -0
  294. package/dist/types/segment-fragments.d.ts +79 -0
  295. package/dist/types/segment-loader-promise.d.ts +22 -0
  296. package/dist/types/segment-system.d.ts +86 -0
  297. package/dist/types/serialize.d.ts +164 -0
  298. package/dist/types/server/context.d.ts +510 -0
  299. package/dist/types/server/cookie-parse.d.ts +10 -0
  300. package/dist/types/server/cookie-store.d.ts +107 -0
  301. package/dist/types/server/fetchable-loader-store.d.ts +20 -0
  302. package/dist/types/server/handle-store.d.ts +131 -0
  303. package/dist/types/server/loader-registry.d.ts +32 -0
  304. package/dist/types/server/request-context.d.ts +707 -0
  305. package/dist/types/server/root-layout.d.ts +3 -0
  306. package/dist/types/server.d.ts +16 -0
  307. package/dist/types/ssr/index.d.ts +233 -0
  308. package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
  309. package/dist/types/ssr/preinit-client-references.d.ts +71 -0
  310. package/dist/types/ssr/ssr-root.d.ts +69 -0
  311. package/dist/types/static-handler.d.ts +71 -0
  312. package/dist/types/testing/cache-status.d.ts +63 -0
  313. package/dist/types/testing/collect-handle.d.ts +20 -0
  314. package/dist/types/testing/dispatch.d.ts +127 -0
  315. package/dist/types/testing/dom.entry.d.ts +15 -0
  316. package/dist/types/testing/e2e/fixture.d.ts +37 -0
  317. package/dist/types/testing/e2e/index.d.ts +31 -0
  318. package/dist/types/testing/e2e/matchers.d.ts +17 -0
  319. package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
  320. package/dist/types/testing/e2e/parity.d.ts +111 -0
  321. package/dist/types/testing/e2e/server.d.ts +35 -0
  322. package/dist/types/testing/flight-matchers.d.ts +55 -0
  323. package/dist/types/testing/flight-normalize.d.ts +1 -0
  324. package/dist/types/testing/flight-tree.d.ts +192 -0
  325. package/dist/types/testing/flight.d.ts +115 -0
  326. package/dist/types/testing/flight.entry.d.ts +27 -0
  327. package/dist/types/testing/generated-routes.d.ts +66 -0
  328. package/dist/types/testing/index.d.ts +54 -0
  329. package/dist/types/testing/internal/context.d.ts +225 -0
  330. package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
  331. package/dist/types/testing/internal/seed-vars.d.ts +30 -0
  332. package/dist/types/testing/render-handler.d.ts +160 -0
  333. package/dist/types/testing/render-route.d.ts +265 -0
  334. package/dist/types/testing/run-loader.d.ts +195 -0
  335. package/dist/types/testing/run-middleware.d.ts +132 -0
  336. package/dist/types/testing/run-transition-when.d.ts +78 -0
  337. package/dist/types/testing/shell-status.d.ts +81 -0
  338. package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
  339. package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
  340. package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
  341. package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
  342. package/dist/types/testing/vitest.d.ts +205 -0
  343. package/dist/types/theme/ThemeProvider.d.ts +13 -0
  344. package/dist/types/theme/ThemeScript.d.ts +45 -0
  345. package/dist/types/theme/constants.d.ts +39 -0
  346. package/dist/types/theme/index.d.ts +29 -0
  347. package/dist/types/theme/theme-context.d.ts +21 -0
  348. package/dist/types/theme/theme-script.d.ts +26 -0
  349. package/dist/types/theme/types.d.ts +162 -0
  350. package/dist/types/theme/use-theme.d.ts +8 -0
  351. package/dist/types/types/boundaries.d.ts +110 -0
  352. package/dist/types/types/cache-types.d.ts +191 -0
  353. package/dist/types/types/error-types.d.ts +114 -0
  354. package/dist/types/types/global-namespace.d.ts +90 -0
  355. package/dist/types/types/handler-context.d.ts +658 -0
  356. package/dist/types/types/index.d.ts +11 -0
  357. package/dist/types/types/loader-types.d.ts +208 -0
  358. package/dist/types/types/request-scope.d.ts +93 -0
  359. package/dist/types/types/route-config.d.ts +105 -0
  360. package/dist/types/types/route-entry.d.ts +98 -0
  361. package/dist/types/types/segments.d.ts +246 -0
  362. package/dist/types/types.d.ts +1 -0
  363. package/dist/types/urls/include-helper.d.ts +17 -0
  364. package/dist/types/urls/include-provider.d.ts +27 -0
  365. package/dist/types/urls/index.d.ts +6 -0
  366. package/dist/types/urls/path-helper-types.d.ts +198 -0
  367. package/dist/types/urls/path-helper.d.ts +12 -0
  368. package/dist/types/urls/pattern-types.d.ts +166 -0
  369. package/dist/types/urls/response-types.d.ts +67 -0
  370. package/dist/types/urls/type-extraction.d.ts +157 -0
  371. package/dist/types/urls/urls-function.d.ts +24 -0
  372. package/dist/types/urls.d.ts +1 -0
  373. package/dist/types/use-loader.d.ts +150 -0
  374. package/dist/types/vercel/index.d.ts +10 -0
  375. package/dist/types/vercel/tracing.d.ts +71 -0
  376. package/dist/types/vite/debug.d.ts +80 -0
  377. package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
  378. package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
  379. package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
  380. package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
  381. package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
  382. package/dist/types/vite/discovery/gate-state.d.ts +79 -0
  383. package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
  384. package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
  385. package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
  386. package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
  387. package/dist/types/vite/discovery/state.d.ts +170 -0
  388. package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
  389. package/dist/types/vite/encryption-key.d.ts +2 -0
  390. package/dist/types/vite/index.d.ts +11 -0
  391. package/dist/types/vite/inject-client-debug.d.ts +56 -0
  392. package/dist/types/vite/plugin-types.d.ts +298 -0
  393. package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
  394. package/dist/types/vite/plugins/client-ref-dedup.d.ts +40 -0
  395. package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
  396. package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
  397. package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
  398. package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
  399. package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
  400. package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
  401. package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
  402. package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
  403. package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
  404. package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
  405. package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
  406. package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
  407. package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
  408. package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
  409. package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
  410. package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
  411. package/dist/types/vite/plugins/version-injector.d.ts +21 -0
  412. package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
  413. package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
  414. package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
  415. package/dist/types/vite/rango.d.ts +29 -0
  416. package/dist/types/vite/router-discovery.d.ts +23 -0
  417. package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
  418. package/dist/types/vite/utils/banner.d.ts +2 -0
  419. package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
  420. package/dist/types/vite/utils/client-chunks.d.ts +55 -0
  421. package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
  422. package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
  423. package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
  424. package/dist/types/vite/utils/package-resolution.d.ts +6 -0
  425. package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
  426. package/dist/types/vite/utils/shared-utils.d.ts +67 -0
  427. package/dist/types.backup/__internal.d.ts +127 -0
  428. package/dist/types.backup/bin/rango.d.ts +1 -0
  429. package/dist/types.backup/browser/action-coordinator.d.ts +57 -0
  430. package/dist/types.backup/browser/action-fence.d.ts +33 -0
  431. package/dist/types.backup/browser/app-shell.d.ts +34 -0
  432. package/dist/types.backup/browser/app-version.d.ts +6 -0
  433. package/dist/types.backup/browser/connection-warmup.d.ts +31 -0
  434. package/dist/types.backup/browser/cookie-name.d.ts +66 -0
  435. package/dist/types.backup/browser/event-controller.d.ts +221 -0
  436. package/dist/types.backup/browser/history-state.d.ts +26 -0
  437. package/dist/types.backup/browser/index.d.ts +1 -0
  438. package/dist/types.backup/browser/intercept-utils.d.ts +30 -0
  439. package/dist/types.backup/browser/invalidate-client-cache.d.ts +17 -0
  440. package/dist/types.backup/browser/link-interceptor.d.ts +43 -0
  441. package/dist/types.backup/browser/logging.d.ts +33 -0
  442. package/dist/types.backup/browser/merge-segment-loaders.d.ts +38 -0
  443. package/dist/types.backup/browser/navigation-bridge.d.ts +27 -0
  444. package/dist/types.backup/browser/navigation-client.d.ts +17 -0
  445. package/dist/types.backup/browser/navigation-store-handle.d.ts +25 -0
  446. package/dist/types.backup/browser/navigation-store.d.ts +95 -0
  447. package/dist/types.backup/browser/navigation-transaction.d.ts +75 -0
  448. package/dist/types.backup/browser/network-error-handler.d.ts +35 -0
  449. package/dist/types.backup/browser/partial-update.d.ts +61 -0
  450. package/dist/types.backup/browser/prefetch/cache.d.ts +183 -0
  451. package/dist/types.backup/browser/prefetch/fetch.d.ts +52 -0
  452. package/dist/types.backup/browser/prefetch/observer.d.ts +27 -0
  453. package/dist/types.backup/browser/prefetch/policy.d.ts +13 -0
  454. package/dist/types.backup/browser/prefetch/queue.d.ts +48 -0
  455. package/dist/types.backup/browser/prefetch/resource-ready.d.ts +28 -0
  456. package/dist/types.backup/browser/rango-state.d.ts +52 -0
  457. package/dist/types.backup/browser/react/Link.d.ts +140 -0
  458. package/dist/types.backup/browser/react/NavigationProvider.d.ts +88 -0
  459. package/dist/types.backup/browser/react/ScrollRestoration.d.ts +78 -0
  460. package/dist/types.backup/browser/react/context.d.ts +54 -0
  461. package/dist/types.backup/browser/react/filter-segment-order.d.ts +35 -0
  462. package/dist/types.backup/browser/react/index.d.ts +1 -0
  463. package/dist/types.backup/browser/react/location-state-shared.d.ts +162 -0
  464. package/dist/types.backup/browser/react/location-state.d.ts +29 -0
  465. package/dist/types.backup/browser/react/mount-context.d.ts +23 -0
  466. package/dist/types.backup/browser/react/nonce-context.d.ts +14 -0
  467. package/dist/types.backup/browser/react/shallow-equal.d.ts +5 -0
  468. package/dist/types.backup/browser/react/use-action.d.ts +61 -0
  469. package/dist/types.backup/browser/react/use-handle.d.ts +21 -0
  470. package/dist/types.backup/browser/react/use-href.d.ts +32 -0
  471. package/dist/types.backup/browser/react/use-link-status.d.ts +36 -0
  472. package/dist/types.backup/browser/react/use-mount.d.ts +24 -0
  473. package/dist/types.backup/browser/react/use-navigation.d.ts +15 -0
  474. package/dist/types.backup/browser/react/use-params.d.ts +21 -0
  475. package/dist/types.backup/browser/react/use-pathname.d.ts +13 -0
  476. package/dist/types.backup/browser/react/use-reverse.d.ts +40 -0
  477. package/dist/types.backup/browser/react/use-router.d.ts +23 -0
  478. package/dist/types.backup/browser/react/use-search-params.d.ts +19 -0
  479. package/dist/types.backup/browser/react/use-segments.d.ts +29 -0
  480. package/dist/types.backup/browser/response-adapter.d.ts +58 -0
  481. package/dist/types.backup/browser/rsc-router.d.ts +141 -0
  482. package/dist/types.backup/browser/scroll-restoration.d.ts +103 -0
  483. package/dist/types.backup/browser/segment-reconciler.d.ts +74 -0
  484. package/dist/types.backup/browser/segment-structure-assert.d.ts +16 -0
  485. package/dist/types.backup/browser/server-action-bridge.d.ts +29 -0
  486. package/dist/types.backup/browser/types.d.ts +530 -0
  487. package/dist/types.backup/browser/validate-redirect-origin.d.ts +28 -0
  488. package/dist/types.backup/build/collect-fallback-refs.d.ts +5 -0
  489. package/dist/types.backup/build/generate-manifest.d.ts +100 -0
  490. package/dist/types.backup/build/generate-route-types.d.ts +8 -0
  491. package/dist/types.backup/build/index.d.ts +21 -0
  492. package/dist/types.backup/build/prefix-tree-utils.d.ts +56 -0
  493. package/dist/types.backup/build/route-trie.d.ts +89 -0
  494. package/dist/types.backup/build/route-types/ast-helpers.d.ts +3 -0
  495. package/dist/types.backup/build/route-types/ast-route-extraction.d.ts +13 -0
  496. package/dist/types.backup/build/route-types/codegen.d.ts +16 -0
  497. package/dist/types.backup/build/route-types/include-resolution.d.ts +74 -0
  498. package/dist/types.backup/build/route-types/param-extraction.d.ts +13 -0
  499. package/dist/types.backup/build/route-types/per-module-writer.d.ts +18 -0
  500. package/dist/types.backup/build/route-types/router-processing.d.ts +82 -0
  501. package/dist/types.backup/build/route-types/scan-filter.d.ts +17 -0
  502. package/dist/types.backup/build/route-types/source-scan.d.ts +13 -0
  503. package/dist/types.backup/build/runtime-discovery.d.ts +24 -0
  504. package/dist/types.backup/cache/background-task.d.ts +21 -0
  505. package/dist/types.backup/cache/cache-error.d.ts +71 -0
  506. package/dist/types.backup/cache/cache-key-utils.d.ts +35 -0
  507. package/dist/types.backup/cache/cache-policy.d.ts +59 -0
  508. package/dist/types.backup/cache/cache-runtime.d.ts +51 -0
  509. package/dist/types.backup/cache/cache-scope.d.ts +134 -0
  510. package/dist/types.backup/cache/cache-tag.d.ts +79 -0
  511. package/dist/types.backup/cache/cf/cf-base64.d.ts +4 -0
  512. package/dist/types.backup/cache/cf/cf-cache-constants.d.ts +105 -0
  513. package/dist/types.backup/cache/cf/cf-cache-store.d.ts +481 -0
  514. package/dist/types.backup/cache/cf/cf-cache-types.d.ts +300 -0
  515. package/dist/types.backup/cache/cf/cf-kv-utils.d.ts +22 -0
  516. package/dist/types.backup/cache/cf/cf-tag-marker-memo.d.ts +15 -0
  517. package/dist/types.backup/cache/cf/index.d.ts +3 -0
  518. package/dist/types.backup/cache/document-cache.d.ts +69 -0
  519. package/dist/types.backup/cache/handle-capture.d.ts +23 -0
  520. package/dist/types.backup/cache/handle-snapshot.d.ts +39 -0
  521. package/dist/types.backup/cache/index.d.ts +7 -0
  522. package/dist/types.backup/cache/memory-segment-store.d.ts +163 -0
  523. package/dist/types.backup/cache/profile-registry.d.ts +40 -0
  524. package/dist/types.backup/cache/read-through-swr.d.ts +60 -0
  525. package/dist/types.backup/cache/segment-codec.d.ts +78 -0
  526. package/dist/types.backup/cache/shell-snapshot.d.ts +162 -0
  527. package/dist/types.backup/cache/tag-invalidation.d.ts +74 -0
  528. package/dist/types.backup/cache/taint.d.ts +71 -0
  529. package/dist/types.backup/cache/types.d.ts +407 -0
  530. package/dist/types.backup/cache/vercel/index.d.ts +1 -0
  531. package/dist/types.backup/cache/vercel/vercel-cache-store.d.ts +267 -0
  532. package/dist/types.backup/client.d.ts +184 -0
  533. package/dist/types.backup/client.rsc.d.ts +39 -0
  534. package/dist/types.backup/cloudflare/index.d.ts +7 -0
  535. package/dist/types.backup/cloudflare/tracing.d.ts +53 -0
  536. package/dist/types.backup/component-utils.d.ts +46 -0
  537. package/dist/types.backup/components/DefaultDocument.d.ts +13 -0
  538. package/dist/types.backup/context-var.d.ts +84 -0
  539. package/dist/types.backup/debug.d.ts +57 -0
  540. package/dist/types.backup/decode-loader-results.d.ts +5 -0
  541. package/dist/types.backup/default-error-boundary.d.ts +10 -0
  542. package/dist/types.backup/defer.d.ts +89 -0
  543. package/dist/types.backup/deps/browser.d.ts +1 -0
  544. package/dist/types.backup/deps/html-stream-client.d.ts +1 -0
  545. package/dist/types.backup/deps/html-stream-server.d.ts +1 -0
  546. package/dist/types.backup/deps/rsc.d.ts +1 -0
  547. package/dist/types.backup/deps/ssr.d.ts +1 -0
  548. package/dist/types.backup/encode-kv.d.ts +35 -0
  549. package/dist/types.backup/errors.d.ts +226 -0
  550. package/dist/types.backup/escape-script.d.ts +44 -0
  551. package/dist/types.backup/handle.d.ts +93 -0
  552. package/dist/types.backup/handles/MetaTags.d.ts +17 -0
  553. package/dist/types.backup/handles/Scripts.d.ts +38 -0
  554. package/dist/types.backup/handles/breadcrumbs.d.ts +43 -0
  555. package/dist/types.backup/handles/deferred-resolution.d.ts +53 -0
  556. package/dist/types.backup/handles/is-thenable.d.ts +12 -0
  557. package/dist/types.backup/handles/meta.d.ts +43 -0
  558. package/dist/types.backup/handles/script.d.ts +139 -0
  559. package/dist/types.backup/host/cookie-handler.d.ts +8 -0
  560. package/dist/types.backup/host/errors.d.ts +40 -0
  561. package/dist/types.backup/host/index.d.ts +33 -0
  562. package/dist/types.backup/host/pattern-matcher.d.ts +30 -0
  563. package/dist/types.backup/host/router.d.ts +12 -0
  564. package/dist/types.backup/host/testing.d.ts +41 -0
  565. package/dist/types.backup/host/types.d.ts +148 -0
  566. package/dist/types.backup/host/utils.d.ts +20 -0
  567. package/dist/types.backup/href-client.d.ts +214 -0
  568. package/dist/types.backup/index.d.ts +112 -0
  569. package/dist/types.backup/index.rsc.d.ts +51 -0
  570. package/dist/types.backup/internal-debug.d.ts +1 -0
  571. package/dist/types.backup/loader-store.d.ts +193 -0
  572. package/dist/types.backup/loader.d.ts +18 -0
  573. package/dist/types.backup/loader.rsc.d.ts +18 -0
  574. package/dist/types.backup/missing-id-error.d.ts +1 -0
  575. package/dist/types.backup/outlet-context.d.ts +12 -0
  576. package/dist/types.backup/outlet-provider.d.ts +12 -0
  577. package/dist/types.backup/prerender/build-shell-capture.d.ts +104 -0
  578. package/dist/types.backup/prerender/param-hash.d.ts +6 -0
  579. package/dist/types.backup/prerender/shell-manifest-key.d.ts +18 -0
  580. package/dist/types.backup/prerender/store.d.ts +62 -0
  581. package/dist/types.backup/prerender.d.ts +292 -0
  582. package/dist/types.backup/redirect-origin.d.ts +55 -0
  583. package/dist/types.backup/regex-escape.d.ts +6 -0
  584. package/dist/types.backup/render-error-thrower.d.ts +13 -0
  585. package/dist/types.backup/response-utils.d.ts +35 -0
  586. package/dist/types.backup/reverse.d.ts +206 -0
  587. package/dist/types.backup/root-error-boundary.d.ts +32 -0
  588. package/dist/types.backup/route-content-wrapper.d.ts +40 -0
  589. package/dist/types.backup/route-definition/dsl-helpers.d.ts +130 -0
  590. package/dist/types.backup/route-definition/helper-factories.d.ts +22 -0
  591. package/dist/types.backup/route-definition/helpers-types.d.ts +392 -0
  592. package/dist/types.backup/route-definition/index.d.ts +7 -0
  593. package/dist/types.backup/route-definition/redirect.d.ts +48 -0
  594. package/dist/types.backup/route-definition/resolve-handler-use.d.ts +19 -0
  595. package/dist/types.backup/route-definition/use-item-types.d.ts +1 -0
  596. package/dist/types.backup/route-definition.d.ts +1 -0
  597. package/dist/types.backup/route-map-builder.d.ts +127 -0
  598. package/dist/types.backup/route-name.d.ts +27 -0
  599. package/dist/types.backup/route-types.d.ts +172 -0
  600. package/dist/types.backup/router/basename.d.ts +10 -0
  601. package/dist/types.backup/router/content-negotiation.d.ts +91 -0
  602. package/dist/types.backup/router/debug-manifest.d.ts +7 -0
  603. package/dist/types.backup/router/error-handling.d.ts +76 -0
  604. package/dist/types.backup/router/find-match.d.ts +19 -0
  605. package/dist/types.backup/router/handler-context.d.ts +41 -0
  606. package/dist/types.backup/router/instrument.d.ts +161 -0
  607. package/dist/types.backup/router/intercept-resolution.d.ts +79 -0
  608. package/dist/types.backup/router/lazy-includes.d.ts +26 -0
  609. package/dist/types.backup/router/loader-resolution.d.ts +63 -0
  610. package/dist/types.backup/router/logging.d.ts +41 -0
  611. package/dist/types.backup/router/manifest.d.ts +8 -0
  612. package/dist/types.backup/router/match-api.d.ts +19 -0
  613. package/dist/types.backup/router/match-context.d.ts +184 -0
  614. package/dist/types.backup/router/match-handlers.d.ts +49 -0
  615. package/dist/types.backup/router/match-middleware/background-revalidation.d.ts +113 -0
  616. package/dist/types.backup/router/match-middleware/cache-lookup.d.ts +113 -0
  617. package/dist/types.backup/router/match-middleware/cache-store.d.ts +112 -0
  618. package/dist/types.backup/router/match-middleware/index.d.ts +80 -0
  619. package/dist/types.backup/router/match-middleware/intercept-resolution.d.ts +116 -0
  620. package/dist/types.backup/router/match-middleware/segment-resolution.d.ts +94 -0
  621. package/dist/types.backup/router/match-pipelines.d.ts +103 -0
  622. package/dist/types.backup/router/match-result.d.ts +114 -0
  623. package/dist/types.backup/router/metrics.d.ts +6 -0
  624. package/dist/types.backup/router/middleware-types.d.ts +74 -0
  625. package/dist/types.backup/router/middleware.d.ts +116 -0
  626. package/dist/types.backup/router/navigation-snapshot.d.ts +22 -0
  627. package/dist/types.backup/router/params-util.d.ts +8 -0
  628. package/dist/types.backup/router/parse-pattern.d.ts +38 -0
  629. package/dist/types.backup/router/pattern-matching.d.ts +169 -0
  630. package/dist/types.backup/router/prefetch-cache-ttl.d.ts +27 -0
  631. package/dist/types.backup/router/prefetch-limits.d.ts +20 -0
  632. package/dist/types.backup/router/prerender-match.d.ts +50 -0
  633. package/dist/types.backup/router/preview-match.d.ts +22 -0
  634. package/dist/types.backup/router/request-classification.d.ts +104 -0
  635. package/dist/types.backup/router/revalidation.d.ts +57 -0
  636. package/dist/types.backup/router/route-snapshot.d.ts +112 -0
  637. package/dist/types.backup/router/router-context.d.ts +137 -0
  638. package/dist/types.backup/router/router-interfaces.d.ts +432 -0
  639. package/dist/types.backup/router/router-options.d.ts +738 -0
  640. package/dist/types.backup/router/router-registry.d.ts +15 -0
  641. package/dist/types.backup/router/segment-resolution/fresh.d.ts +55 -0
  642. package/dist/types.backup/router/segment-resolution/helpers.d.ts +93 -0
  643. package/dist/types.backup/router/segment-resolution/loader-cache.d.ts +33 -0
  644. package/dist/types.backup/router/segment-resolution/loader-mask.d.ts +44 -0
  645. package/dist/types.backup/router/segment-resolution/loader-snapshot.d.ts +90 -0
  646. package/dist/types.backup/router/segment-resolution/mask-nested.d.ts +53 -0
  647. package/dist/types.backup/router/segment-resolution/revalidation.d.ts +85 -0
  648. package/dist/types.backup/router/segment-resolution/static-store.d.ts +17 -0
  649. package/dist/types.backup/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
  650. package/dist/types.backup/router/segment-resolution/view-transition-default.d.ts +28 -0
  651. package/dist/types.backup/router/segment-resolution.d.ts +3 -0
  652. package/dist/types.backup/router/segment-wrappers.d.ts +53 -0
  653. package/dist/types.backup/router/state-cookie-name.d.ts +1 -0
  654. package/dist/types.backup/router/substitute-pattern-params.d.ts +23 -0
  655. package/dist/types.backup/router/telemetry-otel.d.ts +113 -0
  656. package/dist/types.backup/router/telemetry.d.ts +215 -0
  657. package/dist/types.backup/router/timeout.d.ts +68 -0
  658. package/dist/types.backup/router/tracing.d.ts +125 -0
  659. package/dist/types.backup/router/trie-matching.d.ts +32 -0
  660. package/dist/types.backup/router/types.d.ts +98 -0
  661. package/dist/types.backup/router/url-params.d.ts +26 -0
  662. package/dist/types.backup/router.d.ts +7 -0
  663. package/dist/types.backup/rsc/capture-queue.d.ts +6 -0
  664. package/dist/types.backup/rsc/full-payload.d.ts +22 -0
  665. package/dist/types.backup/rsc/handler-context.d.ts +31 -0
  666. package/dist/types.backup/rsc/handler.d.ts +9 -0
  667. package/dist/types.backup/rsc/helpers.d.ts +213 -0
  668. package/dist/types.backup/rsc/index.d.ts +17 -0
  669. package/dist/types.backup/rsc/json-route-result.d.ts +20 -0
  670. package/dist/types.backup/rsc/loader-fetch.d.ts +14 -0
  671. package/dist/types.backup/rsc/manifest-init.d.ts +18 -0
  672. package/dist/types.backup/rsc/nonce.d.ts +28 -0
  673. package/dist/types.backup/rsc/origin-guard.d.ts +50 -0
  674. package/dist/types.backup/rsc/progressive-enhancement.d.ts +19 -0
  675. package/dist/types.backup/rsc/redirect-guard.d.ts +35 -0
  676. package/dist/types.backup/rsc/response-cache-serve.d.ts +46 -0
  677. package/dist/types.backup/rsc/response-error.d.ts +19 -0
  678. package/dist/types.backup/rsc/response-route-handler.d.ts +29 -0
  679. package/dist/types.backup/rsc/rsc-rendering.d.ts +23 -0
  680. package/dist/types.backup/rsc/runtime-warnings.d.ts +22 -0
  681. package/dist/types.backup/rsc/server-action.d.ts +68 -0
  682. package/dist/types.backup/rsc/shell-build-manifest.d.ts +84 -0
  683. package/dist/types.backup/rsc/shell-capture-constants.d.ts +27 -0
  684. package/dist/types.backup/rsc/shell-capture.d.ts +374 -0
  685. package/dist/types.backup/rsc/shell-serve.d.ts +136 -0
  686. package/dist/types.backup/rsc/ssr-setup.d.ts +48 -0
  687. package/dist/types.backup/rsc/transition-gate.d.ts +27 -0
  688. package/dist/types.backup/rsc/types.d.ts +290 -0
  689. package/dist/types.backup/runtime-env.d.ts +1 -0
  690. package/dist/types.backup/search-params.d.ts +125 -0
  691. package/dist/types.backup/segment-content-promise.d.ts +13 -0
  692. package/dist/types.backup/segment-fragments.d.ts +56 -0
  693. package/dist/types.backup/segment-loader-promise.d.ts +22 -0
  694. package/dist/types.backup/segment-system.d.ts +84 -0
  695. package/dist/types.backup/serialize.d.ts +164 -0
  696. package/dist/types.backup/server/context.d.ts +494 -0
  697. package/dist/types.backup/server/cookie-parse.d.ts +10 -0
  698. package/dist/types.backup/server/cookie-store.d.ts +107 -0
  699. package/dist/types.backup/server/fetchable-loader-store.d.ts +20 -0
  700. package/dist/types.backup/server/handle-store.d.ts +100 -0
  701. package/dist/types.backup/server/loader-registry.d.ts +32 -0
  702. package/dist/types.backup/server/request-context.d.ts +596 -0
  703. package/dist/types.backup/server/root-layout.d.ts +3 -0
  704. package/dist/types.backup/server.d.ts +15 -0
  705. package/dist/types.backup/ssr/index.d.ts +233 -0
  706. package/dist/types.backup/ssr/inject-rsc-eager.d.ts +3 -0
  707. package/dist/types.backup/ssr/preinit-client-references.d.ts +71 -0
  708. package/dist/types.backup/ssr/ssr-root.d.ts +69 -0
  709. package/dist/types.backup/static-handler.d.ts +57 -0
  710. package/dist/types.backup/testing/cache-status.d.ts +63 -0
  711. package/dist/types.backup/testing/collect-handle.d.ts +20 -0
  712. package/dist/types.backup/testing/dispatch.d.ts +123 -0
  713. package/dist/types.backup/testing/dom.entry.d.ts +15 -0
  714. package/dist/types.backup/testing/e2e/fixture.d.ts +37 -0
  715. package/dist/types.backup/testing/e2e/index.d.ts +30 -0
  716. package/dist/types.backup/testing/e2e/matchers.d.ts +17 -0
  717. package/dist/types.backup/testing/e2e/page-helpers.d.ts +62 -0
  718. package/dist/types.backup/testing/e2e/parity.d.ts +111 -0
  719. package/dist/types.backup/testing/e2e/server.d.ts +35 -0
  720. package/dist/types.backup/testing/flight-matchers.d.ts +55 -0
  721. package/dist/types.backup/testing/flight-normalize.d.ts +1 -0
  722. package/dist/types.backup/testing/flight-tree.d.ts +192 -0
  723. package/dist/types.backup/testing/flight.d.ts +115 -0
  724. package/dist/types.backup/testing/flight.entry.d.ts +27 -0
  725. package/dist/types.backup/testing/generated-routes.d.ts +66 -0
  726. package/dist/types.backup/testing/index.d.ts +52 -0
  727. package/dist/types.backup/testing/internal/context.d.ts +225 -0
  728. package/dist/types.backup/testing/internal/flight-client-globals.d.ts +1 -0
  729. package/dist/types.backup/testing/internal/seed-vars.d.ts +30 -0
  730. package/dist/types.backup/testing/render-handler.d.ts +160 -0
  731. package/dist/types.backup/testing/render-route.d.ts +246 -0
  732. package/dist/types.backup/testing/run-loader.d.ts +186 -0
  733. package/dist/types.backup/testing/run-middleware.d.ts +132 -0
  734. package/dist/types.backup/testing/run-transition-when.d.ts +77 -0
  735. package/dist/types.backup/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
  736. package/dist/types.backup/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
  737. package/dist/types.backup/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
  738. package/dist/types.backup/testing/vitest-stubs/version.d.ts +1 -0
  739. package/dist/types.backup/testing/vitest.d.ts +205 -0
  740. package/dist/types.backup/theme/ThemeProvider.d.ts +13 -0
  741. package/dist/types.backup/theme/ThemeScript.d.ts +45 -0
  742. package/dist/types.backup/theme/constants.d.ts +39 -0
  743. package/dist/types.backup/theme/index.d.ts +29 -0
  744. package/dist/types.backup/theme/theme-context.d.ts +21 -0
  745. package/dist/types.backup/theme/theme-script.d.ts +26 -0
  746. package/dist/types.backup/theme/types.d.ts +162 -0
  747. package/dist/types.backup/theme/use-theme.d.ts +8 -0
  748. package/dist/types.backup/types/boundaries.d.ts +93 -0
  749. package/dist/types.backup/types/cache-types.d.ts +191 -0
  750. package/dist/types.backup/types/error-types.d.ts +114 -0
  751. package/dist/types.backup/types/global-namespace.d.ts +90 -0
  752. package/dist/types.backup/types/handler-context.d.ts +658 -0
  753. package/dist/types.backup/types/index.d.ts +11 -0
  754. package/dist/types.backup/types/loader-types.d.ts +182 -0
  755. package/dist/types.backup/types/request-scope.d.ts +93 -0
  756. package/dist/types.backup/types/route-config.d.ts +105 -0
  757. package/dist/types.backup/types/route-entry.d.ts +95 -0
  758. package/dist/types.backup/types/segments.d.ts +234 -0
  759. package/dist/types.backup/types.d.ts +1 -0
  760. package/dist/types.backup/urls/include-helper.d.ts +17 -0
  761. package/dist/types.backup/urls/include-provider.d.ts +27 -0
  762. package/dist/types.backup/urls/index.d.ts +6 -0
  763. package/dist/types.backup/urls/path-helper-types.d.ts +197 -0
  764. package/dist/types.backup/urls/path-helper.d.ts +12 -0
  765. package/dist/types.backup/urls/pattern-types.d.ts +166 -0
  766. package/dist/types.backup/urls/response-types.d.ts +67 -0
  767. package/dist/types.backup/urls/type-extraction.d.ts +157 -0
  768. package/dist/types.backup/urls/urls-function.d.ts +24 -0
  769. package/dist/types.backup/urls.d.ts +1 -0
  770. package/dist/types.backup/use-loader.d.ts +150 -0
  771. package/dist/types.backup/vercel/index.d.ts +10 -0
  772. package/dist/types.backup/vercel/tracing.d.ts +70 -0
  773. package/dist/types.backup/vite/debug.d.ts +80 -0
  774. package/dist/types.backup/vite/discovery/bundle-postprocess.d.ts +12 -0
  775. package/dist/types.backup/vite/discovery/dev-prerender-cache.d.ts +65 -0
  776. package/dist/types.backup/vite/discovery/discover-routers.d.ts +17 -0
  777. package/dist/types.backup/vite/discovery/discovery-errors.d.ts +113 -0
  778. package/dist/types.backup/vite/discovery/gate-state.d.ts +79 -0
  779. package/dist/types.backup/vite/discovery/prerender-collection.d.ts +24 -0
  780. package/dist/types.backup/vite/discovery/route-types-writer.d.ts +32 -0
  781. package/dist/types.backup/vite/discovery/self-gen-tracking.d.ts +22 -0
  782. package/dist/types.backup/vite/discovery/shell-prerender-phase.d.ts +40 -0
  783. package/dist/types.backup/vite/discovery/state.d.ts +162 -0
  784. package/dist/types.backup/vite/discovery/virtual-module-codegen.d.ts +15 -0
  785. package/dist/types.backup/vite/index.d.ts +11 -0
  786. package/dist/types.backup/vite/inject-client-debug.d.ts +56 -0
  787. package/dist/types.backup/vite/plugin-types.d.ts +298 -0
  788. package/dist/types.backup/vite/plugins/cjs-to-esm.d.ts +6 -0
  789. package/dist/types.backup/vite/plugins/client-ref-dedup.d.ts +40 -0
  790. package/dist/types.backup/vite/plugins/client-ref-hashing.d.ts +35 -0
  791. package/dist/types.backup/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
  792. package/dist/types.backup/vite/plugins/expose-action-id.d.ts +18 -0
  793. package/dist/types.backup/vite/plugins/expose-id-utils.d.ts +37 -0
  794. package/dist/types.backup/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
  795. package/dist/types.backup/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
  796. package/dist/types.backup/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
  797. package/dist/types.backup/vite/plugins/expose-ids/router-transform.d.ts +13 -0
  798. package/dist/types.backup/vite/plugins/expose-ids/types.d.ts +29 -0
  799. package/dist/types.backup/vite/plugins/expose-internal-ids.d.ts +6 -0
  800. package/dist/types.backup/vite/plugins/performance-tracks.d.ts +25 -0
  801. package/dist/types.backup/vite/plugins/refresh-cmd.d.ts +20 -0
  802. package/dist/types.backup/vite/plugins/use-cache-transform.d.ts +20 -0
  803. package/dist/types.backup/vite/plugins/vercel-output.d.ts +85 -0
  804. package/dist/types.backup/vite/plugins/version-injector.d.ts +21 -0
  805. package/dist/types.backup/vite/plugins/version-plugin.d.ts +19 -0
  806. package/dist/types.backup/vite/plugins/virtual-entries.d.ts +36 -0
  807. package/dist/types.backup/vite/plugins/virtual-stub-plugin.d.ts +7 -0
  808. package/dist/types.backup/vite/rango.d.ts +29 -0
  809. package/dist/types.backup/vite/router-discovery.d.ts +23 -0
  810. package/dist/types.backup/vite/utils/ast-handler-extract.d.ts +64 -0
  811. package/dist/types.backup/vite/utils/banner.d.ts +2 -0
  812. package/dist/types.backup/vite/utils/bundle-analysis.d.ts +28 -0
  813. package/dist/types.backup/vite/utils/client-chunks.d.ts +55 -0
  814. package/dist/types.backup/vite/utils/directive-prologue.d.ts +16 -0
  815. package/dist/types.backup/vite/utils/forward-user-plugins.d.ts +37 -0
  816. package/dist/types.backup/vite/utils/manifest-utils.d.ts +7 -0
  817. package/dist/types.backup/vite/utils/package-resolution.d.ts +6 -0
  818. package/dist/types.backup/vite/utils/prerender-utils.d.ts +32 -0
  819. package/dist/types.backup/vite/utils/shared-utils.d.ts +55 -0
  820. package/dist/vite/index.js +9695 -3592
  821. package/package.json +119 -39
  822. package/skills/api-client/SKILL.md +211 -0
  823. package/skills/breadcrumbs/SKILL.md +82 -5
  824. package/skills/bundle-analysis/SKILL.md +159 -0
  825. package/skills/cache-guide/SKILL.md +232 -34
  826. package/skills/caching/SKILL.md +375 -19
  827. package/skills/catalog.json +283 -0
  828. package/skills/cloudflare/SKILL.md +151 -0
  829. package/skills/cloudflare/agents/openai.yaml +4 -0
  830. package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
  831. package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
  832. package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
  833. package/skills/comparison/SKILL.md +50 -0
  834. package/skills/comparison/agents/openai.yaml +4 -0
  835. package/skills/comparison/references/framework-comparison.md +844 -0
  836. package/skills/composability/SKILL.md +124 -4
  837. package/skills/css/SKILL.md +76 -0
  838. package/skills/debug-manifest/SKILL.md +5 -11
  839. package/skills/defer-hydration/SKILL.md +235 -0
  840. package/skills/deployment-caching/SKILL.md +176 -0
  841. package/skills/document-cache/SKILL.md +116 -58
  842. package/skills/fonts/SKILL.md +1 -1
  843. package/skills/handler-use/SKILL.md +12 -10
  844. package/skills/hooks/SKILL.md +73 -699
  845. package/skills/hooks/data.md +273 -0
  846. package/skills/hooks/handle-and-actions.md +103 -0
  847. package/skills/hooks/navigation.md +110 -0
  848. package/skills/hooks/outlets.md +62 -0
  849. package/skills/hooks/state.md +228 -0
  850. package/skills/hooks/urls.md +135 -0
  851. package/skills/host-router/SKILL.md +129 -27
  852. package/skills/i18n/SKILL.md +276 -0
  853. package/skills/intercept/SKILL.md +75 -19
  854. package/skills/layout/SKILL.md +40 -19
  855. package/skills/links/SKILL.md +211 -17
  856. package/skills/loader/SKILL.md +230 -25
  857. package/skills/middleware/SKILL.md +58 -13
  858. package/skills/migrate-nextjs/SKILL.md +267 -33
  859. package/skills/migrate-nextjs/backend-host-swap.md +120 -0
  860. package/skills/migrate-react-router/SKILL.md +59 -671
  861. package/skills/migrate-react-router/component-migration.md +196 -0
  862. package/skills/migrate-react-router/data-and-actions.md +225 -0
  863. package/skills/migrate-react-router/route-mapping.md +271 -0
  864. package/skills/mime-routes/SKILL.md +55 -18
  865. package/skills/observability/SKILL.md +231 -0
  866. package/skills/parallel/SKILL.md +50 -10
  867. package/skills/ppr/SKILL.md +904 -0
  868. package/skills/prerender/SKILL.md +130 -68
  869. package/skills/rango/SKILL.md +321 -26
  870. package/skills/react-compiler/SKILL.md +168 -0
  871. package/skills/response-routes/SKILL.md +172 -52
  872. package/skills/route/SKILL.md +123 -9
  873. package/skills/router-setup/SKILL.md +53 -9
  874. package/skills/scripts/SKILL.md +179 -0
  875. package/skills/server-actions/SKILL.md +776 -0
  876. package/skills/shell-manifest/SKILL.md +185 -0
  877. package/skills/streams-and-websockets/SKILL.md +1 -1
  878. package/skills/tailwind/SKILL.md +28 -4
  879. package/skills/testing/SKILL.md +131 -0
  880. package/skills/testing/bindings.md +103 -0
  881. package/skills/testing/cache-prerender.md +172 -0
  882. package/skills/testing/client-components.md +131 -0
  883. package/skills/testing/e2e-parity.md +125 -0
  884. package/skills/testing/flight.md +91 -0
  885. package/skills/testing/handles.md +131 -0
  886. package/skills/testing/loader.md +128 -0
  887. package/skills/testing/middleware.md +99 -0
  888. package/skills/testing/render-handler.md +122 -0
  889. package/skills/testing/response-routes.md +95 -0
  890. package/skills/testing/reverse-and-types.md +85 -0
  891. package/skills/testing/server-actions.md +107 -0
  892. package/skills/testing/server-tree.md +128 -0
  893. package/skills/testing/setup.md +123 -0
  894. package/skills/theme/SKILL.md +1 -1
  895. package/skills/typesafety/SKILL.md +45 -628
  896. package/skills/typesafety/env-and-bindings.md +254 -0
  897. package/skills/typesafety/generated-files-and-cli.md +342 -0
  898. package/skills/typesafety/params-and-search.md +153 -0
  899. package/skills/typesafety/route-types.md +213 -0
  900. package/skills/use-cache/SKILL.md +121 -15
  901. package/skills/vercel/SKILL.md +149 -0
  902. package/skills/view-transitions/SKILL.md +341 -0
  903. package/src/__augment-tests__/augment.ts +81 -0
  904. package/src/__augment-tests__/augmented.check.ts +116 -0
  905. package/src/__internal.ts +0 -65
  906. package/src/browser/action-coordinator.ts +53 -36
  907. package/src/browser/action-fence.ts +47 -0
  908. package/src/browser/app-shell.ts +14 -27
  909. package/src/browser/connection-warmup.ts +134 -0
  910. package/src/browser/cookie-name.ts +140 -0
  911. package/src/browser/dev-discovery.ts +66 -0
  912. package/src/browser/event-controller.ts +400 -168
  913. package/src/browser/history-state.ts +21 -0
  914. package/src/browser/index.ts +3 -3
  915. package/src/browser/invalidate-client-cache.ts +52 -0
  916. package/src/browser/link-interceptor.ts +469 -20
  917. package/src/browser/logging.ts +28 -0
  918. package/src/browser/merge-segment-loaders.ts +6 -4
  919. package/src/browser/navigation-bridge.ts +164 -69
  920. package/src/browser/navigation-client.ts +199 -96
  921. package/src/browser/navigation-store-handle.ts +38 -0
  922. package/src/browser/navigation-store.ts +165 -345
  923. package/src/browser/navigation-transaction.ts +9 -59
  924. package/src/browser/network-error-handler.ts +34 -7
  925. package/src/browser/notify-listeners.ts +22 -0
  926. package/src/browser/partial-update.ts +219 -163
  927. package/src/browser/prefetch/cache.ts +240 -97
  928. package/src/browser/prefetch/default-strategy.ts +74 -0
  929. package/src/browser/prefetch/fetch.ts +317 -51
  930. package/src/browser/prefetch/invalidation.ts +30 -0
  931. package/src/browser/prefetch/loader.ts +111 -0
  932. package/src/browser/prefetch/observer.ts +50 -22
  933. package/src/browser/prefetch/queue.ts +25 -7
  934. package/src/browser/prefetch/runtime.ts +6 -0
  935. package/src/browser/rango-state.ts +177 -114
  936. package/src/browser/react/Link.tsx +115 -75
  937. package/src/browser/react/NavigationProvider.tsx +194 -143
  938. package/src/browser/react/ScrollRestoration.tsx +10 -6
  939. package/src/browser/react/context.ts +4 -0
  940. package/src/browser/react/filter-segment-order.ts +66 -7
  941. package/src/browser/react/index.ts +0 -48
  942. package/src/browser/react/location-state-shared.ts +178 -8
  943. package/src/browser/react/location-state.ts +39 -14
  944. package/src/browser/react/use-action.ts +6 -15
  945. package/src/browser/react/use-handle.ts +17 -14
  946. package/src/browser/react/use-href.tsx +8 -1
  947. package/src/browser/react/use-link-status.ts +33 -8
  948. package/src/browser/react/use-navigation.ts +10 -5
  949. package/src/browser/react/use-params.ts +11 -11
  950. package/src/browser/react/use-reverse.ts +106 -0
  951. package/src/browser/react/use-router.ts +21 -6
  952. package/src/browser/react/use-search-params.ts +0 -5
  953. package/src/browser/react/use-segments.ts +11 -21
  954. package/src/browser/response-adapter.ts +99 -8
  955. package/src/browser/rsc-router.tsx +230 -42
  956. package/src/browser/scroll-restoration.ts +37 -22
  957. package/src/browser/segment-reconciler.ts +31 -21
  958. package/src/browser/segment-structure-assert.ts +2 -2
  959. package/src/browser/server-action-bridge.ts +262 -65
  960. package/src/browser/types.ts +132 -47
  961. package/src/browser/validate-redirect-origin.ts +43 -16
  962. package/src/build/collect-fallback-refs.ts +107 -0
  963. package/src/build/generate-manifest.ts +213 -184
  964. package/src/build/generate-route-types.ts +3 -1
  965. package/src/build/index.ts +11 -3
  966. package/src/build/merge-full-manifests.ts +161 -0
  967. package/src/build/prefix-tree-utils.ts +123 -0
  968. package/src/build/route-trie.ts +43 -280
  969. package/src/build/route-types/ast-route-extraction.ts +15 -8
  970. package/src/build/route-types/codegen.ts +16 -5
  971. package/src/build/route-types/include-resolution.ts +513 -64
  972. package/src/build/route-types/param-extraction.ts +6 -3
  973. package/src/build/route-types/per-module-writer.ts +33 -12
  974. package/src/build/route-types/router-processing.ts +312 -204
  975. package/src/build/route-types/scan-filter.ts +1 -1
  976. package/src/build/route-types/source-scan.ts +216 -0
  977. package/src/build/runtime-discovery.ts +32 -29
  978. package/src/cache/cache-error.ts +104 -0
  979. package/src/cache/cache-exec-scope.ts +47 -0
  980. package/src/cache/cache-key-utils.ts +73 -15
  981. package/src/cache/cache-policy.ts +108 -34
  982. package/src/cache/cache-runtime.ts +566 -121
  983. package/src/cache/cache-scope.ts +383 -105
  984. package/src/cache/cache-tag.ts +149 -0
  985. package/src/cache/cf/cf-base64.ts +33 -0
  986. package/src/cache/cf/cf-cache-constants.ts +134 -0
  987. package/src/cache/cf/cf-cache-store.ts +3028 -391
  988. package/src/cache/cf/cf-cache-types.ts +417 -0
  989. package/src/cache/cf/cf-kv-utils.ts +84 -0
  990. package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
  991. package/src/cache/cf/cf-zone-purge.ts +101 -0
  992. package/src/cache/cf/index.ts +11 -16
  993. package/src/cache/document-cache.ts +184 -53
  994. package/src/cache/handle-snapshot.ts +92 -1
  995. package/src/cache/index.ts +32 -20
  996. package/src/cache/memory-segment-store.ts +286 -37
  997. package/src/cache/profile-registry.ts +46 -31
  998. package/src/cache/read-through-swr.ts +66 -16
  999. package/src/cache/search-params-filter.ts +118 -0
  1000. package/src/cache/segment-codec.ts +80 -25
  1001. package/src/cache/shell-snapshot.ts +516 -0
  1002. package/src/cache/tag-invalidation.ts +230 -0
  1003. package/src/cache/taint.ts +28 -9
  1004. package/src/cache/types.ts +323 -100
  1005. package/src/cache/vercel/index.ts +11 -0
  1006. package/src/cache/vercel/vercel-cache-store.ts +1264 -0
  1007. package/src/client-urls/client-root.tsx +161 -0
  1008. package/src/client-urls/client-urls.ts +665 -0
  1009. package/src/client-urls/navigation.ts +237 -0
  1010. package/src/client-urls/revalidation-protocol.ts +56 -0
  1011. package/src/client-urls/server-projection.ts +563 -0
  1012. package/src/client-urls/types.ts +178 -0
  1013. package/src/client.rsc.tsx +48 -21
  1014. package/src/client.tsx +77 -67
  1015. package/src/cloudflare/index.ts +11 -0
  1016. package/src/cloudflare/tracing.ts +112 -0
  1017. package/src/component-utils.ts +19 -0
  1018. package/src/components/DefaultDocument.tsx +8 -2
  1019. package/src/context-var.ts +18 -6
  1020. package/src/decode-loader-results.ts +160 -0
  1021. package/src/defer.ts +185 -0
  1022. package/src/deps/ssr.ts +4 -2
  1023. package/src/dev-discovery-protocol.ts +11 -0
  1024. package/src/encode-kv.ts +49 -0
  1025. package/src/errors.ts +44 -4
  1026. package/src/escape-script.ts +52 -0
  1027. package/src/handle.ts +67 -37
  1028. package/src/handles/MetaTags.tsx +24 -53
  1029. package/src/handles/Scripts.tsx +183 -0
  1030. package/src/handles/breadcrumbs.ts +35 -8
  1031. package/src/handles/deferred-resolution.ts +134 -0
  1032. package/src/handles/is-thenable.ts +16 -0
  1033. package/src/handles/meta.ts +14 -40
  1034. package/src/handles/script.ts +244 -0
  1035. package/src/host/cookie-handler.ts +9 -60
  1036. package/src/host/errors.ts +13 -22
  1037. package/src/host/index.ts +9 -2
  1038. package/src/host/pattern-matcher.ts +23 -52
  1039. package/src/host/router.ts +107 -99
  1040. package/src/host/testing.ts +40 -27
  1041. package/src/host/types.ts +37 -4
  1042. package/src/host/utils.ts +1 -1
  1043. package/src/href-client.ts +137 -22
  1044. package/src/index.rsc.ts +105 -12
  1045. package/src/index.ts +102 -14
  1046. package/src/internal-debug.ts +11 -10
  1047. package/src/loader-redirect.tsx +47 -0
  1048. package/src/loader-store.ts +500 -0
  1049. package/src/loader.rsc.ts +20 -13
  1050. package/src/loader.ts +12 -11
  1051. package/src/missing-id-error.ts +68 -0
  1052. package/src/outlet-context.ts +12 -0
  1053. package/src/outlet-provider.tsx +16 -6
  1054. package/src/prerender/build-shell-capture.ts +453 -0
  1055. package/src/prerender/param-hash.ts +16 -16
  1056. package/src/prerender/shell-manifest-key.ts +20 -0
  1057. package/src/prerender/store.ts +47 -38
  1058. package/src/prerender.ts +81 -13
  1059. package/src/redirect-origin.ts +143 -0
  1060. package/src/regex-escape.ts +8 -0
  1061. package/src/render-error-thrower.tsx +20 -0
  1062. package/src/response-utils.ts +34 -0
  1063. package/src/reverse.ts +65 -40
  1064. package/src/root-error-boundary.tsx +1 -19
  1065. package/src/route-content-wrapper.tsx +112 -78
  1066. package/src/route-definition/dsl-helpers.ts +300 -313
  1067. package/src/route-definition/helper-factories.ts +28 -140
  1068. package/src/route-definition/helpers-types.ts +92 -62
  1069. package/src/route-definition/index.ts +1 -2
  1070. package/src/route-definition/redirect.ts +44 -11
  1071. package/src/route-definition/resolve-handler-use.ts +6 -1
  1072. package/src/route-definition/use-item-types.ts +29 -0
  1073. package/src/route-map-builder.ts +102 -74
  1074. package/src/route-types.ts +19 -46
  1075. package/src/router/basename.ts +14 -0
  1076. package/src/router/content-negotiation.ts +120 -30
  1077. package/src/router/error-handling.ts +110 -29
  1078. package/src/router/find-match.ts +129 -30
  1079. package/src/router/handler-context.ts +41 -57
  1080. package/src/router/instrument.ts +401 -0
  1081. package/src/router/intercept-resolution.ts +98 -21
  1082. package/src/router/lazy-includes.ts +82 -58
  1083. package/src/router/loader-resolution.ts +401 -85
  1084. package/src/router/logging.ts +0 -6
  1085. package/src/router/manifest.ts +74 -40
  1086. package/src/router/match-api.ts +91 -55
  1087. package/src/router/match-context.ts +0 -22
  1088. package/src/router/match-handlers.ts +268 -171
  1089. package/src/router/match-middleware/background-revalidation.ts +40 -24
  1090. package/src/router/match-middleware/cache-lookup.ts +316 -302
  1091. package/src/router/match-middleware/cache-store.ts +134 -52
  1092. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  1093. package/src/router/match-middleware/segment-resolution.ts +0 -22
  1094. package/src/router/match-pipelines.ts +1 -42
  1095. package/src/router/match-result.ts +76 -79
  1096. package/src/router/metrics.ts +17 -36
  1097. package/src/router/middleware-types.ts +20 -110
  1098. package/src/router/middleware.ts +275 -173
  1099. package/src/router/navigation-snapshot.ts +51 -60
  1100. package/src/router/params-util.ts +23 -0
  1101. package/src/router/parse-pattern.ts +115 -0
  1102. package/src/router/pattern-matching.ts +134 -154
  1103. package/src/router/prefetch-cache-ttl.ts +51 -0
  1104. package/src/router/prefetch-default.ts +59 -0
  1105. package/src/router/prefetch-limits.ts +37 -0
  1106. package/src/router/prerender-match.ts +159 -69
  1107. package/src/router/preview-match.ts +6 -2
  1108. package/src/router/request-classification.ts +50 -69
  1109. package/src/router/revalidation.ts +146 -83
  1110. package/src/router/route-snapshot.ts +14 -3
  1111. package/src/router/route-trie-builder.ts +334 -0
  1112. package/src/router/router-context.ts +6 -29
  1113. package/src/router/router-interfaces.ts +168 -38
  1114. package/src/router/router-options.ts +235 -11
  1115. package/src/router/router-registry.ts +2 -5
  1116. package/src/router/segment-resolution/fresh.ts +163 -88
  1117. package/src/router/segment-resolution/helpers.ts +96 -18
  1118. package/src/router/segment-resolution/loader-cache.ts +187 -39
  1119. package/src/router/segment-resolution/loader-mask.ts +60 -0
  1120. package/src/router/segment-resolution/loader-snapshot.ts +259 -0
  1121. package/src/router/segment-resolution/mask-nested.ts +99 -0
  1122. package/src/router/segment-resolution/revalidation.ts +316 -321
  1123. package/src/router/segment-resolution/static-store.ts +55 -15
  1124. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1125. package/src/router/segment-resolution/view-transition-default.ts +60 -0
  1126. package/src/router/segment-resolution.ts +5 -1
  1127. package/src/router/segment-wrappers.ts +6 -5
  1128. package/src/router/state-cookie-name.ts +33 -0
  1129. package/src/router/substitute-pattern-params.ts +75 -0
  1130. package/src/router/telemetry-otel.ts +171 -200
  1131. package/src/router/telemetry.ts +106 -20
  1132. package/src/router/timeout.ts +53 -22
  1133. package/src/router/tracing.ts +235 -0
  1134. package/src/router/transition-when.ts +76 -0
  1135. package/src/router/trie-matching.ts +170 -64
  1136. package/src/router/types.ts +9 -63
  1137. package/src/router/url-params.ts +13 -5
  1138. package/src/router.ts +248 -77
  1139. package/src/rsc/capture-queue.ts +218 -0
  1140. package/src/rsc/full-payload.ts +77 -0
  1141. package/src/rsc/handler-context.ts +4 -2
  1142. package/src/rsc/handler.ts +562 -284
  1143. package/src/rsc/helpers.ts +179 -9
  1144. package/src/rsc/index.ts +2 -5
  1145. package/src/rsc/json-route-result.ts +38 -0
  1146. package/src/rsc/loader-fetch.ts +116 -40
  1147. package/src/rsc/manifest-init.ts +55 -56
  1148. package/src/rsc/nonce.ts +10 -1
  1149. package/src/rsc/origin-guard.ts +39 -25
  1150. package/src/rsc/progressive-enhancement.ts +377 -84
  1151. package/src/rsc/redirect-guard.ts +102 -0
  1152. package/src/rsc/render-pipeline.ts +611 -0
  1153. package/src/rsc/response-cache-serve.ts +259 -0
  1154. package/src/rsc/response-error.ts +79 -12
  1155. package/src/rsc/response-route-handler.ts +73 -212
  1156. package/src/rsc/routine-plan.ts +359 -0
  1157. package/src/rsc/rsc-rendering.ts +1624 -171
  1158. package/src/rsc/runtime-warnings.ts +23 -10
  1159. package/src/rsc/server-action.ts +420 -139
  1160. package/src/rsc/shell-build-manifest.ts +336 -0
  1161. package/src/rsc/shell-capture-constants.ts +45 -0
  1162. package/src/rsc/shell-capture.ts +2063 -0
  1163. package/src/rsc/shell-serve.ts +337 -0
  1164. package/src/rsc/ssr-setup.ts +111 -16
  1165. package/src/rsc/stream-idle.ts +137 -0
  1166. package/src/rsc/transition-gate.ts +86 -0
  1167. package/src/rsc/types.ts +91 -5
  1168. package/src/runtime-env.ts +18 -0
  1169. package/src/search-params.ts +35 -30
  1170. package/src/segment-fragments.ts +165 -0
  1171. package/src/segment-loader-promise.ts +49 -4
  1172. package/src/segment-system.tsx +441 -153
  1173. package/src/serialize.ts +243 -0
  1174. package/src/server/context.ts +416 -55
  1175. package/src/server/cookie-parse.ts +32 -0
  1176. package/src/server/cookie-store.ts +162 -15
  1177. package/src/server/handle-store.ts +190 -70
  1178. package/src/server/loader-registry.ts +33 -42
  1179. package/src/server/request-context.ts +805 -177
  1180. package/src/server.ts +7 -2
  1181. package/src/ssr/index.tsx +631 -183
  1182. package/src/ssr/inject-rsc-eager.ts +167 -0
  1183. package/src/ssr/preinit-client-references.ts +106 -0
  1184. package/src/ssr/ssr-root.tsx +262 -0
  1185. package/src/static-handler.ts +28 -15
  1186. package/src/testing/cache-status.ts +162 -0
  1187. package/src/testing/collect-handle.ts +46 -0
  1188. package/src/testing/dispatch.ts +951 -0
  1189. package/src/testing/dom.entry.ts +22 -0
  1190. package/src/testing/e2e/fixture.ts +188 -0
  1191. package/src/testing/e2e/index.ts +147 -0
  1192. package/src/testing/e2e/matchers.ts +35 -0
  1193. package/src/testing/e2e/page-helpers.ts +319 -0
  1194. package/src/testing/e2e/parity.ts +400 -0
  1195. package/src/testing/e2e/server.ts +195 -0
  1196. package/src/testing/flight-matchers.ts +97 -0
  1197. package/src/testing/flight-normalize.ts +11 -0
  1198. package/src/testing/flight-runtime.d.ts +57 -0
  1199. package/src/testing/flight-tree.ts +682 -0
  1200. package/src/testing/flight.entry.ts +52 -0
  1201. package/src/testing/flight.ts +257 -0
  1202. package/src/testing/generated-routes.ts +199 -0
  1203. package/src/testing/index.ts +121 -0
  1204. package/src/testing/internal/context.ts +380 -0
  1205. package/src/testing/internal/flight-client-globals.ts +30 -0
  1206. package/src/testing/internal/seed-vars.ts +54 -0
  1207. package/src/testing/render-handler.ts +371 -0
  1208. package/src/testing/render-route.tsx +667 -0
  1209. package/src/testing/run-loader.ts +423 -0
  1210. package/src/testing/run-middleware.ts +219 -0
  1211. package/src/testing/run-transition-when.ts +197 -0
  1212. package/src/testing/shell-status.ts +206 -0
  1213. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1214. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1215. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1216. package/src/testing/vitest-stubs/version.ts +5 -0
  1217. package/src/testing/vitest.ts +305 -0
  1218. package/src/theme/ThemeProvider.tsx +56 -84
  1219. package/src/theme/ThemeScript.tsx +7 -9
  1220. package/src/theme/constants.ts +52 -13
  1221. package/src/theme/index.ts +0 -7
  1222. package/src/theme/theme-context.ts +1 -5
  1223. package/src/theme/theme-script.ts +22 -21
  1224. package/src/theme/use-theme.ts +0 -3
  1225. package/src/types/boundaries.ts +15 -35
  1226. package/src/types/cache-types.ts +13 -4
  1227. package/src/types/error-types.ts +30 -90
  1228. package/src/types/global-namespace.ts +54 -41
  1229. package/src/types/handler-context.ts +121 -30
  1230. package/src/types/index.ts +3 -10
  1231. package/src/types/loader-types.ts +38 -7
  1232. package/src/types/request-scope.ts +8 -22
  1233. package/src/types/route-config.ts +20 -52
  1234. package/src/types/route-entry.ts +3 -6
  1235. package/src/types/segments.ts +147 -14
  1236. package/src/urls/include-helper.ts +38 -64
  1237. package/src/urls/include-provider.ts +71 -0
  1238. package/src/urls/index.ts +2 -11
  1239. package/src/urls/path-helper-types.ts +76 -24
  1240. package/src/urls/path-helper.ts +30 -110
  1241. package/src/urls/pattern-types.ts +101 -19
  1242. package/src/urls/response-types.ts +20 -19
  1243. package/src/urls/type-extraction.ts +98 -154
  1244. package/src/urls/urls-function.ts +1 -19
  1245. package/src/use-loader.tsx +355 -109
  1246. package/src/vercel/index.ts +11 -0
  1247. package/src/vercel/tracing.ts +89 -0
  1248. package/src/vite/debug.ts +102 -3
  1249. package/src/vite/discovery/bundle-postprocess.ts +18 -14
  1250. package/src/vite/discovery/client-urls-projection.ts +322 -0
  1251. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1252. package/src/vite/discovery/discover-routers.ts +178 -151
  1253. package/src/vite/discovery/discovery-errors.ts +255 -0
  1254. package/src/vite/discovery/gate-state.ts +171 -0
  1255. package/src/vite/discovery/prerender-collection.ts +125 -70
  1256. package/src/vite/discovery/route-types-writer.ts +40 -84
  1257. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1258. package/src/vite/discovery/shell-prerender-phase.ts +397 -0
  1259. package/src/vite/discovery/state.ts +104 -6
  1260. package/src/vite/discovery/virtual-module-codegen.ts +226 -87
  1261. package/src/vite/encryption-key.ts +29 -0
  1262. package/src/vite/index.ts +12 -0
  1263. package/src/vite/inject-client-debug.ts +88 -0
  1264. package/src/vite/plugin-types.ts +243 -10
  1265. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1266. package/src/vite/plugins/client-ref-dedup.ts +16 -11
  1267. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1268. package/src/vite/plugins/cloudflare-protocol-stub.ts +1 -21
  1269. package/src/vite/plugins/expose-action-id.ts +50 -97
  1270. package/src/vite/plugins/expose-id-utils.ts +88 -55
  1271. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1272. package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
  1273. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1274. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1275. package/src/vite/plugins/expose-internal-ids.ts +551 -486
  1276. package/src/vite/plugins/performance-tracks.ts +25 -22
  1277. package/src/vite/plugins/refresh-cmd.ts +1 -1
  1278. package/src/vite/plugins/server-ref-hashing.ts +74 -0
  1279. package/src/vite/plugins/server-reference-pattern.ts +10 -0
  1280. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1281. package/src/vite/plugins/vercel-output.ts +384 -0
  1282. package/src/vite/plugins/version-injector.ts +39 -29
  1283. package/src/vite/plugins/version-plugin.ts +45 -40
  1284. package/src/vite/plugins/virtual-entries.ts +193 -30
  1285. package/src/vite/rango.ts +240 -128
  1286. package/src/vite/router-discovery.ts +1518 -174
  1287. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1288. package/src/vite/utils/bundle-analysis.ts +10 -15
  1289. package/src/vite/utils/client-chunks.ts +184 -0
  1290. package/src/vite/utils/directive-prologue.ts +40 -0
  1291. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1292. package/src/vite/utils/manifest-utils.ts +1 -59
  1293. package/src/vite/utils/package-resolution.ts +2 -73
  1294. package/src/vite/utils/prerender-utils.ts +96 -49
  1295. package/src/vite/utils/shared-utils.ts +156 -43
  1296. package/src/browser/action-response-classifier.ts +0 -99
  1297. package/src/browser/react/use-client-cache.ts +0 -58
  1298. package/src/browser/shallow.ts +0 -40
  1299. package/src/handles/index.ts +0 -7
  1300. package/src/network-error-thrower.tsx +0 -23
  1301. package/src/router/middleware-cookies.ts +0 -55
package/dist/bin/rango.js CHANGED
@@ -1,8 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __esm = (fn, res) => function __init() {
5
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
4
+ var __esm = (fn, res, err) => function __init() {
5
+ if (err) throw err[0];
6
+ try {
7
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
+ } catch (e) {
9
+ throw err = [e], e;
10
+ }
6
11
  };
7
12
  var __export = (target, all) => {
8
13
  for (var name in all)
@@ -22,10 +27,10 @@ function extractParamsFromPattern(pattern) {
22
27
  function formatRouteEntry(key, pattern, _params, search) {
23
28
  const hasSearch = search && Object.keys(search).length > 0;
24
29
  if (!hasSearch) {
25
- return ` ${key}: "${pattern}",`;
30
+ return ` ${key}: ${JSON.stringify(pattern)},`;
26
31
  }
27
- const searchBody = Object.entries(search).map(([k, v]) => `${k}: "${v}"`).join(", ");
28
- return ` ${key}: { path: "${pattern}", search: { ${searchBody} } },`;
32
+ const searchBody = Object.entries(search).map(([k, v]) => `${k}: ${JSON.stringify(v)}`).join(", ");
33
+ return ` ${key}: { path: ${JSON.stringify(pattern)}, search: { ${searchBody} } },`;
29
34
  }
30
35
  var init_param_extraction = __esm({
31
36
  "src/build/route-types/param-extraction.ts"() {
@@ -59,8 +64,8 @@ var init_ast_helpers = __esm({
59
64
 
60
65
  // src/build/route-types/ast-route-extraction.ts
61
66
  import ts2 from "typescript";
62
- function extractRoutesFromSource(code) {
63
- const sourceFile = ts2.createSourceFile(
67
+ function extractRoutesFromSource(code, sourceFileArg) {
68
+ const sourceFile = sourceFileArg ?? ts2.createSourceFile(
64
69
  "input.tsx",
65
70
  code,
66
71
  ts2.ScriptTarget.Latest,
@@ -139,7 +144,7 @@ function generatePerModuleTypesSource(routes) {
139
144
  const valid = routes.filter(({ name }) => {
140
145
  if (!name || /["'\\`\n\r]/.test(name)) {
141
146
  console.warn(
142
- `[rsc-router] Skipping route with invalid name: ${JSON.stringify(name)}`
147
+ `[rango] Skipping route with invalid name: ${JSON.stringify(name)}`
143
148
  );
144
149
  return false;
145
150
  }
@@ -149,7 +154,7 @@ function generatePerModuleTypesSource(routes) {
149
154
  for (const { name, pattern, params, search } of valid) {
150
155
  if (deduped.has(name)) {
151
156
  console.warn(
152
- `[rsc-router] Duplicate route name "${name}" \u2014 keeping first definition`
157
+ `[rango] Duplicate route name "${name}" \u2014 keeping first definition`
153
158
  );
154
159
  continue;
155
160
  }
@@ -185,9 +190,13 @@ export const NamedRoutes = {
185
190
  ${objectBody}
186
191
  } as const;
187
192
 
193
+ // Aliased so the augmentation below does not pay a homomorphic mapped-type
194
+ // instantiation per route; \`as const\` already makes the members readonly.
195
+ type NamedRoutesShape = typeof NamedRoutes;
196
+
188
197
  declare global {
189
- namespace RSCRouter {
190
- interface GeneratedRouteMap extends Readonly<typeof NamedRoutes> {}
198
+ namespace Rango {
199
+ interface GeneratedRouteMap extends NamedRoutesShape {}
191
200
  }
192
201
  }
193
202
  `;
@@ -211,7 +220,7 @@ function findTsFiles(dir, filter) {
211
220
  entries = readdirSync(dir, { withFileTypes: true });
212
221
  } catch (err) {
213
222
  console.warn(
214
- `[rsc-router] Failed to scan directory ${dir}: ${err.message}`
223
+ `[rango] Failed to scan directory ${dir}: ${err.message}`
215
224
  );
216
225
  return results;
217
226
  }
@@ -238,6 +247,37 @@ var init_scan_filter = __esm({
238
247
  import { readFileSync, existsSync } from "node:fs";
239
248
  import { dirname, resolve } from "node:path";
240
249
  import ts3 from "typescript";
250
+ function createScanMemo() {
251
+ return { files: /* @__PURE__ */ new Map(), blockSourceFiles: /* @__PURE__ */ new Map() };
252
+ }
253
+ function parseBlock(memo, block) {
254
+ if (memo) {
255
+ const cached = memo.blockSourceFiles.get(block);
256
+ if (cached) return cached;
257
+ }
258
+ const sf = ts3.createSourceFile(
259
+ "input.tsx",
260
+ block,
261
+ ts3.ScriptTarget.Latest,
262
+ true,
263
+ ts3.ScriptKind.TSX
264
+ );
265
+ if (memo) memo.blockSourceFiles.set(block, sf);
266
+ return sf;
267
+ }
268
+ function readSourceMemoized(memo, realPath) {
269
+ if (memo) {
270
+ const cached = memo.files.get(realPath);
271
+ if (cached !== void 0) return cached;
272
+ }
273
+ const source = readFileSync(realPath, "utf-8");
274
+ if (memo) memo.files.set(realPath, source);
275
+ return source;
276
+ }
277
+ function isUrlsDefinitionCall(node) {
278
+ const callee = node.expression;
279
+ return ts3.isIdentifier(callee) && (callee.text === "urls" || callee.text === "clientUrls");
280
+ }
241
281
  function extractNamePrefixFromInclude(node) {
242
282
  if (node.arguments.length >= 3) {
243
283
  const thirdArg = node.arguments[2];
@@ -253,8 +293,95 @@ function extractNamePrefixFromInclude(node) {
253
293
  }
254
294
  return null;
255
295
  }
256
- function extractIncludesWithDiagnostics(code) {
257
- const sourceFile = ts3.createSourceFile(
296
+ function thenSelectsNonDefaultMember(expr) {
297
+ const findThenCall = (e) => {
298
+ if (ts3.isCallExpression(e) && ts3.isPropertyAccessExpression(e.expression) && e.expression.name.text === "then") {
299
+ return e;
300
+ }
301
+ if (ts3.isCallExpression(e) && ts3.isPropertyAccessExpression(e.expression)) {
302
+ return findThenCall(e.expression.expression);
303
+ }
304
+ if (ts3.isPropertyAccessExpression(e)) return findThenCall(e.expression);
305
+ if (ts3.isParenthesizedExpression(e)) return findThenCall(e.expression);
306
+ if (ts3.isAwaitExpression(e)) return findThenCall(e.expression);
307
+ return null;
308
+ };
309
+ const thenCall = findThenCall(expr);
310
+ if (!thenCall || thenCall.arguments.length === 0) return false;
311
+ const cb = thenCall.arguments[0];
312
+ if (!ts3.isArrowFunction(cb) && !ts3.isFunctionExpression(cb)) return false;
313
+ let ret;
314
+ if (ts3.isBlock(cb.body)) {
315
+ for (const stmt of cb.body.statements) {
316
+ if (ts3.isReturnStatement(stmt) && stmt.expression) {
317
+ ret = stmt.expression;
318
+ break;
319
+ }
320
+ }
321
+ } else {
322
+ ret = cb.body;
323
+ }
324
+ if (!ret) return false;
325
+ if (ts3.isPropertyAccessExpression(ret)) {
326
+ return ret.name.text !== "default";
327
+ }
328
+ return false;
329
+ }
330
+ function extractDynamicImportSpecifier(node) {
331
+ let body;
332
+ if (ts3.isArrowFunction(node) || ts3.isFunctionExpression(node)) {
333
+ body = node.body;
334
+ }
335
+ if (!body) return null;
336
+ let expr;
337
+ if (ts3.isBlock(body)) {
338
+ for (const stmt of body.statements) {
339
+ if (ts3.isReturnStatement(stmt) && stmt.expression) {
340
+ expr = stmt.expression;
341
+ break;
342
+ }
343
+ }
344
+ } else {
345
+ expr = body;
346
+ }
347
+ if (!expr) return null;
348
+ const findImportCall = (e) => {
349
+ if (ts3.isCallExpression(e) && e.expression.kind === ts3.SyntaxKind.ImportKeyword) {
350
+ return e;
351
+ }
352
+ if (ts3.isCallExpression(e) && ts3.isPropertyAccessExpression(e.expression)) {
353
+ return findImportCall(e.expression.expression);
354
+ }
355
+ if (ts3.isPropertyAccessExpression(e)) return findImportCall(e.expression);
356
+ if (ts3.isParenthesizedExpression(e)) return findImportCall(e.expression);
357
+ if (ts3.isAwaitExpression(e)) return findImportCall(e.expression);
358
+ return null;
359
+ };
360
+ const importCall = findImportCall(expr);
361
+ if (!importCall || importCall.arguments.length === 0) return null;
362
+ if (thenSelectsNonDefaultMember(expr)) return null;
363
+ return getStringValue(importCall.arguments[0]);
364
+ }
365
+ function resolveDefaultExportTarget(code, sourceFile) {
366
+ let result = null;
367
+ function visit(node) {
368
+ if (result) return;
369
+ if (ts3.isExportAssignment(node) && !node.isExportEquals) {
370
+ const expr = node.expression;
371
+ if (ts3.isIdentifier(expr)) {
372
+ result = { variableName: expr.text };
373
+ } else if (ts3.isCallExpression(expr) && isUrlsDefinitionCall(expr)) {
374
+ result = { inlineBlock: expr.getText(sourceFile) };
375
+ }
376
+ return;
377
+ }
378
+ ts3.forEachChild(node, visit);
379
+ }
380
+ visit(sourceFile);
381
+ return result;
382
+ }
383
+ function extractIncludesWithDiagnostics(code, sourceFileArg) {
384
+ const sourceFile = sourceFileArg ?? ts3.createSourceFile(
258
385
  "input.tsx",
259
386
  code,
260
387
  ts3.ScriptTarget.Latest,
@@ -278,12 +405,19 @@ function extractIncludesWithDiagnostics(code) {
278
405
  }
279
406
  const secondArg = node.arguments[1];
280
407
  const namePrefix = extractNamePrefixFromInclude(node);
408
+ const dynamicImportSpec = extractDynamicImportSpecifier(secondArg);
281
409
  if (ts3.isIdentifier(secondArg)) {
282
410
  resolved.push({
283
411
  pathPrefix,
284
412
  variableName: secondArg.text,
285
413
  namePrefix
286
414
  });
415
+ } else if (dynamicImportSpec !== null) {
416
+ resolved.push({
417
+ pathPrefix,
418
+ moduleSpecifier: dynamicImportSpec,
419
+ namePrefix
420
+ });
287
421
  } else if (ts3.isCallExpression(secondArg)) {
288
422
  const callText = secondArg.expression.getText(sourceFile);
289
423
  unresolvable.push({
@@ -308,7 +442,14 @@ function extractIncludesWithDiagnostics(code) {
308
442
  return { resolved, unresolvable };
309
443
  }
310
444
  function resolveImportedVariable(code, localName) {
311
- const importRegex = /import\s*\{([^}]+)\}\s*from\s*["']([^"']+)["']/g;
445
+ const defaultImportRegex = /import\s+([\w$]+)\s*(?:,\s*\{[^}]*\})?\s+from\s*["']([^"']+)["']/g;
446
+ let defaultMatch;
447
+ while ((defaultMatch = defaultImportRegex.exec(code)) !== null) {
448
+ if (defaultMatch[1] === localName) {
449
+ return { specifier: defaultMatch[2], exportedName: "default" };
450
+ }
451
+ }
452
+ const importRegex = /import\s*(?:[\w$]+\s*,\s*)?\{([^}]+)\}\s*from\s*["']([^"']+)["']/g;
312
453
  let match;
313
454
  while ((match = importRegex.exec(code)) !== null) {
314
455
  const imports = match[1];
@@ -345,8 +486,8 @@ function resolveImportPath(importSpec, fromFile) {
345
486
  }
346
487
  return null;
347
488
  }
348
- function extractUrlsBlockForVariable(code, varName) {
349
- const sourceFile = ts3.createSourceFile(
489
+ function extractUrlsBlockForVariable(code, varName, sourceFileArg) {
490
+ const sourceFile = sourceFileArg ?? ts3.createSourceFile(
350
491
  "input.tsx",
351
492
  code,
352
493
  ts3.ScriptTarget.Latest,
@@ -357,8 +498,7 @@ function extractUrlsBlockForVariable(code, varName) {
357
498
  function visit(node) {
358
499
  if (result) return;
359
500
  if (ts3.isVariableDeclaration(node) && ts3.isIdentifier(node.name) && node.name.text === varName && node.initializer && ts3.isCallExpression(node.initializer)) {
360
- const callee = node.initializer.expression;
361
- if (ts3.isIdentifier(callee) && callee.text === "urls") {
501
+ if (isUrlsDefinitionCall(node.initializer)) {
362
502
  result = node.initializer.getText(sourceFile);
363
503
  return;
364
504
  }
@@ -368,67 +508,113 @@ function extractUrlsBlockForVariable(code, varName) {
368
508
  visit(sourceFile);
369
509
  return result;
370
510
  }
371
- function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSchemasOut, diagnosticsOut) {
511
+ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSchemasOut, diagnosticsOut, memo) {
372
512
  const routeMap = {};
373
- const localRoutes = extractRoutesFromSource(block);
513
+ const blockSourceFile = parseBlock(memo, block);
514
+ const localRoutes = extractRoutesFromSource(block, blockSourceFile);
374
515
  for (const { name, pattern, search } of localRoutes) {
375
516
  routeMap[name] = pattern;
376
517
  if (search && searchSchemasOut) {
377
518
  searchSchemasOut[name] = search;
378
519
  }
379
520
  }
380
- const { resolved: includes, unresolvable } = extractIncludesWithDiagnostics(block);
521
+ const { resolved: includes, unresolvable } = extractIncludesWithDiagnostics(
522
+ block,
523
+ blockSourceFile
524
+ );
381
525
  if (diagnosticsOut) {
382
526
  for (const entry of unresolvable) {
383
527
  diagnosticsOut.push({ ...entry, sourceFile: filePath });
384
528
  }
385
529
  }
386
- for (const { pathPrefix, variableName, namePrefix } of includes) {
530
+ for (const inc of includes) {
531
+ const { pathPrefix, namePrefix } = inc;
387
532
  let childResult;
388
- const imported = resolveImportedVariable(fullSource, variableName);
389
- if (imported) {
390
- const targetFile = resolveImportPath(imported.specifier, filePath);
533
+ if (inc.moduleSpecifier) {
534
+ const targetFile = resolveImportPath(inc.moduleSpecifier, filePath);
391
535
  if (!targetFile) {
392
- if (diagnosticsOut) {
393
- diagnosticsOut.push({
394
- pathPrefix,
395
- namePrefix,
396
- reason: "file-not-found",
397
- sourceFile: filePath,
398
- detail: `import "${imported.specifier}" resolved to no file`
399
- });
400
- }
536
+ diagnosticsOut?.push({
537
+ pathPrefix,
538
+ namePrefix,
539
+ reason: "file-not-found",
540
+ sourceFile: filePath,
541
+ detail: `import("${inc.moduleSpecifier}") resolved to no file`
542
+ });
401
543
  continue;
402
544
  }
403
- childResult = buildCombinedRouteMapWithSearch(
404
- targetFile,
405
- imported.exportedName,
406
- visited,
407
- diagnosticsOut
408
- );
409
- } else {
410
- const sameFileBlock = extractUrlsBlockForVariable(
411
- fullSource,
412
- variableName
545
+ let targetSource;
546
+ try {
547
+ targetSource = readSourceMemoized(memo, resolve(targetFile));
548
+ } catch (err) {
549
+ diagnosticsOut?.push({
550
+ pathPrefix,
551
+ namePrefix,
552
+ reason: "file-not-found",
553
+ sourceFile: filePath,
554
+ detail: `import("${inc.moduleSpecifier}") resolved to "${targetFile}" but reading it failed: ${err?.message ?? String(err)}`
555
+ });
556
+ continue;
557
+ }
558
+ const def = resolveDefaultExportTarget(
559
+ targetSource,
560
+ parseBlock(memo, targetSource)
413
561
  );
414
- if (!sameFileBlock) {
415
- if (diagnosticsOut) {
416
- diagnosticsOut.push({
417
- pathPrefix,
418
- namePrefix,
419
- reason: "unresolvable-import",
420
- sourceFile: filePath,
421
- detail: `variable "${variableName}" not found in imports or same-file scope`
422
- });
423
- }
562
+ if (!def) {
563
+ diagnosticsOut?.push({
564
+ pathPrefix,
565
+ namePrefix,
566
+ reason: "unresolvable-import",
567
+ sourceFile: filePath,
568
+ detail: `import("${inc.moduleSpecifier}") has no resolvable \`export default urls(...)\``
569
+ });
424
570
  continue;
425
571
  }
426
- childResult = buildCombinedRouteMapWithSearch(
427
- filePath,
572
+ if (def.inlineBlock) {
573
+ childResult = buildCombinedRouteMapWithSearch(
574
+ targetFile,
575
+ void 0,
576
+ visited,
577
+ diagnosticsOut,
578
+ def.inlineBlock,
579
+ memo
580
+ );
581
+ } else {
582
+ const variableName = def.variableName;
583
+ const resolved = resolveIncludedVariable({
584
+ variableName,
585
+ resolutionFile: targetFile,
586
+ resolutionSource: targetSource,
587
+ reportFile: filePath,
588
+ memo,
589
+ visited,
590
+ diagnosticsOut,
591
+ pathPrefix,
592
+ namePrefix,
593
+ fileNotFoundDetail: (specifier) => `import("${inc.moduleSpecifier}") default re-exports "${variableName}" from "${specifier}", which resolved to no file`,
594
+ notFoundDetail: () => `import("${inc.moduleSpecifier}") default "${variableName}" not found in its imports or same-file scope`
595
+ });
596
+ if (!resolved) continue;
597
+ childResult = resolved;
598
+ }
599
+ } else if (inc.variableName) {
600
+ const variableName = inc.variableName;
601
+ const resolved = resolveIncludedVariable({
428
602
  variableName,
603
+ resolutionFile: filePath,
604
+ resolutionSource: fullSource,
605
+ reportFile: filePath,
606
+ memo,
429
607
  visited,
430
- diagnosticsOut
431
- );
608
+ diagnosticsOut,
609
+ pathPrefix,
610
+ namePrefix,
611
+ fileNotFoundDetail: (specifier) => `import "${specifier}" resolved to no file`,
612
+ notFoundDetail: () => `variable "${variableName}" not found in imports or same-file scope`
613
+ });
614
+ if (!resolved) continue;
615
+ childResult = resolved;
616
+ } else {
617
+ continue;
432
618
  }
433
619
  if (namePrefix === null) {
434
620
  continue;
@@ -451,26 +637,131 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
451
637
  }
452
638
  return routeMap;
453
639
  }
454
- function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock) {
640
+ function resolveIncludedVariable(opts) {
641
+ const {
642
+ variableName,
643
+ resolutionFile,
644
+ resolutionSource,
645
+ reportFile,
646
+ memo,
647
+ visited,
648
+ diagnosticsOut,
649
+ pathPrefix,
650
+ namePrefix
651
+ } = opts;
652
+ const imported = resolveImportedVariable(resolutionSource, variableName);
653
+ if (imported) {
654
+ const targetFile = resolveImportPath(imported.specifier, resolutionFile);
655
+ if (!targetFile) {
656
+ diagnosticsOut?.push({
657
+ pathPrefix,
658
+ namePrefix,
659
+ reason: "file-not-found",
660
+ sourceFile: reportFile,
661
+ detail: opts.fileNotFoundDetail(imported.specifier)
662
+ });
663
+ return null;
664
+ }
665
+ return buildCombinedRouteMapWithSearch(
666
+ targetFile,
667
+ imported.exportedName,
668
+ visited,
669
+ diagnosticsOut,
670
+ void 0,
671
+ memo
672
+ );
673
+ }
674
+ const sameFileBlock = extractUrlsBlockForVariable(
675
+ resolutionSource,
676
+ variableName,
677
+ parseBlock(memo, resolutionSource)
678
+ );
679
+ if (!sameFileBlock) {
680
+ diagnosticsOut?.push({
681
+ pathPrefix,
682
+ namePrefix,
683
+ reason: "unresolvable-import",
684
+ sourceFile: reportFile,
685
+ detail: opts.notFoundDetail()
686
+ });
687
+ return null;
688
+ }
689
+ return buildCombinedRouteMapWithSearch(
690
+ resolutionFile,
691
+ variableName,
692
+ visited,
693
+ diagnosticsOut,
694
+ void 0,
695
+ memo
696
+ );
697
+ }
698
+ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock, memo) {
455
699
  visited = visited ?? /* @__PURE__ */ new Set();
700
+ memo = memo ?? createScanMemo();
456
701
  const realPath = resolve(filePath);
457
702
  const key = variableName ? `${realPath}:${variableName}` : realPath;
458
703
  if (visited.has(key)) {
459
- console.warn(`[rsc-router] Circular include detected, skipping: ${key}`);
704
+ console.warn(`[rango] Circular include detected, skipping: ${key}`);
460
705
  return { routes: {}, searchSchemas: {} };
461
706
  }
462
707
  visited.add(key);
463
708
  let source;
464
709
  try {
465
- source = readFileSync(realPath, "utf-8");
710
+ source = readSourceMemoized(memo, realPath);
466
711
  } catch {
467
712
  return { routes: {}, searchSchemas: {} };
468
713
  }
469
714
  let block;
470
715
  if (inlineBlock) {
471
716
  block = inlineBlock;
717
+ } else if (variableName === "default") {
718
+ const defaultTarget = resolveDefaultExportTarget(
719
+ source,
720
+ parseBlock(memo, source)
721
+ );
722
+ if (!defaultTarget) {
723
+ visited.delete(key);
724
+ return { routes: {}, searchSchemas: {} };
725
+ }
726
+ if (defaultTarget.inlineBlock) {
727
+ block = defaultTarget.inlineBlock;
728
+ } else {
729
+ const targetName = defaultTarget.variableName;
730
+ const imported = resolveImportedVariable(source, targetName);
731
+ if (imported) {
732
+ const targetFile = resolveImportPath(imported.specifier, realPath);
733
+ if (!targetFile) {
734
+ visited.delete(key);
735
+ return { routes: {}, searchSchemas: {} };
736
+ }
737
+ const result = buildCombinedRouteMapWithSearch(
738
+ targetFile,
739
+ imported.exportedName,
740
+ visited,
741
+ diagnosticsOut,
742
+ void 0,
743
+ memo
744
+ );
745
+ visited.delete(key);
746
+ return result;
747
+ }
748
+ const extracted = extractUrlsBlockForVariable(
749
+ source,
750
+ targetName,
751
+ parseBlock(memo, source)
752
+ );
753
+ if (!extracted) {
754
+ visited.delete(key);
755
+ return { routes: {}, searchSchemas: {} };
756
+ }
757
+ block = extracted;
758
+ }
472
759
  } else if (variableName) {
473
- const extracted = extractUrlsBlockForVariable(source, variableName);
760
+ const extracted = extractUrlsBlockForVariable(
761
+ source,
762
+ variableName,
763
+ parseBlock(memo, source)
764
+ );
474
765
  if (!extracted) return { routes: {}, searchSchemas: {} };
475
766
  block = extracted;
476
767
  } else {
@@ -483,7 +774,8 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
483
774
  realPath,
484
775
  visited,
485
776
  searchSchemas,
486
- diagnosticsOut
777
+ diagnosticsOut,
778
+ memo
487
779
  );
488
780
  visited.delete(key);
489
781
  return { routes, searchSchemas };
@@ -511,7 +803,7 @@ function findUrlsVariableNames(code) {
511
803
  function visit(node) {
512
804
  if (ts4.isVariableDeclaration(node) && ts4.isIdentifier(node.name) && node.initializer && ts4.isCallExpression(node.initializer)) {
513
805
  const callee = node.initializer.expression;
514
- if (ts4.isIdentifier(callee) && callee.text === "urls") {
806
+ if (ts4.isIdentifier(callee) && (callee.text === "urls" || callee.text === "clientUrls")) {
515
807
  names.push(node.name.text);
516
808
  }
517
809
  }
@@ -523,13 +815,21 @@ function findUrlsVariableNames(code) {
523
815
  function writePerModuleRouteTypesForFile(filePath) {
524
816
  try {
525
817
  const source = readFileSync2(filePath, "utf-8");
526
- if (!source.includes("urls(")) return;
818
+ if (!source.includes("urls(") && !source.includes("clientUrls(")) return;
527
819
  const varNames = findUrlsVariableNames(source);
528
820
  let routes;
529
821
  if (varNames.length > 0) {
530
822
  routes = [];
823
+ const memo = createScanMemo();
531
824
  for (const varName of varNames) {
532
- const { routes: routeMap, searchSchemas } = buildCombinedRouteMapWithSearch(filePath, varName);
825
+ const { routes: routeMap, searchSchemas } = buildCombinedRouteMapWithSearch(
826
+ filePath,
827
+ varName,
828
+ void 0,
829
+ void 0,
830
+ void 0,
831
+ memo
832
+ );
533
833
  for (const [name, pattern] of Object.entries(routeMap)) {
534
834
  const params = extractParamsFromPattern(pattern);
535
835
  routes.push({
@@ -543,12 +843,12 @@ function writePerModuleRouteTypesForFile(filePath) {
543
843
  } else {
544
844
  routes = extractRoutesFromSource(source);
545
845
  }
546
- const genPath = filePath.replace(/\.(tsx?)$/, ".gen.ts");
846
+ const genPath = filePath.replace(/\.(tsx?|jsx?)$/, ".gen.ts");
547
847
  if (routes.length === 0) {
548
848
  if (varNames.length > 0 && !existsSync2(genPath)) {
549
849
  writeFileSync(genPath, generatePerModuleTypesSource([]));
550
850
  console.log(
551
- `[rsc-router] Generated route types (placeholder) -> ${genPath}`
851
+ `[rango] Generated route types (placeholder) -> ${genPath}`
552
852
  );
553
853
  }
554
854
  return;
@@ -557,11 +857,11 @@ function writePerModuleRouteTypesForFile(filePath) {
557
857
  const existing = existsSync2(genPath) ? readFileSync2(genPath, "utf-8") : null;
558
858
  if (existing !== genSource) {
559
859
  writeFileSync(genPath, genSource);
560
- console.log(`[rsc-router] Generated route types -> ${genPath}`);
860
+ console.log(`[rango] Generated route types -> ${genPath}`);
561
861
  }
562
862
  } catch (err) {
563
863
  console.warn(
564
- `[rsc-router] Failed to generate route types for ${filePath}: ${err.message}`
864
+ `[rango] Failed to generate route types for ${filePath}: ${err.message}`
565
865
  );
566
866
  }
567
867
  }
@@ -576,6 +876,131 @@ var init_per_module_writer = __esm({
576
876
  }
577
877
  });
578
878
 
879
+ // src/build/route-types/source-scan.ts
880
+ function isLineTerminator(ch) {
881
+ const c = ch.charCodeAt(0);
882
+ return c === 10 || c === 13 || c === 8232 || c === 8233;
883
+ }
884
+ function isRegexPositionAt(code, slashPos, prevChar) {
885
+ if (prevChar === void 0) return true;
886
+ if (prevChar === ")" || prevChar === "]" || prevChar === "}") return false;
887
+ if (!/[\w$]/.test(prevChar)) return true;
888
+ let k = slashPos - 1;
889
+ while (k >= 0 && /\s/.test(code[k])) k--;
890
+ const wordEnd = k + 1;
891
+ while (k >= 0 && /[\w$]/.test(code[k])) k--;
892
+ return REGEX_PRECEDING_KEYWORDS.has(code.slice(k + 1, wordEnd));
893
+ }
894
+ function makeCodeClassifier(code) {
895
+ const n = code.length;
896
+ let i = 0;
897
+ let skipStart = -1;
898
+ let skipEnd = -1;
899
+ let lastSig;
900
+ return (q) => {
901
+ if (q >= skipStart && q < skipEnd) return false;
902
+ while (i < n && i <= q) {
903
+ const c = code[i];
904
+ const d = i + 1 < n ? code[i + 1] : "";
905
+ let end = -1;
906
+ let transparent = false;
907
+ if (c === "/" && d === "/") {
908
+ let j = i + 2;
909
+ while (j < n && !isLineTerminator(code[j])) j++;
910
+ end = j;
911
+ transparent = true;
912
+ } else if (c === "/" && d === "*") {
913
+ let j = i + 2;
914
+ while (j < n && !(code[j] === "*" && code[j + 1] === "/")) j++;
915
+ end = Math.min(n, j + 2);
916
+ transparent = true;
917
+ } else if (c === '"' || c === "'" || c === "`") {
918
+ let j = i + 1;
919
+ while (j < n) {
920
+ if (code[j] === "\\") {
921
+ j += 2;
922
+ continue;
923
+ }
924
+ if (code[j] === c) {
925
+ j++;
926
+ break;
927
+ }
928
+ j++;
929
+ }
930
+ end = j;
931
+ } else if (c === "/" && d !== "/" && d !== "*" && isRegexPositionAt(code, i, lastSig)) {
932
+ let j = i + 1;
933
+ let inClass = false;
934
+ let closed = false;
935
+ while (j < n && !isLineTerminator(code[j])) {
936
+ const r = code[j];
937
+ if (r === "\\") {
938
+ j += 2;
939
+ continue;
940
+ }
941
+ if (r === "[") inClass = true;
942
+ else if (r === "]") inClass = false;
943
+ else if (r === "/" && !inClass) {
944
+ j++;
945
+ closed = true;
946
+ break;
947
+ }
948
+ j++;
949
+ }
950
+ if (closed) {
951
+ while (j < n && /[a-z]/.test(code[j])) j++;
952
+ end = j;
953
+ }
954
+ }
955
+ if (end >= 0) {
956
+ if (q < end) {
957
+ skipStart = i;
958
+ skipEnd = end;
959
+ return false;
960
+ }
961
+ i = end;
962
+ if (!transparent) lastSig = "x";
963
+ } else {
964
+ if (!/\s/.test(c)) lastSig = c;
965
+ i++;
966
+ }
967
+ }
968
+ return true;
969
+ };
970
+ }
971
+ function firstCodeMatchIndex(code, pattern) {
972
+ const inCode = makeCodeClassifier(code);
973
+ pattern.lastIndex = 0;
974
+ let m;
975
+ while ((m = pattern.exec(code)) !== null) {
976
+ if (inCode(m.index)) return m.index;
977
+ if (pattern.lastIndex <= m.index) pattern.lastIndex = m.index + 1;
978
+ }
979
+ return -1;
980
+ }
981
+ var REGEX_PRECEDING_KEYWORDS;
982
+ var init_source_scan = __esm({
983
+ "src/build/route-types/source-scan.ts"() {
984
+ "use strict";
985
+ REGEX_PRECEDING_KEYWORDS = /* @__PURE__ */ new Set([
986
+ "return",
987
+ "typeof",
988
+ "instanceof",
989
+ "in",
990
+ "of",
991
+ "new",
992
+ "delete",
993
+ "void",
994
+ "do",
995
+ "else",
996
+ "yield",
997
+ "await",
998
+ "case",
999
+ "throw"
1000
+ ]);
1001
+ }
1002
+ });
1003
+
579
1004
  // src/build/route-types/router-processing.ts
580
1005
  import {
581
1006
  readFileSync as readFileSync3,
@@ -606,43 +1031,50 @@ function countPublicRouteEntries(source) {
606
1031
  function isRoutableSourceFile(name) {
607
1032
  return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.") && !name.includes(".test.") && !name.includes(".spec.");
608
1033
  }
609
- function findRouterFilesRecursive(dir, filter, results) {
1034
+ function isExcludedScanDir(name) {
1035
+ return name === "node_modules" || name === "dist" || name === "coverage" || name === "__tests__" || name === "__mocks__" || name.startsWith(".");
1036
+ }
1037
+ function findCallSiteFilesRecursive(dir, pattern, patternG, stopAtMatchDir, filter, results) {
610
1038
  let entries;
611
1039
  try {
612
1040
  entries = readdirSync2(dir, { withFileTypes: true });
613
1041
  } catch (err) {
614
1042
  console.warn(
615
- `[rsc-router] Failed to scan directory ${dir}: ${err.message}`
1043
+ `[rango] Failed to scan directory ${dir}: ${err.message}`
616
1044
  );
617
1045
  return;
618
1046
  }
619
1047
  const childDirs = [];
620
- const routerFilesInDir = [];
1048
+ const matchesInDir = [];
621
1049
  for (const entry of entries) {
622
1050
  const fullPath = join2(dir, entry.name);
623
1051
  if (entry.isDirectory()) {
624
- if (entry.name === "node_modules" || entry.name === "dist" || entry.name === "coverage" || entry.name === "__tests__" || entry.name === "__mocks__" || entry.name.startsWith("."))
625
- continue;
626
- childDirs.push(fullPath);
1052
+ if (!isExcludedScanDir(entry.name)) childDirs.push(fullPath);
627
1053
  continue;
628
1054
  }
629
1055
  if (!isRoutableSourceFile(entry.name)) continue;
630
1056
  if (filter && !filter(fullPath)) continue;
631
1057
  try {
632
1058
  const source = readFileSync3(fullPath, "utf-8");
633
- if (ROUTER_CALL_PATTERN.test(source)) {
634
- routerFilesInDir.push(fullPath);
1059
+ if (pattern.test(source) && firstCodeMatchIndex(source, patternG) >= 0) {
1060
+ matchesInDir.push(fullPath);
635
1061
  }
636
1062
  } catch {
637
1063
  continue;
638
1064
  }
639
1065
  }
640
- if (routerFilesInDir.length > 0) {
641
- results.push(...routerFilesInDir);
642
- return;
643
- }
644
- for (const childDir of childDirs) {
645
- findRouterFilesRecursive(childDir, filter, results);
1066
+ results.push(...matchesInDir);
1067
+ if (!stopAtMatchDir || matchesInDir.length === 0) {
1068
+ for (const childDir of childDirs) {
1069
+ findCallSiteFilesRecursive(
1070
+ childDir,
1071
+ pattern,
1072
+ patternG,
1073
+ stopAtMatchDir,
1074
+ filter,
1075
+ results
1076
+ );
1077
+ }
646
1078
  }
647
1079
  }
648
1080
  function findNestedRouterConflict(routerFiles) {
@@ -668,13 +1100,39 @@ function findNestedRouterConflict(routerFiles) {
668
1100
  }
669
1101
  return null;
670
1102
  }
671
- function formatNestedRouterConflictError(conflict, prefix = "[rsc-router]") {
1103
+ function formatNestedRouterConflictError(conflict, prefix = "[rango]") {
672
1104
  return `${prefix} Nested router roots are not supported.
673
1105
  Router root: ${conflict.ancestor}
674
1106
  Nested router: ${conflict.nested}
675
1107
  Move the nested router into a sibling directory or configure it as a separate app root.`;
676
1108
  }
677
- function extractUrlsFromRouter(code) {
1109
+ function isCreateRouterCall(node) {
1110
+ if (!ts5.isCallExpression(node)) return false;
1111
+ const callee = node.expression;
1112
+ return ts5.isIdentifier(callee) && callee.text === "createRouter";
1113
+ }
1114
+ function extractUrlsArgument(node, sourceFile) {
1115
+ if (ts5.isIdentifier(node)) {
1116
+ return { kind: "variable", name: node.text };
1117
+ }
1118
+ if (ts5.isArrowFunction(node) || ts5.isFunctionExpression(node)) {
1119
+ return { kind: "inline", block: node.getText(sourceFile) };
1120
+ }
1121
+ return null;
1122
+ }
1123
+ function collectCreateRouterCallChain(endpoint) {
1124
+ const calls = [];
1125
+ let current = endpoint;
1126
+ while (true) {
1127
+ calls.push(current);
1128
+ if (isCreateRouterCall(current)) return calls.reverse();
1129
+ if (!ts5.isPropertyAccessExpression(current.expression)) return null;
1130
+ const receiver = current.expression.expression;
1131
+ if (!ts5.isCallExpression(receiver)) return null;
1132
+ current = receiver;
1133
+ }
1134
+ }
1135
+ function extractAllUrlsFromRouter(code) {
678
1136
  const sourceFile = ts5.createSourceFile(
679
1137
  "router.tsx",
680
1138
  code,
@@ -683,58 +1141,45 @@ function extractUrlsFromRouter(code) {
683
1141
  ts5.ScriptKind.TSX
684
1142
  );
685
1143
  let result = null;
686
- function isCreateRouterCall(node) {
687
- if (!ts5.isCallExpression(node)) return false;
688
- const callee = node.expression;
689
- return ts5.isIdentifier(callee) && callee.text === "createRouter";
690
- }
691
- function isInlineBuilder(node) {
692
- return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
693
- }
694
- function isRoutesOnCreateRouter(node) {
695
- if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
696
- return false;
697
- let inner = node.expression.expression;
698
- while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
699
- inner = inner.expression.expression;
700
- }
701
- return isCreateRouterCall(inner);
702
- }
703
1144
  function visit(node) {
704
1145
  if (result) return;
705
- if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
706
- const arg = node.arguments[0];
707
- if (ts5.isIdentifier(arg)) {
708
- result = { kind: "variable", name: arg.text };
709
- } else if (isInlineBuilder(arg)) {
710
- result = { kind: "inline", block: arg.getText(sourceFile) };
711
- }
712
- return;
713
- }
714
- if (isCreateRouterCall(node)) {
715
- const callExpr = node;
716
- for (const callArg of callExpr.arguments) {
717
- if (ts5.isObjectLiteralExpression(callArg)) {
1146
+ if (ts5.isCallExpression(node)) {
1147
+ const chain = collectCreateRouterCallChain(node);
1148
+ if (chain) {
1149
+ const extracted = [];
1150
+ const createRouterCall = chain[0];
1151
+ for (const callArg of createRouterCall.arguments) {
1152
+ if (!ts5.isObjectLiteralExpression(callArg)) continue;
718
1153
  for (const prop of callArg.properties) {
719
- if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
720
- if (ts5.isIdentifier(prop.initializer)) {
721
- result = { kind: "variable", name: prop.initializer.text };
722
- } else if (isInlineBuilder(prop.initializer)) {
723
- result = {
724
- kind: "inline",
725
- block: prop.initializer.getText(sourceFile)
726
- };
727
- }
728
- return;
1154
+ if (!ts5.isPropertyAssignment(prop) || !ts5.isIdentifier(prop.name) || prop.name.text !== "urls") {
1155
+ continue;
729
1156
  }
1157
+ const urls = extractUrlsArgument(prop.initializer, sourceFile);
1158
+ if (urls) extracted.push(urls);
1159
+ break;
1160
+ }
1161
+ }
1162
+ for (const call of chain.slice(1)) {
1163
+ if (!ts5.isPropertyAccessExpression(call.expression) || call.expression.name.text !== "routes" || call.arguments.length === 0) {
1164
+ continue;
730
1165
  }
1166
+ const urls = extractUrlsArgument(call.arguments[0], sourceFile);
1167
+ if (urls) extracted.push(urls);
1168
+ }
1169
+ if (extracted.length > 0) {
1170
+ result = extracted;
1171
+ return;
731
1172
  }
732
1173
  }
733
1174
  }
734
1175
  ts5.forEachChild(node, visit);
735
1176
  }
736
1177
  visit(sourceFile);
737
- return result;
1178
+ return result ?? [];
1179
+ }
1180
+ function extractUrlsFromRouter(code) {
1181
+ const extractions = extractAllUrlsFromRouter(code);
1182
+ return extractions[extractions.length - 1] ?? null;
738
1183
  }
739
1184
  function extractBasenameFromRouter(code) {
740
1185
  const sourceFile = ts5.createSourceFile(
@@ -764,19 +1209,91 @@ function extractBasenameFromRouter(code) {
764
1209
  visit(sourceFile);
765
1210
  return result;
766
1211
  }
767
- function applyBasenameToRoutes(result, basename2) {
1212
+ function applyBasenameToRoutes(result, basename) {
768
1213
  const prefixed = {};
769
1214
  for (const [name, pattern] of Object.entries(result.routes)) {
770
1215
  if (pattern === "/") {
771
- prefixed[name] = basename2;
772
- } else if (basename2.endsWith("/") && pattern.startsWith("/")) {
773
- prefixed[name] = basename2 + pattern.slice(1);
1216
+ prefixed[name] = basename;
1217
+ } else if (basename.endsWith("/") && pattern.startsWith("/")) {
1218
+ prefixed[name] = basename + pattern.slice(1);
774
1219
  } else {
775
- prefixed[name] = basename2 + pattern;
1220
+ prefixed[name] = basename + pattern;
776
1221
  }
777
1222
  }
778
1223
  return { routes: prefixed, searchSchemas: result.searchSchemas };
779
1224
  }
1225
+ function resolveRouterUrlsExtraction(routerFilePath, routerSource, extraction, diagnosticsOut, memo) {
1226
+ if (extraction.kind === "inline") {
1227
+ return buildCombinedRouteMapWithSearch(
1228
+ routerFilePath,
1229
+ void 0,
1230
+ /* @__PURE__ */ new Set(),
1231
+ diagnosticsOut,
1232
+ extraction.block,
1233
+ memo
1234
+ );
1235
+ }
1236
+ const imported = resolveImportedVariable(routerSource, extraction.name);
1237
+ if (imported) {
1238
+ const targetFile = resolveImportPath(imported.specifier, routerFilePath);
1239
+ if (!targetFile) {
1240
+ diagnosticsOut?.push({
1241
+ pathPrefix: "/",
1242
+ namePrefix: null,
1243
+ reason: "file-not-found",
1244
+ sourceFile: routerFilePath,
1245
+ detail: `import "${imported.specifier}" resolved to no file`
1246
+ });
1247
+ return { routes: {}, searchSchemas: {} };
1248
+ }
1249
+ return buildCombinedRouteMapWithSearch(
1250
+ targetFile,
1251
+ imported.exportedName,
1252
+ /* @__PURE__ */ new Set(),
1253
+ diagnosticsOut,
1254
+ void 0,
1255
+ memo
1256
+ );
1257
+ }
1258
+ return buildCombinedRouteMapWithSearch(
1259
+ routerFilePath,
1260
+ extraction.name,
1261
+ /* @__PURE__ */ new Set(),
1262
+ diagnosticsOut,
1263
+ void 0,
1264
+ memo
1265
+ );
1266
+ }
1267
+ function mergeRouteMaps(target, source) {
1268
+ for (const [name, pattern] of Object.entries(source.routes)) {
1269
+ target.routes[name] = pattern;
1270
+ const search = source.searchSchemas[name];
1271
+ if (search) {
1272
+ target.searchSchemas[name] = search;
1273
+ } else {
1274
+ delete target.searchSchemas[name];
1275
+ }
1276
+ }
1277
+ }
1278
+ function genFileTsPath(sourceFile) {
1279
+ const base = pathBasename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
1280
+ return join2(dirname2(sourceFile), `${base}.named-routes.gen.ts`);
1281
+ }
1282
+ function resolveSearchSchemas(publicRouteNames, runtimeSchemas, sourceFile) {
1283
+ if (runtimeSchemas && Object.keys(runtimeSchemas).length > 0) {
1284
+ return runtimeSchemas;
1285
+ }
1286
+ const staticParsed = buildCombinedRouteMapForRouterFile(sourceFile);
1287
+ if (Object.keys(staticParsed.searchSchemas).length === 0) {
1288
+ return runtimeSchemas;
1289
+ }
1290
+ const filtered = {};
1291
+ for (const name of publicRouteNames) {
1292
+ const schema = staticParsed.searchSchemas[name];
1293
+ if (schema) filtered[name] = schema;
1294
+ }
1295
+ return Object.keys(filtered).length > 0 ? filtered : runtimeSchemas;
1296
+ }
780
1297
  function buildCombinedRouteMapForRouterFile(routerFilePath) {
781
1298
  let routerSource;
782
1299
  try {
@@ -784,38 +1301,28 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
784
1301
  } catch {
785
1302
  return { routes: {}, searchSchemas: {} };
786
1303
  }
787
- const extraction = extractUrlsFromRouter(routerSource);
788
- if (!extraction) {
1304
+ const extractions = extractAllUrlsFromRouter(routerSource);
1305
+ if (extractions.length === 0) {
789
1306
  return { routes: {}, searchSchemas: {} };
790
1307
  }
791
1308
  const rawBasename = extractBasenameFromRouter(routerSource);
792
- const basename2 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
793
- let result;
794
- if (extraction.kind === "inline") {
795
- result = buildCombinedRouteMapWithSearch(
796
- routerFilePath,
797
- void 0,
798
- void 0,
799
- void 0,
800
- extraction.block
1309
+ const basename = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
1310
+ const result = { routes: {}, searchSchemas: {} };
1311
+ const memo = createScanMemo();
1312
+ for (const extraction of extractions) {
1313
+ mergeRouteMaps(
1314
+ result,
1315
+ resolveRouterUrlsExtraction(
1316
+ routerFilePath,
1317
+ routerSource,
1318
+ extraction,
1319
+ void 0,
1320
+ memo
1321
+ )
801
1322
  );
802
- } else {
803
- const imported = resolveImportedVariable(routerSource, extraction.name);
804
- if (imported) {
805
- const targetFile = resolveImportPath(imported.specifier, routerFilePath);
806
- if (!targetFile) {
807
- return { routes: {}, searchSchemas: {} };
808
- }
809
- result = buildCombinedRouteMapWithSearch(
810
- targetFile,
811
- imported.exportedName
812
- );
813
- } else {
814
- result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
815
- }
816
1323
  }
817
- if (basename2) {
818
- result = applyBasenameToRoutes(result, basename2);
1324
+ if (basename) {
1325
+ return applyBasenameToRoutes(result, basename);
819
1326
  }
820
1327
  return result;
821
1328
  }
@@ -827,47 +1334,19 @@ function detectUnresolvableIncludes(routerFilePath) {
827
1334
  } catch {
828
1335
  return [];
829
1336
  }
830
- const extraction = extractUrlsFromRouter(source);
831
- if (!extraction) return [];
1337
+ const extractions = extractAllUrlsFromRouter(source);
1338
+ if (extractions.length === 0) return [];
832
1339
  const diagnostics = [];
833
- if (extraction.kind === "inline") {
834
- buildCombinedRouteMapWithSearch(
1340
+ const memo = createScanMemo();
1341
+ for (const extraction of extractions) {
1342
+ resolveRouterUrlsExtraction(
835
1343
  realPath,
836
- void 0,
837
- /* @__PURE__ */ new Set(),
1344
+ source,
1345
+ extraction,
838
1346
  diagnostics,
839
- extraction.block
1347
+ memo
840
1348
  );
841
- return diagnostics;
842
1349
  }
843
- const imported = resolveImportedVariable(source, extraction.name);
844
- let targetFile;
845
- let exportedName;
846
- if (imported) {
847
- const resolved = resolveImportPath(imported.specifier, realPath);
848
- if (!resolved) {
849
- return [
850
- {
851
- pathPrefix: "/",
852
- namePrefix: null,
853
- reason: "file-not-found",
854
- sourceFile: realPath,
855
- detail: `import "${imported.specifier}" resolved to no file`
856
- }
857
- ];
858
- }
859
- targetFile = resolved;
860
- exportedName = imported.exportedName;
861
- } else {
862
- targetFile = realPath;
863
- exportedName = extraction.name;
864
- }
865
- buildCombinedRouteMapWithSearch(
866
- targetFile,
867
- exportedName,
868
- /* @__PURE__ */ new Set(),
869
- diagnostics
870
- );
871
1350
  return diagnostics;
872
1351
  }
873
1352
  function detectUnresolvableIncludesForUrlsFile(filePath) {
@@ -888,7 +1367,14 @@ function detectUnresolvableIncludesForUrlsFile(filePath) {
888
1367
  }
889
1368
  function findRouterFiles(root, filter) {
890
1369
  const result = [];
891
- findRouterFilesRecursive(root, filter, result);
1370
+ findCallSiteFilesRecursive(
1371
+ root,
1372
+ ROUTER_CALL_PATTERN,
1373
+ ROUTER_CALL_PATTERN_G,
1374
+ true,
1375
+ filter,
1376
+ result
1377
+ );
892
1378
  return result;
893
1379
  }
894
1380
  function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
@@ -897,7 +1383,7 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
897
1383
  if (existsSync3(oldCombinedPath)) {
898
1384
  unlinkSync(oldCombinedPath);
899
1385
  console.log(
900
- `[rsc-router] Removed stale combined route types: ${oldCombinedPath}`
1386
+ `[rango] Removed stale combined route types: ${oldCombinedPath}`
901
1387
  );
902
1388
  }
903
1389
  } catch {
@@ -919,18 +1405,12 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
919
1405
  }
920
1406
  if (!extractUrlsFromRouter(routerSource)) continue;
921
1407
  }
922
- const routerBasename = pathBasename(routerFilePath).replace(
923
- /\.(tsx?|jsx?)$/,
924
- ""
925
- );
926
- const outPath = join2(
927
- dirname2(routerFilePath),
928
- `${routerBasename}.named-routes.gen.ts`
929
- );
1408
+ const outPath = genFileTsPath(routerFilePath);
930
1409
  const existing = existsSync3(outPath) ? readFileSync3(outPath, "utf-8") : null;
931
1410
  if (Object.keys(result.routes).length === 0) {
932
1411
  if (!existing) {
933
1412
  const emptySource = generateRouteTypesSource({});
1413
+ opts?.onWrite?.(outPath, emptySource);
934
1414
  writeFileSync2(outPath, emptySource);
935
1415
  }
936
1416
  continue;
@@ -950,22 +1430,25 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
950
1430
  continue;
951
1431
  }
952
1432
  }
1433
+ opts?.onWrite?.(outPath, source);
953
1434
  writeFileSync2(outPath, source);
954
1435
  console.log(
955
- `[rsc-router] Generated route types (${Object.keys(result.routes).length} routes) -> ${outPath}`
1436
+ `[rango] Generated route types (${Object.keys(result.routes).length} routes) -> ${outPath}`
956
1437
  );
957
1438
  }
958
1439
  }
959
1440
  }
960
- var ROUTER_CALL_PATTERN;
1441
+ var ROUTER_CALL_PATTERN, ROUTER_CALL_PATTERN_G;
961
1442
  var init_router_processing = __esm({
962
1443
  "src/build/route-types/router-processing.ts"() {
963
1444
  "use strict";
964
1445
  init_codegen();
1446
+ init_source_scan();
965
1447
  init_include_resolution();
966
1448
  init_per_module_writer();
967
1449
  init_route_name();
968
1450
  ROUTER_CALL_PATTERN = /\bcreateRouter\s*[<(]/;
1451
+ ROUTER_CALL_PATTERN_G = /\bcreateRouter\s*[<(]/g;
969
1452
  }
970
1453
  });
971
1454
 
@@ -984,11 +1467,143 @@ var init_generate_route_types = __esm({
984
1467
  }
985
1468
  });
986
1469
 
1470
+ // src/build/merge-full-manifests.ts
1471
+ function clonePrefixNode(node) {
1472
+ return {
1473
+ staticPrefix: node.staticPrefix,
1474
+ fullPrefix: node.fullPrefix,
1475
+ ...node.namePrefix === void 0 ? {} : { namePrefix: node.namePrefix },
1476
+ children: clonePrefixTree(node.children),
1477
+ routes: [...node.routes]
1478
+ };
1479
+ }
1480
+ function clonePrefixTree(tree) {
1481
+ return Object.fromEntries(
1482
+ Object.entries(tree).map(([prefix, node]) => [
1483
+ prefix,
1484
+ clonePrefixNode(node)
1485
+ ])
1486
+ );
1487
+ }
1488
+ function removeRoutesFromPrefixTree(tree, routeNames) {
1489
+ return Object.fromEntries(
1490
+ Object.entries(tree).map(([prefix, node]) => [
1491
+ prefix,
1492
+ {
1493
+ staticPrefix: node.staticPrefix,
1494
+ fullPrefix: node.fullPrefix,
1495
+ ...node.namePrefix === void 0 ? {} : { namePrefix: node.namePrefix },
1496
+ children: removeRoutesFromPrefixTree(node.children, routeNames),
1497
+ routes: node.routes.filter((name) => !routeNames.has(name))
1498
+ }
1499
+ ])
1500
+ );
1501
+ }
1502
+ function mergePrefixTrees(earlier, later) {
1503
+ const merged = clonePrefixTree(earlier);
1504
+ for (const [prefix, laterNode] of Object.entries(later)) {
1505
+ const earlierNode = merged[prefix];
1506
+ if (!earlierNode) {
1507
+ merged[prefix] = clonePrefixNode(laterNode);
1508
+ continue;
1509
+ }
1510
+ merged[prefix] = {
1511
+ staticPrefix: laterNode.staticPrefix,
1512
+ fullPrefix: laterNode.fullPrefix,
1513
+ ...laterNode.namePrefix === void 0 ? {} : { namePrefix: laterNode.namePrefix },
1514
+ children: mergePrefixTrees(earlierNode.children, laterNode.children),
1515
+ routes: [.../* @__PURE__ */ new Set([...earlierNode.routes, ...laterNode.routes])]
1516
+ };
1517
+ }
1518
+ return merged;
1519
+ }
1520
+ function mergeRouteRecord(earlier, later, overwrittenRoutes, cloneValue) {
1521
+ const merged = {};
1522
+ for (const [name, value] of Object.entries(earlier ?? {})) {
1523
+ if (!overwrittenRoutes.has(name)) merged[name] = cloneValue(value);
1524
+ }
1525
+ for (const [name, value] of Object.entries(later ?? {})) {
1526
+ merged[name] = cloneValue(value);
1527
+ }
1528
+ return Object.keys(merged).length > 0 ? merged : void 0;
1529
+ }
1530
+ function mergeRouteList(earlier, later, overwrittenRoutes) {
1531
+ const merged = [
1532
+ ...(earlier ?? []).filter((name) => !overwrittenRoutes.has(name)),
1533
+ ...later ?? []
1534
+ ];
1535
+ const unique = [...new Set(merged)];
1536
+ return unique.length > 0 ? unique : void 0;
1537
+ }
1538
+ function mergeFullManifests(manifests) {
1539
+ let merged = {
1540
+ prefixTree: {},
1541
+ routeManifest: {}
1542
+ };
1543
+ for (const manifest of manifests) {
1544
+ const overwrittenRoutes = new Set(Object.keys(manifest.routeManifest));
1545
+ const prefixTreeWithoutOverwrites = removeRoutesFromPrefixTree(
1546
+ merged.prefixTree,
1547
+ overwrittenRoutes
1548
+ );
1549
+ merged = {
1550
+ prefixTree: mergePrefixTrees(
1551
+ prefixTreeWithoutOverwrites,
1552
+ manifest.prefixTree
1553
+ ),
1554
+ routeManifest: {
1555
+ ...merged.routeManifest,
1556
+ ...manifest.routeManifest
1557
+ },
1558
+ routeTrailingSlash: mergeRouteRecord(
1559
+ merged.routeTrailingSlash,
1560
+ manifest.routeTrailingSlash,
1561
+ overwrittenRoutes,
1562
+ (value) => value
1563
+ ),
1564
+ prerenderRoutes: mergeRouteList(
1565
+ merged.prerenderRoutes,
1566
+ manifest.prerenderRoutes,
1567
+ overwrittenRoutes
1568
+ ),
1569
+ passthroughRoutes: mergeRouteList(
1570
+ merged.passthroughRoutes,
1571
+ manifest.passthroughRoutes,
1572
+ overwrittenRoutes
1573
+ ),
1574
+ responseTypeRoutes: mergeRouteRecord(
1575
+ merged.responseTypeRoutes,
1576
+ manifest.responseTypeRoutes,
1577
+ overwrittenRoutes,
1578
+ (value) => value
1579
+ ),
1580
+ routeSearchSchemas: mergeRouteRecord(
1581
+ merged.routeSearchSchemas,
1582
+ manifest.routeSearchSchemas,
1583
+ overwrittenRoutes,
1584
+ (value) => ({ ...value })
1585
+ ),
1586
+ _prerenderDefs: mergeRouteRecord(
1587
+ merged._prerenderDefs,
1588
+ manifest._prerenderDefs,
1589
+ overwrittenRoutes,
1590
+ (value) => value
1591
+ )
1592
+ };
1593
+ }
1594
+ return merged;
1595
+ }
1596
+ var init_merge_full_manifests = __esm({
1597
+ "src/build/merge-full-manifests.ts"() {
1598
+ "use strict";
1599
+ }
1600
+ });
1601
+
987
1602
  // src/vite/plugins/virtual-entries.ts
988
1603
  function getVirtualVersionContent(version) {
989
1604
  return `export const VERSION = ${JSON.stringify(version)};`;
990
1605
  }
991
- var VIRTUAL_ENTRY_BROWSER, VIRTUAL_ENTRY_SSR, VIRTUAL_IDS;
1606
+ var VIRTUAL_ENTRY_BROWSER, VIRTUAL_IDS;
992
1607
  var init_virtual_entries = __esm({
993
1608
  "src/vite/plugins/virtual-entries.ts"() {
994
1609
  "use strict";
@@ -1003,7 +1618,7 @@ import {
1003
1618
  import { createElement, StrictMode } from "react";
1004
1619
  import { hydrateRoot } from "react-dom/client";
1005
1620
  import { rscStream } from "@rangojs/router/internal/deps/html-stream-client";
1006
- import { initBrowserApp, RSCRouter } from "@rangojs/router/browser";
1621
+ import { initBrowserApp, Rango } from "@rangojs/router/browser";
1007
1622
 
1008
1623
  async function initializeApp() {
1009
1624
  const deps = {
@@ -1014,29 +1629,30 @@ async function initializeApp() {
1014
1629
  createTemporaryReferenceSet,
1015
1630
  };
1016
1631
 
1017
- await initBrowserApp({ rscStream, deps });
1632
+ // initBrowserApp resolves the initial payload and returns the browser app
1633
+ // context, including strictMode (default true) from createRouter. StrictMode
1634
+ // is the default; createRouter({ strictMode: false }) ships the opt-out in the
1635
+ // payload metadata. StrictMode emits no DOM, so toggling never changes markup.
1636
+ const { strictMode, initialPayload } = await initBrowserApp({ rscStream, deps });
1018
1637
 
1638
+ if (import.meta.hot) {
1639
+ const { startDevDiscoveryHandshake } = await import(
1640
+ "@rangojs/router/internal/browser/dev-discovery"
1641
+ );
1642
+ startDevDiscoveryHandshake(
1643
+ initialPayload.metadata?.devDiscoveryEpoch,
1644
+ import.meta.hot
1645
+ );
1646
+ }
1647
+
1648
+ const app = createElement(Rango);
1019
1649
  hydrateRoot(
1020
1650
  document,
1021
- createElement(StrictMode, null, createElement(RSCRouter))
1651
+ strictMode === false ? app : createElement(StrictMode, null, app)
1022
1652
  );
1023
1653
  }
1024
1654
 
1025
1655
  initializeApp().catch(console.error);
1026
- `.trim();
1027
- VIRTUAL_ENTRY_SSR = `
1028
- import { createFromReadableStream } from "@rangojs/router/internal/deps/ssr";
1029
- import { renderToReadableStream } from "react-dom/server.edge";
1030
- import { injectRSCPayload } from "@rangojs/router/internal/deps/html-stream-server";
1031
- import { createSSRHandler } from "@rangojs/router/ssr";
1032
-
1033
- export const renderHTML = createSSRHandler({
1034
- createFromReadableStream,
1035
- renderToReadableStream,
1036
- injectRSCPayload,
1037
- loadBootstrapScriptContent: () =>
1038
- import.meta.viteRsc.loadBootstrapScriptContent("index"),
1039
- });
1040
1656
  `.trim();
1041
1657
  VIRTUAL_IDS = {
1042
1658
  browser: "virtual:rsc-router/entry.browser.js",
@@ -1047,12 +1663,37 @@ export const renderHTML = createSSRHandler({
1047
1663
  }
1048
1664
  });
1049
1665
 
1666
+ // src/vite/utils/directive-prologue.ts
1667
+ import { parseAst } from "vite";
1668
+ function hasUseClientDirective(source) {
1669
+ let program;
1670
+ try {
1671
+ program = parseAst(source, { lang: "tsx" });
1672
+ } catch {
1673
+ return false;
1674
+ }
1675
+ for (const node of program.body ?? []) {
1676
+ if (node?.type === "ExpressionStatement" && node.expression?.type === "Literal" && typeof node.expression.value === "string") {
1677
+ if (node.expression.value === "use client") return true;
1678
+ continue;
1679
+ }
1680
+ break;
1681
+ }
1682
+ return false;
1683
+ }
1684
+ var init_directive_prologue = __esm({
1685
+ "src/vite/utils/directive-prologue.ts"() {
1686
+ "use strict";
1687
+ }
1688
+ });
1689
+
1050
1690
  // src/vite/plugins/version-plugin.ts
1051
1691
  var version_plugin_exports = {};
1052
1692
  __export(version_plugin_exports, {
1053
- createVersionPlugin: () => createVersionPlugin
1693
+ createVersionPlugin: () => createVersionPlugin,
1694
+ isViteDepCachePath: () => isViteDepCachePath
1054
1695
  });
1055
- import { parseAst } from "vite";
1696
+ import { parseAst as parseAst2 } from "vite";
1056
1697
  function isCodeModule(id) {
1057
1698
  return /\.(tsx?|jsx?)($|\?)/.test(id);
1058
1699
  }
@@ -1060,23 +1701,13 @@ function normalizeModuleId(id) {
1060
1701
  return id.split("?", 1)[0];
1061
1702
  }
1062
1703
  function getClientModuleSignature(source) {
1704
+ if (!hasUseClientDirective(source)) return void 0;
1063
1705
  let program;
1064
1706
  try {
1065
- program = parseAst(source, { jsx: true });
1707
+ program = parseAst2(source, { lang: "tsx" });
1066
1708
  } catch {
1067
1709
  return void 0;
1068
1710
  }
1069
- let isUseClient = false;
1070
- for (const node of program.body ?? []) {
1071
- if (node?.type === "ExpressionStatement" && node.expression?.type === "Literal" && typeof node.expression.value === "string") {
1072
- if (node.expression.value === "use client") {
1073
- isUseClient = true;
1074
- }
1075
- continue;
1076
- }
1077
- break;
1078
- }
1079
- if (!isUseClient) return void 0;
1080
1711
  const exports = /* @__PURE__ */ new Set();
1081
1712
  let hasDefault = false;
1082
1713
  let hasExportAll = false;
@@ -1145,11 +1776,12 @@ function createVersionPlugin() {
1145
1776
  let currentVersion = buildVersion;
1146
1777
  let isDev = false;
1147
1778
  let server = null;
1779
+ let resolvedCacheDir;
1148
1780
  const clientModuleSignatures = /* @__PURE__ */ new Map();
1149
1781
  let versionCounter = 0;
1150
1782
  const bumpVersion = (reason) => {
1151
1783
  currentVersion = Date.now().toString(16) + String(++versionCounter);
1152
- console.log(`[rsc-router] ${reason}, version updated: ${currentVersion}`);
1784
+ console.log(`[rango] ${reason}, version updated: ${currentVersion}`);
1153
1785
  const rscEnv = server?.environments?.rsc;
1154
1786
  const versionMod = rscEnv?.moduleGraph?.getModuleById(
1155
1787
  "\0" + VIRTUAL_IDS.version
@@ -1161,8 +1793,16 @@ function createVersionPlugin() {
1161
1793
  return {
1162
1794
  name: "@rangojs/router:version",
1163
1795
  enforce: "pre",
1796
+ // The build-time shell capture phase (producer B, #699) stamps entries
1797
+ // with THIS instance's version — the value folded into the shipped worker
1798
+ // — never the discovery temp server's own version-plugin value (a
1799
+ // different Date.now() stamp that would fail the serve-side gate).
1800
+ api: {
1801
+ getBuildVersion: () => currentVersion
1802
+ },
1164
1803
  configResolved(config) {
1165
1804
  isDev = config.command === "serve";
1805
+ resolvedCacheDir = config.cacheDir ? String(config.cacheDir).replace(/\\/g, "/") : void 0;
1166
1806
  },
1167
1807
  configureServer(devServer) {
1168
1808
  server = devServer;
@@ -1199,11 +1839,11 @@ function createVersionPlugin() {
1199
1839
  }
1200
1840
  return null;
1201
1841
  },
1202
- // Track RSC module changes and update version
1203
1842
  async hotUpdate(ctx) {
1204
1843
  if (!isDev) return;
1205
1844
  const isRscModule = this.environment?.name === "rsc";
1206
1845
  if (!isRscModule) return;
1846
+ if (isViteDepCachePath(ctx.file, resolvedCacheDir)) return;
1207
1847
  if (ctx.modules.length === 1 && ctx.modules[0].id === "\0" + VIRTUAL_IDS.version) {
1208
1848
  return;
1209
1849
  }
@@ -1233,10 +1873,22 @@ function createVersionPlugin() {
1233
1873
  }
1234
1874
  };
1235
1875
  }
1876
+ function isViteDepCachePath(filePath, cacheDir) {
1877
+ if (!filePath) return false;
1878
+ const normalized = filePath.replace(/\\/g, "/");
1879
+ if (cacheDir) {
1880
+ const normalizedCacheDir = cacheDir.replace(/\\/g, "/").replace(/\/+$/, "");
1881
+ if (normalized === normalizedCacheDir || normalized.startsWith(normalizedCacheDir + "/")) {
1882
+ return true;
1883
+ }
1884
+ }
1885
+ return /\/node_modules\/\.vite[^/]*\//.test(normalized) || normalized.includes("/.vite-isolated/");
1886
+ }
1236
1887
  var init_version_plugin = __esm({
1237
1888
  "src/vite/plugins/version-plugin.ts"() {
1238
1889
  "use strict";
1239
1890
  init_virtual_entries();
1891
+ init_directive_prologue();
1240
1892
  }
1241
1893
  });
1242
1894
 
@@ -1278,7 +1930,7 @@ var runtime_discovery_exports = {};
1278
1930
  __export(runtime_discovery_exports, {
1279
1931
  discoverAndWriteRouteTypes: () => discoverAndWriteRouteTypes
1280
1932
  });
1281
- import { dirname as dirname3, join as join3, basename, resolve as resolve3 } from "node:path";
1933
+ import { resolve as resolve3 } from "node:path";
1282
1934
  import { existsSync as existsSync4, readFileSync as readFileSync4, writeFileSync as writeFileSync3 } from "node:fs";
1283
1935
  async function discoverAndWriteRouteTypes(opts) {
1284
1936
  let createViteServer;
@@ -1355,17 +2007,28 @@ async function discoverAndWriteRouteTypes(opts) {
1355
2007
  );
1356
2008
  }
1357
2009
  const buildMod = await rscEnv.runner.import("@rangojs/router/build");
1358
- const generateManifest = buildMod.generateManifest;
1359
- if (!generateManifest) {
1360
- throw new Error("generateManifest not found in @rangojs/router/build");
2010
+ const generateManifestFull = buildMod.generateManifestFull;
2011
+ if (!generateManifestFull) {
2012
+ throw new Error(
2013
+ "generateManifestFull not found in @rangojs/router/build"
2014
+ );
1361
2015
  }
1362
2016
  const outputFiles = [];
1363
2017
  let totalRouteCount = 0;
1364
- let routerMountIndex = 0;
2018
+ let globalMountIndex = 0;
2019
+ let routerCount = 0;
1365
2020
  for (const [id, router] of registry) {
1366
- if (!router.urlpatterns) continue;
1367
- const manifest = generateManifest(router.urlpatterns, routerMountIndex);
1368
- routerMountIndex++;
2021
+ const mounts = router.__urlpatternMounts ?? (router.urlpatterns ? [{ patterns: router.urlpatterns }] : []);
2022
+ if (mounts.length === 0) continue;
2023
+ const mountManifests = [];
2024
+ for (const mount of mounts) {
2025
+ mountManifests.push(
2026
+ await generateManifestFull(mount.patterns, globalMountIndex)
2027
+ );
2028
+ globalMountIndex++;
2029
+ }
2030
+ const manifest = mergeFullManifests(mountManifests);
2031
+ routerCount++;
1369
2032
  const rawManifest = manifest.routeManifest;
1370
2033
  const routeManifest = {};
1371
2034
  for (const [name, pattern] of Object.entries(rawManifest)) {
@@ -1388,22 +2051,12 @@ This means createRouter() stack trace parsing matched an internal frame.
1388
2051
  Set an explicit \`id\` on createRouter() or check the call site.`
1389
2052
  );
1390
2053
  }
1391
- if (!routeSearchSchemas || Object.keys(routeSearchSchemas).length === 0) {
1392
- const staticParsed = buildCombinedRouteMapForRouterFile(sourceFile);
1393
- if (Object.keys(staticParsed.searchSchemas).length > 0) {
1394
- const filtered = {};
1395
- for (const name of Object.keys(routeManifest)) {
1396
- const schema = staticParsed.searchSchemas[name];
1397
- if (schema) filtered[name] = schema;
1398
- }
1399
- if (Object.keys(filtered).length > 0) {
1400
- routeSearchSchemas = filtered;
1401
- }
1402
- }
1403
- }
1404
- const routerDir = dirname3(sourceFile);
1405
- const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
1406
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
2054
+ routeSearchSchemas = resolveSearchSchemas(
2055
+ Object.keys(routeManifest),
2056
+ routeSearchSchemas,
2057
+ sourceFile
2058
+ );
2059
+ const outPath = genFileTsPath(sourceFile);
1407
2060
  const source = generateRouteTypesSource(
1408
2061
  routeManifest,
1409
2062
  routeSearchSchemas && Object.keys(routeSearchSchemas).length > 0 ? routeSearchSchemas : void 0
@@ -1420,7 +2073,7 @@ Set an explicit \`id\` on createRouter() or check the call site.`
1420
2073
  );
1421
2074
  }
1422
2075
  return {
1423
- routerCount: routerMountIndex,
2076
+ routerCount,
1424
2077
  routeCount: totalRouteCount,
1425
2078
  outputFiles
1426
2079
  };
@@ -1434,13 +2087,14 @@ var init_runtime_discovery = __esm({
1434
2087
  "src/build/runtime-discovery.ts"() {
1435
2088
  "use strict";
1436
2089
  init_generate_route_types();
2090
+ init_merge_full_manifests();
1437
2091
  init_route_name();
1438
2092
  }
1439
2093
  });
1440
2094
 
1441
2095
  // src/bin/rango.ts
1442
2096
  init_generate_route_types();
1443
- import { resolve as resolve4, dirname as dirname4 } from "node:path";
2097
+ import { resolve as resolve4, dirname as dirname3 } from "node:path";
1444
2098
  import { readFileSync as readFileSync5, statSync, existsSync as existsSync5 } from "node:fs";
1445
2099
  var [command, ...rawArgs] = process.argv.slice(2);
1446
2100
  if (command === "generate") {
@@ -1511,12 +2165,12 @@ Examples:
1511
2165
  );
1512
2166
  }
1513
2167
  function findProjectRoot(fromPath) {
1514
- let dir = dirname4(resolve4(fromPath));
1515
- while (dir !== dirname4(dir)) {
2168
+ let dir = dirname3(resolve4(fromPath));
2169
+ while (dir !== dirname3(dir)) {
1516
2170
  if (existsSync5(resolve4(dir, "package.json")) || existsSync5(resolve4(dir, "vite.config.ts")) || existsSync5(resolve4(dir, "vite.config.js"))) {
1517
2171
  return dir;
1518
2172
  }
1519
- dir = dirname4(dir);
2173
+ dir = dirname3(dir);
1520
2174
  }
1521
2175
  return process.cwd();
1522
2176
  }