@rangojs/router 0.0.0-experimental.ce770c9a → 0.0.0-experimental.d5d3070a

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 (1202) hide show
  1. package/AGENTS.md +8 -0
  2. package/README.md +245 -49
  3. package/dist/bin/rango.js +433 -131
  4. package/dist/testing/vitest.js +82 -0
  5. package/dist/vite/index.js +3376 -1102
  6. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  7. package/package.json +66 -12
  8. package/skills/api-client/SKILL.md +211 -0
  9. package/skills/breadcrumbs/SKILL.md +64 -2
  10. package/skills/bundle-analysis/SKILL.md +159 -0
  11. package/skills/cache-guide/SKILL.md +247 -23
  12. package/skills/caching/SKILL.md +281 -11
  13. package/skills/composability/SKILL.md +27 -2
  14. package/skills/css/SKILL.md +76 -0
  15. package/skills/debug-manifest/SKILL.md +4 -2
  16. package/skills/document-cache/SKILL.md +78 -55
  17. package/skills/handler-use/SKILL.md +364 -0
  18. package/skills/hooks/SKILL.md +250 -30
  19. package/skills/host-router/SKILL.md +83 -23
  20. package/skills/i18n/SKILL.md +276 -0
  21. package/skills/intercept/SKILL.md +50 -6
  22. package/skills/layout/SKILL.md +35 -9
  23. package/skills/links/SKILL.md +249 -17
  24. package/skills/loader/SKILL.md +279 -53
  25. package/skills/middleware/SKILL.md +52 -13
  26. package/skills/migrate-nextjs/SKILL.md +584 -0
  27. package/skills/migrate-react-router/SKILL.md +771 -0
  28. package/skills/mime-routes/SKILL.md +28 -1
  29. package/skills/observability/SKILL.md +172 -0
  30. package/skills/parallel/SKILL.md +144 -7
  31. package/skills/prerender/SKILL.md +153 -109
  32. package/skills/rango/SKILL.md +251 -22
  33. package/skills/react-compiler/SKILL.md +168 -0
  34. package/skills/response-routes/SKILL.md +123 -48
  35. package/skills/route/SKILL.md +101 -5
  36. package/skills/router-setup/SKILL.md +116 -8
  37. package/skills/scripts/SKILL.md +179 -0
  38. package/skills/server-actions/SKILL.md +775 -0
  39. package/skills/streams-and-websockets/SKILL.md +283 -0
  40. package/skills/tailwind/SKILL.md +27 -3
  41. package/skills/testing/SKILL.md +129 -0
  42. package/skills/testing/bindings.md +103 -0
  43. package/skills/testing/cache-prerender.md +127 -0
  44. package/skills/testing/client-components.md +124 -0
  45. package/skills/testing/e2e-parity.md +125 -0
  46. package/skills/testing/flight.md +91 -0
  47. package/skills/testing/handles.md +129 -0
  48. package/skills/testing/loader.md +128 -0
  49. package/skills/testing/middleware.md +99 -0
  50. package/skills/testing/render-handler.md +121 -0
  51. package/skills/testing/response-routes.md +95 -0
  52. package/skills/testing/reverse-and-types.md +84 -0
  53. package/skills/testing/server-actions.md +107 -0
  54. package/skills/testing/server-tree.md +128 -0
  55. package/skills/testing/setup.md +123 -0
  56. package/skills/typesafety/SKILL.md +332 -29
  57. package/skills/use-cache/SKILL.md +46 -14
  58. package/skills/view-transitions/SKILL.md +294 -0
  59. package/src/__augment-tests__/augment.ts +81 -0
  60. package/src/__augment-tests__/augmented.check.ts +116 -0
  61. package/src/__internal.ts +1 -66
  62. package/src/browser/action-coordinator.ts +53 -36
  63. package/src/browser/action-fence.ts +47 -0
  64. package/src/browser/app-shell.ts +39 -0
  65. package/src/browser/app-version.ts +14 -0
  66. package/src/browser/connection-warmup.ts +134 -0
  67. package/src/browser/cookie-name.ts +140 -0
  68. package/src/browser/event-controller.ts +192 -150
  69. package/src/browser/history-state.ts +21 -0
  70. package/src/browser/index.ts +3 -3
  71. package/src/browser/invalidate-client-cache.ts +52 -0
  72. package/src/browser/navigation-bridge.ts +108 -21
  73. package/src/browser/navigation-client.ts +187 -86
  74. package/src/browser/navigation-store-handle.ts +38 -0
  75. package/src/browser/navigation-store.ts +76 -67
  76. package/src/browser/navigation-transaction.ts +9 -59
  77. package/src/browser/network-error-handler.ts +34 -7
  78. package/src/browser/partial-update.ts +150 -107
  79. package/src/browser/prefetch/cache.ts +205 -62
  80. package/src/browser/prefetch/fetch.ts +329 -39
  81. package/src/browser/prefetch/queue.ts +95 -29
  82. package/src/browser/prefetch/resource-ready.ts +77 -0
  83. package/src/browser/rango-state.ts +158 -76
  84. package/src/browser/react/Link.tsx +102 -15
  85. package/src/browser/react/NavigationProvider.tsx +193 -120
  86. package/src/browser/react/ScrollRestoration.tsx +10 -6
  87. package/src/browser/react/context.ts +7 -2
  88. package/src/browser/react/filter-segment-order.ts +66 -7
  89. package/src/browser/react/index.ts +0 -48
  90. package/src/browser/react/location-state-shared.ts +178 -8
  91. package/src/browser/react/location-state.ts +39 -14
  92. package/src/browser/react/use-action.ts +6 -15
  93. package/src/browser/react/use-handle.ts +23 -69
  94. package/src/browser/react/use-href.tsx +8 -1
  95. package/src/browser/react/use-link-status.ts +33 -8
  96. package/src/browser/react/use-navigation.ts +32 -7
  97. package/src/browser/react/use-params.ts +20 -10
  98. package/src/browser/react/use-reverse.ts +106 -0
  99. package/src/browser/react/use-router.ts +46 -11
  100. package/src/browser/react/use-search-params.ts +0 -5
  101. package/src/browser/react/use-segments.ts +11 -21
  102. package/src/browser/response-adapter.ts +80 -5
  103. package/src/browser/rsc-router.tsx +114 -24
  104. package/src/browser/scroll-restoration.ts +37 -22
  105. package/src/browser/segment-reconciler.ts +36 -14
  106. package/src/browser/segment-structure-assert.ts +2 -2
  107. package/src/browser/server-action-bridge.ts +222 -61
  108. package/src/browser/types.ts +82 -11
  109. package/src/browser/validate-redirect-origin.ts +43 -16
  110. package/src/build/collect-fallback-refs.ts +107 -0
  111. package/src/build/generate-manifest.ts +65 -40
  112. package/src/build/generate-route-types.ts +5 -1
  113. package/src/build/index.ts +8 -2
  114. package/src/build/prefix-tree-utils.ts +123 -0
  115. package/src/build/route-trie.ts +165 -36
  116. package/src/build/route-types/ast-route-extraction.ts +15 -8
  117. package/src/build/route-types/codegen.ts +16 -5
  118. package/src/build/route-types/include-resolution.ts +125 -24
  119. package/src/build/route-types/param-extraction.ts +6 -3
  120. package/src/build/route-types/per-module-writer.ts +22 -6
  121. package/src/build/route-types/router-processing.ts +260 -94
  122. package/src/build/route-types/scan-filter.ts +9 -2
  123. package/src/build/route-types/source-scan.ts +216 -0
  124. package/src/build/runtime-discovery.ts +9 -20
  125. package/src/cache/cache-error.ts +104 -0
  126. package/src/cache/cache-key-utils.ts +29 -13
  127. package/src/cache/cache-policy.ts +108 -34
  128. package/src/cache/cache-runtime.ts +214 -48
  129. package/src/cache/cache-scope.ts +234 -87
  130. package/src/cache/cache-tag.ts +103 -0
  131. package/src/cache/cf/cf-base64.ts +33 -0
  132. package/src/cache/cf/cf-cache-constants.ts +127 -0
  133. package/src/cache/cf/cf-cache-store.ts +1989 -378
  134. package/src/cache/cf/cf-cache-types.ts +349 -0
  135. package/src/cache/cf/cf-kv-utils.ts +46 -0
  136. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  137. package/src/cache/cf/index.ts +6 -16
  138. package/src/cache/document-cache.ts +72 -20
  139. package/src/cache/handle-snapshot.ts +70 -0
  140. package/src/cache/index.ts +10 -20
  141. package/src/cache/memory-segment-store.ts +136 -37
  142. package/src/cache/profile-registry.ts +31 -31
  143. package/src/cache/read-through-swr.ts +41 -11
  144. package/src/cache/segment-codec.ts +9 -17
  145. package/src/cache/tag-invalidation.ts +230 -0
  146. package/src/cache/taint.ts +55 -0
  147. package/src/cache/types.ts +37 -100
  148. package/src/client.rsc.tsx +44 -21
  149. package/src/client.tsx +119 -290
  150. package/src/cloudflare/index.ts +11 -0
  151. package/src/cloudflare/tracing.ts +109 -0
  152. package/src/component-utils.ts +19 -0
  153. package/src/components/DefaultDocument.tsx +8 -2
  154. package/src/context-var.ts +84 -2
  155. package/src/decode-loader-results.ts +52 -0
  156. package/src/defer.ts +196 -0
  157. package/src/deps/ssr.ts +0 -1
  158. package/src/encode-kv.ts +49 -0
  159. package/src/errors.ts +30 -4
  160. package/src/escape-script.ts +52 -0
  161. package/src/handle.ts +70 -22
  162. package/src/handles/MetaTags.tsx +62 -19
  163. package/src/handles/Scripts.tsx +183 -0
  164. package/src/handles/breadcrumbs.ts +37 -8
  165. package/src/handles/is-thenable.ts +19 -0
  166. package/src/handles/meta.ts +51 -40
  167. package/src/handles/script.ts +244 -0
  168. package/src/host/cookie-handler.ts +9 -60
  169. package/src/host/errors.ts +0 -24
  170. package/src/host/index.ts +8 -2
  171. package/src/host/pattern-matcher.ts +23 -52
  172. package/src/host/router.ts +107 -99
  173. package/src/host/testing.ts +40 -27
  174. package/src/host/types.ts +37 -4
  175. package/src/host/utils.ts +1 -1
  176. package/src/href-client.ts +137 -22
  177. package/src/index.rsc.ts +93 -12
  178. package/src/index.ts +133 -15
  179. package/src/internal-debug.ts +11 -10
  180. package/src/loader-store.ts +500 -0
  181. package/src/loader.rsc.ts +20 -13
  182. package/src/loader.ts +12 -11
  183. package/src/missing-id-error.ts +68 -0
  184. package/src/outlet-context.ts +1 -1
  185. package/src/outlet-provider.tsx +1 -5
  186. package/src/prerender/param-hash.ts +16 -16
  187. package/src/prerender/store.ts +37 -41
  188. package/src/prerender.ts +198 -82
  189. package/src/redirect-origin.ts +100 -0
  190. package/src/regex-escape.ts +8 -0
  191. package/src/render-error-thrower.tsx +20 -0
  192. package/src/response-utils.ts +62 -0
  193. package/src/reverse.ts +65 -15
  194. package/src/root-error-boundary.tsx +1 -19
  195. package/src/route-content-wrapper.tsx +7 -72
  196. package/src/route-definition/dsl-helpers.ts +445 -277
  197. package/src/route-definition/helper-factories.ts +29 -139
  198. package/src/route-definition/helpers-types.ts +113 -37
  199. package/src/route-definition/index.ts +3 -0
  200. package/src/route-definition/redirect.ts +51 -10
  201. package/src/route-definition/resolve-handler-use.ts +161 -0
  202. package/src/route-definition/use-item-types.ts +32 -0
  203. package/src/route-map-builder.ts +0 -16
  204. package/src/route-types.ts +37 -41
  205. package/src/router/basename.ts +14 -0
  206. package/src/router/content-negotiation.ts +164 -17
  207. package/src/router/error-handling.ts +45 -18
  208. package/src/router/find-match.ts +44 -23
  209. package/src/router/handler-context.ts +83 -39
  210. package/src/router/instrument.ts +350 -0
  211. package/src/router/intercept-resolution.ts +48 -24
  212. package/src/router/lazy-includes.ts +15 -52
  213. package/src/router/loader-resolution.ts +274 -56
  214. package/src/router/logging.ts +0 -6
  215. package/src/router/manifest.ts +40 -42
  216. package/src/router/match-api.ts +120 -204
  217. package/src/router/match-context.ts +0 -22
  218. package/src/router/match-handlers.ts +58 -58
  219. package/src/router/match-middleware/background-revalidation.ts +15 -5
  220. package/src/router/match-middleware/cache-lookup.ts +202 -268
  221. package/src/router/match-middleware/cache-store.ts +42 -28
  222. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  223. package/src/router/match-middleware/segment-resolution.ts +45 -14
  224. package/src/router/match-pipelines.ts +1 -42
  225. package/src/router/match-result.ts +93 -39
  226. package/src/router/metrics.ts +0 -34
  227. package/src/router/middleware-types.ts +13 -142
  228. package/src/router/middleware.ts +268 -171
  229. package/src/router/navigation-snapshot.ts +131 -0
  230. package/src/router/params-util.ts +23 -0
  231. package/src/router/pattern-matching.ts +132 -90
  232. package/src/router/prefetch-cache-ttl.ts +51 -0
  233. package/src/router/prerender-match.ts +195 -56
  234. package/src/router/preview-match.ts +32 -102
  235. package/src/router/request-classification.ts +276 -0
  236. package/src/router/revalidation.ts +123 -73
  237. package/src/router/route-snapshot.ts +244 -0
  238. package/src/router/router-context.ts +3 -27
  239. package/src/router/router-interfaces.ts +115 -35
  240. package/src/router/router-options.ts +172 -15
  241. package/src/router/router-registry.ts +2 -5
  242. package/src/router/segment-resolution/fresh.ts +190 -99
  243. package/src/router/segment-resolution/helpers.ts +115 -30
  244. package/src/router/segment-resolution/loader-cache.ts +62 -37
  245. package/src/router/segment-resolution/revalidation.ts +386 -341
  246. package/src/router/segment-resolution/static-store.ts +19 -5
  247. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  248. package/src/router/segment-resolution/view-transition-default.ts +36 -0
  249. package/src/router/segment-resolution.ts +5 -1
  250. package/src/router/segment-wrappers.ts +6 -5
  251. package/src/router/state-cookie-name.ts +33 -0
  252. package/src/router/substitute-pattern-params.ts +56 -0
  253. package/src/router/telemetry-otel.ts +161 -199
  254. package/src/router/telemetry.ts +96 -19
  255. package/src/router/timeout.ts +0 -20
  256. package/src/router/tracing.ts +206 -0
  257. package/src/router/trie-matching.ts +163 -59
  258. package/src/router/types.ts +10 -63
  259. package/src/router/url-params.ts +44 -0
  260. package/src/router.ts +158 -54
  261. package/src/rsc/handler-context.ts +3 -2
  262. package/src/rsc/handler.ts +658 -511
  263. package/src/rsc/helpers.ts +168 -46
  264. package/src/rsc/index.ts +2 -5
  265. package/src/rsc/json-route-result.ts +38 -0
  266. package/src/rsc/loader-fetch.ts +127 -31
  267. package/src/rsc/manifest-init.ts +33 -42
  268. package/src/rsc/origin-guard.ts +39 -25
  269. package/src/rsc/progressive-enhancement.ts +77 -11
  270. package/src/rsc/redirect-guard.ts +99 -0
  271. package/src/rsc/response-cache-serve.ts +238 -0
  272. package/src/rsc/response-error.ts +79 -12
  273. package/src/rsc/response-route-handler.ts +99 -189
  274. package/src/rsc/rsc-rendering.ts +105 -72
  275. package/src/rsc/runtime-warnings.ts +23 -10
  276. package/src/rsc/server-action.ts +263 -112
  277. package/src/rsc/ssr-setup.ts +18 -2
  278. package/src/rsc/types.ts +32 -6
  279. package/src/runtime-env.ts +18 -0
  280. package/src/search-params.ts +35 -30
  281. package/src/segment-content-promise.ts +67 -0
  282. package/src/segment-loader-promise.ts +149 -0
  283. package/src/segment-system.tsx +218 -202
  284. package/src/serialize.ts +243 -0
  285. package/src/server/context.ts +222 -51
  286. package/src/server/cookie-parse.ts +32 -0
  287. package/src/server/cookie-store.ts +80 -5
  288. package/src/server/handle-store.ts +40 -38
  289. package/src/server/loader-registry.ts +26 -46
  290. package/src/server/request-context.ts +390 -170
  291. package/src/ssr/index.tsx +24 -16
  292. package/src/static-handler.ts +27 -18
  293. package/src/testing/cache-status.ts +162 -0
  294. package/src/testing/collect-handle.ts +40 -0
  295. package/src/testing/dispatch.ts +701 -0
  296. package/src/testing/dom.entry.ts +22 -0
  297. package/src/testing/e2e/fixture.ts +188 -0
  298. package/src/testing/e2e/index.ts +128 -0
  299. package/src/testing/e2e/matchers.ts +35 -0
  300. package/src/testing/e2e/page-helpers.ts +272 -0
  301. package/src/testing/e2e/parity.ts +387 -0
  302. package/src/testing/e2e/server.ts +195 -0
  303. package/src/testing/flight-matchers.ts +97 -0
  304. package/src/testing/flight-normalize.ts +11 -0
  305. package/src/testing/flight-runtime.d.ts +57 -0
  306. package/src/testing/flight-tree.ts +682 -0
  307. package/src/testing/flight.entry.ts +52 -0
  308. package/src/testing/flight.ts +257 -0
  309. package/src/testing/generated-routes.ts +183 -0
  310. package/src/testing/index.ts +99 -0
  311. package/src/testing/internal/context.ts +371 -0
  312. package/src/testing/internal/flight-client-globals.ts +30 -0
  313. package/src/testing/internal/seed-vars.ts +54 -0
  314. package/src/testing/render-handler.ts +343 -0
  315. package/src/testing/render-route.tsx +581 -0
  316. package/src/testing/run-loader.ts +385 -0
  317. package/src/testing/run-middleware.ts +205 -0
  318. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  319. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  320. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  321. package/src/testing/vitest-stubs/version.ts +5 -0
  322. package/src/testing/vitest.ts +305 -0
  323. package/src/theme/ThemeProvider.tsx +20 -58
  324. package/src/theme/ThemeScript.tsx +7 -9
  325. package/src/theme/constants.ts +52 -13
  326. package/src/theme/index.ts +0 -7
  327. package/src/theme/theme-context.ts +1 -5
  328. package/src/theme/theme-script.ts +22 -21
  329. package/src/theme/use-theme.ts +0 -3
  330. package/src/types/boundaries.ts +0 -35
  331. package/src/types/cache-types.ts +17 -8
  332. package/src/types/error-types.ts +30 -90
  333. package/src/types/global-namespace.ts +54 -41
  334. package/src/types/handler-context.ts +233 -81
  335. package/src/types/index.ts +1 -10
  336. package/src/types/loader-types.ts +44 -15
  337. package/src/types/request-scope.ts +112 -0
  338. package/src/types/route-config.ts +6 -50
  339. package/src/types/route-entry.ts +12 -7
  340. package/src/types/segments.ts +36 -15
  341. package/src/urls/include-helper.ts +33 -70
  342. package/src/urls/index.ts +1 -11
  343. package/src/urls/path-helper-types.ts +58 -11
  344. package/src/urls/path-helper.ts +57 -111
  345. package/src/urls/pattern-types.ts +48 -19
  346. package/src/urls/response-types.ts +25 -22
  347. package/src/urls/type-extraction.ts +58 -139
  348. package/src/urls/urls-function.ts +1 -18
  349. package/src/use-loader.tsx +346 -89
  350. package/src/vite/debug.ts +185 -0
  351. package/src/vite/discovery/bundle-postprocess.ts +36 -38
  352. package/src/vite/discovery/discover-routers.ts +130 -85
  353. package/src/vite/discovery/discovery-errors.ts +194 -0
  354. package/src/vite/discovery/gate-state.ts +171 -0
  355. package/src/vite/discovery/prerender-collection.ts +214 -132
  356. package/src/vite/discovery/route-types-writer.ts +40 -84
  357. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  358. package/src/vite/discovery/state.ts +57 -4
  359. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  360. package/src/vite/index.ts +6 -0
  361. package/src/vite/inject-client-debug.ts +36 -0
  362. package/src/vite/plugin-types.ts +178 -5
  363. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  364. package/src/vite/plugins/client-ref-dedup.ts +16 -11
  365. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  366. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  367. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  368. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  369. package/src/vite/plugins/expose-action-id.ts +48 -95
  370. package/src/vite/plugins/expose-id-utils.ts +96 -51
  371. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  372. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  373. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  374. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  375. package/src/vite/plugins/expose-internal-ids.ts +553 -317
  376. package/src/vite/plugins/performance-tracks.ts +89 -0
  377. package/src/vite/plugins/refresh-cmd.ts +89 -27
  378. package/src/vite/plugins/use-cache-transform.ts +73 -83
  379. package/src/vite/plugins/version-injector.ts +21 -25
  380. package/src/vite/plugins/version-plugin.ts +37 -40
  381. package/src/vite/plugins/virtual-entries.ts +13 -18
  382. package/src/vite/rango.ts +119 -111
  383. package/src/vite/router-discovery.ts +941 -142
  384. package/src/vite/utils/ast-handler-extract.ts +26 -35
  385. package/src/vite/utils/banner.ts +1 -1
  386. package/src/vite/utils/bundle-analysis.ts +10 -15
  387. package/src/vite/utils/client-chunks.ts +184 -0
  388. package/src/vite/utils/directive-prologue.ts +40 -0
  389. package/src/vite/utils/forward-user-plugins.ts +171 -0
  390. package/src/vite/utils/manifest-utils.ts +4 -59
  391. package/src/vite/utils/package-resolution.ts +20 -52
  392. package/src/vite/utils/prerender-utils.ts +81 -34
  393. package/src/vite/utils/shared-utils.ts +92 -42
  394. package/dist/__internal.d.ts +0 -83
  395. package/dist/__internal.d.ts.map +0 -1
  396. package/dist/__internal.js +0 -19
  397. package/dist/__internal.js.map +0 -1
  398. package/dist/__mocks__/version.d.ts +0 -7
  399. package/dist/__mocks__/version.d.ts.map +0 -1
  400. package/dist/__mocks__/version.js +0 -7
  401. package/dist/__mocks__/version.js.map +0 -1
  402. package/dist/__tests__/client-href.test.d.ts +0 -2
  403. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  404. package/dist/__tests__/client-href.test.js +0 -74
  405. package/dist/__tests__/client-href.test.js.map +0 -1
  406. package/dist/__tests__/component-utils.test.d.ts +0 -2
  407. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  408. package/dist/__tests__/component-utils.test.js +0 -51
  409. package/dist/__tests__/component-utils.test.js.map +0 -1
  410. package/dist/__tests__/event-controller.test.d.ts +0 -2
  411. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  412. package/dist/__tests__/event-controller.test.js +0 -538
  413. package/dist/__tests__/event-controller.test.js.map +0 -1
  414. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  415. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  416. package/dist/__tests__/helpers/route-tree.js +0 -374
  417. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  418. package/dist/__tests__/match-result.test.d.ts +0 -2
  419. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  420. package/dist/__tests__/match-result.test.js +0 -154
  421. package/dist/__tests__/match-result.test.js.map +0 -1
  422. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  423. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  424. package/dist/__tests__/navigation-store.test.js +0 -440
  425. package/dist/__tests__/navigation-store.test.js.map +0 -1
  426. package/dist/__tests__/partial-update.test.d.ts +0 -2
  427. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  428. package/dist/__tests__/partial-update.test.js +0 -1009
  429. package/dist/__tests__/partial-update.test.js.map +0 -1
  430. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  431. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  432. package/dist/__tests__/reverse-types.test.js +0 -656
  433. package/dist/__tests__/reverse-types.test.js.map +0 -1
  434. package/dist/__tests__/route-definition.test.d.ts +0 -2
  435. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  436. package/dist/__tests__/route-definition.test.js +0 -55
  437. package/dist/__tests__/route-definition.test.js.map +0 -1
  438. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  439. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  440. package/dist/__tests__/router-helpers.test.js +0 -377
  441. package/dist/__tests__/router-helpers.test.js.map +0 -1
  442. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  443. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  444. package/dist/__tests__/router-integration-2.test.js +0 -426
  445. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  446. package/dist/__tests__/router-integration.test.d.ts +0 -2
  447. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  448. package/dist/__tests__/router-integration.test.js +0 -1051
  449. package/dist/__tests__/router-integration.test.js.map +0 -1
  450. package/dist/__tests__/search-params.test.d.ts +0 -5
  451. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  452. package/dist/__tests__/search-params.test.js +0 -306
  453. package/dist/__tests__/search-params.test.js.map +0 -1
  454. package/dist/__tests__/segment-system.test.d.ts +0 -2
  455. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  456. package/dist/__tests__/segment-system.test.js +0 -627
  457. package/dist/__tests__/segment-system.test.js.map +0 -1
  458. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  459. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  460. package/dist/__tests__/static-handler-types.test.js +0 -63
  461. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  462. package/dist/__tests__/urls.test.d.ts +0 -2
  463. package/dist/__tests__/urls.test.d.ts.map +0 -1
  464. package/dist/__tests__/urls.test.js +0 -421
  465. package/dist/__tests__/urls.test.js.map +0 -1
  466. package/dist/__tests__/use-mount.test.d.ts +0 -2
  467. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  468. package/dist/__tests__/use-mount.test.js +0 -35
  469. package/dist/__tests__/use-mount.test.js.map +0 -1
  470. package/dist/bin/rango.d.ts +0 -2
  471. package/dist/bin/rango.d.ts.map +0 -1
  472. package/dist/bin/rango.js.map +0 -1
  473. package/dist/browser/event-controller.d.ts +0 -191
  474. package/dist/browser/event-controller.d.ts.map +0 -1
  475. package/dist/browser/event-controller.js +0 -559
  476. package/dist/browser/event-controller.js.map +0 -1
  477. package/dist/browser/index.d.ts +0 -2
  478. package/dist/browser/index.d.ts.map +0 -1
  479. package/dist/browser/index.js +0 -14
  480. package/dist/browser/index.js.map +0 -1
  481. package/dist/browser/link-interceptor.d.ts +0 -38
  482. package/dist/browser/link-interceptor.d.ts.map +0 -1
  483. package/dist/browser/link-interceptor.js +0 -99
  484. package/dist/browser/link-interceptor.js.map +0 -1
  485. package/dist/browser/logging.d.ts +0 -10
  486. package/dist/browser/logging.d.ts.map +0 -1
  487. package/dist/browser/logging.js +0 -29
  488. package/dist/browser/logging.js.map +0 -1
  489. package/dist/browser/lru-cache.d.ts +0 -17
  490. package/dist/browser/lru-cache.d.ts.map +0 -1
  491. package/dist/browser/lru-cache.js +0 -50
  492. package/dist/browser/lru-cache.js.map +0 -1
  493. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  494. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  495. package/dist/browser/merge-segment-loaders.js +0 -102
  496. package/dist/browser/merge-segment-loaders.js.map +0 -1
  497. package/dist/browser/navigation-bridge.d.ts +0 -102
  498. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  499. package/dist/browser/navigation-bridge.js +0 -708
  500. package/dist/browser/navigation-bridge.js.map +0 -1
  501. package/dist/browser/navigation-client.d.ts +0 -25
  502. package/dist/browser/navigation-client.d.ts.map +0 -1
  503. package/dist/browser/navigation-client.js +0 -157
  504. package/dist/browser/navigation-client.js.map +0 -1
  505. package/dist/browser/navigation-store.d.ts +0 -101
  506. package/dist/browser/navigation-store.d.ts.map +0 -1
  507. package/dist/browser/navigation-store.js +0 -625
  508. package/dist/browser/navigation-store.js.map +0 -1
  509. package/dist/browser/partial-update.d.ts +0 -75
  510. package/dist/browser/partial-update.d.ts.map +0 -1
  511. package/dist/browser/partial-update.js +0 -426
  512. package/dist/browser/partial-update.js.map +0 -1
  513. package/dist/browser/react/Link.d.ts +0 -86
  514. package/dist/browser/react/Link.d.ts.map +0 -1
  515. package/dist/browser/react/Link.js +0 -128
  516. package/dist/browser/react/Link.js.map +0 -1
  517. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  518. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  519. package/dist/browser/react/NavigationProvider.js +0 -216
  520. package/dist/browser/react/NavigationProvider.js.map +0 -1
  521. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  522. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  523. package/dist/browser/react/ScrollRestoration.js +0 -57
  524. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  525. package/dist/browser/react/context.d.ts +0 -46
  526. package/dist/browser/react/context.d.ts.map +0 -1
  527. package/dist/browser/react/context.js +0 -10
  528. package/dist/browser/react/context.js.map +0 -1
  529. package/dist/browser/react/index.d.ts +0 -11
  530. package/dist/browser/react/index.d.ts.map +0 -1
  531. package/dist/browser/react/index.js +0 -22
  532. package/dist/browser/react/index.js.map +0 -1
  533. package/dist/browser/react/location-state-shared.d.ts +0 -63
  534. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  535. package/dist/browser/react/location-state-shared.js +0 -81
  536. package/dist/browser/react/location-state-shared.js.map +0 -1
  537. package/dist/browser/react/location-state.d.ts +0 -23
  538. package/dist/browser/react/location-state.d.ts.map +0 -1
  539. package/dist/browser/react/location-state.js +0 -29
  540. package/dist/browser/react/location-state.js.map +0 -1
  541. package/dist/browser/react/mount-context.d.ts +0 -24
  542. package/dist/browser/react/mount-context.d.ts.map +0 -1
  543. package/dist/browser/react/mount-context.js +0 -24
  544. package/dist/browser/react/mount-context.js.map +0 -1
  545. package/dist/browser/react/use-action.d.ts +0 -64
  546. package/dist/browser/react/use-action.d.ts.map +0 -1
  547. package/dist/browser/react/use-action.js +0 -134
  548. package/dist/browser/react/use-action.js.map +0 -1
  549. package/dist/browser/react/use-client-cache.d.ts +0 -41
  550. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  551. package/dist/browser/react/use-client-cache.js +0 -39
  552. package/dist/browser/react/use-client-cache.js.map +0 -1
  553. package/dist/browser/react/use-handle.d.ts +0 -31
  554. package/dist/browser/react/use-handle.d.ts.map +0 -1
  555. package/dist/browser/react/use-handle.js +0 -144
  556. package/dist/browser/react/use-handle.js.map +0 -1
  557. package/dist/browser/react/use-href.d.ts +0 -33
  558. package/dist/browser/react/use-href.d.ts.map +0 -1
  559. package/dist/browser/react/use-href.js +0 -39
  560. package/dist/browser/react/use-href.js.map +0 -1
  561. package/dist/browser/react/use-link-status.d.ts +0 -37
  562. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  563. package/dist/browser/react/use-link-status.js +0 -99
  564. package/dist/browser/react/use-link-status.js.map +0 -1
  565. package/dist/browser/react/use-mount.d.ts +0 -25
  566. package/dist/browser/react/use-mount.d.ts.map +0 -1
  567. package/dist/browser/react/use-mount.js +0 -30
  568. package/dist/browser/react/use-mount.js.map +0 -1
  569. package/dist/browser/react/use-navigation.d.ts +0 -27
  570. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  571. package/dist/browser/react/use-navigation.js +0 -87
  572. package/dist/browser/react/use-navigation.js.map +0 -1
  573. package/dist/browser/react/use-segments.d.ts +0 -38
  574. package/dist/browser/react/use-segments.d.ts.map +0 -1
  575. package/dist/browser/react/use-segments.js +0 -130
  576. package/dist/browser/react/use-segments.js.map +0 -1
  577. package/dist/browser/request-controller.d.ts +0 -26
  578. package/dist/browser/request-controller.d.ts.map +0 -1
  579. package/dist/browser/request-controller.js +0 -147
  580. package/dist/browser/request-controller.js.map +0 -1
  581. package/dist/browser/rsc-router.d.ts +0 -129
  582. package/dist/browser/rsc-router.d.ts.map +0 -1
  583. package/dist/browser/rsc-router.js +0 -195
  584. package/dist/browser/rsc-router.js.map +0 -1
  585. package/dist/browser/scroll-restoration.d.ts +0 -93
  586. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  587. package/dist/browser/scroll-restoration.js +0 -321
  588. package/dist/browser/scroll-restoration.js.map +0 -1
  589. package/dist/browser/segment-structure-assert.d.ts +0 -17
  590. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  591. package/dist/browser/segment-structure-assert.js +0 -59
  592. package/dist/browser/segment-structure-assert.js.map +0 -1
  593. package/dist/browser/server-action-bridge.d.ts +0 -26
  594. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  595. package/dist/browser/server-action-bridge.js +0 -668
  596. package/dist/browser/server-action-bridge.js.map +0 -1
  597. package/dist/browser/shallow.d.ts +0 -12
  598. package/dist/browser/shallow.d.ts.map +0 -1
  599. package/dist/browser/shallow.js +0 -34
  600. package/dist/browser/shallow.js.map +0 -1
  601. package/dist/browser/types.d.ts +0 -369
  602. package/dist/browser/types.d.ts.map +0 -1
  603. package/dist/browser/types.js +0 -2
  604. package/dist/browser/types.js.map +0 -1
  605. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  606. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  607. package/dist/build/__tests__/generate-cli.test.js +0 -237
  608. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  609. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  610. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  611. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  612. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  613. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  614. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  615. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  616. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  617. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  618. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  619. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  620. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  621. package/dist/build/generate-manifest.d.ts +0 -81
  622. package/dist/build/generate-manifest.d.ts.map +0 -1
  623. package/dist/build/generate-manifest.js +0 -276
  624. package/dist/build/generate-manifest.js.map +0 -1
  625. package/dist/build/generate-route-types.d.ts +0 -115
  626. package/dist/build/generate-route-types.d.ts.map +0 -1
  627. package/dist/build/generate-route-types.js +0 -740
  628. package/dist/build/generate-route-types.js.map +0 -1
  629. package/dist/build/index.d.ts +0 -21
  630. package/dist/build/index.d.ts.map +0 -1
  631. package/dist/build/index.js +0 -21
  632. package/dist/build/index.js.map +0 -1
  633. package/dist/build/route-trie.d.ts +0 -71
  634. package/dist/build/route-trie.d.ts.map +0 -1
  635. package/dist/build/route-trie.js +0 -175
  636. package/dist/build/route-trie.js.map +0 -1
  637. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  638. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  639. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  640. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  641. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  642. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  643. package/dist/cache/__tests__/document-cache.test.js +0 -345
  644. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  645. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  646. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  647. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  648. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  649. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  650. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  651. package/dist/cache/__tests__/memory-store.test.js +0 -367
  652. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  653. package/dist/cache/cache-scope.d.ts +0 -102
  654. package/dist/cache/cache-scope.d.ts.map +0 -1
  655. package/dist/cache/cache-scope.js +0 -440
  656. package/dist/cache/cache-scope.js.map +0 -1
  657. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  658. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  659. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  660. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  661. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  662. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  663. package/dist/cache/cf/cf-cache-store.js +0 -242
  664. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  665. package/dist/cache/cf/index.d.ts +0 -14
  666. package/dist/cache/cf/index.d.ts.map +0 -1
  667. package/dist/cache/cf/index.js +0 -17
  668. package/dist/cache/cf/index.js.map +0 -1
  669. package/dist/cache/document-cache.d.ts +0 -64
  670. package/dist/cache/document-cache.d.ts.map +0 -1
  671. package/dist/cache/document-cache.js +0 -228
  672. package/dist/cache/document-cache.js.map +0 -1
  673. package/dist/cache/index.d.ts +0 -19
  674. package/dist/cache/index.d.ts.map +0 -1
  675. package/dist/cache/index.js +0 -21
  676. package/dist/cache/index.js.map +0 -1
  677. package/dist/cache/memory-segment-store.d.ts +0 -110
  678. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  679. package/dist/cache/memory-segment-store.js +0 -117
  680. package/dist/cache/memory-segment-store.js.map +0 -1
  681. package/dist/cache/memory-store.d.ts +0 -41
  682. package/dist/cache/memory-store.d.ts.map +0 -1
  683. package/dist/cache/memory-store.js +0 -191
  684. package/dist/cache/memory-store.js.map +0 -1
  685. package/dist/cache/types.d.ts +0 -317
  686. package/dist/cache/types.d.ts.map +0 -1
  687. package/dist/cache/types.js +0 -12
  688. package/dist/cache/types.js.map +0 -1
  689. package/dist/client.d.ts +0 -248
  690. package/dist/client.d.ts.map +0 -1
  691. package/dist/client.js +0 -367
  692. package/dist/client.js.map +0 -1
  693. package/dist/client.rsc.d.ts +0 -26
  694. package/dist/client.rsc.d.ts.map +0 -1
  695. package/dist/client.rsc.js +0 -46
  696. package/dist/client.rsc.js.map +0 -1
  697. package/dist/component-utils.d.ts +0 -36
  698. package/dist/component-utils.d.ts.map +0 -1
  699. package/dist/component-utils.js +0 -61
  700. package/dist/component-utils.js.map +0 -1
  701. package/dist/components/DefaultDocument.d.ts +0 -13
  702. package/dist/components/DefaultDocument.d.ts.map +0 -1
  703. package/dist/components/DefaultDocument.js +0 -15
  704. package/dist/components/DefaultDocument.js.map +0 -1
  705. package/dist/debug.d.ts +0 -58
  706. package/dist/debug.d.ts.map +0 -1
  707. package/dist/debug.js +0 -157
  708. package/dist/debug.js.map +0 -1
  709. package/dist/default-error-boundary.d.ts +0 -11
  710. package/dist/default-error-boundary.d.ts.map +0 -1
  711. package/dist/default-error-boundary.js +0 -45
  712. package/dist/default-error-boundary.js.map +0 -1
  713. package/dist/deps/browser.d.ts +0 -2
  714. package/dist/deps/browser.d.ts.map +0 -1
  715. package/dist/deps/browser.js +0 -3
  716. package/dist/deps/browser.js.map +0 -1
  717. package/dist/deps/html-stream-client.d.ts +0 -2
  718. package/dist/deps/html-stream-client.d.ts.map +0 -1
  719. package/dist/deps/html-stream-client.js +0 -3
  720. package/dist/deps/html-stream-client.js.map +0 -1
  721. package/dist/deps/html-stream-server.d.ts +0 -2
  722. package/dist/deps/html-stream-server.d.ts.map +0 -1
  723. package/dist/deps/html-stream-server.js +0 -3
  724. package/dist/deps/html-stream-server.js.map +0 -1
  725. package/dist/deps/rsc.d.ts +0 -2
  726. package/dist/deps/rsc.d.ts.map +0 -1
  727. package/dist/deps/rsc.js +0 -4
  728. package/dist/deps/rsc.js.map +0 -1
  729. package/dist/deps/ssr.d.ts +0 -2
  730. package/dist/deps/ssr.d.ts.map +0 -1
  731. package/dist/deps/ssr.js +0 -3
  732. package/dist/deps/ssr.js.map +0 -1
  733. package/dist/errors.d.ts +0 -174
  734. package/dist/errors.d.ts.map +0 -1
  735. package/dist/errors.js +0 -241
  736. package/dist/errors.js.map +0 -1
  737. package/dist/handle.d.ts +0 -78
  738. package/dist/handle.d.ts.map +0 -1
  739. package/dist/handle.js +0 -82
  740. package/dist/handle.js.map +0 -1
  741. package/dist/handles/MetaTags.d.ts +0 -14
  742. package/dist/handles/MetaTags.d.ts.map +0 -1
  743. package/dist/handles/MetaTags.js +0 -136
  744. package/dist/handles/MetaTags.js.map +0 -1
  745. package/dist/handles/index.d.ts +0 -6
  746. package/dist/handles/index.d.ts.map +0 -1
  747. package/dist/handles/index.js +0 -6
  748. package/dist/handles/index.js.map +0 -1
  749. package/dist/handles/meta.d.ts +0 -39
  750. package/dist/handles/meta.d.ts.map +0 -1
  751. package/dist/handles/meta.js +0 -202
  752. package/dist/handles/meta.js.map +0 -1
  753. package/dist/host/__tests__/errors.test.d.ts +0 -2
  754. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  755. package/dist/host/__tests__/errors.test.js +0 -76
  756. package/dist/host/__tests__/errors.test.js.map +0 -1
  757. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  758. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  759. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  760. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  761. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  762. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  763. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  764. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  765. package/dist/host/__tests__/router.test.d.ts +0 -2
  766. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  767. package/dist/host/__tests__/router.test.js +0 -241
  768. package/dist/host/__tests__/router.test.js.map +0 -1
  769. package/dist/host/__tests__/testing.test.d.ts +0 -2
  770. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  771. package/dist/host/__tests__/testing.test.js +0 -64
  772. package/dist/host/__tests__/testing.test.js.map +0 -1
  773. package/dist/host/__tests__/utils.test.d.ts +0 -2
  774. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  775. package/dist/host/__tests__/utils.test.js +0 -29
  776. package/dist/host/__tests__/utils.test.js.map +0 -1
  777. package/dist/host/cookie-handler.d.ts +0 -34
  778. package/dist/host/cookie-handler.d.ts.map +0 -1
  779. package/dist/host/cookie-handler.js +0 -124
  780. package/dist/host/cookie-handler.js.map +0 -1
  781. package/dist/host/errors.d.ts +0 -56
  782. package/dist/host/errors.d.ts.map +0 -1
  783. package/dist/host/errors.js +0 -79
  784. package/dist/host/errors.js.map +0 -1
  785. package/dist/host/index.d.ts +0 -29
  786. package/dist/host/index.d.ts.map +0 -1
  787. package/dist/host/index.js +0 -32
  788. package/dist/host/index.js.map +0 -1
  789. package/dist/host/pattern-matcher.d.ts +0 -36
  790. package/dist/host/pattern-matcher.d.ts.map +0 -1
  791. package/dist/host/pattern-matcher.js +0 -172
  792. package/dist/host/pattern-matcher.js.map +0 -1
  793. package/dist/host/router.d.ts +0 -26
  794. package/dist/host/router.d.ts.map +0 -1
  795. package/dist/host/router.js +0 -218
  796. package/dist/host/router.js.map +0 -1
  797. package/dist/host/testing.d.ts +0 -36
  798. package/dist/host/testing.d.ts.map +0 -1
  799. package/dist/host/testing.js +0 -55
  800. package/dist/host/testing.js.map +0 -1
  801. package/dist/host/types.d.ts +0 -115
  802. package/dist/host/types.d.ts.map +0 -1
  803. package/dist/host/types.js +0 -7
  804. package/dist/host/types.js.map +0 -1
  805. package/dist/host/utils.d.ts +0 -21
  806. package/dist/host/utils.d.ts.map +0 -1
  807. package/dist/host/utils.js +0 -23
  808. package/dist/host/utils.js.map +0 -1
  809. package/dist/href-client.d.ts +0 -131
  810. package/dist/href-client.d.ts.map +0 -1
  811. package/dist/href-client.js +0 -64
  812. package/dist/href-client.js.map +0 -1
  813. package/dist/href-context.d.ts +0 -29
  814. package/dist/href-context.d.ts.map +0 -1
  815. package/dist/href-context.js +0 -21
  816. package/dist/href-context.js.map +0 -1
  817. package/dist/index.d.ts +0 -73
  818. package/dist/index.d.ts.map +0 -1
  819. package/dist/index.js +0 -91
  820. package/dist/index.js.map +0 -1
  821. package/dist/index.rsc.d.ts +0 -32
  822. package/dist/index.rsc.d.ts.map +0 -1
  823. package/dist/index.rsc.js +0 -40
  824. package/dist/index.rsc.js.map +0 -1
  825. package/dist/internal-debug.d.ts +0 -2
  826. package/dist/internal-debug.d.ts.map +0 -1
  827. package/dist/internal-debug.js +0 -5
  828. package/dist/internal-debug.js.map +0 -1
  829. package/dist/loader.d.ts +0 -14
  830. package/dist/loader.d.ts.map +0 -1
  831. package/dist/loader.js +0 -20
  832. package/dist/loader.js.map +0 -1
  833. package/dist/loader.rsc.d.ts +0 -19
  834. package/dist/loader.rsc.d.ts.map +0 -1
  835. package/dist/loader.rsc.js +0 -99
  836. package/dist/loader.rsc.js.map +0 -1
  837. package/dist/network-error-thrower.d.ts +0 -17
  838. package/dist/network-error-thrower.d.ts.map +0 -1
  839. package/dist/network-error-thrower.js +0 -14
  840. package/dist/network-error-thrower.js.map +0 -1
  841. package/dist/outlet-context.d.ts +0 -13
  842. package/dist/outlet-context.d.ts.map +0 -1
  843. package/dist/outlet-context.js +0 -3
  844. package/dist/outlet-context.js.map +0 -1
  845. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  846. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  847. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  848. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  849. package/dist/prerender/param-hash.d.ts +0 -16
  850. package/dist/prerender/param-hash.d.ts.map +0 -1
  851. package/dist/prerender/param-hash.js +0 -36
  852. package/dist/prerender/param-hash.js.map +0 -1
  853. package/dist/prerender/store.d.ts +0 -38
  854. package/dist/prerender/store.d.ts.map +0 -1
  855. package/dist/prerender/store.js +0 -61
  856. package/dist/prerender/store.js.map +0 -1
  857. package/dist/prerender.d.ts +0 -66
  858. package/dist/prerender.d.ts.map +0 -1
  859. package/dist/prerender.js +0 -57
  860. package/dist/prerender.js.map +0 -1
  861. package/dist/reverse.d.ts +0 -196
  862. package/dist/reverse.d.ts.map +0 -1
  863. package/dist/reverse.js +0 -78
  864. package/dist/reverse.js.map +0 -1
  865. package/dist/root-error-boundary.d.ts +0 -33
  866. package/dist/root-error-boundary.d.ts.map +0 -1
  867. package/dist/root-error-boundary.js +0 -165
  868. package/dist/root-error-boundary.js.map +0 -1
  869. package/dist/route-content-wrapper.d.ts +0 -46
  870. package/dist/route-content-wrapper.d.ts.map +0 -1
  871. package/dist/route-content-wrapper.js +0 -77
  872. package/dist/route-content-wrapper.js.map +0 -1
  873. package/dist/route-definition.d.ts +0 -421
  874. package/dist/route-definition.d.ts.map +0 -1
  875. package/dist/route-definition.js +0 -868
  876. package/dist/route-definition.js.map +0 -1
  877. package/dist/route-map-builder.d.ts +0 -155
  878. package/dist/route-map-builder.d.ts.map +0 -1
  879. package/dist/route-map-builder.js +0 -237
  880. package/dist/route-map-builder.js.map +0 -1
  881. package/dist/route-types.d.ts +0 -165
  882. package/dist/route-types.d.ts.map +0 -1
  883. package/dist/route-types.js +0 -7
  884. package/dist/route-types.js.map +0 -1
  885. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  886. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  887. package/dist/router/__tests__/handler-context.test.js +0 -65
  888. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  889. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  890. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  891. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  892. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  893. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  894. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  895. package/dist/router/__tests__/match-context.test.js +0 -92
  896. package/dist/router/__tests__/match-context.test.js.map +0 -1
  897. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  898. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  899. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  900. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  901. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  902. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  903. package/dist/router/__tests__/match-result.test.js +0 -457
  904. package/dist/router/__tests__/match-result.test.js.map +0 -1
  905. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  906. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  907. package/dist/router/__tests__/on-error.test.js +0 -678
  908. package/dist/router/__tests__/on-error.test.js.map +0 -1
  909. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  910. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  911. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  912. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  913. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  914. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  915. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  916. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  917. package/dist/router/error-handling.d.ts +0 -77
  918. package/dist/router/error-handling.d.ts.map +0 -1
  919. package/dist/router/error-handling.js +0 -202
  920. package/dist/router/error-handling.js.map +0 -1
  921. package/dist/router/handler-context.d.ts +0 -20
  922. package/dist/router/handler-context.d.ts.map +0 -1
  923. package/dist/router/handler-context.js +0 -198
  924. package/dist/router/handler-context.js.map +0 -1
  925. package/dist/router/intercept-resolution.d.ts +0 -66
  926. package/dist/router/intercept-resolution.d.ts.map +0 -1
  927. package/dist/router/intercept-resolution.js +0 -246
  928. package/dist/router/intercept-resolution.js.map +0 -1
  929. package/dist/router/loader-resolution.d.ts +0 -64
  930. package/dist/router/loader-resolution.d.ts.map +0 -1
  931. package/dist/router/loader-resolution.js +0 -284
  932. package/dist/router/loader-resolution.js.map +0 -1
  933. package/dist/router/logging.d.ts +0 -15
  934. package/dist/router/logging.d.ts.map +0 -1
  935. package/dist/router/logging.js +0 -99
  936. package/dist/router/logging.js.map +0 -1
  937. package/dist/router/manifest.d.ts +0 -22
  938. package/dist/router/manifest.d.ts.map +0 -1
  939. package/dist/router/manifest.js +0 -181
  940. package/dist/router/manifest.js.map +0 -1
  941. package/dist/router/match-api.d.ts +0 -35
  942. package/dist/router/match-api.d.ts.map +0 -1
  943. package/dist/router/match-api.js +0 -406
  944. package/dist/router/match-api.js.map +0 -1
  945. package/dist/router/match-context.d.ts +0 -206
  946. package/dist/router/match-context.d.ts.map +0 -1
  947. package/dist/router/match-context.js +0 -17
  948. package/dist/router/match-context.js.map +0 -1
  949. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  950. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  951. package/dist/router/match-middleware/background-revalidation.js +0 -75
  952. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  953. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  954. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  955. package/dist/router/match-middleware/cache-lookup.js +0 -257
  956. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  957. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  958. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  959. package/dist/router/match-middleware/cache-store.js +0 -108
  960. package/dist/router/match-middleware/cache-store.js.map +0 -1
  961. package/dist/router/match-middleware/index.d.ts +0 -81
  962. package/dist/router/match-middleware/index.d.ts.map +0 -1
  963. package/dist/router/match-middleware/index.js +0 -80
  964. package/dist/router/match-middleware/index.js.map +0 -1
  965. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  966. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  967. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  968. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  969. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  970. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  971. package/dist/router/match-middleware/segment-resolution.js +0 -53
  972. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  973. package/dist/router/match-pipelines.d.ts +0 -147
  974. package/dist/router/match-pipelines.d.ts.map +0 -1
  975. package/dist/router/match-pipelines.js +0 -82
  976. package/dist/router/match-pipelines.js.map +0 -1
  977. package/dist/router/match-result.d.ts +0 -126
  978. package/dist/router/match-result.d.ts.map +0 -1
  979. package/dist/router/match-result.js +0 -93
  980. package/dist/router/match-result.js.map +0 -1
  981. package/dist/router/metrics.d.ts +0 -20
  982. package/dist/router/metrics.d.ts.map +0 -1
  983. package/dist/router/metrics.js +0 -47
  984. package/dist/router/metrics.js.map +0 -1
  985. package/dist/router/middleware.d.ts +0 -249
  986. package/dist/router/middleware.d.ts.map +0 -1
  987. package/dist/router/middleware.js +0 -434
  988. package/dist/router/middleware.js.map +0 -1
  989. package/dist/router/middleware.test.d.ts +0 -2
  990. package/dist/router/middleware.test.d.ts.map +0 -1
  991. package/dist/router/middleware.test.js +0 -816
  992. package/dist/router/middleware.test.js.map +0 -1
  993. package/dist/router/pattern-matching.d.ts +0 -149
  994. package/dist/router/pattern-matching.d.ts.map +0 -1
  995. package/dist/router/pattern-matching.js +0 -349
  996. package/dist/router/pattern-matching.js.map +0 -1
  997. package/dist/router/revalidation.d.ts +0 -44
  998. package/dist/router/revalidation.d.ts.map +0 -1
  999. package/dist/router/revalidation.js +0 -147
  1000. package/dist/router/revalidation.js.map +0 -1
  1001. package/dist/router/router-context.d.ts +0 -135
  1002. package/dist/router/router-context.d.ts.map +0 -1
  1003. package/dist/router/router-context.js +0 -36
  1004. package/dist/router/router-context.js.map +0 -1
  1005. package/dist/router/segment-resolution.d.ts +0 -127
  1006. package/dist/router/segment-resolution.d.ts.map +0 -1
  1007. package/dist/router/segment-resolution.js +0 -919
  1008. package/dist/router/segment-resolution.js.map +0 -1
  1009. package/dist/router/trie-matching.d.ts +0 -40
  1010. package/dist/router/trie-matching.d.ts.map +0 -1
  1011. package/dist/router/trie-matching.js +0 -127
  1012. package/dist/router/trie-matching.js.map +0 -1
  1013. package/dist/router/types.d.ts +0 -136
  1014. package/dist/router/types.d.ts.map +0 -1
  1015. package/dist/router/types.js +0 -7
  1016. package/dist/router/types.js.map +0 -1
  1017. package/dist/router.d.ts +0 -753
  1018. package/dist/router.d.ts.map +0 -1
  1019. package/dist/router.gen.d.ts +0 -6
  1020. package/dist/router.gen.d.ts.map +0 -1
  1021. package/dist/router.gen.js +0 -6
  1022. package/dist/router.gen.js.map +0 -1
  1023. package/dist/router.js +0 -1304
  1024. package/dist/router.js.map +0 -1
  1025. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  1026. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  1027. package/dist/rsc/__tests__/helpers.test.js +0 -140
  1028. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  1029. package/dist/rsc/handler.d.ts +0 -45
  1030. package/dist/rsc/handler.d.ts.map +0 -1
  1031. package/dist/rsc/handler.js +0 -1172
  1032. package/dist/rsc/handler.js.map +0 -1
  1033. package/dist/rsc/helpers.d.ts +0 -16
  1034. package/dist/rsc/helpers.d.ts.map +0 -1
  1035. package/dist/rsc/helpers.js +0 -55
  1036. package/dist/rsc/helpers.js.map +0 -1
  1037. package/dist/rsc/index.d.ts +0 -22
  1038. package/dist/rsc/index.d.ts.map +0 -1
  1039. package/dist/rsc/index.js +0 -23
  1040. package/dist/rsc/index.js.map +0 -1
  1041. package/dist/rsc/nonce.d.ts +0 -9
  1042. package/dist/rsc/nonce.d.ts.map +0 -1
  1043. package/dist/rsc/nonce.js +0 -18
  1044. package/dist/rsc/nonce.js.map +0 -1
  1045. package/dist/rsc/types.d.ts +0 -206
  1046. package/dist/rsc/types.d.ts.map +0 -1
  1047. package/dist/rsc/types.js +0 -8
  1048. package/dist/rsc/types.js.map +0 -1
  1049. package/dist/search-params.d.ts +0 -103
  1050. package/dist/search-params.d.ts.map +0 -1
  1051. package/dist/search-params.js +0 -74
  1052. package/dist/search-params.js.map +0 -1
  1053. package/dist/segment-system.d.ts +0 -75
  1054. package/dist/segment-system.d.ts.map +0 -1
  1055. package/dist/segment-system.js +0 -336
  1056. package/dist/segment-system.js.map +0 -1
  1057. package/dist/server/context.d.ts +0 -245
  1058. package/dist/server/context.d.ts.map +0 -1
  1059. package/dist/server/context.js +0 -197
  1060. package/dist/server/context.js.map +0 -1
  1061. package/dist/server/fetchable-loader-store.d.ts +0 -18
  1062. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  1063. package/dist/server/fetchable-loader-store.js +0 -18
  1064. package/dist/server/fetchable-loader-store.js.map +0 -1
  1065. package/dist/server/handle-store.d.ts +0 -85
  1066. package/dist/server/handle-store.d.ts.map +0 -1
  1067. package/dist/server/handle-store.js +0 -142
  1068. package/dist/server/handle-store.js.map +0 -1
  1069. package/dist/server/loader-registry.d.ts +0 -55
  1070. package/dist/server/loader-registry.d.ts.map +0 -1
  1071. package/dist/server/loader-registry.js +0 -132
  1072. package/dist/server/loader-registry.js.map +0 -1
  1073. package/dist/server/request-context.d.ts +0 -226
  1074. package/dist/server/request-context.d.ts.map +0 -1
  1075. package/dist/server/request-context.js +0 -290
  1076. package/dist/server/request-context.js.map +0 -1
  1077. package/dist/server/root-layout.d.ts +0 -4
  1078. package/dist/server/root-layout.d.ts.map +0 -1
  1079. package/dist/server/root-layout.js +0 -5
  1080. package/dist/server/root-layout.js.map +0 -1
  1081. package/dist/server.d.ts +0 -15
  1082. package/dist/server.d.ts.map +0 -1
  1083. package/dist/server.js +0 -20
  1084. package/dist/server.js.map +0 -1
  1085. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  1086. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  1087. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  1088. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  1089. package/dist/ssr/index.d.ts +0 -98
  1090. package/dist/ssr/index.d.ts.map +0 -1
  1091. package/dist/ssr/index.js +0 -158
  1092. package/dist/ssr/index.js.map +0 -1
  1093. package/dist/static-handler.d.ts +0 -50
  1094. package/dist/static-handler.d.ts.map +0 -1
  1095. package/dist/static-handler.gen.d.ts +0 -5
  1096. package/dist/static-handler.gen.d.ts.map +0 -1
  1097. package/dist/static-handler.gen.js +0 -5
  1098. package/dist/static-handler.gen.js.map +0 -1
  1099. package/dist/static-handler.js +0 -29
  1100. package/dist/static-handler.js.map +0 -1
  1101. package/dist/theme/ThemeProvider.d.ts +0 -20
  1102. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  1103. package/dist/theme/ThemeProvider.js +0 -240
  1104. package/dist/theme/ThemeProvider.js.map +0 -1
  1105. package/dist/theme/ThemeScript.d.ts +0 -48
  1106. package/dist/theme/ThemeScript.d.ts.map +0 -1
  1107. package/dist/theme/ThemeScript.js +0 -13
  1108. package/dist/theme/ThemeScript.js.map +0 -1
  1109. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  1110. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  1111. package/dist/theme/__tests__/theme.test.js +0 -103
  1112. package/dist/theme/__tests__/theme.test.js.map +0 -1
  1113. package/dist/theme/constants.d.ts +0 -29
  1114. package/dist/theme/constants.d.ts.map +0 -1
  1115. package/dist/theme/constants.js +0 -48
  1116. package/dist/theme/constants.js.map +0 -1
  1117. package/dist/theme/index.d.ts +0 -31
  1118. package/dist/theme/index.d.ts.map +0 -1
  1119. package/dist/theme/index.js +0 -36
  1120. package/dist/theme/index.js.map +0 -1
  1121. package/dist/theme/theme-context.d.ts +0 -40
  1122. package/dist/theme/theme-context.d.ts.map +0 -1
  1123. package/dist/theme/theme-context.js +0 -60
  1124. package/dist/theme/theme-context.js.map +0 -1
  1125. package/dist/theme/theme-script.d.ts +0 -27
  1126. package/dist/theme/theme-script.d.ts.map +0 -1
  1127. package/dist/theme/theme-script.js +0 -147
  1128. package/dist/theme/theme-script.js.map +0 -1
  1129. package/dist/theme/types.d.ts +0 -163
  1130. package/dist/theme/types.d.ts.map +0 -1
  1131. package/dist/theme/types.js +0 -11
  1132. package/dist/theme/types.js.map +0 -1
  1133. package/dist/theme/use-theme.d.ts +0 -12
  1134. package/dist/theme/use-theme.d.ts.map +0 -1
  1135. package/dist/theme/use-theme.js +0 -40
  1136. package/dist/theme/use-theme.js.map +0 -1
  1137. package/dist/types.d.ts +0 -1479
  1138. package/dist/types.d.ts.map +0 -1
  1139. package/dist/types.js +0 -10
  1140. package/dist/types.js.map +0 -1
  1141. package/dist/urls.d.ts +0 -441
  1142. package/dist/urls.d.ts.map +0 -1
  1143. package/dist/urls.gen.d.ts +0 -8
  1144. package/dist/urls.gen.d.ts.map +0 -1
  1145. package/dist/urls.gen.js +0 -8
  1146. package/dist/urls.gen.js.map +0 -1
  1147. package/dist/urls.js +0 -443
  1148. package/dist/urls.js.map +0 -1
  1149. package/dist/use-loader.d.ts +0 -127
  1150. package/dist/use-loader.d.ts.map +0 -1
  1151. package/dist/use-loader.js +0 -237
  1152. package/dist/use-loader.js.map +0 -1
  1153. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  1154. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  1155. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  1156. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  1157. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  1158. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  1159. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  1160. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  1161. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  1162. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  1163. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  1164. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  1165. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  1166. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  1167. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  1168. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  1169. package/dist/vite/ast-handler-extract.d.ts +0 -49
  1170. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  1171. package/dist/vite/ast-handler-extract.js +0 -249
  1172. package/dist/vite/ast-handler-extract.js.map +0 -1
  1173. package/dist/vite/expose-action-id.d.ts +0 -19
  1174. package/dist/vite/expose-action-id.d.ts.map +0 -1
  1175. package/dist/vite/expose-action-id.js +0 -250
  1176. package/dist/vite/expose-action-id.js.map +0 -1
  1177. package/dist/vite/expose-id-utils.d.ts +0 -69
  1178. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  1179. package/dist/vite/expose-id-utils.js +0 -289
  1180. package/dist/vite/expose-id-utils.js.map +0 -1
  1181. package/dist/vite/expose-internal-ids.d.ts +0 -22
  1182. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  1183. package/dist/vite/expose-internal-ids.js +0 -886
  1184. package/dist/vite/expose-internal-ids.js.map +0 -1
  1185. package/dist/vite/index.d.ts +0 -149
  1186. package/dist/vite/index.d.ts.map +0 -1
  1187. package/dist/vite/index.js.map +0 -1
  1188. package/dist/vite/index.named-routes.gen.ts +0 -103
  1189. package/dist/vite/package-resolution.d.ts +0 -43
  1190. package/dist/vite/package-resolution.d.ts.map +0 -1
  1191. package/dist/vite/package-resolution.js +0 -112
  1192. package/dist/vite/package-resolution.js.map +0 -1
  1193. package/dist/vite/virtual-entries.d.ts +0 -25
  1194. package/dist/vite/virtual-entries.d.ts.map +0 -1
  1195. package/dist/vite/virtual-entries.js +0 -110
  1196. package/dist/vite/virtual-entries.js.map +0 -1
  1197. package/src/browser/action-response-classifier.ts +0 -99
  1198. package/src/browser/react/use-client-cache.ts +0 -58
  1199. package/src/browser/shallow.ts +0 -40
  1200. package/src/handles/index.ts +0 -7
  1201. package/src/network-error-thrower.tsx +0 -23
  1202. package/src/router/middleware-cookies.ts +0 -55
