@rangojs/router 0.0.0-experimental.35 → 0.0.0-experimental.358c376d

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 (1311) hide show
  1. package/AGENTS.md +11 -3
  2. package/README.md +320 -735
  3. package/dist/bin/rango.js +983 -241
  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 +62 -0
  125. package/dist/types/client-urls/types.d.ts +144 -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 +404 -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 +520 -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 +717 -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 +234 -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 +203 -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 +10725 -3898
  821. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  822. package/package.json +129 -46
  823. package/skills/api-client/SKILL.md +211 -0
  824. package/skills/breadcrumbs/SKILL.md +117 -8
  825. package/skills/bundle-analysis/SKILL.md +159 -0
  826. package/skills/cache-guide/SKILL.md +255 -25
  827. package/skills/caching/SKILL.md +414 -17
  828. package/skills/catalog.json +289 -0
  829. package/skills/client-urls/SKILL.md +307 -0
  830. package/skills/cloudflare/SKILL.md +151 -0
  831. package/skills/cloudflare/agents/openai.yaml +4 -0
  832. package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
  833. package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
  834. package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
  835. package/skills/comparison/SKILL.md +50 -0
  836. package/skills/comparison/agents/openai.yaml +4 -0
  837. package/skills/comparison/references/framework-comparison.md +858 -0
  838. package/skills/composability/SKILL.md +124 -4
  839. package/skills/css/SKILL.md +76 -0
  840. package/skills/debug-manifest/SKILL.md +5 -11
  841. package/skills/defer-hydration/SKILL.md +235 -0
  842. package/skills/deployment-caching/SKILL.md +176 -0
  843. package/skills/document-cache/SKILL.md +116 -58
  844. package/skills/fonts/SKILL.md +1 -1
  845. package/skills/handler-use/SKILL.md +364 -0
  846. package/skills/hooks/SKILL.md +73 -691
  847. package/skills/hooks/data.md +282 -0
  848. package/skills/hooks/handle-and-actions.md +110 -0
  849. package/skills/hooks/navigation.md +110 -0
  850. package/skills/hooks/outlets.md +62 -0
  851. package/skills/hooks/state.md +228 -0
  852. package/skills/hooks/urls.md +135 -0
  853. package/skills/host-router/SKILL.md +129 -27
  854. package/skills/i18n/SKILL.md +276 -0
  855. package/skills/intercept/SKILL.md +94 -18
  856. package/skills/layout/SKILL.md +62 -19
  857. package/skills/links/SKILL.md +285 -17
  858. package/skills/loader/SKILL.md +415 -55
  859. package/skills/middleware/SKILL.md +92 -16
  860. package/skills/migrate-nextjs/SKILL.md +852 -0
  861. package/skills/migrate-nextjs/backend-host-swap.md +120 -0
  862. package/skills/migrate-react-router/SKILL.md +189 -0
  863. package/skills/migrate-react-router/component-migration.md +201 -0
  864. package/skills/migrate-react-router/data-and-actions.md +236 -0
  865. package/skills/migrate-react-router/route-mapping.md +284 -0
  866. package/skills/mime-routes/SKILL.md +55 -18
  867. package/skills/observability/SKILL.md +231 -0
  868. package/skills/parallel/SKILL.md +245 -10
  869. package/skills/ppr/SKILL.md +914 -0
  870. package/skills/prerender/SKILL.md +243 -135
  871. package/skills/rango/SKILL.md +325 -24
  872. package/skills/react-compiler/SKILL.md +168 -0
  873. package/skills/response-routes/SKILL.md +180 -52
  874. package/skills/route/SKILL.md +181 -9
  875. package/skills/router-setup/SKILL.md +154 -11
  876. package/skills/scripts/SKILL.md +189 -0
  877. package/skills/server-actions/SKILL.md +776 -0
  878. package/skills/shell-manifest/SKILL.md +194 -0
  879. package/skills/streams-and-websockets/SKILL.md +283 -0
  880. package/skills/tailwind/SKILL.md +28 -4
  881. package/skills/testing/SKILL.md +131 -0
  882. package/skills/testing/bindings.md +103 -0
  883. package/skills/testing/cache-prerender.md +172 -0
  884. package/skills/testing/client-components.md +131 -0
  885. package/skills/testing/e2e-parity.md +125 -0
  886. package/skills/testing/flight.md +91 -0
  887. package/skills/testing/handles.md +153 -0
  888. package/skills/testing/loader.md +130 -0
  889. package/skills/testing/middleware.md +99 -0
  890. package/skills/testing/render-handler.md +122 -0
  891. package/skills/testing/response-routes.md +95 -0
  892. package/skills/testing/reverse-and-types.md +85 -0
  893. package/skills/testing/server-actions.md +107 -0
  894. package/skills/testing/server-tree.md +128 -0
  895. package/skills/testing/setup.md +123 -0
  896. package/skills/theme/SKILL.md +9 -6
  897. package/skills/typesafety/SKILL.md +45 -616
  898. package/skills/typesafety/env-and-bindings.md +254 -0
  899. package/skills/typesafety/generated-files-and-cli.md +342 -0
  900. package/skills/typesafety/params-and-search.md +153 -0
  901. package/skills/typesafety/route-types.md +213 -0
  902. package/skills/use-cache/SKILL.md +121 -15
  903. package/skills/vercel/SKILL.md +149 -0
  904. package/skills/view-transitions/SKILL.md +341 -0
  905. package/src/__augment-tests__/augment.ts +81 -0
  906. package/src/__augment-tests__/augmented.check.ts +116 -0
  907. package/src/__internal.ts +1 -66
  908. package/src/browser/action-coordinator.ts +53 -36
  909. package/src/browser/action-fence.ts +47 -0
  910. package/src/browser/app-shell.ts +39 -0
  911. package/src/browser/app-version.ts +14 -0
  912. package/src/browser/connection-warmup.ts +134 -0
  913. package/src/browser/cookie-name.ts +140 -0
  914. package/src/browser/dev-discovery.ts +66 -0
  915. package/src/browser/event-controller.ts +405 -168
  916. package/src/browser/history-state.ts +21 -0
  917. package/src/browser/index.ts +3 -3
  918. package/src/browser/invalidate-client-cache.ts +52 -0
  919. package/src/browser/link-interceptor.ts +469 -20
  920. package/src/browser/logging.ts +28 -0
  921. package/src/browser/merge-segment-loaders.ts +6 -4
  922. package/src/browser/navigation-bridge.ts +209 -40
  923. package/src/browser/navigation-client.ts +284 -73
  924. package/src/browser/navigation-store-handle.ts +38 -0
  925. package/src/browser/navigation-store.ts +208 -329
  926. package/src/browser/navigation-transaction.ts +18 -66
  927. package/src/browser/network-error-handler.ts +34 -7
  928. package/src/browser/notify-listeners.ts +22 -0
  929. package/src/browser/partial-update.ts +278 -126
  930. package/src/browser/prefetch/cache.ts +362 -51
  931. package/src/browser/prefetch/default-strategy.ts +74 -0
  932. package/src/browser/prefetch/fetch.ts +453 -40
  933. package/src/browser/prefetch/invalidation.ts +30 -0
  934. package/src/browser/prefetch/loader.ts +111 -0
  935. package/src/browser/prefetch/observer.ts +50 -22
  936. package/src/browser/prefetch/policy.ts +6 -0
  937. package/src/browser/prefetch/queue.ts +144 -23
  938. package/src/browser/prefetch/resource-ready.ts +77 -0
  939. package/src/browser/prefetch/runtime.ts +6 -0
  940. package/src/browser/rango-state.ts +178 -75
  941. package/src/browser/react/Link.tsx +187 -75
  942. package/src/browser/react/NavigationProvider.tsx +249 -123
  943. package/src/browser/react/ScrollRestoration.tsx +10 -6
  944. package/src/browser/react/context.ts +11 -2
  945. package/src/browser/react/filter-segment-order.ts +66 -7
  946. package/src/browser/react/index.ts +0 -48
  947. package/src/browser/react/location-state-shared.ts +178 -8
  948. package/src/browser/react/location-state.ts +39 -14
  949. package/src/browser/react/use-action.ts +6 -15
  950. package/src/browser/react/use-handle.ts +23 -69
  951. package/src/browser/react/use-href.tsx +8 -1
  952. package/src/browser/react/use-link-status.ts +33 -8
  953. package/src/browser/react/use-navigation.ts +32 -7
  954. package/src/browser/react/use-params.ts +20 -10
  955. package/src/browser/react/use-reverse.ts +106 -0
  956. package/src/browser/react/use-router.ts +47 -12
  957. package/src/browser/react/use-search-params.ts +0 -5
  958. package/src/browser/react/use-segments.ts +11 -21
  959. package/src/browser/response-adapter.ts +99 -8
  960. package/src/browser/rsc-router.tsx +375 -84
  961. package/src/browser/scroll-restoration.ts +61 -47
  962. package/src/browser/segment-reconciler.ts +44 -7
  963. package/src/browser/segment-structure-assert.ts +2 -2
  964. package/src/browser/server-action-bridge.ts +270 -71
  965. package/src/browser/types.ts +166 -37
  966. package/src/browser/validate-redirect-origin.ts +43 -16
  967. package/src/build/collect-fallback-refs.ts +107 -0
  968. package/src/build/generate-manifest.ts +217 -188
  969. package/src/build/generate-route-types.ts +6 -1
  970. package/src/build/index.ts +11 -3
  971. package/src/build/merge-full-manifests.ts +161 -0
  972. package/src/build/prefix-tree-utils.ts +123 -0
  973. package/src/build/route-trie.ts +43 -254
  974. package/src/build/route-types/ast-route-extraction.ts +15 -8
  975. package/src/build/route-types/codegen.ts +16 -5
  976. package/src/build/route-types/include-resolution.ts +521 -65
  977. package/src/build/route-types/param-extraction.ts +6 -3
  978. package/src/build/route-types/per-module-writer.ts +33 -12
  979. package/src/build/route-types/router-processing.ts +411 -154
  980. package/src/build/route-types/scan-filter.ts +9 -2
  981. package/src/build/route-types/source-scan.ts +216 -0
  982. package/src/build/runtime-discovery.ts +32 -29
  983. package/src/cache/cache-error.ts +104 -0
  984. package/src/cache/cache-exec-scope.ts +47 -0
  985. package/src/cache/cache-key-utils.ts +73 -15
  986. package/src/cache/cache-policy.ts +108 -34
  987. package/src/cache/cache-runtime.ts +566 -117
  988. package/src/cache/cache-scope.ts +431 -112
  989. package/src/cache/cache-tag.ts +149 -0
  990. package/src/cache/cf/cf-base64.ts +33 -0
  991. package/src/cache/cf/cf-cache-constants.ts +134 -0
  992. package/src/cache/cf/cf-cache-store.ts +3250 -173
  993. package/src/cache/cf/cf-cache-types.ts +417 -0
  994. package/src/cache/cf/cf-kv-utils.ts +84 -0
  995. package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
  996. package/src/cache/cf/cf-zone-purge.ts +101 -0
  997. package/src/cache/cf/index.ts +16 -17
  998. package/src/cache/document-cache.ts +202 -61
  999. package/src/cache/handle-snapshot.ts +92 -1
  1000. package/src/cache/index.ts +33 -20
  1001. package/src/cache/memory-segment-store.ts +286 -37
  1002. package/src/cache/profile-registry.ts +46 -31
  1003. package/src/cache/read-through-swr.ts +66 -16
  1004. package/src/cache/search-params-filter.ts +118 -0
  1005. package/src/cache/segment-codec.ts +80 -25
  1006. package/src/cache/shell-snapshot.ts +516 -0
  1007. package/src/cache/tag-invalidation.ts +230 -0
  1008. package/src/cache/taint.ts +83 -9
  1009. package/src/cache/types.ts +323 -100
  1010. package/src/cache/vercel/index.ts +11 -0
  1011. package/src/cache/vercel/vercel-cache-store.ts +1264 -0
  1012. package/src/client-urls/client-root.tsx +161 -0
  1013. package/src/client-urls/client-urls.ts +698 -0
  1014. package/src/client-urls/navigation.ts +237 -0
  1015. package/src/client-urls/revalidation-protocol.ts +56 -0
  1016. package/src/client-urls/server-projection.ts +579 -0
  1017. package/src/client-urls/types.ts +195 -0
  1018. package/src/client.rsc.tsx +48 -21
  1019. package/src/client.tsx +158 -294
  1020. package/src/cloudflare/index.ts +11 -0
  1021. package/src/cloudflare/tracing.ts +112 -0
  1022. package/src/component-utils.ts +19 -0
  1023. package/src/components/DefaultDocument.tsx +8 -2
  1024. package/src/context-var.ts +84 -2
  1025. package/src/debug.ts +2 -2
  1026. package/src/decode-loader-results.ts +160 -0
  1027. package/src/defer.ts +185 -0
  1028. package/src/deps/ssr.ts +4 -2
  1029. package/src/dev-discovery-protocol.ts +11 -0
  1030. package/src/encode-kv.ts +49 -0
  1031. package/src/errors.ts +44 -4
  1032. package/src/escape-script.ts +52 -0
  1033. package/src/handle.ts +104 -34
  1034. package/src/handles/MetaTags.tsx +24 -53
  1035. package/src/handles/Scripts.tsx +183 -0
  1036. package/src/handles/breadcrumbs.ts +35 -8
  1037. package/src/handles/deferred-resolution.ts +134 -0
  1038. package/src/handles/is-thenable.ts +16 -0
  1039. package/src/handles/meta.ts +14 -40
  1040. package/src/handles/script.ts +244 -0
  1041. package/src/host/cookie-handler.ts +9 -60
  1042. package/src/host/errors.ts +13 -22
  1043. package/src/host/index.ts +9 -2
  1044. package/src/host/pattern-matcher.ts +23 -52
  1045. package/src/host/router.ts +107 -99
  1046. package/src/host/testing.ts +40 -27
  1047. package/src/host/types.ts +37 -4
  1048. package/src/host/utils.ts +1 -1
  1049. package/src/href-client.ts +137 -22
  1050. package/src/index.rsc.ts +111 -13
  1051. package/src/index.ts +151 -19
  1052. package/src/internal-debug.ts +11 -10
  1053. package/src/loader-redirect.tsx +47 -0
  1054. package/src/loader-store.ts +500 -0
  1055. package/src/loader.rsc.ts +20 -13
  1056. package/src/loader.ts +12 -11
  1057. package/src/missing-id-error.ts +68 -0
  1058. package/src/outlet-context.ts +13 -1
  1059. package/src/outlet-provider.tsx +16 -6
  1060. package/src/prerender/build-shell-capture.ts +453 -0
  1061. package/src/prerender/param-hash.ts +16 -16
  1062. package/src/prerender/shell-manifest-key.ts +20 -0
  1063. package/src/prerender/store.ts +52 -42
  1064. package/src/prerender.ts +215 -86
  1065. package/src/redirect-origin.ts +143 -0
  1066. package/src/regex-escape.ts +8 -0
  1067. package/src/render-error-thrower.tsx +20 -0
  1068. package/src/response-utils.ts +62 -0
  1069. package/src/reverse.ts +65 -15
  1070. package/src/root-error-boundary.tsx +1 -19
  1071. package/src/route-content-wrapper.tsx +112 -78
  1072. package/src/route-definition/dsl-helpers.ts +519 -307
  1073. package/src/route-definition/helper-factories.ts +28 -140
  1074. package/src/route-definition/helpers-types.ts +169 -78
  1075. package/src/route-definition/index.ts +4 -2
  1076. package/src/route-definition/redirect.ts +53 -12
  1077. package/src/route-definition/resolve-handler-use.ts +160 -0
  1078. package/src/route-definition/use-item-types.ts +29 -0
  1079. package/src/route-map-builder.ts +102 -68
  1080. package/src/route-types.ts +37 -46
  1081. package/src/router/basename.ts +14 -0
  1082. package/src/router/content-negotiation.ts +211 -22
  1083. package/src/router/error-handling.ts +110 -29
  1084. package/src/router/find-match.ts +130 -29
  1085. package/src/router/handler-context.ts +105 -45
  1086. package/src/router/instrument.ts +401 -0
  1087. package/src/router/intercept-resolution.ts +108 -24
  1088. package/src/router/lazy-includes.ts +90 -63
  1089. package/src/router/loader-resolution.ts +529 -57
  1090. package/src/router/logging.ts +5 -8
  1091. package/src/router/manifest.ts +105 -56
  1092. package/src/router/match-api.ts +190 -219
  1093. package/src/router/match-context.ts +0 -22
  1094. package/src/router/match-handlers.ts +268 -171
  1095. package/src/router/match-middleware/background-revalidation.ts +66 -22
  1096. package/src/router/match-middleware/cache-lookup.ts +368 -277
  1097. package/src/router/match-middleware/cache-store.ts +175 -50
  1098. package/src/router/match-middleware/intercept-resolution.ts +8 -28
  1099. package/src/router/match-middleware/segment-resolution.ts +52 -18
  1100. package/src/router/match-pipelines.ts +1 -42
  1101. package/src/router/match-result.ts +135 -44
  1102. package/src/router/metrics.ts +22 -36
  1103. package/src/router/middleware-types.ts +26 -138
  1104. package/src/router/middleware.ts +305 -177
  1105. package/src/router/navigation-snapshot.ts +173 -0
  1106. package/src/router/params-util.ts +23 -0
  1107. package/src/router/parse-pattern.ts +115 -0
  1108. package/src/router/pattern-matching.ts +181 -150
  1109. package/src/router/prefetch-cache-ttl.ts +51 -0
  1110. package/src/router/prefetch-default.ts +59 -0
  1111. package/src/router/prefetch-limits.ts +37 -0
  1112. package/src/router/prerender-match.ts +250 -60
  1113. package/src/router/preview-match.ts +35 -103
  1114. package/src/router/request-classification.ts +291 -0
  1115. package/src/router/revalidation.ts +146 -83
  1116. package/src/router/route-snapshot.ts +256 -0
  1117. package/src/router/route-trie-builder.ts +334 -0
  1118. package/src/router/router-context.ts +11 -29
  1119. package/src/router/router-interfaces.ts +199 -37
  1120. package/src/router/router-options.ts +271 -21
  1121. package/src/router/router-registry.ts +2 -5
  1122. package/src/router/segment-resolution/fresh.ts +367 -78
  1123. package/src/router/segment-resolution/helpers.ts +116 -33
  1124. package/src/router/segment-resolution/loader-cache.ts +188 -39
  1125. package/src/router/segment-resolution/loader-mask.ts +60 -0
  1126. package/src/router/segment-resolution/loader-snapshot.ts +259 -0
  1127. package/src/router/segment-resolution/mask-nested.ts +99 -0
  1128. package/src/router/segment-resolution/revalidation.ts +520 -385
  1129. package/src/router/segment-resolution/static-store.ts +55 -15
  1130. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1131. package/src/router/segment-resolution/view-transition-default.ts +60 -0
  1132. package/src/router/segment-resolution.ts +5 -1
  1133. package/src/router/segment-wrappers.ts +8 -5
  1134. package/src/router/state-cookie-name.ts +33 -0
  1135. package/src/router/substitute-pattern-params.ts +75 -0
  1136. package/src/router/telemetry-otel.ts +171 -200
  1137. package/src/router/telemetry.ts +106 -20
  1138. package/src/router/timeout.ts +53 -22
  1139. package/src/router/tracing.ts +235 -0
  1140. package/src/router/transition-when.ts +76 -0
  1141. package/src/router/trie-matching.ts +171 -59
  1142. package/src/router/types.ts +10 -63
  1143. package/src/router/url-params.ts +57 -0
  1144. package/src/router.ts +301 -78
  1145. package/src/rsc/capture-queue.ts +218 -0
  1146. package/src/rsc/full-payload.ts +77 -0
  1147. package/src/rsc/handler-context.ts +4 -2
  1148. package/src/rsc/handler.ts +901 -519
  1149. package/src/rsc/helpers.ts +245 -47
  1150. package/src/rsc/index.ts +2 -5
  1151. package/src/rsc/json-route-result.ts +38 -0
  1152. package/src/rsc/loader-fetch.ts +129 -33
  1153. package/src/rsc/manifest-init.ts +55 -52
  1154. package/src/rsc/nonce.ts +10 -1
  1155. package/src/rsc/origin-guard.ts +39 -25
  1156. package/src/rsc/progressive-enhancement.ts +381 -74
  1157. package/src/rsc/redirect-guard.ts +102 -0
  1158. package/src/rsc/render-pipeline.ts +611 -0
  1159. package/src/rsc/response-cache-serve.ts +259 -0
  1160. package/src/rsc/response-error.ts +79 -12
  1161. package/src/rsc/response-route-handler.ts +80 -206
  1162. package/src/rsc/routine-plan.ts +359 -0
  1163. package/src/rsc/rsc-rendering.ts +1625 -156
  1164. package/src/rsc/runtime-warnings.ts +23 -10
  1165. package/src/rsc/server-action.ts +424 -133
  1166. package/src/rsc/shell-build-manifest.ts +336 -0
  1167. package/src/rsc/shell-capture-constants.ts +45 -0
  1168. package/src/rsc/shell-capture.ts +2063 -0
  1169. package/src/rsc/shell-serve.ts +337 -0
  1170. package/src/rsc/ssr-setup.ts +113 -18
  1171. package/src/rsc/stream-idle.ts +137 -0
  1172. package/src/rsc/transition-gate.ts +86 -0
  1173. package/src/rsc/types.ts +100 -6
  1174. package/src/runtime-env.ts +18 -0
  1175. package/src/search-params.ts +35 -30
  1176. package/src/segment-content-promise.ts +67 -0
  1177. package/src/segment-fragments.ts +165 -0
  1178. package/src/segment-loader-promise.ts +167 -0
  1179. package/src/segment-system.tsx +507 -133
  1180. package/src/serialize.ts +243 -0
  1181. package/src/server/context.ts +581 -61
  1182. package/src/server/cookie-parse.ts +32 -0
  1183. package/src/server/cookie-store.ts +162 -15
  1184. package/src/server/handle-store.ts +209 -70
  1185. package/src/server/loader-registry.ts +38 -46
  1186. package/src/server/request-context.ts +961 -186
  1187. package/src/server.ts +7 -2
  1188. package/src/ssr/index.tsx +631 -179
  1189. package/src/ssr/inject-rsc-eager.ts +167 -0
  1190. package/src/ssr/preinit-client-references.ts +106 -0
  1191. package/src/ssr/ssr-root.tsx +262 -0
  1192. package/src/static-handler.ts +45 -20
  1193. package/src/testing/cache-status.ts +162 -0
  1194. package/src/testing/collect-handle.ts +46 -0
  1195. package/src/testing/dispatch.ts +951 -0
  1196. package/src/testing/dom.entry.ts +22 -0
  1197. package/src/testing/e2e/fixture.ts +188 -0
  1198. package/src/testing/e2e/index.ts +147 -0
  1199. package/src/testing/e2e/matchers.ts +35 -0
  1200. package/src/testing/e2e/page-helpers.ts +319 -0
  1201. package/src/testing/e2e/parity.ts +400 -0
  1202. package/src/testing/e2e/server.ts +195 -0
  1203. package/src/testing/flight-matchers.ts +97 -0
  1204. package/src/testing/flight-normalize.ts +11 -0
  1205. package/src/testing/flight-runtime.d.ts +57 -0
  1206. package/src/testing/flight-tree.ts +682 -0
  1207. package/src/testing/flight.entry.ts +52 -0
  1208. package/src/testing/flight.ts +257 -0
  1209. package/src/testing/generated-routes.ts +199 -0
  1210. package/src/testing/index.ts +121 -0
  1211. package/src/testing/internal/context.ts +380 -0
  1212. package/src/testing/internal/flight-client-globals.ts +30 -0
  1213. package/src/testing/internal/seed-vars.ts +54 -0
  1214. package/src/testing/render-handler.ts +371 -0
  1215. package/src/testing/render-route.tsx +667 -0
  1216. package/src/testing/run-loader.ts +423 -0
  1217. package/src/testing/run-middleware.ts +219 -0
  1218. package/src/testing/run-transition-when.ts +197 -0
  1219. package/src/testing/shell-status.ts +206 -0
  1220. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1221. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1222. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1223. package/src/testing/vitest-stubs/version.ts +5 -0
  1224. package/src/testing/vitest.ts +305 -0
  1225. package/src/theme/ThemeProvider.tsx +56 -84
  1226. package/src/theme/ThemeScript.tsx +7 -9
  1227. package/src/theme/constants.ts +52 -13
  1228. package/src/theme/index.ts +0 -7
  1229. package/src/theme/theme-context.ts +1 -5
  1230. package/src/theme/theme-script.ts +22 -21
  1231. package/src/theme/use-theme.ts +0 -3
  1232. package/src/types/boundaries.ts +15 -35
  1233. package/src/types/cache-types.ts +17 -8
  1234. package/src/types/error-types.ts +30 -90
  1235. package/src/types/global-namespace.ts +54 -41
  1236. package/src/types/handler-context.ts +244 -81
  1237. package/src/types/index.ts +4 -10
  1238. package/src/types/loader-types.ts +99 -15
  1239. package/src/types/request-scope.ts +112 -0
  1240. package/src/types/route-config.ts +20 -52
  1241. package/src/types/route-entry.ts +22 -7
  1242. package/src/types/segments.ts +149 -14
  1243. package/src/urls/include-helper.ts +59 -75
  1244. package/src/urls/include-provider.ts +71 -0
  1245. package/src/urls/index.ts +2 -11
  1246. package/src/urls/path-helper-types.ts +118 -26
  1247. package/src/urls/path-helper.ts +70 -115
  1248. package/src/urls/pattern-types.ts +113 -19
  1249. package/src/urls/response-types.ts +25 -22
  1250. package/src/urls/type-extraction.ts +98 -154
  1251. package/src/urls/urls-function.ts +1 -19
  1252. package/src/use-loader.tsx +404 -86
  1253. package/src/vercel/index.ts +11 -0
  1254. package/src/vercel/tracing.ts +89 -0
  1255. package/src/vite/debug.ts +185 -0
  1256. package/src/vite/discovery/bundle-postprocess.ts +46 -45
  1257. package/src/vite/discovery/client-urls-projection.ts +322 -0
  1258. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1259. package/src/vite/discovery/discover-routers.ts +178 -147
  1260. package/src/vite/discovery/discovery-errors.ts +255 -0
  1261. package/src/vite/discovery/gate-state.ts +171 -0
  1262. package/src/vite/discovery/prerender-collection.ts +243 -134
  1263. package/src/vite/discovery/route-types-writer.ts +40 -84
  1264. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1265. package/src/vite/discovery/shell-prerender-phase.ts +397 -0
  1266. package/src/vite/discovery/state.ts +116 -11
  1267. package/src/vite/discovery/virtual-module-codegen.ts +226 -87
  1268. package/src/vite/encryption-key.ts +29 -0
  1269. package/src/vite/index.ts +16 -0
  1270. package/src/vite/inject-client-debug.ts +88 -0
  1271. package/src/vite/plugin-types.ts +267 -62
  1272. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1273. package/src/vite/plugins/client-ref-dedup.ts +16 -11
  1274. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1275. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1276. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1277. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1278. package/src/vite/plugins/expose-action-id.ts +51 -100
  1279. package/src/vite/plugins/expose-id-utils.ts +96 -51
  1280. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1281. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  1282. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1283. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1284. package/src/vite/plugins/expose-internal-ids.ts +599 -317
  1285. package/src/vite/plugins/performance-tracks.ts +89 -0
  1286. package/src/vite/plugins/refresh-cmd.ts +89 -27
  1287. package/src/vite/plugins/server-ref-hashing.ts +74 -0
  1288. package/src/vite/plugins/server-reference-pattern.ts +10 -0
  1289. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1290. package/src/vite/plugins/vercel-output.ts +384 -0
  1291. package/src/vite/plugins/version-injector.ts +39 -29
  1292. package/src/vite/plugins/version-plugin.ts +54 -37
  1293. package/src/vite/plugins/virtual-entries.ts +193 -30
  1294. package/src/vite/rango.ts +403 -304
  1295. package/src/vite/router-discovery.ts +1802 -187
  1296. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1297. package/src/vite/utils/banner.ts +4 -4
  1298. package/src/vite/utils/bundle-analysis.ts +10 -15
  1299. package/src/vite/utils/client-chunks.ts +184 -0
  1300. package/src/vite/utils/directive-prologue.ts +40 -0
  1301. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1302. package/src/vite/utils/manifest-utils.ts +1 -59
  1303. package/src/vite/utils/package-resolution.ts +21 -52
  1304. package/src/vite/utils/prerender-utils.ts +123 -44
  1305. package/src/vite/utils/shared-utils.ts +158 -44
  1306. package/src/browser/action-response-classifier.ts +0 -99
  1307. package/src/browser/react/use-client-cache.ts +0 -58
  1308. package/src/browser/shallow.ts +0 -40
  1309. package/src/handles/index.ts +0 -7
  1310. package/src/network-error-thrower.tsx +0 -23
  1311. package/src/router/middleware-cookies.ts +0 -55
