@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
@@ -28,6 +28,7 @@ import {
28
28
  getImportedFnNames,
29
29
  collectCreateExportBindings,
30
30
  buildUnsupportedShapeWarning,
31
+ findUnsupportedCreateCallSites,
31
32
  isExportOnlyFile,
32
33
  } from "./expose-ids/export-analysis.js";
33
34
  import {
@@ -39,10 +40,12 @@ import {
39
40
  transformHandles,
40
41
  transformLocationState,
41
42
  generateWholeFileStubs,
42
- generateExprStubs,
43
43
  stubHandlerExprs,
44
44
  transformHandlerIds,
45
45
  } from "./expose-ids/handler-transform.js";
46
+ import { createRangoDebugger, createCounter, NS } from "../debug.js";
47
+
48
+ const debug = createRangoDebugger(NS.transform);
46
49
 
47
50
  // Re-exports consumed by other packages/plugins
48
51
  export { exposeRouterId } from "./expose-ids/router-transform.js";
@@ -65,6 +68,52 @@ const VIRTUAL_HANDLER_PREFIX = "virtual:handler-extract:";
65
68
  // Consolidated plugin
66
69
  // ---------------------------------------------------------------------------
67
70
 
71
+ interface RscScanPluginApi {
72
+ manager?: { isScanBuild?: boolean };
73
+ }
74
+
75
+ /**
76
+ * Stub export-only loader modules before plugin-rsc reduces scan modules to
77
+ * imports. The regular post transform remains authoritative outside scan builds.
78
+ *
79
+ * Handles and location-state definitions are intentionally excluded: handle
80
+ * collect functions run in the browser, and location-state definitions are
81
+ * callable browser objects. Their dependencies must remain visible to non-RSC
82
+ * validation rather than being hidden behind an opaque scan stub.
83
+ */
84
+ export function createLoaderScanStubPlugin(): Plugin {
85
+ let projectRoot = "";
86
+ let rscApi: RscScanPluginApi | undefined;
87
+
88
+ return {
89
+ name: "@rangojs/router:loader-scan-stubs",
90
+ apply: "build",
91
+ configResolved(config) {
92
+ projectRoot = config.root;
93
+ rscApi = config.plugins.find((plugin) => plugin.name === "rsc:minimal")
94
+ ?.api as RscScanPluginApi | undefined;
95
+ },
96
+ transform(code, id) {
97
+ if (
98
+ !rscApi?.manager?.isScanBuild ||
99
+ this.environment?.name === "rsc" ||
100
+ id.includes("/node_modules/") ||
101
+ !code.includes("createLoader") ||
102
+ !hasCreateLoaderImport(code)
103
+ ) {
104
+ return;
105
+ }
106
+
107
+ const fnNames = getImportedFnNames(code, "createLoader");
108
+ const bindings = collectCreateExportBindings(code, fnNames);
109
+ const filePath = normalizePath(path.relative(projectRoot, id));
110
+ return (
111
+ generateClientLoaderStubs(bindings, code, filePath, true) ?? undefined
112
+ );
113
+ },
114
+ };
115
+ }
116
+
68
117
  export function exposeInternalIds(options?: { forceBuild?: boolean }): Plugin {
69
118
  let config: ResolvedConfig;
70
119
  let isBuild = false;
@@ -87,10 +136,16 @@ export function exposeInternalIds(options?: { forceBuild?: boolean }): Plugin {
87
136
  // De-duplicate unsupported shape warnings across repeated transforms.
88
137
  const unsupportedShapeWarnings = new Set<string>();
89
138
 
139
+ const counter = createCounter(debug, "expose-internal-ids");
140
+
90
141
  return {
91
142
  name: "@rangojs/router:expose-internal-ids",
92
143
  enforce: "post",
93
144
 
145
+ buildEnd() {
146
+ counter?.flush();
147
+ },
148
+
94
149
  api: {
95
150
  prerenderHandlerModules,
96
151
  staticHandlerModules,
@@ -175,6 +230,16 @@ ${lazyImports.join(",\n")}
175
230
  async buildStart() {
176
231
  if (!isBuild) return;
177
232
 
233
+ // The loader pre-scan walks and reads the entire project, but the
234
+ // loaderRegistry it populates is consumed only by the RSC loader-manifest
235
+ // virtual module (and the transform hook already gates its registry writes
236
+ // with isRscEnv). plugin-rsc runs ~5 build passes (rsc-scan, ssr-scan, rsc,
237
+ // client, ssr) over this single shared plugin instance; without this gate
238
+ // the full-tree I/O ran on every pass with no consumer on the non-RSC
239
+ // ones. Skip only when the environment is known and not RSC, so an
240
+ // unavailable environment still falls through (no empty registry).
241
+ if (this.environment && this.environment.name !== "rsc") return;
242
+
178
243
  const fs = await import("node:fs/promises");
179
244
 
180
245
  const SKIP_DIRS = new Set(["node_modules", "dist", "build", "coverage"]);
@@ -233,554 +298,554 @@ ${lazyImports.join(",\n")}
233
298
  transform(code, id) {
234
299
  if (id.includes("/node_modules/")) return;
235
300
 
236
- const filePath = normalizePath(path.relative(projectRoot, id));
237
- const isRscEnv = this.environment?.name === "rsc";
238
-
239
- // Warn if named-routes.gen is imported in a client component.
240
- // NamedRoutes is server-only data and would bloat the client bundle.
241
- if (
242
- id.includes(".named-routes.gen.") &&
243
- !isRscEnv &&
244
- this.environment?.name === "client"
245
- ) {
246
- this.warn(
247
- `\n` +
248
- `!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n` +
249
- `!! !!\n` +
250
- `!! WARNING: NamedRoutes imported in a CLIENT component! !!\n` +
251
- `!! !!\n` +
252
- `!! File: ${filePath.padEnd(53)}!!\n` +
253
- `!! !!\n` +
254
- `!! NamedRoutes contains your entire route structure — every !!\n` +
255
- `!! route name and URL pattern in your application. Shipping !!\n` +
256
- `!! this to the browser exposes your full routing topology to !!\n` +
257
- `!! the client, which is a security concern (internal/admin !!\n` +
258
- `!! routes, API endpoints, hidden paths become visible). !!\n` +
259
- `!! !!\n` +
260
- `!! It also bloats the client bundle — this map contains all !!\n` +
261
- `!! named routes in your application. !!\n` +
262
- `!! !!\n` +
263
- `!! Fix: remove the import or move it to a server component. !!\n` +
264
- `!! !!\n` +
265
- `!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n`,
266
- );
267
- }
268
-
269
- // Fast exit: if the file doesn't import from @rangojs/router at all,
270
- // skip all create* analysis and transforms.
271
- if (!code.includes("@rangojs/router")) return;
272
-
273
- // Detect all relevant imports in one pass
274
- const has = detectImports(code);
275
-
276
- // Quick bail-out: also check for raw create* identifiers.
277
- // This is safe even with aliases (e.g., `import { createLoader as cl }`)
278
- // because the import statement itself always contains the canonical name
279
- // "createLoader", so code.includes("createLoader") will still match.
280
- const hasLoaderCode = has.loader && code.includes("createLoader");
281
- const hasHandleCode = has.handle && code.includes("createHandle");
282
- const hasLocationStateCode =
283
- has.locationState && code.includes("createLocationState");
284
- const hasPrerenderHandlerCode =
285
- has.prerenderHandler && code.includes("Prerender");
286
- const hasStaticHandlerCode = has.staticHandler && code.includes("Static");
287
- if (
288
- !hasLoaderCode &&
289
- !hasHandleCode &&
290
- !hasLocationStateCode &&
291
- !hasPrerenderHandlerCode &&
292
- !hasStaticHandlerCode
293
- ) {
294
- return;
295
- }
301
+ const __t0 = counter ? performance.now() : 0;
302
+ try {
303
+ const filePath = normalizePath(path.relative(projectRoot, id));
304
+ const isRscEnv = this.environment?.name === "rsc";
296
305
 
297
- // Per-invocation caches to avoid redundant AST parsing.
298
- // getImportedFnNames is cached by canonical name (imports never change).
299
- // collectCreateExportBindings is cached by fnNames key; the cache is
300
- // cleared when `code` changes (e.g., after inline handler extraction).
301
- const _fnNamesCache = new Map<string, string[]>();
302
- const _bindingsCache = new Map<string, CreateExportBinding[]>();
303
- let _cachedAst: any;
304
- let _astParseFailed = false;
305
- let _astCodeRef = code;
306
-
307
- const getFnNames = (canonicalName: string): string[] => {
308
- let result = _fnNamesCache.get(canonicalName);
309
- if (!result) {
310
- result = getImportedFnNames(code, canonicalName);
311
- _fnNamesCache.set(canonicalName, result);
312
- }
313
- return result;
314
- };
315
-
316
- // Lazy AST parse: parsed once and shared across all
317
- // collectCreateExportBindings calls for the same code string.
318
- const lazyAst = (): any | undefined => {
319
- if (code !== _astCodeRef) {
320
- _cachedAst = undefined;
321
- _astParseFailed = false;
322
- _astCodeRef = code;
323
- }
324
- if (_cachedAst !== undefined || _astParseFailed) return _cachedAst;
325
- try {
326
- _cachedAst = parseAst(code, { jsx: true });
327
- } catch {
328
- _astParseFailed = true;
329
- }
330
- return _cachedAst;
331
- };
332
-
333
- const getBindings = (
334
- currentCode: string,
335
- fnNames: string[],
336
- ): CreateExportBinding[] => {
337
- const key = fnNames.join("\0");
338
- let result = _bindingsCache.get(key);
339
- if (!result) {
340
- result = collectCreateExportBindings(currentCode, fnNames, lazyAst());
341
- _bindingsCache.set(key, result);
306
+ // Warn if named-routes.gen is imported in a client component.
307
+ // NamedRoutes is server-only data and would bloat the client bundle.
308
+ if (
309
+ id.includes(".named-routes.gen.") &&
310
+ !isRscEnv &&
311
+ this.environment?.name === "client"
312
+ ) {
313
+ this.warn(
314
+ `\n` +
315
+ `!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n` +
316
+ `!! !!\n` +
317
+ `!! WARNING: NamedRoutes imported in a CLIENT component! !!\n` +
318
+ `!! !!\n` +
319
+ `!! File: ${filePath.padEnd(53)}!!\n` +
320
+ `!! !!\n` +
321
+ `!! NamedRoutes contains your entire route structure — every !!\n` +
322
+ `!! route name and URL pattern in your application. Shipping !!\n` +
323
+ `!! this to the browser exposes your full routing topology to !!\n` +
324
+ `!! the client, which is a security concern (internal/admin !!\n` +
325
+ `!! routes, API endpoints, hidden paths become visible). !!\n` +
326
+ `!! !!\n` +
327
+ `!! It also bloats the client bundle this map contains all !!\n` +
328
+ `!! named routes in your application. !!\n` +
329
+ `!! !!\n` +
330
+ `!! Fix: remove the import or move it to a server component. !!\n` +
331
+ `!! !!\n` +
332
+ `!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n`,
333
+ );
342
334
  }
343
- return result;
344
- };
345
-
346
- // Warn on create* declaration shapes that are currently unsupported by
347
- // non-AST transforms (loader/handle/locationState only).
348
- for (const cfg of STRICT_CREATE_CONFIGS) {
349
- const hasCode =
350
- cfg.fnName === "createLoader"
351
- ? hasLoaderCode
352
- : cfg.fnName === "createHandle"
353
- ? hasHandleCode
354
- : hasLocationStateCode;
355
- if (!hasCode) continue;
356
-
357
- const fnNames = getFnNames(cfg.fnName);
358
- const totalCalls = countCreateCallsForNames(code, fnNames);
359
- const supportedBindings = getBindings(code, fnNames).length;
360
- if (totalCalls <= supportedBindings) continue;
361
-
362
- const warnKey = `${id}::${cfg.fnName}`;
363
- if (unsupportedShapeWarnings.has(warnKey)) continue;
364
- unsupportedShapeWarnings.add(warnKey);
365
- this.warn(buildUnsupportedShapeWarning(filePath, cfg.fnName));
366
- }
367
335
 
368
- // --- Loader: track for manifest (RSC env only) ---
369
- if (hasLoaderCode && isRscEnv) {
370
- const fnNames = getFnNames("createLoader");
371
- const bindings = getBindings(code, fnNames);
372
- for (const binding of bindings) {
373
- const exportName = binding.exportNames[0];
374
- const hashedId = hashId(filePath, exportName);
375
- loaderRegistry.set(hashedId, {
376
- filePath,
377
- exportName,
378
- });
336
+ // Fast exit: if the file doesn't import from @rangojs/router at all,
337
+ // skip all create* analysis and transforms.
338
+ if (!code.includes("@rangojs/router")) return;
339
+
340
+ // Detect all relevant imports in one pass
341
+ const has = detectImports(code);
342
+
343
+ // Quick bail-out: also check for raw create* identifiers.
344
+ // This is safe even with aliases (e.g., `import { createLoader as cl }`)
345
+ // because the import statement itself always contains the canonical name
346
+ // "createLoader", so code.includes("createLoader") will still match.
347
+ const hasLoaderCode = has.loader && code.includes("createLoader");
348
+ const hasHandleCode = has.handle && code.includes("createHandle");
349
+ const hasLocationStateCode =
350
+ has.locationState && code.includes("createLocationState");
351
+ const hasPrerenderHandlerCode =
352
+ has.prerenderHandler && code.includes("Prerender");
353
+ const hasStaticHandlerCode =
354
+ has.staticHandler && code.includes("Static");
355
+ if (
356
+ !hasLoaderCode &&
357
+ !hasHandleCode &&
358
+ !hasLocationStateCode &&
359
+ !hasPrerenderHandlerCode &&
360
+ !hasStaticHandlerCode
361
+ ) {
362
+ return;
379
363
  }
380
- }
381
364
 
382
- // --- Loader: client stubs for non-RSC environments ---
383
- if (hasLoaderCode && !isRscEnv) {
384
- const fnNames = getFnNames("createLoader");
385
- const bindings = getBindings(code, fnNames);
386
- const stubResult = generateClientLoaderStubs(
387
- bindings,
388
- code,
389
- filePath,
390
- isBuild,
391
- );
392
- if (stubResult) return stubResult;
393
- }
365
+ // Per-invocation caches to avoid redundant AST parsing.
366
+ // getImportedFnNames is cached by canonical name (imports never change).
367
+ // collectCreateExportBindings is cached by fnNames key; the cache is
368
+ // cleared when `code` changes (e.g., after inline handler extraction).
369
+ const _fnNamesCache = new Map<string, string[]>();
370
+ const _bindingsCache = new Map<string, CreateExportBinding[]>();
371
+ let _cachedAst: any;
372
+ let _astParseFailed = false;
373
+ let _astCodeRef = code;
374
+
375
+ const getFnNames = (canonicalName: string): string[] => {
376
+ let result = _fnNamesCache.get(canonicalName);
377
+ if (!result) {
378
+ result = getImportedFnNames(code, canonicalName);
379
+ _fnNamesCache.set(canonicalName, result);
380
+ }
381
+ return result;
382
+ };
383
+
384
+ // Lazy AST parse: parsed once and shared across all
385
+ // collectCreateExportBindings calls for the same code string.
386
+ const lazyAst = (): any | undefined => {
387
+ if (code !== _astCodeRef) {
388
+ _cachedAst = undefined;
389
+ _astParseFailed = false;
390
+ _astCodeRef = code;
391
+ }
392
+ if (_cachedAst !== undefined || _astParseFailed) return _cachedAst;
393
+ try {
394
+ _cachedAst = parseAst(code, { lang: "tsx" });
395
+ } catch {
396
+ _astParseFailed = true;
397
+ }
398
+ return _cachedAst;
399
+ };
400
+
401
+ const getBindings = (
402
+ currentCode: string,
403
+ fnNames: string[],
404
+ ): CreateExportBinding[] => {
405
+ const key = fnNames.join("\0");
406
+ let result = _bindingsCache.get(key);
407
+ if (!result) {
408
+ result = collectCreateExportBindings(
409
+ currentCode,
410
+ fnNames,
411
+ lazyAst(),
412
+ );
413
+ _bindingsCache.set(key, result);
414
+ }
415
+ return result;
416
+ };
417
+
418
+ // Warn on create* declaration shapes that are currently unsupported by
419
+ // non-AST transforms (loader/handle/locationState only).
420
+ for (const cfg of STRICT_CREATE_CONFIGS) {
421
+ const hasCode =
422
+ cfg.fnName === "createLoader"
423
+ ? hasLoaderCode
424
+ : cfg.fnName === "createHandle"
425
+ ? hasHandleCode
426
+ : hasLocationStateCode;
427
+ if (!hasCode) continue;
394
428
 
395
- // --- PrerenderHandler: non-RSC whole-file stub replacement ---
396
- // When ALL exports are Prerender() calls, replace the entire file.
397
- // Mixed-export files are handled in the unified pipeline below.
398
- if (hasPrerenderHandlerCode && !isRscEnv) {
399
- const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
400
- const bindings = getBindings(code, fnNames);
401
- const wholeFile = generateWholeFileStubs(
402
- PRERENDER_CONFIG,
403
- bindings,
404
- code,
405
- filePath,
406
- isBuild,
407
- );
408
- if (wholeFile) return wholeFile;
409
- }
429
+ const fnNames = getFnNames(cfg.fnName);
430
+ // Locate the real (comment/string-free) create* calls not covered by
431
+ // a supported, id-injectable export shape. Empty means every call is
432
+ // fine in particular, a create*() token in a comment or string no
433
+ // longer trips a spurious warning.
434
+ const sites = findUnsupportedCreateCallSites(
435
+ code,
436
+ fnNames,
437
+ getBindings(code, fnNames),
438
+ );
439
+ if (sites.length === 0) continue;
410
440
 
411
- // --- PrerenderHandler: RSC build module tracking ---
412
- if (hasPrerenderHandlerCode && isRscEnv && isBuild) {
413
- const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
414
- const exportNames = getBindings(code, fnNames).map(
415
- (b) => b.exportNames[0],
416
- );
417
- if (exportNames.length > 0) {
418
- prerenderHandlerModules.set(id, exportNames);
441
+ const warnKey = `${id}::${cfg.fnName}`;
442
+ if (unsupportedShapeWarnings.has(warnKey)) continue;
443
+ unsupportedShapeWarnings.add(warnKey);
444
+ this.warn(buildUnsupportedShapeWarning(filePath, cfg.fnName, sites));
419
445
  }
420
- }
421
446
 
422
- // --- Inline handler extraction to virtual modules ---
423
- // Runs before stubs/tracking so inline calls become imports, then
424
- // the existing regex fast path handles both the original file's
425
- // export const patterns and the virtual modules independently.
426
- //
427
- // Cheap pre-check: count total fnName( occurrences vs export const
428
- // patterns. If they match, every call is a named export and the
429
- // regex fast path handles them -- skip the AST parse entirely.
430
- //
431
- // Each iteration creates a fresh MagicString so that AST positions
432
- // from findHandlerCalls always match the string they were parsed from.
433
- let changed = false;
434
-
435
- const handlerConfigs = [
436
- hasStaticHandlerCode && STATIC_CONFIG,
437
- hasPrerenderHandlerCode && PRERENDER_CONFIG,
438
- ]
439
- .filter((c): c is HandlerTransformConfig => !!c)
440
- .map((cfg) => {
441
- const fnNames = getFnNames(cfg.fnName);
442
- return { cfg, fnNames };
443
- });
444
-
445
- for (const { cfg, fnNames } of handlerConfigs) {
446
- const totalCalls = countCreateCallsForNames(code, fnNames);
447
- const supportedBindings = getBindings(code, fnNames).length;
448
-
449
- if (totalCalls > supportedBindings) {
450
- const iterS = new MagicString(code);
451
- const result = transformInlineHandlers(
452
- cfg.fnName,
453
- VIRTUAL_HANDLER_PREFIX,
454
- iterS,
447
+ // --- Loader: track for manifest (RSC env only) ---
448
+ if (hasLoaderCode && isRscEnv) {
449
+ const fnNames = getFnNames("createLoader");
450
+ const bindings = getBindings(code, fnNames);
451
+ for (const binding of bindings) {
452
+ const exportName = binding.exportNames[0];
453
+ const hashedId = hashId(filePath, exportName);
454
+ loaderRegistry.set(hashedId, {
455
+ filePath,
456
+ exportName,
457
+ });
458
+ }
459
+ }
460
+
461
+ // --- Loader: client stubs for non-RSC environments ---
462
+ if (hasLoaderCode && !isRscEnv) {
463
+ const fnNames = getFnNames("createLoader");
464
+ const bindings = getBindings(code, fnNames);
465
+ const stubResult = generateClientLoaderStubs(
466
+ bindings,
455
467
  code,
456
468
  filePath,
457
- virtualHandlers,
458
- id,
459
- parseAst,
469
+ isBuild,
460
470
  );
461
- if (result) {
462
- changed = true;
463
- code = iterS.toString();
464
- _bindingsCache.clear();
465
- }
471
+ if (stubResult) return stubResult;
466
472
  }
467
- }
468
473
 
469
- // --- StaticHandler: non-RSC whole-file stub replacement ---
470
- // When ALL exports are Static() calls, replace the entire file.
471
- if (hasStaticHandlerCode && !isRscEnv) {
472
- const fnNames = getFnNames(STATIC_CONFIG.fnName);
473
- const bindings = getBindings(code, fnNames);
474
- const wholeFile = generateWholeFileStubs(
475
- STATIC_CONFIG,
476
- bindings,
477
- code,
478
- filePath,
479
- isBuild,
480
- );
481
- if (wholeFile) return wholeFile;
482
- }
474
+ // --- PrerenderHandler: non-RSC whole-file stub replacement ---
475
+ // When ALL exports are Prerender() calls, replace the entire file.
476
+ // Mixed-export files are handled in the unified pipeline below.
477
+ if (hasPrerenderHandlerCode && !isRscEnv) {
478
+ const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
479
+ const bindings = getBindings(code, fnNames);
480
+ const wholeFile = generateWholeFileStubs(
481
+ PRERENDER_CONFIG,
482
+ bindings,
483
+ code,
484
+ filePath,
485
+ isBuild,
486
+ );
487
+ if (wholeFile) return wholeFile;
488
+ }
489
+
490
+ // --- Inline handler extraction to virtual modules ---
491
+ // Runs before stubs/tracking so inline calls become imports, then
492
+ // the existing regex fast path handles both the original file's
493
+ // export const patterns and the virtual modules independently.
494
+ //
495
+ // Cheap pre-check: count total fnName( occurrences vs export const
496
+ // patterns. If they match, every call is a named export and the
497
+ // regex fast path handles them -- skip the AST parse entirely.
498
+ //
499
+ // Each iteration creates a fresh MagicString so that AST positions
500
+ // from findHandlerCalls always match the string they were parsed from.
501
+ let changed = false;
502
+
503
+ const handlerConfigs = [
504
+ hasStaticHandlerCode && STATIC_CONFIG,
505
+ hasPrerenderHandlerCode && PRERENDER_CONFIG,
506
+ ]
507
+ .filter((c): c is HandlerTransformConfig => !!c)
508
+ .map((cfg) => {
509
+ const fnNames = getFnNames(cfg.fnName);
510
+ return { cfg, fnNames };
511
+ });
483
512
 
484
- // --- Mixed-type whole-file stub replacement (non-RSC) ---
485
- // When the individual whole-file checks above fail (each only checks
486
- // one type), the file has mixed exports (e.g. createLoader + Prerender).
487
- // Gather ALL stub-safe bindings and check if they cover every export.
488
- // If yes, replace the entire file with stubs — this strips server-only
489
- // imports (node:fs, DB clients, etc.) that would crash in the browser.
490
- //
491
- // Only applies when the file contains Prerender/Static (the handler
492
- // types that bring server-only code). Files with only loaders, handles,
493
- // or locationState are handled correctly by the unified pipeline below.
494
- //
495
- // Loader, Prerender, and Static exports become plain { __brand, $$id }
496
- // stubs. createHandle and createLocationState need their create*()
497
- // functions to execute (collect registration / __rsc_ls_key), so their
498
- // call expressions are preserved with only a @rangojs/router import.
499
- // This strips all server-only imports while keeping the correct
500
- // client contract for every export type.
501
- if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
502
- const prerenderFnNames = hasPrerenderHandlerCode
503
- ? getFnNames(PRERENDER_CONFIG.fnName)
504
- : [];
505
- const staticFnNames = hasStaticHandlerCode
506
- ? getFnNames(STATIC_CONFIG.fnName)
507
- : [];
508
- const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
509
- const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
510
- const lsFnNames = hasLocationStateCode
511
- ? getFnNames("createLocationState")
512
- : [];
513
-
514
- // Collect ALL recognized bindings to check export coverage
515
- const allBindings: CreateExportBinding[] = [];
516
- for (const fnNames of [
517
- prerenderFnNames,
518
- staticFnNames,
519
- loaderFnNames,
520
- handleFnNames,
521
- lsFnNames,
522
- ]) {
523
- if (fnNames.length > 0) {
524
- allBindings.push(...getBindings(code, fnNames));
513
+ for (const { cfg, fnNames } of handlerConfigs) {
514
+ const totalCalls = countCreateCallsForNames(code, fnNames);
515
+ const supportedBindings = getBindings(code, fnNames).length;
516
+
517
+ if (totalCalls > supportedBindings) {
518
+ const iterS = new MagicString(code);
519
+ const result = transformInlineHandlers(
520
+ cfg.fnName,
521
+ VIRTUAL_HANDLER_PREFIX,
522
+ iterS,
523
+ code,
524
+ filePath,
525
+ virtualHandlers,
526
+ id,
527
+ parseAst,
528
+ );
529
+ if (result) {
530
+ changed = true;
531
+ code = iterS.toString();
532
+ _bindingsCache.clear();
533
+ }
525
534
  }
526
535
  }
527
536
 
528
- // Check if preserved createHandle/createLocationState calls
529
- // reference non-exported locals (e.g. helper functions, constants).
530
- // If so, the whole-file stub would strip those locals, breaking
531
- // the call. Fall through to the unified pipeline instead.
532
- let canStubWholeFile =
533
- allBindings.length > 0 && isExportOnlyFile(code, allBindings);
537
+ // --- StaticHandler: non-RSC whole-file stub replacement ---
538
+ // When ALL exports are Static() calls, replace the entire file.
539
+ if (hasStaticHandlerCode && !isRscEnv) {
540
+ const fnNames = getFnNames(STATIC_CONFIG.fnName);
541
+ const bindings = getBindings(code, fnNames);
542
+ const wholeFile = generateWholeFileStubs(
543
+ STATIC_CONFIG,
544
+ bindings,
545
+ code,
546
+ filePath,
547
+ isBuild,
548
+ );
549
+ if (wholeFile) return wholeFile;
550
+ }
534
551
 
535
- if (
536
- canStubWholeFile &&
537
- (handleFnNames.length > 0 || lsFnNames.length > 0)
538
- ) {
539
- const exportedLocals = new Set(allBindings.map((b) => b.localName));
540
- // Collect bindings that would be stripped by whole-file replacement:
541
- // local declarations and imported bindings from non-@rangojs/router
542
- // modules. This is a regex-based heuristic it intentionally skips
543
- // edge cases (class decls, destructured bindings, combined
544
- // default+named imports) since those rarely appear in route files.
545
- const strippedBindings: string[] = [];
546
-
547
- // Skip React Fast Refresh temporaries (_c, _c2, ...) which are
548
- // injected by @vitejs/plugin-react in the client environment and
549
- // would falsely trigger the bailout.
550
- const localDeclPattern =
551
- /(?:^|;|\n)\s*(?:const|let|var|function)\s+(\w+)/g;
552
- let declMatch: RegExpExecArray | null;
553
- while ((declMatch = localDeclPattern.exec(code)) !== null) {
554
- const name = declMatch[1];
555
- if (!exportedLocals.has(name) && !/^_c\d*$/.test(name)) {
556
- strippedBindings.push(name);
552
+ // --- Mixed-type whole-file stub replacement (non-RSC) ---
553
+ // When the individual whole-file checks above fail (each only checks
554
+ // one type), the file has mixed exports (e.g. createLoader + Prerender).
555
+ // Gather ALL stub-safe bindings and check if they cover every export.
556
+ // If yes, replace the entire file with stubs — this strips server-only
557
+ // imports (node:fs, DB clients, etc.) that would crash in the browser.
558
+ //
559
+ // Only applies when the file contains Prerender/Static (the handler
560
+ // types that bring server-only code). Files with only loaders, handles,
561
+ // or locationState are handled correctly by the unified pipeline below.
562
+ //
563
+ // Loader, Prerender, and Static exports become plain { __brand, $$id }
564
+ // stubs. createHandle and createLocationState need their create*()
565
+ // functions to execute (collect registration / __rsc_ls_key), so their
566
+ // call expressions are preserved with only a @rangojs/router import.
567
+ // This strips all server-only imports while keeping the correct
568
+ // client contract for every export type.
569
+ if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
570
+ const prerenderFnNames = hasPrerenderHandlerCode
571
+ ? getFnNames(PRERENDER_CONFIG.fnName)
572
+ : [];
573
+ const staticFnNames = hasStaticHandlerCode
574
+ ? getFnNames(STATIC_CONFIG.fnName)
575
+ : [];
576
+ const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
577
+ const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
578
+ const lsFnNames = hasLocationStateCode
579
+ ? getFnNames("createLocationState")
580
+ : [];
581
+
582
+ // Collect ALL recognized bindings to check export coverage
583
+ const allBindings: CreateExportBinding[] = [];
584
+ for (const fnNames of [
585
+ prerenderFnNames,
586
+ staticFnNames,
587
+ loaderFnNames,
588
+ handleFnNames,
589
+ lsFnNames,
590
+ ]) {
591
+ if (fnNames.length > 0) {
592
+ allBindings.push(...getBindings(code, fnNames));
557
593
  }
558
594
  }
559
595
 
560
- const importPattern =
561
- /import\s*\{([^}]*)\}\s*from\s*["'](?!@rangojs\/router)[^"']*["']/g;
562
- let importMatch: RegExpExecArray | null;
563
- while ((importMatch = importPattern.exec(code)) !== null) {
564
- for (const spec of importMatch[1].split(",")) {
565
- const m = spec
566
- .trim()
567
- .match(/^[A-Za-z_$][\w$]*(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);
568
- if (m) strippedBindings.push(m[1] || m[0].trim().split(/\s/)[0]);
596
+ // Check if preserved createHandle/createLocationState calls
597
+ // reference non-exported locals (e.g. helper functions, constants).
598
+ // If so, the whole-file stub would strip those locals, breaking
599
+ // the call. Fall through to the unified pipeline instead.
600
+ let canStubWholeFile =
601
+ allBindings.length > 0 && isExportOnlyFile(code, allBindings);
602
+
603
+ if (
604
+ canStubWholeFile &&
605
+ (handleFnNames.length > 0 || lsFnNames.length > 0)
606
+ ) {
607
+ const exportedLocals = new Set(allBindings.map((b) => b.localName));
608
+ // Collect bindings that would be stripped by whole-file replacement:
609
+ // local declarations and imported bindings from non-@rangojs/router
610
+ // modules. This is a regex-based heuristic — it intentionally skips
611
+ // edge cases (class decls, destructured bindings, combined
612
+ // default+named imports) since those rarely appear in route files.
613
+ const strippedBindings: string[] = [];
614
+
615
+ // Skip React Fast Refresh temporaries (_c, _c2, ...) which are
616
+ // injected by @vitejs/plugin-react in the client environment and
617
+ // would falsely trigger the bailout.
618
+ const localDeclPattern =
619
+ /(?:^|;|\n)\s*(?:const|let|var|function)\s+(\w+)/g;
620
+ let declMatch: RegExpExecArray | null;
621
+ while ((declMatch = localDeclPattern.exec(code)) !== null) {
622
+ const name = declMatch[1];
623
+ if (!exportedLocals.has(name) && !/^_c\d*$/.test(name)) {
624
+ strippedBindings.push(name);
625
+ }
569
626
  }
570
- }
571
- const defaultImportPattern =
572
- /import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
573
- while ((importMatch = defaultImportPattern.exec(code)) !== null) {
574
- strippedBindings.push(importMatch[1]);
575
- }
576
- const nsImportPattern =
577
- /import\s+\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
578
- while ((importMatch = nsImportPattern.exec(code)) !== null) {
579
- strippedBindings.push(importMatch[1]);
580
- }
581
627
 
582
- if (strippedBindings.length > 0) {
583
- const preservedBindings = allBindings.filter((b) => {
584
- const fc = code.slice(b.callExprStart, b.callOpenParenPos + 1);
585
- return (
586
- handleFnNames.some((n) => fc.includes(n)) ||
587
- lsFnNames.some((n) => fc.includes(n))
628
+ const importPattern =
629
+ /import\s*\{([^}]*)\}\s*from\s*["'](?!@rangojs\/router)[^"']*["']/g;
630
+ let importMatch: RegExpExecArray | null;
631
+ while ((importMatch = importPattern.exec(code)) !== null) {
632
+ for (const spec of importMatch[1].split(",")) {
633
+ const m = spec
634
+ .trim()
635
+ .match(/^[A-Za-z_$][\w$]*(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);
636
+ if (m)
637
+ strippedBindings.push(m[1] || m[0].trim().split(/\s/)[0]);
638
+ }
639
+ }
640
+ const defaultImportPattern =
641
+ /import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
642
+ while ((importMatch = defaultImportPattern.exec(code)) !== null) {
643
+ strippedBindings.push(importMatch[1]);
644
+ }
645
+ const nsImportPattern =
646
+ /import\s+\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
647
+ while ((importMatch = nsImportPattern.exec(code)) !== null) {
648
+ strippedBindings.push(importMatch[1]);
649
+ }
650
+
651
+ if (strippedBindings.length > 0) {
652
+ const preservedBindings = allBindings.filter((b) => {
653
+ const fc = code.slice(b.callExprStart, b.callOpenParenPos + 1);
654
+ return (
655
+ handleFnNames.some((n) => fc.includes(n)) ||
656
+ lsFnNames.some((n) => fc.includes(n))
657
+ );
658
+ });
659
+ const strippedRe = new RegExp(
660
+ `\\b(?:${strippedBindings.join("|")})\\b`,
588
661
  );
589
- });
590
- const strippedRe = new RegExp(
591
- `\\b(?:${strippedBindings.join("|")})\\b`,
592
- );
593
- canStubWholeFile = !preservedBindings.some((b) => {
594
- const expr = code.slice(b.callExprStart, b.callCloseParenPos + 1);
595
- return strippedRe.test(expr);
596
- });
662
+ canStubWholeFile = !preservedBindings.some((b) => {
663
+ const expr = code.slice(
664
+ b.callExprStart,
665
+ b.callCloseParenPos + 1,
666
+ );
667
+ return strippedRe.test(expr);
668
+ });
669
+ }
597
670
  }
598
- }
599
671
 
600
- if (canStubWholeFile) {
601
- const lines: string[] = [];
602
- const neededImports: string[] = [];
603
- if (handleFnNames.length > 0) neededImports.push("createHandle");
604
- if (lsFnNames.length > 0) neededImports.push("createLocationState");
605
- if (neededImports.length > 0) {
606
- lines.push(
607
- `import { ${neededImports.join(", ")} } from "@rangojs/router";`,
608
- );
609
- }
672
+ if (canStubWholeFile) {
673
+ const lines: string[] = [];
674
+ const neededImports: string[] = [];
675
+ if (handleFnNames.length > 0) neededImports.push("createHandle");
676
+ if (lsFnNames.length > 0) neededImports.push("createLocationState");
677
+ if (neededImports.length > 0) {
678
+ lines.push(
679
+ `import { ${neededImports.join(", ")} } from "@rangojs/router";`,
680
+ );
681
+ }
610
682
 
611
- for (const binding of allBindings) {
612
- const fnCall = code.slice(
613
- binding.callExprStart,
614
- binding.callOpenParenPos + 1,
615
- );
616
- const isHandle = handleFnNames.some((n) => fnCall.includes(n));
617
- const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
618
-
619
- // Aliases share the primary name's ID (matches server transforms).
620
- const primaryName = binding.exportNames[0];
621
- const stubId = makeStubId(filePath, primaryName, isBuild);
622
-
623
- if (isHandle || isLocationState) {
624
- // Rewrite alias to canonical name since the stub file only
625
- // imports canonical names from @rangojs/router.
626
- // Strip React Fast Refresh `_c = ` wrappers from args
627
- // (e.g. `_c = (segments) => ...` → `(segments) => ...`)
628
- const rawArgs = code
629
- .slice(binding.callOpenParenPos + 1, binding.callCloseParenPos)
630
- .replace(/\b_c\d*\s*=\s*/g, "");
631
- const canonicalName = isHandle
632
- ? "createHandle"
633
- : "createLocationState";
634
- const activeFnNames = isHandle ? handleFnNames : lsFnNames;
635
-
636
- // Reconstruct the function name (handling aliases + generics)
637
- let rawCallee = code.slice(
683
+ for (const binding of allBindings) {
684
+ const fnCall = code.slice(
638
685
  binding.callExprStart,
639
- binding.callOpenParenPos,
686
+ binding.callOpenParenPos + 1,
640
687
  );
641
- for (const alias of activeFnNames) {
642
- if (alias !== canonicalName && rawCallee.startsWith(alias)) {
643
- rawCallee = canonicalName + rawCallee.slice(alias.length);
644
- break;
688
+ const isHandle = handleFnNames.some((n) => fnCall.includes(n));
689
+ const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
690
+
691
+ // Aliases share the primary name's ID (matches server transforms).
692
+ const primaryName = binding.exportNames[0];
693
+ const stubId = makeStubId(filePath, primaryName, isBuild);
694
+
695
+ if (isHandle || isLocationState) {
696
+ // Rewrite alias to canonical name since the stub file only
697
+ // imports canonical names from @rangojs/router.
698
+ // Strip React Fast Refresh `_c = ` wrappers from args
699
+ // (e.g. `_c = (segments) => ...` → `(segments) => ...`)
700
+ const rawArgs = code
701
+ .slice(
702
+ binding.callOpenParenPos + 1,
703
+ binding.callCloseParenPos,
704
+ )
705
+ .replace(/\b_c\d*\s*=\s*/g, "");
706
+ const canonicalName = isHandle
707
+ ? "createHandle"
708
+ : "createLocationState";
709
+ const activeFnNames = isHandle ? handleFnNames : lsFnNames;
710
+
711
+ // Reconstruct the function name (handling aliases + generics)
712
+ let rawCallee = code.slice(
713
+ binding.callExprStart,
714
+ binding.callOpenParenPos,
715
+ );
716
+ for (const alias of activeFnNames) {
717
+ if (alias !== canonicalName && rawCallee.startsWith(alias)) {
718
+ rawCallee = canonicalName + rawCallee.slice(alias.length);
719
+ break;
720
+ }
645
721
  }
646
- }
647
722
 
648
- if (isHandle) {
649
- // createHandle checks __injectedId DURING the call, so $$id
650
- // must be a parameter, not a post-call property assignment.
651
- const idParam =
652
- binding.argCount === 0
653
- ? `undefined, "${stubId}"`
654
- : `, "${stubId}"`;
655
- lines.push(
656
- `export const ${primaryName} = ${rawCallee}(${rawArgs}${idParam});`,
657
- );
658
- lines.push(`${primaryName}.$$id = "${stubId}";`);
723
+ if (isHandle) {
724
+ // createHandle checks __injectedId DURING the call, so $$id
725
+ // must be a parameter, not a post-call property assignment.
726
+ const idParam =
727
+ binding.argCount === 0
728
+ ? `undefined, "${stubId}"`
729
+ : `, "${stubId}"`;
730
+ lines.push(
731
+ `export const ${primaryName} = ${rawCallee}(${rawArgs}${idParam});`,
732
+ );
733
+ lines.push(`${primaryName}.$$id = "${stubId}";`);
734
+ } else {
735
+ lines.push(
736
+ `export const ${primaryName} = ${rawCallee}(${rawArgs});`,
737
+ );
738
+ lines.push(
739
+ `${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`,
740
+ );
741
+ }
742
+ for (const name of binding.exportNames.slice(1)) {
743
+ lines.push(`export const ${name} = ${primaryName};`);
744
+ }
659
745
  } else {
746
+ let brand = "loader";
747
+ if (prerenderFnNames.some((n) => fnCall.includes(n))) {
748
+ brand = PRERENDER_CONFIG.brand;
749
+ } else if (staticFnNames.some((n) => fnCall.includes(n))) {
750
+ brand = STATIC_CONFIG.brand;
751
+ }
660
752
  lines.push(
661
- `export const ${primaryName} = ${rawCallee}(${rawArgs});`,
662
- );
663
- lines.push(
664
- `${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`,
753
+ `export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`,
665
754
  );
666
- }
667
- for (const name of binding.exportNames.slice(1)) {
668
- lines.push(`export const ${name} = ${primaryName};`);
669
- }
670
- } else {
671
- let brand = "loader";
672
- if (prerenderFnNames.some((n) => fnCall.includes(n))) {
673
- brand = PRERENDER_CONFIG.brand;
674
- } else if (staticFnNames.some((n) => fnCall.includes(n))) {
675
- brand = STATIC_CONFIG.brand;
676
- }
677
- lines.push(
678
- `export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`,
679
- );
680
- for (const name of binding.exportNames.slice(1)) {
681
- lines.push(`export const ${name} = ${primaryName};`);
755
+ for (const name of binding.exportNames.slice(1)) {
756
+ lines.push(`export const ${name} = ${primaryName};`);
757
+ }
682
758
  }
683
759
  }
684
- }
685
760
 
686
- return { code: lines.join("\n") + "\n", map: null };
761
+ return { code: lines.join("\n") + "\n", map: null };
762
+ }
687
763
  }
688
- }
689
764
 
690
- // --- StaticHandler: RSC build module tracking ---
691
- if (hasStaticHandlerCode && isRscEnv && isBuild) {
692
- const fnNames = getFnNames(STATIC_CONFIG.fnName);
693
- const exportNames = getBindings(code, fnNames).map(
694
- (b) => b.exportNames[0],
695
- );
696
- if (exportNames.length > 0) {
697
- staticHandlerModules.set(id, exportNames);
765
+ // RSC build module tracking (prerender + static), consumed via the
766
+ // plugin API for prerender freezing. Export-binding sets are invariant
767
+ // across the inline-extraction loop, so tracking both here is equivalent
768
+ // to the pre-extraction prerender tracking this replaces.
769
+ if (isRscEnv && isBuild) {
770
+ const trackTypes: Array<
771
+ [boolean, HandlerTransformConfig, Map<string, string[]>]
772
+ > = [
773
+ [
774
+ hasPrerenderHandlerCode,
775
+ PRERENDER_CONFIG,
776
+ prerenderHandlerModules,
777
+ ],
778
+ [hasStaticHandlerCode, STATIC_CONFIG, staticHandlerModules],
779
+ ];
780
+ for (const [has, cfg, trackMap] of trackTypes) {
781
+ if (!has) continue;
782
+ const exportNames = getBindings(code, getFnNames(cfg.fnName)).map(
783
+ (b) => b.exportNames[0],
784
+ );
785
+ if (exportNames.length > 0) trackMap.set(id, exportNames);
786
+ }
698
787
  }
699
- }
700
788
 
701
- // --- Unified MagicString transforms ---
702
- // Single pipeline for all downstream transforms (loaders, handles,
703
- // locationState, handler IDs). Uses the post-extraction code so
704
- // positions are always consistent.
705
- const s = new MagicString(code);
706
-
707
- if (hasLoaderCode) {
708
- const fnNames = getFnNames("createLoader");
709
- changed =
710
- transformLoaders(getBindings(code, fnNames), s, filePath, isBuild) ||
711
- changed;
712
- }
713
- if (hasHandleCode) {
714
- const fnNames = getFnNames("createHandle");
715
- changed =
716
- transformHandles(
717
- getBindings(code, fnNames),
718
- s,
719
- code,
720
- filePath,
721
- isBuild,
722
- ) || changed;
723
- }
724
- if (hasLocationStateCode) {
725
- const fnNames = getFnNames("createLocationState");
726
- changed =
727
- transformLocationState(
728
- getBindings(code, fnNames),
729
- s,
730
- filePath,
731
- isBuild,
732
- ) || changed;
733
- }
734
- if (hasPrerenderHandlerCode) {
735
- const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
736
- const bindings = getBindings(code, fnNames);
737
- if (isRscEnv) {
789
+ // --- Unified MagicString transforms ---
790
+ // Single pipeline for all downstream transforms (loaders, handles,
791
+ // locationState, handler IDs). Uses the post-extraction code so
792
+ // positions are always consistent.
793
+ const s = new MagicString(code);
794
+
795
+ if (hasLoaderCode) {
796
+ const fnNames = getFnNames("createLoader");
738
797
  changed =
739
- transformHandlerIds(
740
- PRERENDER_CONFIG,
741
- bindings,
798
+ transformLoaders(
799
+ getBindings(code, fnNames),
742
800
  s,
743
801
  filePath,
744
802
  isBuild,
745
803
  ) || changed;
746
- } else {
747
- // Non-RSC mixed-export file: replace Prerender() calls with stubs
748
- // on the shared MagicString so sourcemaps stay accurate.
804
+ }
805
+ if (hasHandleCode) {
806
+ const fnNames = getFnNames("createHandle");
749
807
  changed =
750
- stubHandlerExprs(
751
- PRERENDER_CONFIG,
752
- bindings,
808
+ transformHandles(
809
+ getBindings(code, fnNames),
753
810
  s,
754
811
  filePath,
755
812
  isBuild,
756
813
  ) || changed;
757
814
  }
758
- }
759
- if (hasStaticHandlerCode) {
760
- const fnNames = getFnNames(STATIC_CONFIG.fnName);
761
- const bindings = getBindings(code, fnNames);
762
- if (isRscEnv) {
815
+ if (hasLocationStateCode) {
816
+ const fnNames = getFnNames("createLocationState");
763
817
  changed =
764
- transformHandlerIds(
765
- STATIC_CONFIG,
766
- bindings,
818
+ transformLocationState(
819
+ getBindings(code, fnNames),
767
820
  s,
768
821
  filePath,
769
822
  isBuild,
770
823
  ) || changed;
771
- } else {
824
+ }
825
+ // Prerender + Static share the RSC inject-id vs non-RSC stub dispatch.
826
+ // Call sites are disjoint (distinct fnNames), so loop order is irrelevant.
827
+ const finalHandlerConfigs = [
828
+ hasPrerenderHandlerCode && PRERENDER_CONFIG,
829
+ hasStaticHandlerCode && STATIC_CONFIG,
830
+ ].filter((c): c is HandlerTransformConfig => !!c);
831
+ for (const cfg of finalHandlerConfigs) {
832
+ const bindings = getBindings(code, getFnNames(cfg.fnName));
772
833
  changed =
773
- stubHandlerExprs(STATIC_CONFIG, bindings, s, filePath, isBuild) ||
834
+ (isRscEnv
835
+ ? transformHandlerIds(cfg, bindings, s, filePath, isBuild)
836
+ : stubHandlerExprs(cfg, bindings, s, filePath, isBuild)) ||
774
837
  changed;
775
838
  }
776
- }
777
839
 
778
- if (!changed) return;
840
+ if (!changed) return;
779
841
 
780
- return {
781
- code: s.toString(),
782
- map: s.generateMap({ source: id, includeContent: true }),
783
- };
842
+ return {
843
+ code: s.toString(),
844
+ map: s.generateMap({ source: id, includeContent: true }),
845
+ };
846
+ } finally {
847
+ counter?.record(id, performance.now() - __t0);
848
+ }
784
849
  },
785
850
  };
786
851
  }