@@ -8,16 +8,16 @@
8
8
  */
9
9
 
10
10
  import { createElement } from "react";
11
- import { RouteNotFoundError } from "../errors.js";
11
+ import { isRouteNotFoundError } from "../errors.js";
12
12
  import { matchMiddleware, executeMiddleware } from "../router/middleware.js";
13
13
  import {
14
14
  runWithRequestContext,
15
15
  setRequestContextParams,
16
- requireRequestContext,
16
+ getRequestContext,
17
+ _getRequestContext,
17
18
  createRequestContext,
18
19
  } from "../server/request-context.js";
19
20
  import * as rscDeps from "@vitejs/plugin-rsc/rsc";
20
-
21
21
  import type {
22
22
  RscPayload,
23
23
  CreateRSCHandlerOptions,
@@ -30,6 +30,11 @@ import {
30
30
  interceptRedirectForPartial,
31
31
  buildRouteMiddlewareEntries,
32
32
  } from "./helpers.js";
33
+ import { guardOutgoingRedirect } from "./redirect-guard.js";
34
+ import {
35
+ isWebSocketUpgradeResponse,
36
+ appendVaryAccept,
37
+ } from "../response-utils.js";
33
38
  import {
34
39
  handleResponseRoute,
35
40
  type ResponseRouteMatch,
@@ -43,8 +48,6 @@ import {
43
48
  createReverseFunction,
44
49
  stripInternalParams,
45
50
  } from "../router/handler-context.js";
46
- import { getRouterContext } from "../router/router-context.js";
47
- import { resolveSink, safeEmit } from "../router/telemetry.js";
48
51
  import { contextSet } from "../context-var.js";
49
52
  import {
50
53
  hasCachedManifest,
@@ -55,6 +58,8 @@ import {
55
58
  getRouterTrie,
56
59
  } from "../route-map-builder.js";
57
60
  import type { HandlerContext } from "./handler-context.js";
61
+ import type { CacheErrorCategory } from "../cache/cache-error.js";
62
+ import type { SegmentCacheStore } from "../cache/types.js";
58
63
  import { buildRouterTrieFromUrlpatterns } from "./manifest-init.js";
59
64
  import { handleProgressiveEnhancement } from "./progressive-enhancement.js";
60
65
  import {
@@ -63,7 +68,10 @@ import {
63
68
  type ActionContinuation,
64
69
  } from "./server-action.js";
65
70
  import { handleLoaderFetch } from "./loader-fetch.js";
66
- import { checkRequestOrigin, type OriginCheckPhase } from "./origin-guard.js";
71
+ import {
72
+ checkRequestOrigin,
73
+ ORIGIN_CHECK_PHASE_BY_MODE,
74
+ } from "./origin-guard.js";
67
75
  import { handleRscRendering } from "./rsc-rendering.js";
68
76
  import {
69
77
  withTimeout,
@@ -76,12 +84,19 @@ import {
76
84
  appendMetric,
77
85
  buildMetricsTiming,
78
86
  } from "../router/metrics.js";
87
+ import { observePhase, observeEvent, PHASES } from "../router/instrument.js";
79
88
  import {
80
89
  startSSRSetup,
81
90
  getSSRSetup,
82
91
  mayNeedSSR,
92
+ isRscRequest,
83
93
  SSR_SETUP_VAR,
84
94
  } from "./ssr-setup.js";
95
+ import {
96
+ classifyRequest,
97
+ type RequestPlan,
98
+ type ExecutableRequestPlan,
99
+ } from "../router/request-classification.js";
85
100
 
86
101
  /**
87
102
  * Create an RSC request handler.
@@ -116,12 +131,35 @@ import {
116
131
  * });
117
132
  * ```
118
133
  */
134
+
135
+ /**
136
+ * Response that tells the client to do a full document navigation. Shared by
137
+ * the terminal reload plans (version-mismatch and app-switch): an empty 200
138
+ * carrying X-RSC-Reload, which the client turns into window.location.href.
139
+ */
140
+ function createReloadResponse(reloadUrl: string) {
141
+ return createResponseWithMergedHeaders(null, {
142
+ status: 200,
143
+ headers: {
144
+ "X-RSC-Reload": reloadUrl,
145
+ "content-type": "text/x-component;charset=utf-8",
146
+ },
147
+ });
148
+ }
149
+
119
150
  export function createRSCHandler<
120
151
  TEnv = unknown,
121
152
  TRoutes extends Record<string, string> = Record<string, string>,
122
153
  >(options: CreateRSCHandlerOptions<TEnv, TRoutes>) {
123
154
  const { router, version = VERSION, nonce: nonceProvider } = options;
124
155
 
156
+ // Handler-owned registry of explicit per-scope stores from cache({ store }).
157
+ // Lives in the closure so it is scoped per handler (multi-router deployments
158
+ // get separate registries) and accumulates every explicit store this handler
159
+ // resolves across requests. updateTag()/revalidateTag() iterate it to reach
160
+ // stores not covered by the app-level ctx._cacheStore.
161
+ const explicitTaggedStores = new Set<SegmentCacheStore>();
162
+
125
163
  // Use provided deps or default to @vitejs/plugin-rsc/rsc exports
126
164
  const deps = options.deps ?? rscDeps;
127
165
  const {
@@ -161,10 +199,13 @@ export function createRSCHandler<
161
199
  phase: ErrorPhase,
162
200
  context: Parameters<typeof invokeOnError<TEnv>>[3],
163
201
  ): void {
164
- if (error != null && typeof error === "object") {
165
- const reportedErrors = requireRequestContext()._reportedErrors;
166
- if (reportedErrors.has(error)) return;
167
- reportedErrors.add(error);
202
+ // Guard: abort signal handlers fire asynchronously outside the ALS
203
+ // request scope, so the context may be gone. Skip dedup in that
204
+ // case — the error is from a cancelled stream, not a real failure.
205
+ const reqCtx = _getRequestContext();
206
+ if (error != null && typeof error === "object" && reqCtx) {
207
+ if (reqCtx._reportedErrors.has(error)) return;
208
+ reqCtx._reportedErrors.add(error);
168
209
  }
169
210
  invokeOnError(router.onError, error, phase, context, "RSC");
170
211
  }
@@ -204,24 +245,16 @@ export function createRSCHandler<
204
245
  metadata: { timeout: true, phase, durationMs },
205
246
  });
206
247
 
207
- try {
208
- const routerCtx = getRouterContext();
209
- if (routerCtx?.telemetry) {
210
- safeEmit(resolveSink(routerCtx.telemetry), {
211
- type: "request.timeout" as const,
212
- timestamp: performance.now(),
213
- requestId: routerCtx.requestId,
214
- phase,
215
- pathname: url.pathname,
216
- routeKey,
217
- actionId,
218
- durationMs,
219
- customHandler: !!router.onTimeout,
220
- });
221
- }
222
- } catch {
223
- // Router context may not be available
224
- }
248
+ observeEvent({
249
+ type: "request.timeout",
250
+ timestamp: performance.now(),
251
+ phase,
252
+ pathname: url.pathname,
253
+ routeKey,
254
+ actionId,
255
+ durationMs,
256
+ customHandler: !!router.onTimeout,
257
+ });
225
258
 
226
259
  if (router.onTimeout) {
227
260
  try {
@@ -253,16 +286,27 @@ export function createRSCHandler<
253
286
  function createRedirectFlightResponse(
254
287
  redirectUrl: string,
255
288
  locationState?: Record<string, unknown>,
289
+ external?: boolean,
256
290
  ): Response {
257
291
  const redirectPayload: RscPayload = {
258
292
  metadata: {
259
293
  pathname: redirectUrl,
260
294
  segments: [],
261
- redirect: { url: redirectUrl },
295
+ redirect: { url: redirectUrl, ...(external && { external: true }) },
262
296
  ...(locationState && { locationState }),
263
297
  },
264
298
  };
265
- const rscStream = renderToReadableStream<RscPayload>(redirectPayload);
299
+ const rscStream = renderToReadableStream<RscPayload>(redirectPayload, {
300
+ onError: (error: unknown) => {
301
+ const reqCtx = _getRequestContext<TEnv>();
302
+ if (!reqCtx) return;
303
+ callOnError(error, "rendering", {
304
+ request: reqCtx.request,
305
+ url: reqCtx.url,
306
+ env: reqCtx.env,
307
+ });
308
+ },
309
+ });
266
310
  return createResponseWithMergedHeaders(rscStream, {
267
311
  status: 200,
268
312
  headers: { "content-type": "text/x-component;charset=utf-8" },
@@ -343,7 +387,7 @@ export function createRSCHandler<
343
387
  // Resolve cache store configuration
344
388
  // Priority: options.cache (handler override) > router.cache (router default)
345
389
  // Store is enabled only if: config provided, enabled, and no ?__no_cache query param
346
- let cacheStore = undefined;
390
+ let cacheStore: SegmentCacheStore | undefined;
347
391
  const cacheOption = options.cache ?? router.cache;
348
392
  if (cacheOption && !url.searchParams.has("__no_cache")) {
349
393
  const cacheConfig =
@@ -410,9 +454,12 @@ export function createRSCHandler<
410
454
  url,
411
455
  variables,
412
456
  cacheStore,
457
+ explicitTaggedStores,
413
458
  cacheProfiles: router.cacheProfiles,
414
459
  executionContext: executionCtx,
415
460
  themeConfig: router.themeConfig,
461
+ stateCookieName: router.resolvedStateCookieName,
462
+ version,
416
463
  });
417
464
  if (earlyMetricsStore) {
418
465
  requestContext._debugPerformance = true;
@@ -422,7 +469,7 @@ export function createRSCHandler<
422
469
  // can surface non-fatal errors through the router's onError callback.
423
470
  requestContext._reportBackgroundError = (
424
471
  error: unknown,
425
- category: string,
472
+ category: CacheErrorCategory,
426
473
  ) => {
427
474
  callOnError(error, "cache", {
428
475
  request,
@@ -452,82 +499,112 @@ export function createRSCHandler<
452
499
  // - Server components during rendering
453
500
  // - Error boundaries
454
501
  // - Streaming
455
- return runWithRequestContext(requestContext, async () => {
456
- // Core handler logic (wrapped by middleware)
457
- const coreHandler = async (): Promise<Response> => {
458
- return coreRequestHandler(request, env, url, variables, nonce);
459
- };
460
-
461
- // Execute middleware chain if any, otherwise call core handler directly
462
- let response: Response;
463
- if (matchedMiddleware.length > 0) {
464
- const mwResponse = await executeMiddleware(
465
- matchedMiddleware,
466
- request,
467
- env,
468
- variables,
469
- coreHandler,
470
- createReverseFunction(getRequiredRouteMap()),
471
- );
502
+ // Store basename on request context (scoped per-request via existing ALS)
503
+ requestContext._basename = router.basename;
504
+
505
+ // Resolved span tracing for this request (read at each traced phase).
506
+ requestContext._tracing = router.tracing;
507
+
508
+ // The "rango.request" span is opened inside the request context so the
509
+ // Cloudflare runner can read executionContext.tracing, and so every nested
510
+ // phase span (and the platform's automatic KV/D1/fetch spans) nests under
511
+ // it. Construction-bound: the span ends when the Response is built, never
512
+ // wrapping the streamed body. metric:false — handler:total is metered
513
+ // directly below (a grand total incl. the pre-context bootstrap timings).
514
+ // When tracing is off this is a direct pass-through.
515
+ return runWithRequestContext(requestContext, () =>
516
+ observePhase(PHASES.request, async (span) => {
517
+ span.setAttribute("http.method", request.method);
518
+ // The matched route template is not known until match() runs later, so
519
+ // emit the concrete path as url.path (low-level), NOT http.route — the
520
+ // latter is reserved for the low-cardinality template (OTel convention).
521
+ span.setAttribute("url.path", url.pathname);
522
+
523
+ // Core handler logic (wrapped by middleware)
524
+ const coreHandler = async (): Promise<Response> => {
525
+ return coreRequestHandler(request, env, url, variables, nonce);
526
+ };
472
527
 
473
- if (
474
- url.searchParams.has("_rsc_partial") ||
475
- url.searchParams.has("_rsc_action")
476
- ) {
477
- const intercepted = interceptRedirectForPartial(
478
- mwResponse,
479
- createRedirectFlightResponse,
528
+ // Execute middleware chain if any, otherwise call core handler directly
529
+ let response: Response;
530
+ if (matchedMiddleware.length > 0) {
531
+ const mwResponse = await executeMiddleware(
532
+ matchedMiddleware,
533
+ request,
534
+ env,
535
+ variables,
536
+ coreHandler,
537
+ createReverseFunction(getRequiredRouteMap()),
480
538
  );
481
- response = intercepted ?? finalizeResponse(mwResponse);
539
+
540
+ if (
541
+ url.searchParams.has("_rsc_partial") ||
542
+ url.searchParams.has("_rsc_action")
543
+ ) {
544
+ const intercepted = interceptRedirectForPartial(
545
+ mwResponse,
546
+ createRedirectFlightResponse,
547
+ );
548
+ response = intercepted ?? finalizeResponse(mwResponse);
549
+ } else {
550
+ response = finalizeResponse(mwResponse);
551
+ }
482
552
  } else {
483
- response = finalizeResponse(mwResponse);
553
+ response = await coreHandler();
484
554
  }
485
- } else {
486
- response = await coreHandler();
487
- }
488
555
 
489
- // Finalize metrics after all middleware (including post-next work)
490
- // has completed so :post spans are captured in the timeline.
491
- // Handler timing parts are always emitted (even without debug metrics)
492
- // so non-debug requests still get bootstrap Server-Timing entries.
493
- const handlerTimingArr: string[] = variables.__handlerTiming || [];
494
- // Preserve any existing Server-Timing set by response routes or middleware
495
- const existingTiming = response.headers.get("Server-Timing");
496
- const timingParts = existingTiming
497
- ? [existingTiming, ...handlerTimingArr]
498
- : [...handlerTimingArr];
499
-
500
- const metricsStore = requestContext._metricsStore;
501
- if (metricsStore) {
502
- // When the store was created at handler start (earlyMetricsStore),
503
- // handler:total covers the full request. When ctx.debugPerformance()
504
- // created the store mid-request, use its requestStart to avoid a
505
- // negative startTime offset.
506
- const totalStart = earlyMetricsStore
507
- ? handlerStart
508
- : metricsStore.requestStart;
509
- appendMetric(
510
- metricsStore,
511
- "handler:total",
512
- totalStart,
513
- performance.now() - totalStart,
514
- );
515
- const metricsTiming = buildMetricsTiming(
516
- request.method,
517
- url.pathname,
518
- metricsStore,
519
- );
520
- if (metricsTiming) timingParts.push(metricsTiming);
521
- }
556
+ // Finalize metrics after all middleware (including post-next work)
557
+ // has completed so :post spans are captured in the timeline.
558
+ // Handler timing parts are always emitted (even without debug metrics)
559
+ // so non-debug requests still get bootstrap Server-Timing entries.
560
+ const handlerTimingArr: string[] = variables.__handlerTiming || [];
561
+ // Preserve any existing Server-Timing set by response routes or middleware
562
+ const existingTiming = response.headers.get("Server-Timing");
563
+ const timingParts = existingTiming
564
+ ? [existingTiming, ...handlerTimingArr]
565
+ : [...handlerTimingArr];
566
+
567
+ const metricsStore = requestContext._metricsStore;
568
+ if (metricsStore) {
569
+ // When the store was created at handler start (earlyMetricsStore),
570
+ // handler:total covers the full request. When ctx.debugPerformance()
571
+ // created the store mid-request, use its requestStart to avoid a
572
+ // negative startTime offset.
573
+ const totalStart = earlyMetricsStore
574
+ ? handlerStart
575
+ : metricsStore.requestStart;
576
+ appendMetric(
577
+ metricsStore,
578
+ "handler:total",
579
+ totalStart,
580
+ performance.now() - totalStart,
581
+ );
582
+ const metricsTiming = buildMetricsTiming(
583
+ request.method,
584
+ url.pathname,
585
+ metricsStore,
586
+ );
587
+ if (metricsTiming) timingParts.push(metricsTiming);
588
+ }
522
589
 
523
- const fullTiming = timingParts.join(", ");
524
- if (fullTiming) response.headers.set("Server-Timing", fullTiming);
590
+ const fullTiming = timingParts.join(", ");
591
+ if (fullTiming && !isWebSocketUpgradeResponse(response)) {
592
+ response.headers.set("Server-Timing", fullTiming);
593
+ }
525
594
 
526
- return response;
527
- });
595
+ // Single open-redirect chokepoint: every response (PE, full-page,
596
+ // middleware short-circuit, response-route) funnels through here, so
597
+ // guarding browser-followed (3xx) redirects once covers them all and any
598
+ // future redirect exit. Soft SPA/Flight redirects are 200/204 and pass
599
+ // through untouched (validated client-side instead).
600
+ return guardOutgoingRedirect(response, url.origin, router.basename);
601
+ }),
602
+ );
528
603
  };
529
604
 
530
- // Core request handling logic (separated for middleware wrapping)
605
+ // Core request handling logic (separated for middleware wrapping).
606
+ // Uses the classify → execute model: classifyRequest produces a RequestPlan,
607
+ // then execution dispatches on the plan mode.
531
608
  async function coreRequestHandler(
532
609
  request: Request,
533
610
  env: TEnv,
@@ -535,71 +612,103 @@ export function createRSCHandler<
535
612
  variables: Record<string, any>,
536
613
  nonce: string | undefined,
537
614
  ): Promise<Response> {
538
- const previewStart = performance.now();
539
- const preview = await router.previewMatch(request, { env });
540
- const previewDur = performance.now() - previewStart;
541
615
  const handlerTiming: string[] = variables.__handlerTiming || [];
542
- handlerTiming.push(`handler-preview-match;dur=${previewDur.toFixed(2)}`);
543
- // Response route short-circuit: skip entire RSC pipeline
544
- if (preview?.responseType && preview.handler) {
545
- const responseOutcome = await withTimeout(
546
- handleResponseRoute(
547
- handlerCtx,
548
- preview as ResponseRouteMatch,
549
- request,
550
- env,
551
- url,
552
- variables,
616
+
617
+ // Debug manifest endpoint: handled before classification since it
618
+ // doesn't need a route match and needs trie access from the closure.
619
+ const isDev = process.env.NODE_ENV !== "production";
620
+ if (
621
+ url.searchParams.has("__debug_manifest") &&
622
+ (isDev || router.allowDebugManifest)
623
+ ) {
624
+ const trie = getRouterTrie(router.id) ?? getRouteTrie();
625
+ const routeManifest = getRequiredRouteMap();
626
+ const { extractAncestryFromTrie } =
627
+ await import("../build/route-trie.js");
628
+ return new Response(
629
+ JSON.stringify(
630
+ {
631
+ routerId: router.id,
632
+ routeManifest,
633
+ routeAncestry: trie ? extractAncestryFromTrie(trie) : {},
634
+ routeTrie: trie,
635
+ precomputedEntries: getPrecomputedEntries(),
636
+ },
637
+ null,
638
+ 2,
553
639
  ),
554
- router.timeouts.renderStartMs,
555
- "render-start",
640
+ {
641
+ headers: { "Content-Type": "application/json" },
642
+ },
556
643
  );
557
- if (responseOutcome.timedOut) {
558
- return handleTimeoutResponse(
559
- request,
560
- env,
561
- url,
562
- "render-start",
563
- responseOutcome.durationMs,
564
- preview?.routeKey,
565
- );
644
+ }
645
+
646
+ // ---- 1. Classify ----
647
+ // classifyRequest may throw RouteNotFoundError for unknown routes.
648
+ // In that case, fall through to a full-render plan so the pipeline
649
+ // can render the 404 page via the existing error handling path.
650
+ const classifyStart = performance.now();
651
+ let plan: RequestPlan<TEnv>;
652
+ try {
653
+ plan = await classifyRequest<TEnv>(request, url, {
654
+ findMatch: router.findMatch,
655
+ routerVersion: version,
656
+ routerId: router.id,
657
+ });
658
+ } catch (error) {
659
+ if (isRouteNotFoundError(error)) {
660
+ // Let the render path handle 404 — match()/matchPartial() will
661
+ // re-throw RouteNotFoundError and the catch block in
662
+ // executeRenderWithMiddleware renders the not-found page.
663
+ plan = {
664
+ mode: "full-render",
665
+ route: {
666
+ matched: null as any,
667
+ manifestEntry: null as any,
668
+ entries: [],
669
+ routeKey: "",
670
+ localRouteName: "",
671
+ params: {},
672
+ routeMiddleware: [],
673
+ cacheScope: null,
674
+ isPassthrough: false,
675
+ },
676
+ negotiated: false,
677
+ };
678
+ } else {
679
+ throw error;
566
680
  }
567
- return responseOutcome.result;
681
+ }
682
+ const classifyDur = performance.now() - classifyStart;
683
+ handlerTiming.push(`handler-classify;dur=${classifyDur.toFixed(2)}`);
684
+
685
+ // ---- 2. Terminal plans (no execution needed) ----
686
+ if (plan.mode === "redirect") {
687
+ // Redirects are handled by the pipeline (match/matchPartial),
688
+ // but for partial requests we short-circuit with a Flight redirect.
689
+ if (url.searchParams.has("_rsc_partial")) {
690
+ return createRedirectFlightResponse(plan.redirectUrl);
691
+ }
692
+ // Full requests: let the pipeline handle the redirect via match()
693
+ // which returns { redirect: url }. Fall through to full-render.
568
694
  }
569
695
 
570
- // Kick off SSR module loading + stream mode resolution in parallel with
571
- // segment resolution. Placed after the response-route short-circuit so
572
- // response/mime routes never pay for SSR work.
573
- if (mayNeedSSR(request, url)) {
574
- variables[SSR_SETUP_VAR] = startSSRSetup(
575
- handlerCtx,
576
- request,
577
- env,
578
- url,
579
- router.debugPerformance
580
- ? () => requireRequestContext()._metricsStore
581
- : undefined,
696
+ if (plan.mode === "version-mismatch") {
697
+ console.log(
698
+ `[RSC] Version mismatch: client=${url.searchParams.get("_rsc_v")}, server=${version}. Forcing reload.`,
582
699
  );
700
+ return createReloadResponse(plan.reloadUrl);
583
701
  }
584
702
 
585
- const routeReverse = createReverseFunction(getRequiredRouteMap());
703
+ if (plan.mode === "app-switch") {
704
+ // Cross-app SPA navigation crossed a host-router app boundary. Force a
705
+ // real document navigation so the target app's document is re-established
706
+ // (stylesheets, theme, warmup, prefetch-TTL). See request-classification.
707
+ return createReloadResponse(plan.reloadUrl);
708
+ }
586
709
 
587
- const isAction =
588
- request.headers.has("rsc-action") || url.searchParams.has("_rsc_action");
589
- const isLoaderFetch = url.searchParams.has("_rsc_loader");
590
- const actionId =
591
- request.headers.get("rsc-action") || url.searchParams.get("_rsc_action");
592
-
593
- // Origin guard: reject cross-origin actions, loader fetches, and
594
- // PE form submissions before any execution. Regular page navigations
595
- // (GET without _rsc_loader/_rsc_action) are not affected.
596
- const originPhase: OriginCheckPhase | null = isAction
597
- ? "action"
598
- : isLoaderFetch
599
- ? "loader"
600
- : request.method === "POST"
601
- ? "pe-form"
602
- : null;
710
+ // ---- 3. Origin guard (gate for action/loader/PE modes) ----
711
+ const originPhase = ORIGIN_CHECK_PHASE_BY_MODE[plan.mode];
603
712
  if (originPhase) {
604
713
  const originResult = await checkRequestOrigin(
605
714
  request,
@@ -627,37 +736,49 @@ export function createRSCHandler<
627
736
  },
628
737
  });
629
738
 
630
- try {
631
- const routerCtx = getRouterContext();
632
- if (routerCtx?.telemetry) {
633
- safeEmit(resolveSink(routerCtx.telemetry), {
634
- type: "request.origin-rejected" as const,
635
- timestamp: performance.now(),
636
- requestId: routerCtx.requestId,
637
- method: request.method,
638
- pathname: url.pathname,
639
- phase: originPhase,
640
- origin: request.headers.get("origin"),
641
- host: request.headers.get("host"),
642
- });
643
- }
644
- } catch {
645
- // Router context may not be available
646
- }
739
+ observeEvent({
740
+ type: "request.origin-rejected",
741
+ timestamp: performance.now(),
742
+ method: request.method,
743
+ pathname: url.pathname,
744
+ phase: originPhase,
745
+ origin: request.headers.get("origin"),
746
+ host: request.headers.get("host"),
747
+ });
647
748
 
648
749
  return originResult;
649
750
  }
650
751
  }
651
752
 
652
- // Get handle store from request context
653
- const handleStore = requireRequestContext()._handleStore;
753
+ // ---- 4. Execute ----
754
+ return executeRequest(
755
+ plan as ExecutableRequestPlan<TEnv>,
756
+ request,
757
+ env,
758
+ url,
759
+ variables,
760
+ nonce,
761
+ );
762
+ }
763
+
764
+ // Execute a classified request plan. Dispatches to the appropriate handler
765
+ // based on plan.mode. Lives in the createRSCHandler closure for access to
766
+ // handlerCtx, router, callOnError, etc.
767
+ // Only receives executable plans (version-mismatch is handled above).
768
+ async function executeRequest(
769
+ plan: ExecutableRequestPlan<TEnv>,
770
+ request: Request,
771
+ env: TEnv,
772
+ url: URL,
773
+ variables: Record<string, any>,
774
+ nonce: string | undefined,
775
+ ): Promise<Response> {
776
+ // Common setup
777
+ const handleStore = getRequestContext()._handleStore;
654
778
 
655
779
  // Wire up error reporting for late streaming-handle failures
656
- // (LateHandlePushError: handle pushed after stream completion).
657
- // Without this, these errors are only caught by React's error boundary
658
- // and never reach the router's onError callback or telemetry.
659
780
  handleStore.onError = (error: Error) => {
660
- const reqCtx = requireRequestContext();
781
+ const reqCtx = getRequestContext();
661
782
  callOnError(error, "handler", {
662
783
  request,
663
784
  url,
@@ -665,66 +786,149 @@ export function createRSCHandler<
665
786
  params: reqCtx.params as Record<string, string>,
666
787
  handledByBoundary: true,
667
788
  });
668
- try {
669
- const routerCtx = getRouterContext();
670
- if (routerCtx?.telemetry) {
671
- safeEmit(resolveSink(routerCtx.telemetry), {
672
- type: "handler.error" as const,
673
- timestamp: performance.now(),
674
- requestId: routerCtx.requestId,
675
- error,
676
- handledByBoundary: true,
677
- pathname: url.pathname,
678
- routeKey: reqCtx._routeName,
679
- params: reqCtx.params as Record<string, string>,
680
- });
681
- }
682
- } catch {
683
- // Router context may not be available (e.g. prerender path)
684
- }
789
+ observeEvent({
790
+ type: "handler.error",
791
+ timestamp: performance.now(),
792
+ error,
793
+ handledByBoundary: true,
794
+ pathname: url.pathname,
795
+ routeKey: reqCtx._routeName,
796
+ params: reqCtx.params as Record<string, string>,
797
+ });
685
798
  };
686
799
 
687
800
  // Set route params early so all execution paths can access ctx.params.
688
- if (preview?.params) {
689
- setRequestContextParams(preview.params, preview.routeKey);
801
+ // Also store the classified snapshot so match/matchPartial can reuse it
802
+ // instead of calling resolveRoute again.
803
+ if (plan.mode !== "redirect") {
804
+ setRequestContextParams(plan.route.params, plan.route.routeKey);
805
+ getRequestContext()._classifiedRoute = plan.route;
690
806
  }
691
807
 
692
- // Progressive enhancement runs before the normal action/render paths.
693
- // Route middleware wraps the PE re-render so handlers see the same
694
- // context variables regardless of JS/no-JS transport.
695
- const progressiveResult = await handleProgressiveEnhancement(
696
- handlerCtx,
697
- request,
698
- env,
699
- url,
700
- isAction,
701
- handleStore,
702
- nonce,
703
- {
704
- routeMiddleware: preview?.routeMiddleware,
808
+ const routeReverse = createReverseFunction(getRequiredRouteMap());
809
+
810
+ // ---- Response route: skip entire RSC pipeline ----
811
+ if (plan.mode === "response") {
812
+ // Build ResponseRouteMatch from plan fields. handleResponseRoute
813
+ // expects a flat object with params at the top level.
814
+ const responseMatch: ResponseRouteMatch = {
815
+ responseType: plan.responseType,
816
+ handler: plan.handler,
817
+ params: plan.route.params,
818
+ negotiated: plan.negotiated,
819
+ manifestEntry: plan.manifestEntry,
820
+ routeMiddleware: plan.routeMiddleware,
821
+ };
822
+ const responseOutcome = await withTimeout(
823
+ handleResponseRoute(
824
+ handlerCtx,
825
+ responseMatch,
826
+ request,
827
+ env,
828
+ url,
829
+ variables,
830
+ ),
831
+ router.timeouts.renderStartMs,
832
+ "render-start",
833
+ );
834
+ if (responseOutcome.timedOut) {
835
+ return handleTimeoutResponse(
836
+ request,
837
+ env,
838
+ url,
839
+ "render-start",
840
+ responseOutcome.durationMs,
841
+ plan.route.routeKey,
842
+ );
843
+ }
844
+ const response = responseOutcome.result;
845
+ if (plan.negotiated && !isWebSocketUpgradeResponse(response)) {
846
+ // handleResponseRoute (callHandlerWithVary) already appends Vary: Accept
847
+ // for negotiated responses; dedup so we don't emit Vary: Accept, Accept.
848
+ appendVaryAccept(response);
849
+ }
850
+ return response;
851
+ }
852
+
853
+ // SSR setup: kick off in parallel for modes that need HTML rendering.
854
+ // Placed after response-route short-circuit so response/mime routes
855
+ // never pay for SSR work.
856
+ //
857
+ // Only kick off when the request will actually render HTML, so the
858
+ // eager loadSSRModule() + user resolveStreaming() are not started (and
859
+ // never consumed) for a request that returns an RSC stream — that wasted
860
+ // work also leaves an orphaned Promise.all that can reject (D7). PE form
861
+ // submissions always render HTML (handleProgressiveEnhancement renders via
862
+ // getSSRSetup regardless of Accept). For full/partial-render and action,
863
+ // the render-time HTML decision is exactly !isRscRequest — mayNeedSSR is
864
+ // the coarse transport pre-filter, isRscRequest is the precise Accept call
865
+ // (it, unlike mayNeedSSR, treats a MISSING Accept as RSC). Both must pass.
866
+ const willRenderHtml =
867
+ plan.mode === "pe-render" ||
868
+ (mayNeedSSR(request, url) &&
869
+ !isRscRequest(request, url, plan.mode === "partial-render"));
870
+ if (plan.mode !== "loader" && willRenderHtml) {
871
+ variables[SSR_SETUP_VAR] = startSSRSetup(
872
+ handlerCtx,
873
+ request,
874
+ env,
875
+ url,
876
+ router.debugPerformance
877
+ ? () => getRequestContext()._metricsStore
878
+ : undefined,
879
+ );
880
+ }
881
+
882
+ // ---- Loader fetch ----
883
+ if (plan.mode === "loader") {
884
+ return handleLoaderFetch(
885
+ handlerCtx,
886
+ request,
887
+ env,
888
+ url,
705
889
  variables,
706
- routeReverse,
707
- },
708
- );
709
- if (progressiveResult) {
710
- return progressiveResult;
890
+ plan.route.params,
891
+ );
711
892
  }
712
893
 
713
- // --- Action execution: runs BEFORE route middleware ---
714
- // Route middleware wraps rendering only. For actions, the action runs
715
- // first in the global middleware context, then route middleware wraps
716
- // the revalidation pass (identical to a normal render).
717
- let actionContinuation: ActionContinuation | undefined;
718
- if (isAction && actionId) {
894
+ // ---- Progressive enhancement ----
895
+ if (plan.mode === "pe-render") {
896
+ const peResult = await handleProgressiveEnhancement(
897
+ handlerCtx,
898
+ request,
899
+ env,
900
+ url,
901
+ false, // isAction = false for PE
902
+ handleStore,
903
+ nonce,
904
+ {
905
+ routeMiddleware: plan.route.routeMiddleware,
906
+ variables,
907
+ routeReverse,
908
+ },
909
+ );
910
+ if (peResult) return peResult;
911
+ // PE handler returned null (not a PE form) — fall through to render
912
+ }
913
+
914
+ // ---- Action: execute action, then revalidate wrapped in route middleware ----
915
+ if (plan.mode === "action") {
916
+ let actionContinuation: ActionContinuation | undefined;
719
917
  try {
918
+ // Instrument the action execution as its own phase (action:<actionId> +
919
+ // rango.action), so a POST shows the mutation time AND which action ran,
920
+ // not just the downstream revalidation render. The action's own
921
+ // loaders/fetches nest under rango.action.
720
922
  const actionOutcome = await withTimeout(
721
- executeServerAction(
722
- handlerCtx,
723
- request,
724
- env,
725
- url,
726
- actionId,
727
- handleStore,
923
+ observePhase(PHASES.action(plan.actionId), () =>
924
+ executeServerAction(
925
+ handlerCtx,
926
+ request,
927
+ env,
928
+ url,
929
+ plan.actionId,
930
+ handleStore,
931
+ ),
728
932
  ),
729
933
  router.timeouts.actionMs,
730
934
  "action",
@@ -736,8 +940,8 @@ export function createRSCHandler<
736
940
  url,
737
941
  "action",
738
942
  actionOutcome.durationMs,
739
- preview?.routeKey,
740
- actionId,
943
+ plan.route.routeKey,
944
+ plan.actionId,
741
945
  );
742
946
  }
743
947
  const result = actionOutcome.result;
@@ -749,40 +953,248 @@ export function createRSCHandler<
749
953
  request,
750
954
  url,
751
955
  env,
752
- actionId,
956
+ actionId: plan.actionId,
753
957
  handledByBoundary: false,
754
958
  });
755
959
  console.error(`[RSC] Action error:`, error);
756
960
  throw error;
757
961
  }
758
- }
759
962
 
760
- // --- Rendering (action revalidation or navigation) ---
761
- // Route middleware wraps this same code path for both cases.
762
- const renderHandler = async () => {
763
- const response = await coreRequestHandlerInner(
963
+ // Revalidation render wrapped in route middleware.
964
+ // Actions from client-side navigation include _rsc_partial preserve
965
+ // the partial flag so the revalidation returns a Flight stream, not HTML.
966
+ // App-switch is already excluded by classifyRequest (would be full-render).
967
+ const isPartialAction = url.searchParams.has("_rsc_partial");
968
+ return executeRenderWithMiddleware(
969
+ plan.route.routeMiddleware,
970
+ plan.negotiated,
971
+ plan.route.routeKey,
972
+ routeReverse,
764
973
  request,
765
974
  env,
766
975
  url,
767
976
  variables,
768
977
  nonce,
769
- preview?.params,
770
- preview?.routeKey,
771
978
  handleStore,
979
+ isPartialAction,
772
980
  actionContinuation,
773
981
  );
774
- if (preview?.negotiated) {
775
- response.headers.append("Vary", "Accept");
982
+ }
983
+
984
+ // Full render, partial render, fallen-through PE, and full-page redirect all
985
+ // render through the same middleware-wrapped path. Only full/partial-render
986
+ // carry negotiation + the partial flag; pe/redirect render plainly.
987
+ const isPartial = plan.mode === "partial-render";
988
+ const negotiated =
989
+ plan.mode === "full-render" || plan.mode === "partial-render"
990
+ ? plan.negotiated
991
+ : false;
992
+ return executeRenderWithMiddleware(
993
+ plan.route.routeMiddleware,
994
+ negotiated,
995
+ plan.route.routeKey,
996
+ routeReverse,
997
+ request,
998
+ env,
999
+ url,
1000
+ variables,
1001
+ nonce,
1002
+ handleStore,
1003
+ isPartial,
1004
+ );
1005
+ }
1006
+
1007
+ // Shared render execution: wraps handleRscRendering (or revalidateAfterAction)
1008
+ // in route middleware and timeout handling. Consolidates the pattern used by
1009
+ // action-revalidate, full-render, and partial-render modes.
1010
+ async function executeRenderWithMiddleware(
1011
+ routeMiddleware: import("../router/middleware-types.js").CollectedMiddleware[],
1012
+ negotiated: boolean,
1013
+ routeKey: string,
1014
+ routeReverse: ReturnType<typeof createReverseFunction>,
1015
+ request: Request,
1016
+ env: TEnv,
1017
+ url: URL,
1018
+ variables: Record<string, any>,
1019
+ nonce: string | undefined,
1020
+ handleStore: ReturnType<typeof getRequestContext>["_handleStore"],
1021
+ isPartial: boolean,
1022
+ actionContinuation?: ActionContinuation,
1023
+ ): Promise<Response> {
1024
+ const renderHandler = async (): Promise<Response> => {
1025
+ try {
1026
+ let response: Response;
1027
+ if (actionContinuation) {
1028
+ response = await revalidateAfterAction(
1029
+ handlerCtx,
1030
+ request,
1031
+ env,
1032
+ url,
1033
+ handleStore,
1034
+ actionContinuation,
1035
+ );
1036
+ } else {
1037
+ response = await handleRscRendering(
1038
+ handlerCtx,
1039
+ request,
1040
+ env,
1041
+ url,
1042
+ isPartial,
1043
+ handleStore,
1044
+ nonce,
1045
+ );
1046
+ }
1047
+ if (negotiated && !isWebSocketUpgradeResponse(response)) {
1048
+ // handleRscRendering bakes `accept` into the RSC response's Vary list;
1049
+ // dedup so the negotiated append does not list accept twice.
1050
+ appendVaryAccept(response);
1051
+ }
1052
+ return response;
1053
+ } catch (error) {
1054
+ // Check if middleware/handler returned Response
1055
+ if (error instanceof Response) {
1056
+ // An action revalidation render is delivered to the client over the
1057
+ // same Flight-parsing path as a partial navigation, so a Response
1058
+ // thrown during it must be converted exactly like a partial one
1059
+ // (raw 200 -> hard-nav hint, 3xx -> Flight redirect). Without this,
1060
+ // the no-middleware path returns the raw Response (the with-middleware
1061
+ // path is already covered by the isPartial || actionContinuation
1062
+ // guard below).
1063
+ const treatAsPartial = isPartial || actionContinuation != null;
1064
+
1065
+ // During partial (client-side navigation), a 200 Response from a handler
1066
+ // means the route serves raw content (JSON, text, etc.), not JSX.
1067
+ // Signal the browser to hard-navigate so it renders the raw response.
1068
+ if (treatAsPartial && error.status === 200) {
1069
+ console.warn(
1070
+ `[RSC] Route handler at ${url.pathname} returned a Response during client-side navigation. ` +
1071
+ `Falling back to hard navigation. Use data-external on the <Link> to avoid the extra round-trip.`,
1072
+ );
1073
+ return createResponseWithMergedHeaders(null, {
1074
+ status: 200,
1075
+ headers: {
1076
+ "X-RSC-Reload": stripInternalParams(url).toString(),
1077
+ "content-type": "text/x-component;charset=utf-8",
1078
+ },
1079
+ });
1080
+ }
1081
+
1082
+ if (treatAsPartial) {
1083
+ const intercepted = interceptRedirectForPartial(
1084
+ error,
1085
+ createRedirectFlightResponse,
1086
+ );
1087
+ if (intercepted) return intercepted;
1088
+ }
1089
+
1090
+ return error;
1091
+ }
1092
+
1093
+ // Render 404 page for unmatched routes
1094
+ if (isRouteNotFoundError(error)) {
1095
+ callOnError(error, "routing", {
1096
+ request,
1097
+ url,
1098
+ env,
1099
+ handledByBoundary: true,
1100
+ });
1101
+
1102
+ const notFoundOption = router.notFound;
1103
+ const notFoundComponent =
1104
+ typeof notFoundOption === "function"
1105
+ ? notFoundOption({ pathname: url.pathname })
1106
+ : (notFoundOption ?? createElement("h1", null, "Not Found"));
1107
+
1108
+ const notFoundSegment = {
1109
+ id: "notFound",
1110
+ namespace: "notFound",
1111
+ type: "route" as const,
1112
+ index: 0,
1113
+ component: notFoundComponent,
1114
+ params: {},
1115
+ };
1116
+
1117
+ const payload: RscPayload = {
1118
+ metadata: {
1119
+ pathname: url.pathname,
1120
+ routerId: router.id,
1121
+ basename: router.basename,
1122
+ segments: [notFoundSegment],
1123
+ matched: [],
1124
+ diff: [],
1125
+ // Shape parity with buildFullPayload (rsc-rendering.ts): the 404
1126
+ // payload carries params/resolvedIds/prefetchCacheTTL the same way a
1127
+ // matched full render does. resolvedIds mirrors the rendered segment
1128
+ // list (the single notFound segment) like the error-boundary path
1129
+ // (match-api.ts) does for its boundary segment.
1130
+ resolvedIds: [notFoundSegment.id],
1131
+ params: {},
1132
+ isPartial: false,
1133
+ rootLayout: router.rootLayout,
1134
+ handles: handleStore.stream(),
1135
+ version,
1136
+ prefetchCacheTTL: router.prefetchCacheTTL,
1137
+ stateCookieName: router.resolvedStateCookieName,
1138
+ themeConfig: router.themeConfig,
1139
+ warmupEnabled: router.warmupEnabled,
1140
+ strictMode: router.strictMode,
1141
+ initialTheme: getRequestContext().theme,
1142
+ },
1143
+ };
1144
+
1145
+ const rscStream = renderToReadableStream(payload, {
1146
+ onError: (error: unknown) => {
1147
+ callOnError(error, "rendering", { request, url, env });
1148
+ },
1149
+ });
1150
+
1151
+ if (isRscRequest(request, url, isPartial)) {
1152
+ return createResponseWithMergedHeaders(rscStream, {
1153
+ status: 404,
1154
+ headers: {
1155
+ "content-type": "text/x-component;charset=utf-8",
1156
+ // Router identity for the client's pre-decode integrity check; a
1157
+ // same-app 404 matches and applies in place. See response-adapter.
1158
+ "X-RSC-Router-Id": router.id,
1159
+ },
1160
+ });
1161
+ }
1162
+
1163
+ const [ssrModule, streamMode] = await getSSRSetup(
1164
+ handlerCtx,
1165
+ request,
1166
+ env,
1167
+ url,
1168
+ getRequestContext()._metricsStore,
1169
+ );
1170
+ const htmlStream = await ssrModule.renderHTML(rscStream, {
1171
+ nonce,
1172
+ streamMode,
1173
+ });
1174
+
1175
+ return createResponseWithMergedHeaders(htmlStream, {
1176
+ status: 404,
1177
+ headers: { "content-type": "text/html;charset=utf-8" },
1178
+ });
1179
+ }
1180
+
1181
+ // Report unhandled errors
1182
+ callOnError(error, "routing", {
1183
+ request,
1184
+ url,
1185
+ env,
1186
+ handledByBoundary: false,
1187
+ });
1188
+ console.error(`[RSC] Error:`, error);
1189
+ throw error;
776
1190
  }
777
- return response;
778
1191
  };
779
1192
 
780
- // Wrap the render path (with or without route middleware) in a
781
- // renderStartMs timeout so slow renders are caught before output.
1193
+ // Wrap the render path in a renderStartMs timeout
782
1194
  const executeRender = async (): Promise<Response> => {
783
- if (preview?.routeMiddleware && preview.routeMiddleware.length > 0) {
1195
+ if (routeMiddleware.length > 0) {
784
1196
  const mwResponse = await executeMiddleware(
785
- buildRouteMiddlewareEntries<TEnv>(preview.routeMiddleware),
1197
+ buildRouteMiddlewareEntries<TEnv>(routeMiddleware),
786
1198
  request,
787
1199
  env,
788
1200
  variables,
@@ -790,10 +1202,7 @@ export function createRSCHandler<
790
1202
  routeReverse,
791
1203
  );
792
1204
 
793
- if (
794
- url.searchParams.has("_rsc_partial") ||
795
- url.searchParams.has("_rsc_action")
796
- ) {
1205
+ if (isPartial || actionContinuation) {
797
1206
  const intercepted = interceptRedirectForPartial(
798
1207
  mwResponse,
799
1208
  createRedirectFlightResponse,
@@ -804,7 +1213,6 @@ export function createRSCHandler<
804
1213
  return finalizeResponse(mwResponse);
805
1214
  }
806
1215
 
807
- // No route middleware, proceed directly
808
1216
  return renderHandler();
809
1217
  };
810
1218
 
@@ -820,270 +1228,9 @@ export function createRSCHandler<
820
1228
  url,
821
1229
  "render-start",
822
1230
  renderOutcome.durationMs,
823
- preview?.routeKey,
1231
+ routeKey,
824
1232
  );
825
1233
  }
826
1234
  return renderOutcome.result;
827
1235
  }
828
-
829
- // Inner request handler: rendering logic wrapped by route middleware.
830
- // Handles action revalidation (when actionContinuation is present),
831
- // loader fetches, and regular RSC rendering.
832
- async function coreRequestHandlerInner(
833
- request: Request,
834
- env: TEnv,
835
- url: URL,
836
- variables: Record<string, any>,
837
- nonce: string | undefined,
838
- routeParams?: Record<string, string>,
839
- routeKey?: string,
840
- handleStore?: ReturnType<typeof requireRequestContext>["_handleStore"],
841
- actionContinuation?: ActionContinuation,
842
- ): Promise<Response> {
843
- const isPartial = url.searchParams.has("_rsc_partial");
844
- const isAction =
845
- request.headers.has("rsc-action") || url.searchParams.has("_rsc_action");
846
-
847
- // Version mismatch detection - client may have stale code after HMR/deployment
848
- // If versions don't match, tell the client to reload
849
- const clientVersion = url.searchParams.get("_rsc_v");
850
- if (version && clientVersion && clientVersion !== version) {
851
- console.log(
852
- `[RSC] Version mismatch: client=${clientVersion}, server=${version}. Forcing reload.`,
853
- );
854
-
855
- // For actions, reload current page (referer) if same origin.
856
- // For navigation, load the target URL.
857
- // Validate referer origin to prevent open redirect via crafted header.
858
- let reloadUrl = stripInternalParams(url).toString();
859
- if (isAction) {
860
- const referer = request.headers.get("referer");
861
- if (referer) {
862
- try {
863
- const refererUrl = new URL(referer);
864
- if (refererUrl.origin === url.origin) {
865
- reloadUrl = referer;
866
- }
867
- } catch {
868
- // Malformed referer, fall back to cleanUrl
869
- }
870
- }
871
- }
872
-
873
- // Return special response that tells client to reload
874
- return createResponseWithMergedHeaders(null, {
875
- status: 200,
876
- headers: {
877
- "X-RSC-Reload": reloadUrl,
878
- "content-type": "text/x-component;charset=utf-8",
879
- },
880
- });
881
- }
882
- // Debug manifest endpoint: ?__debug_manifest on any route.
883
- // Always available in dev, requires allowDebugManifest option in production.
884
- const isDev = process.env.NODE_ENV !== "production";
885
- if (
886
- url.searchParams.has("__debug_manifest") &&
887
- (isDev || router.allowDebugManifest)
888
- ) {
889
- const trie = getRouterTrie(router.id) ?? getRouteTrie();
890
- const routeManifest = getRequiredRouteMap();
891
- const { extractAncestryFromTrie } =
892
- await import("../build/route-trie.js");
893
- return new Response(
894
- JSON.stringify(
895
- {
896
- routerId: router.id,
897
- routeManifest,
898
- routeAncestry: trie ? extractAncestryFromTrie(trie) : {},
899
- routeTrie: trie,
900
- precomputedEntries: getPrecomputedEntries(),
901
- },
902
- null,
903
- 2,
904
- ),
905
- {
906
- headers: { "Content-Type": "application/json" },
907
- },
908
- );
909
- }
910
-
911
- const store = handleStore ?? requireRequestContext()._handleStore;
912
-
913
- try {
914
- // Route params were already set in coreRequestHandler, but set again
915
- // for callers that enter coreRequestHandlerInner directly.
916
- if (routeParams) {
917
- setRequestContextParams(routeParams, routeKey);
918
- }
919
-
920
- // ============================================================================
921
- // ACTION REVALIDATION (action already executed, revalidate segments)
922
- // ============================================================================
923
- if (actionContinuation) {
924
- return await revalidateAfterAction(
925
- handlerCtx,
926
- request,
927
- env,
928
- url,
929
- store,
930
- actionContinuation,
931
- );
932
- }
933
-
934
- // ============================================================================
935
- // LOADER FETCH EXECUTION (data fetching with RSC serialization)
936
- // ============================================================================
937
- const isLoaderRequest = url.searchParams.has("_rsc_loader");
938
- if (isLoaderRequest) {
939
- return handleLoaderFetch(
940
- handlerCtx,
941
- request,
942
- env,
943
- url,
944
- variables,
945
- routeParams,
946
- );
947
- }
948
-
949
- // ============================================================================
950
- // REGULAR RSC RENDERING (Navigation)
951
- // ============================================================================
952
- // Note: Must use "return await" for try/catch to catch async rejections
953
- return await handleRscRendering(
954
- handlerCtx,
955
- request,
956
- env,
957
- url,
958
- isPartial,
959
- store,
960
- nonce,
961
- );
962
- } catch (error) {
963
- // Check if middleware/handler returned Response
964
- if (error instanceof Response) {
965
- // During partial (client-side navigation), a 200 Response from a handler
966
- // means the route serves raw content (JSON, text, etc.), not JSX.
967
- // Signal the browser to hard-navigate so it renders the raw response.
968
- // Only for 200 — redirects (3xx) work already because the browser follows
969
- // them automatically to a URL that serves Flight data.
970
- if (isPartial && error.status === 200) {
971
- console.warn(
972
- `[RSC] Route handler at ${url.pathname} returned a Response during client-side navigation. ` +
973
- `Falling back to hard navigation. Use data-external on the <Link> to avoid the extra round-trip.`,
974
- );
975
- return createResponseWithMergedHeaders(null, {
976
- status: 200,
977
- headers: {
978
- "X-RSC-Reload": stripInternalParams(url).toString(),
979
- "content-type": "text/x-component;charset=utf-8",
980
- },
981
- });
982
- }
983
-
984
- if (isPartial) {
985
- const intercepted = interceptRedirectForPartial(
986
- error,
987
- createRedirectFlightResponse,
988
- );
989
- if (intercepted) return intercepted;
990
- }
991
-
992
- return error;
993
- }
994
-
995
- // Render 404 page for unmatched routes
996
- // Check both instanceof and error.name for cross-bundle compatibility
997
- const isRouteNotFound =
998
- error instanceof RouteNotFoundError ||
999
- (error instanceof Error && error.name === "RouteNotFoundError");
1000
- if (isRouteNotFound) {
1001
- callOnError(error, "routing", {
1002
- request,
1003
- url,
1004
- env,
1005
- handledByBoundary: true, // Handled by notFound component
1006
- });
1007
-
1008
- // Get notFound component from router options or use default
1009
- const notFoundOption = router.notFound;
1010
- const notFoundComponent =
1011
- typeof notFoundOption === "function"
1012
- ? notFoundOption({ pathname: url.pathname })
1013
- : (notFoundOption ?? createElement("h1", null, "Not Found"));
1014
-
1015
- // Create a simple segment for the 404 page
1016
- const notFoundSegment = {
1017
- id: "notFound",
1018
- namespace: "notFound",
1019
- type: "route" as const,
1020
- index: 0,
1021
- component: notFoundComponent,
1022
- params: {},
1023
- };
1024
-
1025
- const payload: RscPayload = {
1026
- metadata: {
1027
- pathname: url.pathname,
1028
- segments: [notFoundSegment],
1029
- matched: [],
1030
- diff: [],
1031
- isPartial: false,
1032
- rootLayout: router.rootLayout,
1033
- handles: store.stream(),
1034
- version,
1035
- themeConfig: router.themeConfig,
1036
- warmupEnabled: router.warmupEnabled,
1037
- initialTheme: requireRequestContext().theme,
1038
- // No routeName for not-found routes
1039
- },
1040
- };
1041
-
1042
- const rscStream = renderToReadableStream(payload);
1043
-
1044
- // Determine if this is an RSC request or HTML request.
1045
- // Partial requests are always RSC (see main isRscRequest comment).
1046
- const isRscRequest =
1047
- isPartial ||
1048
- (!request.headers.get("accept")?.includes("text/html") &&
1049
- !url.searchParams.has("__html")) ||
1050
- url.searchParams.has("__rsc");
1051
-
1052
- if (isRscRequest) {
1053
- return createResponseWithMergedHeaders(rscStream, {
1054
- status: 404,
1055
- headers: { "content-type": "text/x-component;charset=utf-8" },
1056
- });
1057
- }
1058
-
1059
- // Delegate to SSR for HTML response (reuse early setup if available)
1060
- const [ssrModule, streamMode] = await getSSRSetup(
1061
- handlerCtx,
1062
- request,
1063
- env,
1064
- url,
1065
- requireRequestContext()._metricsStore,
1066
- );
1067
- const htmlStream = await ssrModule.renderHTML(rscStream, {
1068
- nonce,
1069
- streamMode,
1070
- });
1071
-
1072
- return createResponseWithMergedHeaders(htmlStream, {
1073
- status: 404,
1074
- headers: { "content-type": "text/html;charset=utf-8" },
1075
- });
1076
- }
1077
-
1078
- // Report unhandled errors
1079
- callOnError(error, "routing", {
1080
- request,
1081
- url,
1082
- env,
1083
- handledByBoundary: false,
1084
- });
1085
- console.error(`[RSC] Error:`, error);
1086
- throw error;
1087
- }
1088
- }
1089
1236
  }