@@ -11,12 +11,20 @@ import {
11
11
  getContext,
12
12
  getNamePrefix,
13
13
  getUrlPrefix,
14
+ requireDslContext,
15
+ stampStaticDefScope,
14
16
  type EntryData,
17
+ type EntryPropDatas,
18
+ type EntryPropSegments,
19
+ type HelperContext,
15
20
  type InterceptEntry,
21
+ type InterceptConfig,
22
+ type LoaderEntry,
16
23
  } from "../server/context";
17
24
  import { invariant } from "../errors";
25
+ import { validateUserRouteName } from "../route-name.js";
18
26
  import { isCachedFunction } from "../cache/taint.js";
19
- import { RSCRouterContext } from "../server/context";
27
+ import { RangoContext } from "../server/context";
20
28
  import { isStaticHandler } from "../static-handler.js";
21
29
  import RootLayout from "../server/root-layout";
22
30
  import type {
@@ -31,12 +39,13 @@ import type {
31
39
  ErrorBoundaryItem,
32
40
  NotFoundBoundaryItem,
33
41
  LayoutItem,
34
- WhenItem,
35
42
  CacheItem,
36
43
  TransitionItem,
37
44
  UseItems,
38
45
  } from "../route-types.js";
39
46
  import type { RouteHelpers } from "./helpers-types.js";
47
+ import { resolveHandlerUse, mergeHandlerUse } from "./resolve-handler-use.js";
48
+ import { ALL_USE_ITEM_TYPES } from "./use-item-types.js";
40
49
 
41
50
  /**
42
51
  * Check if an item contains routes (directly or inside nested structures like cache).
@@ -54,19 +63,111 @@ const hasRoutesInItem = (item: AllUseItems): boolean => {
54
63
  if (item.type === "layout" && item.uses) {
55
64
  return item.uses.some((child) => hasRoutesInItem(child));
56
65
  }
66
+ if (item.type === "middleware" && item.uses) {
67
+ return item.uses.some((child) => hasRoutesInItem(child));
68
+ }
57
69
  return false;
58
70
  };
59
71
 
72
+ /**
73
+ * Fresh empty collections shared by every from-scratch segment entry. Returns
74
+ * new arrays/objects per call so no two entries share mutable references.
75
+ * mountPath is intentionally NOT included here — each call site adds it from
76
+ * getUrlPrefix() where applicable: the route() and transition() helpers add
77
+ * none, while path() (which also builds a `type: "route"` entry) and the
78
+ * structural helpers (layout/cache/middleware/parallel) do.
79
+ */
80
+ const emptySegmentBase = (): EntryPropDatas &
81
+ EntryPropSegments & { loading: undefined } => ({
82
+ loading: undefined,
83
+ middleware: [],
84
+ revalidate: [],
85
+ errorBoundary: [],
86
+ notFoundBoundary: [],
87
+ layout: [],
88
+ parallel: {},
89
+ intercept: [],
90
+ loader: [],
91
+ });
92
+
93
+ /**
94
+ * Run a children/use callback as a nested scope, flatten the result, and assert
95
+ * every item is a valid use item. `kind` preserves the existing error wording
96
+ * ("use()" vs "children" callback).
97
+ */
98
+ function runAndValidateUseItems(
99
+ store: ReturnType<typeof getContext>,
100
+ namespace: string,
101
+ entry: EntryData,
102
+ cb: () => any,
103
+ label: string,
104
+ kind: "use" | "children",
105
+ ): AllUseItems[] {
106
+ const result = store.run(namespace, entry, cb)?.flat(3);
107
+ return validateUseItems(result, namespace, label, kind);
108
+ }
109
+
110
+ /** Assert an already-invoked, flattened callback result is a use-item array. */
111
+ function validateUseItems(
112
+ result: any,
113
+ namespace: string,
114
+ label: string,
115
+ kind: "use" | "children",
116
+ ): AllUseItems[] {
117
+ invariant(
118
+ Array.isArray(result) && result.every((item) => isValidUseItem(item)),
119
+ `${label}() ${kind === "use" ? "use()" : "children"} callback must return an array of use items [${namespace}]`,
120
+ );
121
+ return result as AllUseItems[];
122
+ }
123
+
124
+ /** True when a children/use result contains no routes (directly or nested). */
125
+ const isOrphan = (result: AllUseItems[]): boolean =>
126
+ !result.some((item) => item != null && hasRoutesInItem(item));
127
+
128
+ /**
129
+ * Register a routeless structural entry as an orphan sibling: clear its parent
130
+ * pointer so it leaves the middleware/parent-pointer chain (LOAD-BEARING — see
131
+ * docs/tree-structure.md) and push it onto the parent's layout[] so it renders
132
+ * as a wrapper. Used by cache()/middleware()/transition(); layout() runs extra
133
+ * validation and registers inline.
134
+ */
135
+ const attachOrphanSibling = (
136
+ parent: EntryData | null,
137
+ entry: EntryData,
138
+ ): void => {
139
+ entry.parent = null;
140
+ if (parent && "layout" in parent) parent.layout.push(entry);
141
+ };
142
+
143
+ /**
144
+ * Run `fn` with `ctx.parent` temporarily redirected to `temp` — a satellite
145
+ * entry that captures the attachments declared by a use() callback — restoring
146
+ * the original parent afterward, including on throw. loader()/intercept() each
147
+ * build their own tempParent shape (intercept keeps a loading get/set accessor
148
+ * and a captured-layouts array); this only centralizes the save/restore.
149
+ */
150
+ function withParent<T>(ctx: HelperContext, temp: EntryData, fn: () => T): T {
151
+ const original = ctx.parent;
152
+ ctx.parent = temp;
153
+ try {
154
+ return fn();
155
+ } finally {
156
+ ctx.parent = original;
157
+ }
158
+ }
159
+
60
160
  const revalidate: RouteHelpers<any, any>["revalidate"] = (fn) => {
61
- const ctx = getContext().getStore();
62
- if (!ctx) throw new Error("revalidate() must be called inside map()");
161
+ const { store, ctx } = requireDslContext(
162
+ "revalidate() must be called inside urls()",
163
+ );
63
164
 
64
165
  // Attach to last entry in stack
65
166
  const parent = ctx.parent;
66
167
  if (!parent || !("revalidate" in parent)) {
67
168
  invariant(false, "No parent entry available for revalidate()");
68
169
  }
69
- const name = `$${getContext().getNextIndex("revalidate")}`;
170
+ const name = `$${store.getNextIndex("revalidate")}`;
70
171
  parent.revalidate.push(fn);
71
172
  return { name, type: "revalidate" } as RevalidateItem;
72
173
  };
@@ -104,15 +205,16 @@ const revalidate: RouteHelpers<any, any>["revalidate"] = (fn) => {
104
205
  * ```
105
206
  */
106
207
  const errorBoundary: RouteHelpers<any, any>["errorBoundary"] = (fallback) => {
107
- const ctx = getContext().getStore();
108
- if (!ctx) throw new Error("errorBoundary() must be called inside map()");
208
+ const { store, ctx } = requireDslContext(
209
+ "errorBoundary() must be called inside urls()",
210
+ );
109
211
 
110
212
  // Attach to parent entry in stack
111
213
  const parent = ctx.parent;
112
214
  if (!parent || !("errorBoundary" in parent)) {
113
215
  invariant(false, "No parent entry available for errorBoundary()");
114
216
  }
115
- const name = `$${getContext().getNextIndex("errorBoundary")}`;
217
+ const name = `$${store.getNextIndex("errorBoundary")}`;
116
218
  parent.errorBoundary.push(fallback);
117
219
  return { name, type: "errorBoundary" } as ErrorBoundaryItem;
118
220
  };
@@ -151,46 +253,20 @@ const errorBoundary: RouteHelpers<any, any>["errorBoundary"] = (fallback) => {
151
253
  const notFoundBoundary: RouteHelpers<any, any>["notFoundBoundary"] = (
152
254
  fallback,
153
255
  ) => {
154
- const ctx = getContext().getStore();
155
- if (!ctx) throw new Error("notFoundBoundary() must be called inside map()");
256
+ const { store, ctx } = requireDslContext(
257
+ "notFoundBoundary() must be called inside urls()",
258
+ );
156
259
 
157
260
  // Attach to parent entry in stack
158
261
  const parent = ctx.parent;
159
262
  if (!parent || !("notFoundBoundary" in parent)) {
160
263
  invariant(false, "No parent entry available for notFoundBoundary()");
161
264
  }
162
- const name = `$${getContext().getNextIndex("notFoundBoundary")}`;
265
+ const name = `$${store.getNextIndex("notFoundBoundary")}`;
163
266
  parent.notFoundBoundary.push(fallback);
164
267
  return { name, type: "notFoundBoundary" } as NotFoundBoundaryItem;
165
268
  };
166
269
 
167
- /**
168
- * When helper - defines a condition for intercept activation
169
- *
170
- * Only valid inside intercept() use() callback. The when() function
171
- * is captured by the intercept and stored in its `when` array.
172
- * During soft navigation, all when() conditions must return true
173
- * for the intercept to activate.
174
- */
175
- const when: RouteHelpers<any, any>["when"] = (fn) => {
176
- const ctx = getContext().getStore();
177
- if (!ctx) throw new Error("when() must be called inside intercept()");
178
-
179
- // The when() function needs to be captured by the intercept's tempParent
180
- // which should have a `when` array. If not present, we're not inside intercept()
181
- const parent = ctx.parent as any;
182
- if (!parent || !("when" in parent)) {
183
- invariant(
184
- false,
185
- "when() can only be used inside intercept() use() callback",
186
- );
187
- }
188
-
189
- const name = `$${getContext().getNextIndex("when")}`;
190
- parent.when.push(fn);
191
- return { name, type: "when" } as WhenItem;
192
- };
193
-
194
270
  /**
195
271
  * Cache helper - defines caching configuration for segments
196
272
  *
@@ -201,21 +277,21 @@ const when: RouteHelpers<any, any>["when"] = (fn) => {
201
277
  * Supports these call signatures:
202
278
  * - cache() - no args, uses app-level defaults (for loader caching)
203
279
  * - cache(() => [...]) - wraps children with app-level defaults
204
- * - cache('profileName') - uses a named cache profile
205
- * - cache('profileName', () => [...]) - named profile with children
206
280
  * - cache({ ttl: 60 }, () => [...]) - with explicit options
281
+ *
282
+ * Named cache profiles are applied via the `"use cache: <profile>"` directive,
283
+ * not a `cache("profileName")` form in the route tree.
207
284
  */
208
285
  const cache: RouteHelpers<any, any>["cache"] = (
209
286
  optionsOrChildren?:
210
287
  | PartialCacheOptions
211
288
  | false
212
- | string
213
289
  | (() => UseItems<AllUseItems>),
214
290
  maybeChildren?: () => UseItems<AllUseItems>,
215
291
  ) => {
216
- const store = getContext();
217
- const ctx = store.getStore();
218
- if (!ctx) throw new Error("cache() must be called inside map()");
292
+ const { store, ctx } = requireDslContext(
293
+ "cache() must be called inside urls()",
294
+ );
219
295
 
220
296
  // Handle overloaded signature
221
297
  let options: PartialCacheOptions | false;
@@ -225,18 +301,6 @@ const cache: RouteHelpers<any, any>["cache"] = (
225
301
  // cache() - no args, use defaults
226
302
  options = {};
227
303
  children = undefined;
228
- } else if (typeof optionsOrChildren === "string") {
229
- // cache('profileName') or cache('profileName', () => [...])
230
- // Resolve from context-scoped profiles (set per-router via HelperContext).
231
- const ctxStore = RSCRouterContext.getStore();
232
- const profile = ctxStore?.cacheProfiles?.[optionsOrChildren];
233
- invariant(
234
- profile,
235
- `cache("${optionsOrChildren}"): unknown cache profile. ` +
236
- `Define it in createRouter({ cacheProfiles: { "${optionsOrChildren}": { ttl: ... } } }).`,
237
- );
238
- options = { ttl: profile.ttl, swr: profile.swr, tags: profile.tags };
239
- children = maybeChildren;
240
304
  } else if (typeof optionsOrChildren === "function") {
241
305
  // cache(() => [...]) - use empty options (will use defaults)
242
306
  options = {};
@@ -267,26 +331,18 @@ const cache: RouteHelpers<any, any>["cache"] = (
267
331
  // Create orphan cache entry (like orphan layout)
268
332
  // Subsequent siblings in the same array will attach to this entry
269
333
  const namespace = `${ctx.namespace}.${cacheIndex}`;
270
- const cacheUrlPrefix = getUrlPrefix();
334
+ const urlPrefix = getUrlPrefix();
271
335
 
272
336
  const entry = {
337
+ ...emptySegmentBase(),
273
338
  id: namespace,
274
339
  shortCode: store.getShortCode("cache"),
275
340
  type: "cache",
276
341
  parent: parent, // link to current parent for hierarchy
277
342
  cache: cacheConfig,
278
343
  handler: RootLayout,
279
- loading: undefined, // Allow loading() to attach loading state
280
- middleware: [],
281
- revalidate: [],
282
- errorBoundary: [],
283
- notFoundBoundary: [],
284
- layout: [],
285
- parallel: [],
286
- intercept: [],
287
- loader: [],
288
- ...(cacheUrlPrefix ? { mountPath: cacheUrlPrefix } : {}),
289
- } as EntryData;
344
+ ...(urlPrefix ? { mountPath: urlPrefix } : {}),
345
+ } satisfies EntryData;
290
346
 
291
347
  // Attach to parent's layout array (cache entries are structural like layouts)
292
348
  if (parent && "layout" in parent) {
@@ -300,13 +356,23 @@ const cache: RouteHelpers<any, any>["cache"] = (
300
356
  return { name: namespace, type: "cache" } as CacheItem;
301
357
  }
302
358
 
359
+ // Inside a loader() use() callback, only the direct form — cache()/cache(opts)
360
+ // — writes cache config to the loader entry. The wrapper form creates a
361
+ // structural cache boundary with its own children scope, which has no effect
362
+ // on the loader and would silently no-op.
363
+ invariant(
364
+ !(ctx.parent && (ctx.parent as any).type === "loader"),
365
+ "cache() wrapper form is not valid inside loader() use(). Use cache({...}) without children to configure the loader's cache.",
366
+ );
367
+
303
368
  // With children: create a cache entry (like layout with caching semantics)
304
369
  const namespace = `${ctx.namespace}.${cacheIndex}`;
305
370
  const cacheShortCode = store.getShortCode("cache");
306
371
 
307
- const cacheUrlPrefix2 = getUrlPrefix();
372
+ const urlPrefix = getUrlPrefix();
308
373
 
309
374
  const entry = {
375
+ ...emptySegmentBase(),
310
376
  id: namespace,
311
377
  shortCode: cacheShortCode,
312
378
  type: "cache",
@@ -314,48 +380,57 @@ const cache: RouteHelpers<any, any>["cache"] = (
314
380
  cache: cacheConfig,
315
381
  // Cache entries render like layouts (with Outlet as default handler)
316
382
  handler: RootLayout, // RootLayout just renders <Outlet />
317
- loading: undefined, // Allow loading() to attach loading state
318
- middleware: [],
319
- revalidate: [],
320
- errorBoundary: [],
321
- notFoundBoundary: [],
322
- layout: [],
323
- parallel: [],
324
- intercept: [],
325
- loader: [],
326
- ...(cacheUrlPrefix2 ? { mountPath: cacheUrlPrefix2 } : {}),
327
- } as EntryData;
383
+ ...(urlPrefix ? { mountPath: urlPrefix } : {}),
384
+ } satisfies EntryData;
328
385
 
329
386
  // Run children with cache entry as parent
330
- const result = store.run(namespace, entry, children)?.flat(3);
331
-
332
- invariant(
333
- Array.isArray(result) && result.every((item) => isValidUseItem(item)),
334
- `cache() children callback must return an array of use items [${namespace}]`,
387
+ const result = runAndValidateUseItems(
388
+ store,
389
+ namespace,
390
+ entry,
391
+ children,
392
+ "cache",
393
+ "children",
335
394
  );
336
395
 
337
- // Check if this cache has routes (including nested caches/layouts)
338
- const hasRoutes =
339
- result &&
340
- Array.isArray(result) &&
341
- result.some((item) => hasRoutesInItem(item));
342
-
343
- if (!hasRoutes) {
344
- const parent = ctx.parent;
345
- if (parent && "layout" in parent) {
346
- // Attach to parent's layout array (cache entries are structural like layouts)
347
- entry.parent = null;
348
- parent.layout.push(entry);
349
- }
350
- }
396
+ // Cache entries are structural like layouts: with no routes inside, register
397
+ // as an orphan sibling.
398
+ if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
351
399
 
352
400
  return { name: namespace, type: "cache", uses: result } as CacheItem;
353
401
  };
354
402
 
355
- const middleware: RouteHelpers<any, any>["middleware"] = (...fn) => {
403
+ const middleware: RouteHelpers<any, any>["middleware"] = (...args: any[]) => {
404
+ // Four call forms:
405
+ // middleware(fn) — single fn, sibling
406
+ // middleware(fn, () => [...]) — single fn, wrapping
407
+ // middleware([fn1, fn2]) — array, sibling
408
+ // middleware([fn1, fn2], () => [...]) — array, wrapping
409
+ const isArray = Array.isArray(args[0]);
410
+
411
+ // Reject the removed variadic form before executing anything.
412
+ // middleware(fn1, fn2, fn3) — 3+ args, always wrong.
413
+ // middleware(fn1, fn2) where fn2 is a middleware fn (length >= 1), not a
414
+ // children callback (length === 0) — legacy two-fn form, reject early.
415
+ if (
416
+ args.length > 2 ||
417
+ (!isArray &&
418
+ args.length === 2 &&
419
+ typeof args[1] === "function" &&
420
+ args[1].length > 0)
421
+ ) {
422
+ throw new Error(
423
+ "middleware() no longer accepts variadic arguments. " +
424
+ "Use middleware([fn1, fn2, ...]) instead of middleware(fn1, fn2, ...).",
425
+ );
426
+ }
427
+
428
+ const fns: MiddlewareFn<any>[] = isArray ? args[0] : [args[0]];
429
+ const children: (() => any[]) | undefined =
430
+ typeof args[1] === "function" ? args[1] : undefined;
431
+
356
432
  // Prevent "use cache" functions from being used as middleware.
357
- // Checked before context validation — this is a static invariant.
358
- for (const f of fn) {
433
+ for (const f of fns) {
359
434
  if (isCachedFunction(f)) {
360
435
  throw new Error(
361
436
  `A "use cache" function cannot be used as middleware. ` +
@@ -366,23 +441,84 @@ const middleware: RouteHelpers<any, any>["middleware"] = (...fn) => {
366
441
  }
367
442
  }
368
443
 
369
- const ctx = getContext().getStore();
370
- if (!ctx) throw new Error("middleware() must be called inside map()");
444
+ const { store, ctx } = requireDslContext(
445
+ "middleware() must be called inside urls()",
446
+ );
371
447
 
372
- // Attach to last entry in stack
373
- const parent = ctx.parent;
374
- if (!parent || !("middleware" in parent)) {
375
- invariant(false, "No parent entry available for middleware()");
448
+ if (!children) {
449
+ // Sibling mode: attach to parent entry
450
+ const parent = ctx.parent;
451
+ if (!parent || !("middleware" in parent)) {
452
+ invariant(false, "No parent entry available for middleware()");
453
+ }
454
+ const name = `$${store.getNextIndex("middleware")}`;
455
+ parent.middleware.push(...fns);
456
+ return { name, type: "middleware" } as MiddlewareItem;
376
457
  }
377
- const name = `$${getContext().getNextIndex("middleware")}`;
378
- parent.middleware.push(...fn);
379
- return { name, type: "middleware" } as MiddlewareItem;
458
+
459
+ // Wrapping mode: create a transparent layout that carries the middleware
460
+ const mwIndex = store.getNextIndex("middleware");
461
+ const namespace = `${ctx.namespace}.${mwIndex}`;
462
+
463
+ const urlPrefix = getUrlPrefix();
464
+ const entry = {
465
+ ...emptySegmentBase(),
466
+ id: namespace,
467
+ shortCode: store.getShortCode("layout"),
468
+ type: "layout",
469
+ parent: ctx.parent,
470
+ handler: RootLayout,
471
+ middleware: [...fns],
472
+ ...(urlPrefix ? { mountPath: urlPrefix } : {}),
473
+ } satisfies EntryData;
474
+
475
+ // Run children callback. If the second arg was actually a middleware fn
476
+ // (old variadic form: middleware(mw1, mw2)), this will return a non-array
477
+ // and the invariant below gives a clear migration error.
478
+ const rawResult = store.run(namespace, entry, children);
479
+
480
+ invariant(
481
+ Array.isArray(rawResult),
482
+ "middleware(fn, children) expects the second argument to return an array of use items. " +
483
+ "To pass multiple middleware, use middleware([fn1, fn2]).",
484
+ );
485
+
486
+ const result = validateUseItems(
487
+ rawResult.flat(3),
488
+ namespace,
489
+ "middleware",
490
+ "children",
491
+ );
492
+
493
+ if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
494
+
495
+ return {
496
+ name: namespace,
497
+ type: "middleware",
498
+ uses: result,
499
+ } as MiddlewareItem;
380
500
  };
381
501
 
502
+ // Slot names become part of segment ids: a parallel/intercept slot is encoded
503
+ // as `${shortCode}.${slotName}`, and loader segments append `D${index}.${loaderId}`.
504
+ // A "." in the slot name collides with that separator -- loaderParentId
505
+ // (segment-system.tsx) strips from the FIRST `D<index>.`, so a name like
506
+ // "@D3.foo" is mis-cut to "@" and the loader's data is silently dropped. Reject
507
+ // the dot at definition time so the failure is loud, not a corrupted tree at
508
+ // runtime. (A bare "D" without a trailing dot -- e.g. "@Detail" -- is fine.)
509
+ function assertValidSlotName(slotName: string): void {
510
+ invariant(
511
+ !slotName.includes("."),
512
+ `Slot name "${slotName}" must not contain ".". The dot is a reserved ` +
513
+ `segment-id separator; a name like "@D3.foo" corrupts loader segment-id ` +
514
+ `parsing and silently drops the loader's data. Rename the slot.`,
515
+ );
516
+ }
517
+
382
518
  const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
383
- const store = getContext();
384
- const ctx = store.getStore();
385
- if (!ctx) throw new Error("parallel() must be called inside map()");
519
+ const { store, ctx } = requireDslContext(
520
+ "parallel() must be called inside urls()",
521
+ );
386
522
 
387
523
  if (!ctx.parent || !ctx.parent?.parallel) {
388
524
  invariant(false, "No parent entry available for parallel()");
@@ -393,15 +529,30 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
393
529
  "parallel() cannot be nested inside another parallel()",
394
530
  );
395
531
 
532
+ const slotNames = Object.keys(slots as Record<string, any>) as `@${string}`[];
533
+ for (const slotName of slotNames) assertValidSlotName(slotName);
534
+
396
535
  const namespace = `${ctx.namespace}.$${store.getNextIndex("parallel")}`;
397
536
 
398
- // Unwrap any static handler definitions in parallel slots
537
+ // Unwrap slot values. A slot value can be:
538
+ // - a Handler / ReactNode (legacy form)
539
+ // - a Static() definition (build-time only)
540
+ // - a slot descriptor `{ handler, use? }` for slot-local overrides
541
+ // The descriptor's `use` runs after the broadcast `use` for that slot,
542
+ // so single-assignment items like `loading()` placed there win without
543
+ // affecting siblings.
399
544
  const unwrappedSlots: Record<string, any> = {};
545
+ const slotLocalUses: Record<string, (() => any[]) | undefined> = {};
400
546
  let hasStaticSlot = false;
401
547
  const staticSlotIds: Record<string, string> = {};
402
- for (const [slotName, slotHandler] of Object.entries(
548
+ for (const [slotName, rawSlot] of Object.entries(
403
549
  slots as Record<string, any>,
404
550
  )) {
551
+ let slotHandler: any = rawSlot;
552
+ if (isSlotDescriptor(rawSlot)) {
553
+ slotHandler = rawSlot.handler;
554
+ slotLocalUses[slotName] = rawSlot.use;
555
+ }
405
556
  if (isStaticHandler(slotHandler)) {
406
557
  hasStaticSlot = true;
407
558
  unwrappedSlots[slotName] = slotHandler.handler;
@@ -411,6 +562,7 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
411
562
  if (ctx.namePrefix) {
412
563
  (slotHandler as any).$$routePrefix = ctx.namePrefix;
413
564
  }
565
+ stampStaticDefScope(slotHandler);
414
566
  }
415
567
  } else {
416
568
  unwrappedSlots[slotName] = slotHandler;
@@ -420,20 +572,12 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
420
572
  // Create full EntryData for parallel with its own loaders/revalidate/loading
421
573
  const parallelUrlPrefix = getUrlPrefix();
422
574
  const entry = {
575
+ ...emptySegmentBase(),
423
576
  id: namespace,
424
577
  shortCode: store.getShortCode("parallel"),
425
578
  type: "parallel",
426
579
  parent: null, // Parallels don't participate in parent chain traversal
427
580
  handler: unwrappedSlots,
428
- loading: undefined, // Allow loading() to attach loading state
429
- middleware: [],
430
- revalidate: [],
431
- errorBoundary: [],
432
- notFoundBoundary: [],
433
- layout: [],
434
- parallel: [],
435
- intercept: [],
436
- loader: [],
437
581
  ...(parallelUrlPrefix ? { mountPath: parallelUrlPrefix } : {}),
438
582
  ...(hasStaticSlot
439
583
  ? {
@@ -445,19 +589,86 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
445
589
  : {}),
446
590
  } satisfies EntryData;
447
591
 
448
- // Run use callback if provided to collect loaders, revalidate, loading
449
- if (use && typeof use === "function") {
450
- const result = store.run(namespace, entry, use)?.flat(3);
451
- invariant(
452
- Array.isArray(result) && result.every((item) => isValidUseItem(item)),
453
- `parallel() use() callback must return an array of use items [${namespace}]`,
592
+ for (const slotName of slotNames) {
593
+ const slotEntry = {
594
+ ...entry,
595
+ handler: { [slotName]: unwrappedSlots[slotName]! },
596
+ middleware: [...entry.middleware],
597
+ revalidate: [...entry.revalidate],
598
+ errorBoundary: [...entry.errorBoundary],
599
+ notFoundBoundary: [...entry.notFoundBoundary],
600
+ layout: [...entry.layout],
601
+ parallel: { ...entry.parallel },
602
+ intercept: [...entry.intercept],
603
+ loader: [...entry.loader],
604
+ ...(entry.staticHandlerIds?.[slotName]
605
+ ? {
606
+ isStaticPrerender: true as const,
607
+ staticHandlerIds: { [slotName]: entry.staticHandlerIds[slotName]! },
608
+ }
609
+ : {
610
+ isStaticPrerender: undefined,
611
+ staticHandlerIds: undefined,
612
+ }),
613
+ } satisfies EntryData;
614
+
615
+ // Per-slot merge order (narrowest-scope-wins for single-assignment items
616
+ // like loading()):
617
+ // 1. handler.use — defaults baked into the handler
618
+ // 2. shared `use` — broadcast at the parallel() call site
619
+ // 3. slot-local `use` — per-slot override via `{ handler, use }` descriptor
620
+ // Items that accumulate (loader, middleware, revalidate, …) compose
621
+ // across all three layers regardless of order.
622
+ const rawSlot = (slots as Record<string, any>)[slotName];
623
+ const slotHandlerForUse = isSlotDescriptor(rawSlot)
624
+ ? rawSlot.handler
625
+ : rawSlot;
626
+ const slotHandlerUse = resolveHandlerUse(slotHandlerForUse);
627
+ const slotLocalUse = slotLocalUses[slotName];
628
+ const explicitUse = combineExplicitUses(use, slotLocalUse);
629
+ const slotMergedUse = mergeHandlerUse(
630
+ slotHandlerUse,
631
+ explicitUse,
632
+ "parallel",
454
633
  );
455
- }
634
+ if (slotMergedUse) {
635
+ runAndValidateUseItems(
636
+ store,
637
+ namespace,
638
+ slotEntry,
639
+ slotMergedUse,
640
+ "parallel",
641
+ "use",
642
+ );
643
+ }
456
644
 
457
- ctx.parent.parallel.push(entry);
645
+ ctx.parent.parallel[slotName] = slotEntry;
646
+ }
458
647
  return { name: namespace, type: "parallel" } as ParallelItem;
459
648
  };
460
649
 
650
+ function isSlotDescriptor(
651
+ value: unknown,
652
+ ): value is { handler: unknown; use?: () => any[] } {
653
+ return (
654
+ typeof value === "object" &&
655
+ value !== null &&
656
+ !("__brand" in value) &&
657
+ "handler" in value &&
658
+ typeof (value as any).handler !== "undefined"
659
+ );
660
+ }
661
+
662
+ function combineExplicitUses(
663
+ sharedUse: (() => any[]) | undefined,
664
+ slotLocalUse: (() => any[]) | undefined,
665
+ ): (() => any[]) | undefined {
666
+ if (!sharedUse && !slotLocalUse) return undefined;
667
+ if (!slotLocalUse) return sharedUse;
668
+ if (!sharedUse) return slotLocalUse;
669
+ return () => [...sharedUse(), ...slotLocalUse()];
670
+ }
671
+
461
672
  /**
462
673
  * Intercept helper - defines an intercepting route for soft navigation
463
674
  */
@@ -465,11 +676,22 @@ const intercept = (
465
676
  slotName: `@${string}`,
466
677
  routeName: string,
467
678
  handler: any,
679
+ configOrUse?: InterceptConfig | (() => any[]),
468
680
  use?: () => any[],
469
681
  ) => {
470
- const store = getContext();
471
- const ctx = store.getStore();
472
- if (!ctx) throw new Error("intercept() must be called inside map()");
682
+ // arg4 discrimination: a function is the use() callback (no config); an object
683
+ // is the config carrying `when`. With config given, the use() callback is
684
+ // arg5. Keeps the no-config form intercept(slot, route, handler, () => [...])
685
+ // working unchanged.
686
+ const config: InterceptConfig | undefined =
687
+ typeof configOrUse === "function" || configOrUse == null
688
+ ? undefined
689
+ : configOrUse;
690
+ const useFn = typeof configOrUse === "function" ? configOrUse : use;
691
+
692
+ const { store, ctx } = requireDslContext(
693
+ "intercept() must be called inside urls()",
694
+ );
473
695
 
474
696
  if (!ctx.parent || !ctx.parent?.intercept) {
475
697
  invariant(false, "No parent entry available for intercept()");
@@ -480,6 +702,8 @@ const intercept = (
480
702
  "intercept() cannot be used inside parallel()",
481
703
  );
482
704
 
705
+ assertValidSlotName(slotName);
706
+
483
707
  const namespace = `${ctx.namespace}.$${store.getNextIndex("intercept")}.${slotName}`;
484
708
 
485
709
  // Dot-prefixed = local (add include prefix), unprefixed = global (use as-is)
@@ -502,25 +726,33 @@ const intercept = (
502
726
  when: [], // Selector conditions for conditional interception
503
727
  };
504
728
 
505
- // Run use callback if provided to collect loaders, revalidate, middleware, etc.
506
- if (use && typeof use === "function") {
507
- // Create a temporary parent context for the use() callback
508
- // so that middleware, loader, revalidate attach to the intercept entry
509
- const originalParent = ctx.parent;
729
+ // Conditional interception: `when` from the config object — a single selector
730
+ // or an array (ALL must return true to activate). Replaces the former when()
731
+ // use-item captured inside the callback.
732
+ if (config?.when) {
733
+ const selectors = Array.isArray(config.when) ? config.when : [config.when];
734
+ entry.when.push(...selectors);
735
+ }
736
+
737
+ // Merge handler.use defaults with explicit use
738
+ const handlerUseFn = resolveHandlerUse(handler);
739
+ const mergedUse = mergeHandlerUse(handlerUseFn, useFn, "intercept");
510
740
 
511
- // Capture layouts in a temporary array
741
+ // Run merged use callback to collect loaders, revalidate, middleware, etc.
742
+ if (mergedUse) {
743
+ // Capture layout() calls into a temporary array
512
744
  const capturedLayouts: EntryData[] = [];
513
745
 
746
+ // Temporary parent so middleware/loader/revalidate/when attach to the
747
+ // intercept entry; the loading get/set accessor mirrors writes onto `entry`.
514
748
  const tempParent = {
515
- ...originalParent,
749
+ ...ctx.parent,
516
750
  middleware: entry.middleware,
517
751
  revalidate: entry.revalidate,
518
752
  errorBoundary: entry.errorBoundary,
519
753
  notFoundBoundary: entry.notFoundBoundary,
520
754
  loader: entry.loader,
521
755
  layout: capturedLayouts, // Capture layout() calls
522
- when: entry.when, // Capture when() conditions
523
- // Use getter/setter to capture loading on the entry
524
756
  get loading() {
525
757
  return entry.loading;
526
758
  },
@@ -528,12 +760,10 @@ const intercept = (
528
760
  entry.loading = value;
529
761
  },
530
762
  };
531
- ctx.parent = tempParent as EntryData;
532
763
 
533
- const result = use()?.flat(3);
534
-
535
- // Restore original parent
536
- ctx.parent = originalParent;
764
+ const result = withParent(ctx, tempParent as EntryData, () =>
765
+ mergedUse()?.flat(3),
766
+ );
537
767
 
538
768
  // Extract layout from captured layouts (use first one if multiple)
539
769
  // Layout inside intercept should always be ReactNode or Handler, not Record slots
@@ -543,10 +773,7 @@ const intercept = (
543
773
  | Handler<any, any, any>;
544
774
  }
545
775
 
546
- invariant(
547
- Array.isArray(result) && result.every((item) => isValidUseItem(item)),
548
- `intercept() use() callback must return an array of use items [${namespace}]`,
549
- );
776
+ validateUseItems(result, namespace, "intercept", "use");
550
777
  }
551
778
 
552
779
  ctx.parent.intercept.push(entry);
@@ -556,43 +783,70 @@ const intercept = (
556
783
  /**
557
784
  * Loader helper - attaches a loader to the current entry
558
785
  */
559
- const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
560
- const store = getContext();
561
- const ctx = store.getStore();
562
- if (!ctx) throw new Error("loader() must be called inside map()");
786
+ const loader: RouteHelpers<any, any>["loader"] = (
787
+ loaderDef,
788
+ optionsOrUse,
789
+ maybeUse,
790
+ ) => {
791
+ const { store, ctx } = requireDslContext(
792
+ "loader() must be called inside urls()",
793
+ );
563
794
 
564
795
  // Attach to last entry in stack
565
796
  if (!ctx.parent || !ctx.parent?.loader) {
566
797
  invariant(false, "No parent entry available for loader()");
567
798
  }
568
799
 
800
+ // loader(Def, use) and loader(Def, options, use) — same options-or-use
801
+ // disambiguation path() uses, so the long-standing 2-arg form is untouched.
802
+ const optionsGiven =
803
+ typeof optionsOrUse === "function" ? undefined : optionsOrUse;
804
+ const use = typeof optionsOrUse === "function" ? optionsOrUse : maybeUse;
805
+ invariant(
806
+ !(typeof optionsOrUse === "function" && maybeUse !== undefined),
807
+ "loader() received two use() callbacks. Pass loader(Def, options, use) or loader(Def, use).",
808
+ );
809
+ invariant(
810
+ optionsGiven?.stream === undefined || optionsGiven.stream === "navigation",
811
+ `loader() stream must be "navigation" (got ${JSON.stringify(optionsGiven?.stream)}). Omit it to stream on every render.`,
812
+ );
813
+
569
814
  const name = `${ctx.namespace}.$${store.getNextIndex("loader")}`;
570
815
 
571
- // Create loader entry with empty revalidate array
572
- const loaderEntry = {
816
+ // Create loader entry with empty revalidate array. awaitBeforeFlush is
817
+ // resolved here, at DSL-evaluation time, for the same reason
818
+ // loading({ ssr: false }) is (below) — per-isSSR entry caching makes the
819
+ // flag request-mode-correct with no isSSR threading; see LoaderEntry.
820
+ const loaderEntry: LoaderEntry = {
573
821
  loader: loaderDef,
574
822
  revalidate: [] as ShouldRevalidateFn<any, any>[],
823
+ ...(optionsGiven?.stream === "navigation" && ctx.isSSR
824
+ ? { awaitBeforeFlush: true as const }
825
+ : {}),
575
826
  };
576
827
 
577
- // If use() callback provided, run it to collect revalidation rules and cache config
578
- if (use && typeof use === "function") {
579
- // Temporarily set context for revalidate()/cache() calls to target this loader
580
- const originalParent = ctx.parent;
828
+ // Merge handler.use defaults (attached to the loader definition) with explicit use
829
+ const handlerUseFn = resolveHandlerUse(loaderDef);
830
+ const mergedUse = mergeHandlerUse(handlerUseFn, use, "loader");
831
+
832
+ // If any use callback is in effect, run it to collect revalidation rules and cache config
833
+ if (mergedUse) {
581
834
  // Create a temporary "parent" with type "loader" so cache() can detect it.
582
835
  // Save existing .cache to distinguish inherited config from newly set config.
583
- const parentCache = (originalParent as any).cache;
836
+ const parentCache = (ctx.parent as any).cache;
584
837
  const tempParent = {
585
- ...originalParent,
838
+ ...ctx.parent,
586
839
  type: "loader",
587
840
  revalidate: loaderEntry.revalidate,
588
841
  };
589
- ctx.parent = tempParent as EntryData;
590
842
 
591
- const result = use()?.flat(3);
843
+ const result = withParent(ctx, tempParent as EntryData, () =>
844
+ mergedUse()?.flat(3),
845
+ );
592
846
 
593
847
  // Copy cache config only if cache() was called during the use() callback.
594
- // The spread from originalParent may carry an inherited .cache from
595
- // a parent cache() boundary — only copy if it was newly set.
848
+ // The spread may carry an inherited .cache from a parent cache() boundary —
849
+ // only copy if it was newly set.
596
850
  if (
597
851
  (tempParent as any).cache &&
598
852
  (tempParent as any).cache !== parentCache
@@ -600,13 +854,7 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
600
854
  (loaderEntry as any).cache = (tempParent as any).cache;
601
855
  }
602
856
 
603
- // Restore original parent
604
- ctx.parent = originalParent;
605
-
606
- invariant(
607
- Array.isArray(result) && result.every((item) => isValidUseItem(item)),
608
- `loader() use() callback must return an array of use items [${name}]`,
609
- );
857
+ validateUseItems(result, name, "loader", "use");
610
858
  }
611
859
 
612
860
  ctx.parent.loader.push(loaderEntry);
@@ -617,21 +865,25 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
617
865
  * Loading helper - attaches a loading component to the current entry
618
866
  * Loading components are static (no context) and shown during navigation
619
867
  */
620
- const loadingFn: RouteHelpers<any, any>["loading"] = (component, options) => {
621
- const store = getContext();
622
- const ctx = store.getStore();
623
- if (!ctx) throw new Error("loading() must be called inside map()");
868
+ const loading: RouteHelpers<any, any>["loading"] = (component, options) => {
869
+ const { store, ctx } = requireDslContext(
870
+ "loading() must be called inside urls()",
871
+ );
624
872
 
625
873
  const parent = ctx.parent;
626
874
  if (!parent || !("loading" in parent)) {
627
875
  invariant(false, "No parent entry available for loading()");
628
876
  }
629
877
 
878
+ // Unwrap function form: loading(() => <Skeleton />) → loading(<Skeleton />)
879
+ const resolved =
880
+ typeof component === "function" ? (component as () => any)() : component;
881
+
630
882
  // If ssr: false and we're in SSR, set loading to false
631
883
  if (options?.ssr === false && ctx.isSSR) {
632
884
  parent.loading = false;
633
885
  } else {
634
- parent.loading = component;
886
+ parent.loading = resolved;
635
887
  }
636
888
 
637
889
  const name = `$${store.getNextIndex("loading")}`;
@@ -639,10 +891,13 @@ const loadingFn: RouteHelpers<any, any>["loading"] = (component, options) => {
639
891
  };
640
892
 
641
893
  /**
642
- * Transition helper - attaches a ViewTransition config to the current entry
643
- * or wraps a group of routes in a transparent layout with ViewTransition
894
+ * Transition helper - opts the entry (or a wrapped group of routes) into
895
+ * transition-driven navigation by attaching a TransitionConfig. This drives the
896
+ * commit through startTransition (content hold on all React versions) and, on
897
+ * experimental React, places a `<ViewTransition>` boundary unless
898
+ * `viewTransition: false`. See skills/view-transitions for the matrix.
644
899
  */
645
- const transitionFn = (
900
+ const transition = (
646
901
  configOrChildren?: TransitionConfig | (() => UseItems<AllUseItems>),
647
902
  maybeChildren?: () => UseItems<AllUseItems>,
648
903
  ): TransitionItem => {
@@ -656,11 +911,15 @@ const transitionFn = (
656
911
  const children: (() => UseItems<AllUseItems>) | undefined =
657
912
  typeof configOrChildren === "function" ? configOrChildren : maybeChildren;
658
913
 
659
- const store = getContext();
660
- const ctx = store.getStore();
661
- if (!ctx) throw new Error("transition() must be called inside map()");
914
+ const { store, ctx } = requireDslContext(
915
+ "transition() must be called inside urls()",
916
+ );
662
917
 
663
- const name = `$${store.getNextIndex("transition")}`;
918
+ // Allocate a single index for this transition() call (used in all paths),
919
+ // mirroring cache() — the child form uses it for the name, the wrapper form
920
+ // reuses it for the namespace, so no index is burned.
921
+ const transitionIndex = store.getNextIndex("transition");
922
+ const name = `$${transitionIndex}`;
664
923
 
665
924
  if (!children) {
666
925
  // Position 1: child of path() — attach to parent entry
@@ -673,70 +932,51 @@ const transitionFn = (
673
932
  }
674
933
 
675
934
  // Position 2: wrapper — create a transparent layout with transition config
676
- const namespace = `${ctx.namespace}.${store.getNextIndex("transition")}`;
935
+ const namespace = `${ctx.namespace}.${transitionIndex}`;
677
936
  const entry = {
937
+ ...emptySegmentBase(),
678
938
  id: namespace,
679
939
  shortCode: store.getShortCode("layout"),
680
940
  type: "layout",
681
941
  parent: ctx.parent,
682
942
  handler: RootLayout,
683
- loading: undefined,
684
943
  transition: config,
685
- middleware: [],
686
- revalidate: [],
687
- errorBoundary: [],
688
- notFoundBoundary: [],
689
- layout: [],
690
- parallel: [],
691
- intercept: [],
692
- loader: [],
693
- } as EntryData;
694
-
695
- const result = store.run(namespace, entry, children)?.flat(3);
944
+ } satisfies EntryData;
696
945
 
697
- invariant(
698
- Array.isArray(result) && result.every((item) => isValidUseItem(item)),
699
- `transition() children callback must return an array of use items [${namespace}]`,
946
+ const result = runAndValidateUseItems(
947
+ store,
948
+ namespace,
949
+ entry,
950
+ children,
951
+ "transition",
952
+ "children",
700
953
  );
701
954
 
702
- const hasRoutes =
703
- result &&
704
- Array.isArray(result) &&
705
- result.some((item) => hasRoutesInItem(item));
706
-
707
- if (!hasRoutes) {
708
- const parent = ctx.parent;
709
- if (parent && "layout" in parent) {
710
- entry.parent = null;
711
- parent.layout.push(entry);
712
- }
713
- }
955
+ if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
714
956
 
715
957
  return { name: namespace, type: "transition" } as TransitionItem;
716
958
  };
717
959
 
718
- const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
719
- const store = getContext();
720
- const ctx = store.getStore();
721
- if (!ctx) throw new Error("route() must be called inside map()");
960
+ const route: RouteHelpers<any, any>["route"] = (name, handler, use) => {
961
+ const { store, ctx } = requireDslContext(
962
+ "route() must be called inside urls()",
963
+ );
964
+
965
+ // Reject names colliding with reserved internal prefixes ($path_, $prefix_),
966
+ // the same guard path() and include() enforce. Without it such a name
967
+ // type-checks on an untyped router, then silently vanishes from generated
968
+ // route-types and public reverse() (isAutoGeneratedRouteName filters it out).
969
+ validateUserRouteName(name);
722
970
 
723
971
  const namespace = `${ctx.namespace}.${store.getNextIndex("route")}.${name}`;
724
972
 
725
973
  const entry = {
974
+ ...emptySegmentBase(),
726
975
  id: namespace,
727
976
  shortCode: store.getShortCode("route"),
728
977
  type: "route",
729
978
  parent: ctx.parent,
730
- handler,
731
- loading: undefined, // Allow loading() to attach loading state
732
- middleware: [],
733
- revalidate: [],
734
- errorBoundary: [],
735
- notFoundBoundary: [],
736
- layout: [],
737
- parallel: [],
738
- intercept: [],
739
- loader: [],
979
+ handler: handler as unknown as Handler<any, any, any>,
740
980
  } satisfies EntryData;
741
981
 
742
982
  /* We will throw if user is registring same route name twice */
@@ -746,12 +986,18 @@ const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
746
986
  );
747
987
  /* Register route entry */
748
988
  ctx.manifest.set(name, entry);
989
+ /* Merge handler.use defaults with explicit use */
990
+ const handlerUseFn = resolveHandlerUse(handler);
991
+ const mergedUse = mergeHandlerUse(handlerUseFn, use, "route");
749
992
  /* Run use and attach handlers */
750
- if (use && typeof use === "function") {
751
- const result = store.run(namespace, entry, use)?.flat(3);
752
- invariant(
753
- Array.isArray(result) && result.every((item) => isValidUseItem(item)),
754
- `route() use() callback must return an array of use items [${namespace}]`,
993
+ if (mergedUse) {
994
+ const result = runAndValidateUseItems(
995
+ store,
996
+ namespace,
997
+ entry,
998
+ mergedUse,
999
+ "route",
1000
+ "use",
755
1001
  );
756
1002
  return { name: namespace, type: "route", uses: result } as RouteItem;
757
1003
  }
@@ -761,9 +1007,9 @@ const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
761
1007
  };
762
1008
 
763
1009
  const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
764
- const store = getContext();
765
- const ctx = store.getStore();
766
- if (!ctx) throw new Error("layout() must be called inside map()");
1010
+ const { store, ctx } = requireDslContext(
1011
+ "layout() must be called inside urls()",
1012
+ );
767
1013
 
768
1014
  invariant(
769
1015
  !ctx.parent || ctx.parent.type !== "parallel",
@@ -781,20 +1027,12 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
781
1027
 
782
1028
  const urlPrefix = getUrlPrefix();
783
1029
  const entry = {
1030
+ ...emptySegmentBase(),
784
1031
  id: namespace,
785
1032
  shortCode,
786
1033
  type: "layout",
787
1034
  parent: ctx.parent,
788
1035
  handler: unwrappedHandler,
789
- loading: undefined, // Allow loading() to attach loading state
790
- middleware: [],
791
- revalidate: [],
792
- errorBoundary: [],
793
- notFoundBoundary: [],
794
- parallel: [],
795
- intercept: [],
796
- layout: [],
797
- loader: [],
798
1036
  ...(urlPrefix ? { mountPath: urlPrefix } : {}),
799
1037
  ...(isStatic
800
1038
  ? {
@@ -805,18 +1043,27 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
805
1043
  } satisfies EntryData;
806
1044
 
807
1045
  // Capture namespace prefix on static handler for build-time reverse() resolution
808
- if (isStatic && handler.$$id && ctx.namePrefix) {
809
- (handler as any).$$routePrefix = ctx.namePrefix;
1046
+ if (isStatic && handler.$$id) {
1047
+ if (ctx.namePrefix) {
1048
+ (handler as any).$$routePrefix = ctx.namePrefix;
1049
+ }
1050
+ stampStaticDefScope(handler);
810
1051
  }
811
1052
 
812
- // Run use callback if provided
813
- let result: AllUseItems[] | undefined;
814
- if (use && typeof use === "function") {
815
- result = store.run(namespace, entry, use)?.flat(3);
1053
+ // Merge handler.use defaults with explicit use
1054
+ const handlerUseFn = resolveHandlerUse(handler);
1055
+ const mergedUse = mergeHandlerUse(handlerUseFn, use, "layout");
816
1056
 
817
- invariant(
818
- Array.isArray(result) && result.every((item) => isValidUseItem(item)),
819
- `layout() use() callback must return an array of use items [${namespace}]`,
1057
+ // Run merged use callback if present
1058
+ let result: AllUseItems[] | undefined;
1059
+ if (mergedUse) {
1060
+ result = runAndValidateUseItems(
1061
+ store,
1062
+ namespace,
1063
+ entry,
1064
+ mergedUse,
1065
+ "layout",
1066
+ "use",
820
1067
  );
821
1068
  }
822
1069
 
@@ -858,9 +1105,7 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
858
1105
  `Orphan layouts can only be defined inside route or layout > check [${namespace}]`,
859
1106
  );
860
1107
 
861
- // Clear parent pointer for orphan layouts to prevent duplicate processing
862
- entry.parent = null;
863
- parent.layout.push(entry);
1108
+ attachOrphanSibling(parent, entry);
864
1109
  }
865
1110
  }
866
1111
 
@@ -873,33 +1118,15 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
873
1118
  } as LayoutItem;
874
1119
  };
875
1120
 
876
- const isValidUseItem = (item: any): item is AllUseItems | undefined | null => {
877
- return (
878
- typeof item === "undefined" ||
879
- item === null ||
880
- (item &&
881
- typeof item === "object" &&
882
- "type" in item &&
883
- [
884
- "layout",
885
- "route",
886
- "middleware",
887
- "revalidate",
888
- "parallel",
889
- "intercept",
890
- "loader",
891
- "loading",
892
- "errorBoundary",
893
- "notFoundBoundary",
894
- "when",
895
- "cache",
896
- "transition",
897
- "include", // For urls() include() helper
898
- ].includes(item.type))
899
- );
900
- };
1121
+ const isValidUseItem = (item: any): item is AllUseItems | undefined | null =>
1122
+ item == null ||
1123
+ (typeof item === "object" &&
1124
+ "type" in item &&
1125
+ ALL_USE_ITEM_TYPES.has(item.type));
901
1126
 
902
- // Global helper exports for direct import from @rangojs/router
1127
+ // DSL helpers exported for direct import from @rangojs/router and for
1128
+ // assembly into the RouteHelpers object in helper-factories.ts. The route-item
1129
+ // types are discriminated by their `type` literal, so the helpers carry no brand.
903
1130
  export {
904
1131
  layout,
905
1132
  cache,
@@ -907,28 +1134,13 @@ export {
907
1134
  revalidate,
908
1135
  parallel,
909
1136
  intercept,
910
- when,
911
1137
  errorBoundary,
912
1138
  notFoundBoundary,
913
- loaderFn as loader,
914
- loadingFn as loading,
915
- transitionFn as transition,
916
- };
917
-
918
- const isOrphanLayout = (item: AllUseItems): boolean => {
919
- return (
920
- item.type === "layout" &&
921
- !item.uses?.some((child) => hasRoutesInItem(child))
922
- );
923
- };
924
-
925
- // Internal exports used by helper-factories.ts
926
- export {
927
- routeFn,
928
- loaderFn,
929
- loadingFn,
930
- transitionFn,
931
- hasRoutesInItem,
1139
+ route,
1140
+ loader,
1141
+ loading,
1142
+ transition,
932
1143
  isValidUseItem,
933
- isOrphanLayout,
1144
+ emptySegmentBase,
1145
+ runAndValidateUseItems,
934
1146
  };