@rangojs/router 0.5.1 → 0.6.0

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 (609) hide show
  1. package/README.md +5 -1
  2. package/dist/bin/rango.js +343 -125
  3. package/dist/types/browser/event-controller.d.ts +6 -0
  4. package/dist/types/browser/react/use-router.d.ts +10 -3
  5. package/dist/types/browser/react/use-search-params.d.ts +57 -10
  6. package/dist/types/browser/types.d.ts +22 -0
  7. package/dist/types/build/merge-full-manifests.d.ts +3 -0
  8. package/dist/types/build/route-trie.d.ts +4 -73
  9. package/dist/types/build/route-types/per-module-writer.d.ts +6 -4
  10. package/dist/types/build/route-types/router-processing.d.ts +2 -3
  11. package/dist/types/cache/cache-exec-scope.d.ts +31 -0
  12. package/dist/types/cache/cf/cf-cache-constants.d.ts +8 -1
  13. package/dist/types/cache/cf/cf-cache-store.d.ts +15 -1
  14. package/dist/types/cache/cf/cf-cache-types.d.ts +1 -1
  15. package/dist/types/cache/cf/cf-kv-utils.d.ts +21 -0
  16. package/dist/types/cache/taint.d.ts +12 -6
  17. package/dist/types/client-urls/client-root.d.ts +38 -0
  18. package/dist/types/client-urls/client-urls.d.ts +5 -0
  19. package/dist/types/client-urls/navigation.d.ts +38 -0
  20. package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
  21. package/dist/types/client-urls/server-projection.d.ts +62 -0
  22. package/dist/types/client-urls/types.d.ts +144 -0
  23. package/dist/types/client.d.ts +12 -4
  24. package/dist/types/client.rsc.d.ts +4 -1
  25. package/dist/types/decode-loader-results.d.ts +37 -0
  26. package/dist/types/errors.d.ts +1 -0
  27. package/dist/types/handles/is-thenable.d.ts +2 -4
  28. package/dist/types/index.d.ts +1 -1
  29. package/dist/types/loader-redirect.d.ts +27 -0
  30. package/dist/types/outlet-context.d.ts +12 -0
  31. package/dist/types/outlet-provider.d.ts +3 -1
  32. package/dist/types/redirect-origin.d.ts +4 -0
  33. package/dist/types/route-content-wrapper.d.ts +42 -1
  34. package/dist/types/route-definition/helpers-types.d.ts +13 -2
  35. package/dist/types/router/error-handling.d.ts +35 -1
  36. package/dist/types/router/intercept-resolution.d.ts +12 -0
  37. package/dist/types/router/loader-resolution.d.ts +24 -2
  38. package/dist/types/router/revalidation.d.ts +7 -0
  39. package/dist/{types.backup/build/route-trie.d.ts → types/router/route-trie-builder.d.ts} +4 -16
  40. package/dist/types/router/router-interfaces.d.ts +20 -0
  41. package/dist/types/router/segment-resolution/helpers.d.ts +1 -1
  42. package/dist/types/router/trie-matching.d.ts +1 -1
  43. package/dist/types/rsc/helpers.d.ts +3 -0
  44. package/dist/types/rsc/manifest-init.d.ts +5 -5
  45. package/dist/types/rsc/render-pipeline.d.ts +9 -0
  46. package/dist/types/rsc/routine-plan.d.ts +124 -0
  47. package/dist/types/rsc/shell-capture-constants.d.ts +17 -0
  48. package/dist/types/rsc/shell-capture.d.ts +9 -0
  49. package/dist/types/rsc/shell-serve.d.ts +11 -0
  50. package/dist/types/rsc/types.d.ts +30 -0
  51. package/dist/types/segment-system.d.ts +2 -0
  52. package/dist/types/server/context.d.ts +10 -0
  53. package/dist/types/server/handle-store.d.ts +34 -3
  54. package/dist/types/server/request-context.d.ts +14 -1
  55. package/dist/types/server.d.ts +1 -0
  56. package/dist/types/ssr/index.d.ts +22 -0
  57. package/dist/types/ssr/ssr-root.d.ts +10 -0
  58. package/dist/types/testing/dom.entry.d.ts +1 -1
  59. package/dist/types/testing/render-route.d.ts +16 -6
  60. package/dist/types/testing/run-loader.d.ts +9 -0
  61. package/dist/types/types/boundaries.d.ts +22 -0
  62. package/dist/types/types/index.d.ts +1 -1
  63. package/dist/types/types/loader-types.d.ts +57 -5
  64. package/dist/types/types/segments.d.ts +7 -0
  65. package/dist/types/urls/path-helper-types.d.ts +10 -4
  66. package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
  67. package/dist/types/vite/discovery/discover-routers.d.ts +1 -1
  68. package/dist/types/vite/discovery/state.d.ts +8 -1
  69. package/dist/types/vite/encryption-key.d.ts +2 -0
  70. package/dist/types/vite/plugins/expose-internal-ids.d.ts +10 -0
  71. package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
  72. package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
  73. package/dist/types/vite/utils/shared-utils.d.ts +12 -0
  74. package/dist/vite/index.js +5101 -2056
  75. package/package.json +3 -3
  76. package/skills/breadcrumbs/SKILL.md +39 -9
  77. package/skills/caching/SKILL.md +1 -1
  78. package/skills/catalog.json +7 -1
  79. package/skills/client-urls/SKILL.md +338 -0
  80. package/skills/comparison/references/framework-comparison.md +23 -9
  81. package/skills/hooks/SKILL.md +2 -2
  82. package/skills/hooks/data.md +11 -2
  83. package/skills/hooks/handle-and-actions.md +7 -0
  84. package/skills/hooks/outlets.md +26 -5
  85. package/skills/hooks/urls.md +40 -3
  86. package/skills/loader/SKILL.md +132 -20
  87. package/skills/migrate-nextjs/SKILL.md +70 -10
  88. package/skills/migrate-react-router/SKILL.md +49 -13
  89. package/skills/migrate-react-router/component-migration.md +18 -13
  90. package/skills/migrate-react-router/data-and-actions.md +14 -3
  91. package/skills/migrate-react-router/route-mapping.md +15 -2
  92. package/skills/mime-routes/SKILL.md +3 -1
  93. package/skills/parallel/SKILL.md +32 -1
  94. package/skills/ppr/SKILL.md +16 -6
  95. package/skills/prerender/SKILL.md +8 -4
  96. package/skills/rango/SKILL.md +21 -17
  97. package/skills/react-compiler/SKILL.md +3 -3
  98. package/skills/response-routes/SKILL.md +4 -2
  99. package/skills/route/SKILL.md +5 -2
  100. package/skills/router-setup/SKILL.md +16 -2
  101. package/skills/scripts/SKILL.md +16 -6
  102. package/skills/shell-manifest/SKILL.md +16 -7
  103. package/skills/testing/SKILL.md +2 -2
  104. package/skills/testing/client-components.md +6 -0
  105. package/skills/testing/handles.md +30 -8
  106. package/skills/testing/loader.md +51 -49
  107. package/skills/testing/middleware.md +1 -1
  108. package/skills/theme/SKILL.md +8 -5
  109. package/skills/typesafety/generated-files-and-cli.md +16 -9
  110. package/skills/typesafety/route-types.md +5 -1
  111. package/skills/use-cache/SKILL.md +47 -0
  112. package/src/bin/rango.ts +7 -3
  113. package/src/browser/event-controller.ts +40 -15
  114. package/src/browser/navigation-bridge.ts +6 -0
  115. package/src/browser/navigation-client.ts +5 -0
  116. package/src/browser/partial-update.ts +77 -10
  117. package/src/browser/react/NavigationProvider.tsx +7 -0
  118. package/src/browser/react/use-router.ts +40 -11
  119. package/src/browser/react/use-search-params.ts +140 -17
  120. package/src/browser/rsc-router.tsx +59 -0
  121. package/src/browser/server-action-bridge.ts +26 -0
  122. package/src/browser/types.ts +22 -0
  123. package/src/build/merge-full-manifests.ts +161 -0
  124. package/src/build/route-trie.ts +9 -332
  125. package/src/build/route-types/include-resolution.ts +66 -11
  126. package/src/build/route-types/per-module-writer.ts +11 -6
  127. package/src/build/route-types/router-processing.ts +184 -153
  128. package/src/build/runtime-discovery.ts +23 -12
  129. package/src/cache/cache-exec-scope.ts +47 -0
  130. package/src/cache/cache-runtime.ts +113 -40
  131. package/src/cache/cf/cf-cache-constants.ts +8 -1
  132. package/src/cache/cf/cf-cache-store.ts +41 -64
  133. package/src/cache/cf/cf-cache-types.ts +1 -1
  134. package/src/cache/cf/cf-kv-utils.ts +38 -0
  135. package/src/cache/segment-codec.ts +21 -5
  136. package/src/cache/taint.ts +28 -9
  137. package/src/client-urls/client-root.tsx +168 -0
  138. package/src/client-urls/client-urls.ts +698 -0
  139. package/src/client-urls/navigation.ts +237 -0
  140. package/src/client-urls/revalidation-protocol.ts +56 -0
  141. package/src/client-urls/server-projection.ts +579 -0
  142. package/src/client-urls/types.ts +195 -0
  143. package/src/client.rsc.tsx +12 -0
  144. package/src/client.tsx +49 -6
  145. package/src/decode-loader-results.ts +113 -0
  146. package/src/errors.ts +14 -0
  147. package/src/handles/deferred-resolution.ts +14 -7
  148. package/src/handles/is-thenable.ts +2 -4
  149. package/src/index.ts +1 -0
  150. package/src/loader-redirect.tsx +64 -0
  151. package/src/outlet-context.ts +12 -0
  152. package/src/outlet-provider.tsx +15 -1
  153. package/src/redirect-origin.ts +29 -0
  154. package/src/route-content-wrapper.tsx +96 -3
  155. package/src/route-definition/dsl-helpers.ts +28 -3
  156. package/src/route-definition/helpers-types.ts +13 -0
  157. package/src/route-definition/redirect.ts +17 -18
  158. package/src/router/error-handling.ts +65 -11
  159. package/src/router/intercept-resolution.ts +29 -0
  160. package/src/router/loader-resolution.ts +261 -28
  161. package/src/router/match-middleware/cache-lookup.ts +24 -15
  162. package/src/router/match-result.ts +7 -0
  163. package/src/router/revalidation.ts +24 -11
  164. package/src/router/route-trie-builder.ts +334 -0
  165. package/src/router/router-interfaces.ts +38 -0
  166. package/src/router/segment-resolution/fresh.ts +47 -0
  167. package/src/router/segment-resolution/helpers.ts +9 -11
  168. package/src/router/segment-resolution/loader-cache.ts +14 -24
  169. package/src/router/segment-resolution/revalidation.ts +20 -1
  170. package/src/router/trie-matching.ts +3 -3
  171. package/src/router.ts +46 -1
  172. package/src/rsc/full-payload.ts +6 -0
  173. package/src/rsc/handler.ts +36 -12
  174. package/src/rsc/helpers.ts +13 -0
  175. package/src/rsc/loader-fetch.ts +2 -2
  176. package/src/rsc/manifest-init.ts +28 -9
  177. package/src/rsc/progressive-enhancement.ts +247 -70
  178. package/src/rsc/render-pipeline.ts +68 -24
  179. package/src/rsc/routine-plan.ts +359 -0
  180. package/src/rsc/rsc-rendering.ts +569 -302
  181. package/src/rsc/server-action.ts +180 -71
  182. package/src/rsc/shell-capture-constants.ts +18 -0
  183. package/src/rsc/shell-capture.ts +104 -21
  184. package/src/rsc/shell-serve.ts +15 -2
  185. package/src/rsc/ssr-setup.ts +10 -1
  186. package/src/rsc/types.ts +31 -2
  187. package/src/segment-system.tsx +83 -26
  188. package/src/server/context.ts +10 -0
  189. package/src/server/cookie-store.ts +19 -19
  190. package/src/server/handle-store.ts +185 -48
  191. package/src/server/request-context.ts +36 -6
  192. package/src/server.ts +7 -0
  193. package/src/ssr/index.tsx +37 -2
  194. package/src/ssr/ssr-root.tsx +30 -2
  195. package/src/testing/dom.entry.ts +1 -1
  196. package/src/testing/render-route.tsx +22 -8
  197. package/src/testing/run-loader.ts +51 -13
  198. package/src/types/boundaries.ts +19 -0
  199. package/src/types/index.ts +1 -0
  200. package/src/types/loader-types.ts +60 -5
  201. package/src/types/segments.ts +7 -0
  202. package/src/urls/include-helper.ts +22 -4
  203. package/src/urls/path-helper-types.ts +14 -1
  204. package/src/use-loader.tsx +67 -6
  205. package/src/vite/discovery/client-urls-projection.ts +322 -0
  206. package/src/vite/discovery/discover-routers.ts +43 -17
  207. package/src/vite/discovery/state.ts +11 -1
  208. package/src/vite/discovery/virtual-module-codegen.ts +20 -0
  209. package/src/vite/encryption-key.ts +29 -0
  210. package/src/vite/plugins/expose-action-id.ts +2 -2
  211. package/src/vite/plugins/expose-internal-ids.ts +46 -0
  212. package/src/vite/plugins/server-ref-hashing.ts +74 -0
  213. package/src/vite/plugins/server-reference-pattern.ts +10 -0
  214. package/src/vite/plugins/virtual-entries.ts +12 -3
  215. package/src/vite/rango.ts +9 -0
  216. package/src/vite/router-discovery.ts +184 -14
  217. package/src/vite/utils/shared-utils.ts +12 -7
  218. package/dist/types.backup/__internal.d.ts +0 -127
  219. package/dist/types.backup/bin/rango.d.ts +0 -1
  220. package/dist/types.backup/browser/action-coordinator.d.ts +0 -57
  221. package/dist/types.backup/browser/action-fence.d.ts +0 -33
  222. package/dist/types.backup/browser/app-shell.d.ts +0 -34
  223. package/dist/types.backup/browser/app-version.d.ts +0 -6
  224. package/dist/types.backup/browser/connection-warmup.d.ts +0 -31
  225. package/dist/types.backup/browser/cookie-name.d.ts +0 -66
  226. package/dist/types.backup/browser/event-controller.d.ts +0 -221
  227. package/dist/types.backup/browser/history-state.d.ts +0 -26
  228. package/dist/types.backup/browser/index.d.ts +0 -1
  229. package/dist/types.backup/browser/intercept-utils.d.ts +0 -30
  230. package/dist/types.backup/browser/invalidate-client-cache.d.ts +0 -17
  231. package/dist/types.backup/browser/link-interceptor.d.ts +0 -43
  232. package/dist/types.backup/browser/logging.d.ts +0 -33
  233. package/dist/types.backup/browser/merge-segment-loaders.d.ts +0 -38
  234. package/dist/types.backup/browser/navigation-bridge.d.ts +0 -27
  235. package/dist/types.backup/browser/navigation-client.d.ts +0 -17
  236. package/dist/types.backup/browser/navigation-store-handle.d.ts +0 -25
  237. package/dist/types.backup/browser/navigation-store.d.ts +0 -95
  238. package/dist/types.backup/browser/navigation-transaction.d.ts +0 -75
  239. package/dist/types.backup/browser/network-error-handler.d.ts +0 -35
  240. package/dist/types.backup/browser/partial-update.d.ts +0 -61
  241. package/dist/types.backup/browser/prefetch/cache.d.ts +0 -183
  242. package/dist/types.backup/browser/prefetch/fetch.d.ts +0 -52
  243. package/dist/types.backup/browser/prefetch/observer.d.ts +0 -27
  244. package/dist/types.backup/browser/prefetch/policy.d.ts +0 -13
  245. package/dist/types.backup/browser/prefetch/queue.d.ts +0 -48
  246. package/dist/types.backup/browser/prefetch/resource-ready.d.ts +0 -28
  247. package/dist/types.backup/browser/rango-state.d.ts +0 -52
  248. package/dist/types.backup/browser/react/Link.d.ts +0 -140
  249. package/dist/types.backup/browser/react/NavigationProvider.d.ts +0 -88
  250. package/dist/types.backup/browser/react/ScrollRestoration.d.ts +0 -78
  251. package/dist/types.backup/browser/react/context.d.ts +0 -54
  252. package/dist/types.backup/browser/react/filter-segment-order.d.ts +0 -35
  253. package/dist/types.backup/browser/react/index.d.ts +0 -1
  254. package/dist/types.backup/browser/react/location-state-shared.d.ts +0 -162
  255. package/dist/types.backup/browser/react/location-state.d.ts +0 -29
  256. package/dist/types.backup/browser/react/mount-context.d.ts +0 -23
  257. package/dist/types.backup/browser/react/nonce-context.d.ts +0 -14
  258. package/dist/types.backup/browser/react/shallow-equal.d.ts +0 -5
  259. package/dist/types.backup/browser/react/use-action.d.ts +0 -61
  260. package/dist/types.backup/browser/react/use-handle.d.ts +0 -21
  261. package/dist/types.backup/browser/react/use-href.d.ts +0 -32
  262. package/dist/types.backup/browser/react/use-link-status.d.ts +0 -36
  263. package/dist/types.backup/browser/react/use-mount.d.ts +0 -24
  264. package/dist/types.backup/browser/react/use-navigation.d.ts +0 -15
  265. package/dist/types.backup/browser/react/use-params.d.ts +0 -21
  266. package/dist/types.backup/browser/react/use-pathname.d.ts +0 -13
  267. package/dist/types.backup/browser/react/use-reverse.d.ts +0 -40
  268. package/dist/types.backup/browser/react/use-router.d.ts +0 -23
  269. package/dist/types.backup/browser/react/use-search-params.d.ts +0 -19
  270. package/dist/types.backup/browser/react/use-segments.d.ts +0 -29
  271. package/dist/types.backup/browser/response-adapter.d.ts +0 -58
  272. package/dist/types.backup/browser/rsc-router.d.ts +0 -141
  273. package/dist/types.backup/browser/scroll-restoration.d.ts +0 -103
  274. package/dist/types.backup/browser/segment-reconciler.d.ts +0 -74
  275. package/dist/types.backup/browser/segment-structure-assert.d.ts +0 -16
  276. package/dist/types.backup/browser/server-action-bridge.d.ts +0 -29
  277. package/dist/types.backup/browser/types.d.ts +0 -530
  278. package/dist/types.backup/browser/validate-redirect-origin.d.ts +0 -28
  279. package/dist/types.backup/build/collect-fallback-refs.d.ts +0 -5
  280. package/dist/types.backup/build/generate-manifest.d.ts +0 -100
  281. package/dist/types.backup/build/generate-route-types.d.ts +0 -8
  282. package/dist/types.backup/build/index.d.ts +0 -21
  283. package/dist/types.backup/build/prefix-tree-utils.d.ts +0 -56
  284. package/dist/types.backup/build/route-types/ast-helpers.d.ts +0 -3
  285. package/dist/types.backup/build/route-types/ast-route-extraction.d.ts +0 -13
  286. package/dist/types.backup/build/route-types/codegen.d.ts +0 -16
  287. package/dist/types.backup/build/route-types/include-resolution.d.ts +0 -74
  288. package/dist/types.backup/build/route-types/param-extraction.d.ts +0 -13
  289. package/dist/types.backup/build/route-types/per-module-writer.d.ts +0 -18
  290. package/dist/types.backup/build/route-types/router-processing.d.ts +0 -82
  291. package/dist/types.backup/build/route-types/scan-filter.d.ts +0 -17
  292. package/dist/types.backup/build/route-types/source-scan.d.ts +0 -13
  293. package/dist/types.backup/build/runtime-discovery.d.ts +0 -24
  294. package/dist/types.backup/cache/background-task.d.ts +0 -21
  295. package/dist/types.backup/cache/cache-error.d.ts +0 -71
  296. package/dist/types.backup/cache/cache-key-utils.d.ts +0 -35
  297. package/dist/types.backup/cache/cache-policy.d.ts +0 -59
  298. package/dist/types.backup/cache/cache-runtime.d.ts +0 -51
  299. package/dist/types.backup/cache/cache-scope.d.ts +0 -134
  300. package/dist/types.backup/cache/cache-tag.d.ts +0 -79
  301. package/dist/types.backup/cache/cf/cf-base64.d.ts +0 -4
  302. package/dist/types.backup/cache/cf/cf-cache-constants.d.ts +0 -105
  303. package/dist/types.backup/cache/cf/cf-cache-store.d.ts +0 -481
  304. package/dist/types.backup/cache/cf/cf-cache-types.d.ts +0 -300
  305. package/dist/types.backup/cache/cf/cf-kv-utils.d.ts +0 -22
  306. package/dist/types.backup/cache/cf/cf-tag-marker-memo.d.ts +0 -15
  307. package/dist/types.backup/cache/cf/index.d.ts +0 -3
  308. package/dist/types.backup/cache/document-cache.d.ts +0 -69
  309. package/dist/types.backup/cache/handle-capture.d.ts +0 -23
  310. package/dist/types.backup/cache/handle-snapshot.d.ts +0 -39
  311. package/dist/types.backup/cache/index.d.ts +0 -7
  312. package/dist/types.backup/cache/memory-segment-store.d.ts +0 -163
  313. package/dist/types.backup/cache/profile-registry.d.ts +0 -40
  314. package/dist/types.backup/cache/read-through-swr.d.ts +0 -60
  315. package/dist/types.backup/cache/segment-codec.d.ts +0 -78
  316. package/dist/types.backup/cache/shell-snapshot.d.ts +0 -162
  317. package/dist/types.backup/cache/tag-invalidation.d.ts +0 -74
  318. package/dist/types.backup/cache/taint.d.ts +0 -71
  319. package/dist/types.backup/cache/types.d.ts +0 -407
  320. package/dist/types.backup/cache/vercel/index.d.ts +0 -1
  321. package/dist/types.backup/cache/vercel/vercel-cache-store.d.ts +0 -267
  322. package/dist/types.backup/client.d.ts +0 -184
  323. package/dist/types.backup/client.rsc.d.ts +0 -39
  324. package/dist/types.backup/cloudflare/index.d.ts +0 -7
  325. package/dist/types.backup/cloudflare/tracing.d.ts +0 -53
  326. package/dist/types.backup/component-utils.d.ts +0 -46
  327. package/dist/types.backup/components/DefaultDocument.d.ts +0 -13
  328. package/dist/types.backup/context-var.d.ts +0 -84
  329. package/dist/types.backup/debug.d.ts +0 -57
  330. package/dist/types.backup/decode-loader-results.d.ts +0 -5
  331. package/dist/types.backup/default-error-boundary.d.ts +0 -10
  332. package/dist/types.backup/defer.d.ts +0 -89
  333. package/dist/types.backup/deps/browser.d.ts +0 -1
  334. package/dist/types.backup/deps/html-stream-client.d.ts +0 -1
  335. package/dist/types.backup/deps/html-stream-server.d.ts +0 -1
  336. package/dist/types.backup/deps/rsc.d.ts +0 -1
  337. package/dist/types.backup/deps/ssr.d.ts +0 -1
  338. package/dist/types.backup/encode-kv.d.ts +0 -35
  339. package/dist/types.backup/errors.d.ts +0 -226
  340. package/dist/types.backup/escape-script.d.ts +0 -44
  341. package/dist/types.backup/handle.d.ts +0 -93
  342. package/dist/types.backup/handles/MetaTags.d.ts +0 -17
  343. package/dist/types.backup/handles/Scripts.d.ts +0 -38
  344. package/dist/types.backup/handles/breadcrumbs.d.ts +0 -43
  345. package/dist/types.backup/handles/deferred-resolution.d.ts +0 -53
  346. package/dist/types.backup/handles/is-thenable.d.ts +0 -12
  347. package/dist/types.backup/handles/meta.d.ts +0 -43
  348. package/dist/types.backup/handles/script.d.ts +0 -139
  349. package/dist/types.backup/host/cookie-handler.d.ts +0 -8
  350. package/dist/types.backup/host/errors.d.ts +0 -40
  351. package/dist/types.backup/host/index.d.ts +0 -33
  352. package/dist/types.backup/host/pattern-matcher.d.ts +0 -30
  353. package/dist/types.backup/host/router.d.ts +0 -12
  354. package/dist/types.backup/host/testing.d.ts +0 -41
  355. package/dist/types.backup/host/types.d.ts +0 -148
  356. package/dist/types.backup/host/utils.d.ts +0 -20
  357. package/dist/types.backup/href-client.d.ts +0 -214
  358. package/dist/types.backup/index.d.ts +0 -112
  359. package/dist/types.backup/index.rsc.d.ts +0 -51
  360. package/dist/types.backup/internal-debug.d.ts +0 -1
  361. package/dist/types.backup/loader-store.d.ts +0 -193
  362. package/dist/types.backup/loader.d.ts +0 -18
  363. package/dist/types.backup/loader.rsc.d.ts +0 -18
  364. package/dist/types.backup/missing-id-error.d.ts +0 -1
  365. package/dist/types.backup/outlet-context.d.ts +0 -12
  366. package/dist/types.backup/outlet-provider.d.ts +0 -12
  367. package/dist/types.backup/prerender/build-shell-capture.d.ts +0 -104
  368. package/dist/types.backup/prerender/param-hash.d.ts +0 -6
  369. package/dist/types.backup/prerender/shell-manifest-key.d.ts +0 -18
  370. package/dist/types.backup/prerender/store.d.ts +0 -62
  371. package/dist/types.backup/prerender.d.ts +0 -292
  372. package/dist/types.backup/redirect-origin.d.ts +0 -55
  373. package/dist/types.backup/regex-escape.d.ts +0 -6
  374. package/dist/types.backup/render-error-thrower.d.ts +0 -13
  375. package/dist/types.backup/response-utils.d.ts +0 -35
  376. package/dist/types.backup/reverse.d.ts +0 -206
  377. package/dist/types.backup/root-error-boundary.d.ts +0 -32
  378. package/dist/types.backup/route-content-wrapper.d.ts +0 -40
  379. package/dist/types.backup/route-definition/dsl-helpers.d.ts +0 -130
  380. package/dist/types.backup/route-definition/helper-factories.d.ts +0 -22
  381. package/dist/types.backup/route-definition/helpers-types.d.ts +0 -392
  382. package/dist/types.backup/route-definition/index.d.ts +0 -7
  383. package/dist/types.backup/route-definition/redirect.d.ts +0 -48
  384. package/dist/types.backup/route-definition/resolve-handler-use.d.ts +0 -19
  385. package/dist/types.backup/route-definition/use-item-types.d.ts +0 -1
  386. package/dist/types.backup/route-definition.d.ts +0 -1
  387. package/dist/types.backup/route-map-builder.d.ts +0 -127
  388. package/dist/types.backup/route-name.d.ts +0 -27
  389. package/dist/types.backup/route-types.d.ts +0 -172
  390. package/dist/types.backup/router/basename.d.ts +0 -10
  391. package/dist/types.backup/router/content-negotiation.d.ts +0 -91
  392. package/dist/types.backup/router/debug-manifest.d.ts +0 -7
  393. package/dist/types.backup/router/error-handling.d.ts +0 -76
  394. package/dist/types.backup/router/find-match.d.ts +0 -19
  395. package/dist/types.backup/router/handler-context.d.ts +0 -41
  396. package/dist/types.backup/router/instrument.d.ts +0 -161
  397. package/dist/types.backup/router/intercept-resolution.d.ts +0 -79
  398. package/dist/types.backup/router/lazy-includes.d.ts +0 -26
  399. package/dist/types.backup/router/loader-resolution.d.ts +0 -63
  400. package/dist/types.backup/router/logging.d.ts +0 -41
  401. package/dist/types.backup/router/manifest.d.ts +0 -8
  402. package/dist/types.backup/router/match-api.d.ts +0 -19
  403. package/dist/types.backup/router/match-context.d.ts +0 -184
  404. package/dist/types.backup/router/match-handlers.d.ts +0 -49
  405. package/dist/types.backup/router/match-middleware/background-revalidation.d.ts +0 -113
  406. package/dist/types.backup/router/match-middleware/cache-lookup.d.ts +0 -113
  407. package/dist/types.backup/router/match-middleware/cache-store.d.ts +0 -112
  408. package/dist/types.backup/router/match-middleware/index.d.ts +0 -80
  409. package/dist/types.backup/router/match-middleware/intercept-resolution.d.ts +0 -116
  410. package/dist/types.backup/router/match-middleware/segment-resolution.d.ts +0 -94
  411. package/dist/types.backup/router/match-pipelines.d.ts +0 -103
  412. package/dist/types.backup/router/match-result.d.ts +0 -114
  413. package/dist/types.backup/router/metrics.d.ts +0 -6
  414. package/dist/types.backup/router/middleware-types.d.ts +0 -74
  415. package/dist/types.backup/router/middleware.d.ts +0 -116
  416. package/dist/types.backup/router/navigation-snapshot.d.ts +0 -22
  417. package/dist/types.backup/router/params-util.d.ts +0 -8
  418. package/dist/types.backup/router/parse-pattern.d.ts +0 -38
  419. package/dist/types.backup/router/pattern-matching.d.ts +0 -169
  420. package/dist/types.backup/router/prefetch-cache-ttl.d.ts +0 -27
  421. package/dist/types.backup/router/prefetch-limits.d.ts +0 -20
  422. package/dist/types.backup/router/prerender-match.d.ts +0 -50
  423. package/dist/types.backup/router/preview-match.d.ts +0 -22
  424. package/dist/types.backup/router/request-classification.d.ts +0 -104
  425. package/dist/types.backup/router/revalidation.d.ts +0 -57
  426. package/dist/types.backup/router/route-snapshot.d.ts +0 -112
  427. package/dist/types.backup/router/router-context.d.ts +0 -137
  428. package/dist/types.backup/router/router-interfaces.d.ts +0 -432
  429. package/dist/types.backup/router/router-options.d.ts +0 -738
  430. package/dist/types.backup/router/router-registry.d.ts +0 -15
  431. package/dist/types.backup/router/segment-resolution/fresh.d.ts +0 -55
  432. package/dist/types.backup/router/segment-resolution/helpers.d.ts +0 -93
  433. package/dist/types.backup/router/segment-resolution/loader-cache.d.ts +0 -33
  434. package/dist/types.backup/router/segment-resolution/loader-mask.d.ts +0 -44
  435. package/dist/types.backup/router/segment-resolution/loader-snapshot.d.ts +0 -90
  436. package/dist/types.backup/router/segment-resolution/mask-nested.d.ts +0 -53
  437. package/dist/types.backup/router/segment-resolution/revalidation.d.ts +0 -85
  438. package/dist/types.backup/router/segment-resolution/static-store.d.ts +0 -17
  439. package/dist/types.backup/router/segment-resolution/streamed-handler-telemetry.d.ts +0 -16
  440. package/dist/types.backup/router/segment-resolution/view-transition-default.d.ts +0 -28
  441. package/dist/types.backup/router/segment-resolution.d.ts +0 -3
  442. package/dist/types.backup/router/segment-wrappers.d.ts +0 -53
  443. package/dist/types.backup/router/state-cookie-name.d.ts +0 -1
  444. package/dist/types.backup/router/substitute-pattern-params.d.ts +0 -23
  445. package/dist/types.backup/router/telemetry-otel.d.ts +0 -113
  446. package/dist/types.backup/router/telemetry.d.ts +0 -215
  447. package/dist/types.backup/router/timeout.d.ts +0 -68
  448. package/dist/types.backup/router/tracing.d.ts +0 -125
  449. package/dist/types.backup/router/trie-matching.d.ts +0 -32
  450. package/dist/types.backup/router/types.d.ts +0 -98
  451. package/dist/types.backup/router/url-params.d.ts +0 -26
  452. package/dist/types.backup/router.d.ts +0 -7
  453. package/dist/types.backup/rsc/capture-queue.d.ts +0 -6
  454. package/dist/types.backup/rsc/full-payload.d.ts +0 -22
  455. package/dist/types.backup/rsc/handler-context.d.ts +0 -31
  456. package/dist/types.backup/rsc/handler.d.ts +0 -9
  457. package/dist/types.backup/rsc/helpers.d.ts +0 -213
  458. package/dist/types.backup/rsc/index.d.ts +0 -17
  459. package/dist/types.backup/rsc/json-route-result.d.ts +0 -20
  460. package/dist/types.backup/rsc/loader-fetch.d.ts +0 -14
  461. package/dist/types.backup/rsc/manifest-init.d.ts +0 -18
  462. package/dist/types.backup/rsc/nonce.d.ts +0 -28
  463. package/dist/types.backup/rsc/origin-guard.d.ts +0 -50
  464. package/dist/types.backup/rsc/progressive-enhancement.d.ts +0 -19
  465. package/dist/types.backup/rsc/redirect-guard.d.ts +0 -35
  466. package/dist/types.backup/rsc/response-cache-serve.d.ts +0 -46
  467. package/dist/types.backup/rsc/response-error.d.ts +0 -19
  468. package/dist/types.backup/rsc/response-route-handler.d.ts +0 -29
  469. package/dist/types.backup/rsc/rsc-rendering.d.ts +0 -23
  470. package/dist/types.backup/rsc/runtime-warnings.d.ts +0 -22
  471. package/dist/types.backup/rsc/server-action.d.ts +0 -68
  472. package/dist/types.backup/rsc/shell-build-manifest.d.ts +0 -84
  473. package/dist/types.backup/rsc/shell-capture-constants.d.ts +0 -27
  474. package/dist/types.backup/rsc/shell-capture.d.ts +0 -374
  475. package/dist/types.backup/rsc/shell-serve.d.ts +0 -136
  476. package/dist/types.backup/rsc/ssr-setup.d.ts +0 -48
  477. package/dist/types.backup/rsc/transition-gate.d.ts +0 -27
  478. package/dist/types.backup/rsc/types.d.ts +0 -290
  479. package/dist/types.backup/runtime-env.d.ts +0 -1
  480. package/dist/types.backup/search-params.d.ts +0 -125
  481. package/dist/types.backup/segment-content-promise.d.ts +0 -13
  482. package/dist/types.backup/segment-fragments.d.ts +0 -56
  483. package/dist/types.backup/segment-loader-promise.d.ts +0 -22
  484. package/dist/types.backup/segment-system.d.ts +0 -84
  485. package/dist/types.backup/serialize.d.ts +0 -164
  486. package/dist/types.backup/server/context.d.ts +0 -494
  487. package/dist/types.backup/server/cookie-parse.d.ts +0 -10
  488. package/dist/types.backup/server/cookie-store.d.ts +0 -107
  489. package/dist/types.backup/server/fetchable-loader-store.d.ts +0 -20
  490. package/dist/types.backup/server/handle-store.d.ts +0 -100
  491. package/dist/types.backup/server/loader-registry.d.ts +0 -32
  492. package/dist/types.backup/server/request-context.d.ts +0 -596
  493. package/dist/types.backup/server/root-layout.d.ts +0 -3
  494. package/dist/types.backup/server.d.ts +0 -15
  495. package/dist/types.backup/ssr/index.d.ts +0 -233
  496. package/dist/types.backup/ssr/inject-rsc-eager.d.ts +0 -3
  497. package/dist/types.backup/ssr/preinit-client-references.d.ts +0 -71
  498. package/dist/types.backup/ssr/ssr-root.d.ts +0 -69
  499. package/dist/types.backup/static-handler.d.ts +0 -57
  500. package/dist/types.backup/testing/cache-status.d.ts +0 -63
  501. package/dist/types.backup/testing/collect-handle.d.ts +0 -20
  502. package/dist/types.backup/testing/dispatch.d.ts +0 -123
  503. package/dist/types.backup/testing/dom.entry.d.ts +0 -15
  504. package/dist/types.backup/testing/e2e/fixture.d.ts +0 -37
  505. package/dist/types.backup/testing/e2e/index.d.ts +0 -30
  506. package/dist/types.backup/testing/e2e/matchers.d.ts +0 -17
  507. package/dist/types.backup/testing/e2e/page-helpers.d.ts +0 -62
  508. package/dist/types.backup/testing/e2e/parity.d.ts +0 -111
  509. package/dist/types.backup/testing/e2e/server.d.ts +0 -35
  510. package/dist/types.backup/testing/flight-matchers.d.ts +0 -55
  511. package/dist/types.backup/testing/flight-normalize.d.ts +0 -1
  512. package/dist/types.backup/testing/flight-tree.d.ts +0 -192
  513. package/dist/types.backup/testing/flight.d.ts +0 -115
  514. package/dist/types.backup/testing/flight.entry.d.ts +0 -27
  515. package/dist/types.backup/testing/generated-routes.d.ts +0 -66
  516. package/dist/types.backup/testing/index.d.ts +0 -52
  517. package/dist/types.backup/testing/internal/context.d.ts +0 -225
  518. package/dist/types.backup/testing/internal/flight-client-globals.d.ts +0 -1
  519. package/dist/types.backup/testing/internal/seed-vars.d.ts +0 -30
  520. package/dist/types.backup/testing/render-handler.d.ts +0 -160
  521. package/dist/types.backup/testing/render-route.d.ts +0 -246
  522. package/dist/types.backup/testing/run-loader.d.ts +0 -186
  523. package/dist/types.backup/testing/run-middleware.d.ts +0 -132
  524. package/dist/types.backup/testing/run-transition-when.d.ts +0 -77
  525. package/dist/types.backup/testing/vitest-stubs/cloudflare-email.d.ts +0 -6
  526. package/dist/types.backup/testing/vitest-stubs/cloudflare-workers.d.ts +0 -13
  527. package/dist/types.backup/testing/vitest-stubs/plugin-rsc.d.ts +0 -7
  528. package/dist/types.backup/testing/vitest-stubs/version.d.ts +0 -1
  529. package/dist/types.backup/testing/vitest.d.ts +0 -205
  530. package/dist/types.backup/theme/ThemeProvider.d.ts +0 -13
  531. package/dist/types.backup/theme/ThemeScript.d.ts +0 -45
  532. package/dist/types.backup/theme/constants.d.ts +0 -39
  533. package/dist/types.backup/theme/index.d.ts +0 -29
  534. package/dist/types.backup/theme/theme-context.d.ts +0 -21
  535. package/dist/types.backup/theme/theme-script.d.ts +0 -26
  536. package/dist/types.backup/theme/types.d.ts +0 -162
  537. package/dist/types.backup/theme/use-theme.d.ts +0 -8
  538. package/dist/types.backup/types/boundaries.d.ts +0 -93
  539. package/dist/types.backup/types/cache-types.d.ts +0 -191
  540. package/dist/types.backup/types/error-types.d.ts +0 -114
  541. package/dist/types.backup/types/global-namespace.d.ts +0 -90
  542. package/dist/types.backup/types/handler-context.d.ts +0 -658
  543. package/dist/types.backup/types/index.d.ts +0 -11
  544. package/dist/types.backup/types/loader-types.d.ts +0 -182
  545. package/dist/types.backup/types/request-scope.d.ts +0 -93
  546. package/dist/types.backup/types/route-config.d.ts +0 -105
  547. package/dist/types.backup/types/route-entry.d.ts +0 -95
  548. package/dist/types.backup/types/segments.d.ts +0 -234
  549. package/dist/types.backup/types.d.ts +0 -1
  550. package/dist/types.backup/urls/include-helper.d.ts +0 -17
  551. package/dist/types.backup/urls/include-provider.d.ts +0 -27
  552. package/dist/types.backup/urls/index.d.ts +0 -6
  553. package/dist/types.backup/urls/path-helper-types.d.ts +0 -197
  554. package/dist/types.backup/urls/path-helper.d.ts +0 -12
  555. package/dist/types.backup/urls/pattern-types.d.ts +0 -166
  556. package/dist/types.backup/urls/response-types.d.ts +0 -67
  557. package/dist/types.backup/urls/type-extraction.d.ts +0 -157
  558. package/dist/types.backup/urls/urls-function.d.ts +0 -24
  559. package/dist/types.backup/urls.d.ts +0 -1
  560. package/dist/types.backup/use-loader.d.ts +0 -150
  561. package/dist/types.backup/vercel/index.d.ts +0 -10
  562. package/dist/types.backup/vercel/tracing.d.ts +0 -70
  563. package/dist/types.backup/vite/debug.d.ts +0 -80
  564. package/dist/types.backup/vite/discovery/bundle-postprocess.d.ts +0 -12
  565. package/dist/types.backup/vite/discovery/dev-prerender-cache.d.ts +0 -65
  566. package/dist/types.backup/vite/discovery/discover-routers.d.ts +0 -17
  567. package/dist/types.backup/vite/discovery/discovery-errors.d.ts +0 -113
  568. package/dist/types.backup/vite/discovery/gate-state.d.ts +0 -79
  569. package/dist/types.backup/vite/discovery/prerender-collection.d.ts +0 -24
  570. package/dist/types.backup/vite/discovery/route-types-writer.d.ts +0 -32
  571. package/dist/types.backup/vite/discovery/self-gen-tracking.d.ts +0 -22
  572. package/dist/types.backup/vite/discovery/shell-prerender-phase.d.ts +0 -40
  573. package/dist/types.backup/vite/discovery/state.d.ts +0 -162
  574. package/dist/types.backup/vite/discovery/virtual-module-codegen.d.ts +0 -15
  575. package/dist/types.backup/vite/index.d.ts +0 -11
  576. package/dist/types.backup/vite/inject-client-debug.d.ts +0 -56
  577. package/dist/types.backup/vite/plugin-types.d.ts +0 -298
  578. package/dist/types.backup/vite/plugins/cjs-to-esm.d.ts +0 -6
  579. package/dist/types.backup/vite/plugins/client-ref-dedup.d.ts +0 -40
  580. package/dist/types.backup/vite/plugins/client-ref-hashing.d.ts +0 -35
  581. package/dist/types.backup/vite/plugins/cloudflare-protocol-stub.d.ts +0 -64
  582. package/dist/types.backup/vite/plugins/expose-action-id.d.ts +0 -18
  583. package/dist/types.backup/vite/plugins/expose-id-utils.d.ts +0 -37
  584. package/dist/types.backup/vite/plugins/expose-ids/export-analysis.d.ts +0 -19
  585. package/dist/types.backup/vite/plugins/expose-ids/handler-transform.d.ts +0 -10
  586. package/dist/types.backup/vite/plugins/expose-ids/loader-transform.d.ts +0 -8
  587. package/dist/types.backup/vite/plugins/expose-ids/router-transform.d.ts +0 -13
  588. package/dist/types.backup/vite/plugins/expose-ids/types.d.ts +0 -29
  589. package/dist/types.backup/vite/plugins/expose-internal-ids.d.ts +0 -6
  590. package/dist/types.backup/vite/plugins/performance-tracks.d.ts +0 -25
  591. package/dist/types.backup/vite/plugins/refresh-cmd.d.ts +0 -20
  592. package/dist/types.backup/vite/plugins/use-cache-transform.d.ts +0 -20
  593. package/dist/types.backup/vite/plugins/vercel-output.d.ts +0 -85
  594. package/dist/types.backup/vite/plugins/version-injector.d.ts +0 -21
  595. package/dist/types.backup/vite/plugins/version-plugin.d.ts +0 -19
  596. package/dist/types.backup/vite/plugins/virtual-entries.d.ts +0 -36
  597. package/dist/types.backup/vite/plugins/virtual-stub-plugin.d.ts +0 -7
  598. package/dist/types.backup/vite/rango.d.ts +0 -29
  599. package/dist/types.backup/vite/router-discovery.d.ts +0 -23
  600. package/dist/types.backup/vite/utils/ast-handler-extract.d.ts +0 -64
  601. package/dist/types.backup/vite/utils/banner.d.ts +0 -2
  602. package/dist/types.backup/vite/utils/bundle-analysis.d.ts +0 -28
  603. package/dist/types.backup/vite/utils/client-chunks.d.ts +0 -55
  604. package/dist/types.backup/vite/utils/directive-prologue.d.ts +0 -16
  605. package/dist/types.backup/vite/utils/forward-user-plugins.d.ts +0 -37
  606. package/dist/types.backup/vite/utils/manifest-utils.d.ts +0 -7
  607. package/dist/types.backup/vite/utils/package-resolution.d.ts +0 -6
  608. package/dist/types.backup/vite/utils/prerender-utils.d.ts +0 -32
  609. package/dist/types.backup/vite/utils/shared-utils.d.ts +0 -55
@@ -0,0 +1,579 @@
1
+ import * as React from "react";
2
+ import type { SearchSchemaValue } from "../search-params.js";
3
+ import { getLoaderLazy } from "../server/loader-registry.js";
4
+ import {
5
+ getNamePrefix,
6
+ getUrlPrefix,
7
+ type InterceptSelectorContext,
8
+ } from "../server/context.js";
9
+ import type { LoaderDefinition, TrailingSlashMode } from "../types.js";
10
+ import type { PathOptions, UrlPatterns } from "../urls/pattern-types.js";
11
+ import type { PathHelpers } from "../urls/path-helper-types.js";
12
+ import type { AllUseItems } from "../route-types.js";
13
+ import { urls } from "../urls/urls-function.js";
14
+ import {
15
+ CLIENT_REVALIDATION_HEADER,
16
+ decodeClientRevalidationDecisions,
17
+ type ClientRevalidationDecisions,
18
+ } from "./revalidation-protocol.js";
19
+ import {
20
+ ClientUrlsGroupLayout,
21
+ ClientUrlsInterceptLoading,
22
+ ClientUrlsInterceptSlot,
23
+ ClientUrlsLoading,
24
+ ClientUrlsRoot,
25
+ } from "./client-root.js";
26
+ import type {
27
+ ClientTransitionConfig,
28
+ ClientUrlInterceptRecord,
29
+ ClientUrlPatterns,
30
+ ClientUrlRouteRecord,
31
+ } from "./types.js";
32
+
33
+ const CLIENT_REFERENCE = Symbol.for("react.client.reference");
34
+
35
+ const SEARCH_SCHEMA_VALUES: ReadonlySet<string> = new Set([
36
+ "string",
37
+ "number",
38
+ "boolean",
39
+ "string?",
40
+ "number?",
41
+ "boolean?",
42
+ ]);
43
+
44
+ const PROJECTION_OPTIONS = new Set<PropertyKey>([
45
+ "name",
46
+ "search",
47
+ "trailingSlash",
48
+ ]);
49
+
50
+ const clientUrlProjections = new Map<string, ClientUrlProjection>();
51
+
52
+ export interface ClientUrlReference {
53
+ readonly $$typeof: symbol;
54
+ readonly $$id: string;
55
+ }
56
+
57
+ export type ClientUrlDefinitionSource = ClientUrlReference | ClientUrlPatterns;
58
+
59
+ export interface ClientUrlProjectionOptions {
60
+ readonly search?: Readonly<Record<string, SearchSchemaValue>>;
61
+ readonly trailingSlash?: TrailingSlashMode;
62
+ }
63
+
64
+ export interface ClientUrlProjectionRoute {
65
+ readonly id: string;
66
+ readonly pattern: string;
67
+ readonly name: string | null;
68
+ readonly options: ClientUrlProjectionOptions;
69
+ readonly loaderIds: readonly string[];
70
+ readonly hasLoading: boolean;
71
+ /** Indices into loaderIds of loaders declared loader(Def, { stream:
72
+ * "navigation" }); materialization passes the option through to the server
73
+ * loader() so document renders await them before first flush. Absent (=
74
+ * none) in projections serialized before stream support. */
75
+ readonly awaitedLoaderIndices?: readonly number[];
76
+ /** Data-only transition config (no `when` — server-tree only); absent in
77
+ * projections serialized before transition support. */
78
+ readonly transition?: Readonly<ClientTransitionConfig>;
79
+ }
80
+
81
+ export interface ClientUrlProjectionIntercept {
82
+ readonly slotName: `@${string}`;
83
+ /** Bare local target name; materialization re-dots it so the server
84
+ * intercept() helper composes it against the include's name prefix. */
85
+ readonly targetName: string;
86
+ readonly loaderIds: readonly string[];
87
+ readonly hasLoading: boolean;
88
+ }
89
+
90
+ export interface ClientUrlProjection {
91
+ readonly version: 1;
92
+ readonly routes: readonly ClientUrlProjectionRoute[];
93
+ /** Absent in projections serialized before intercept support; consumers
94
+ * must treat missing as empty. */
95
+ readonly intercepts?: readonly ClientUrlProjectionIntercept[];
96
+ }
97
+
98
+ function routeDescription(route: ClientUrlRouteRecord): string {
99
+ return `route "${route.pattern}" (${route.id})`;
100
+ }
101
+
102
+ function projectionError(route: ClientUrlRouteRecord, message: string): Error {
103
+ return new Error(
104
+ `clientUrls() cannot create a server projection for ${routeDescription(route)}: ${message}`,
105
+ );
106
+ }
107
+
108
+ function serializeSearchSchema(
109
+ route: ClientUrlRouteRecord,
110
+ value: unknown,
111
+ ): Readonly<Record<string, SearchSchemaValue>> {
112
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
113
+ throw projectionError(route, 'path option "search" must be an object');
114
+ }
115
+
116
+ const entries: Array<[string, SearchSchemaValue]> = [];
117
+ for (const key of Object.keys(value).sort()) {
118
+ const schemaValue = (value as Record<string, unknown>)[key];
119
+ if (
120
+ typeof schemaValue !== "string" ||
121
+ !SEARCH_SCHEMA_VALUES.has(schemaValue)
122
+ ) {
123
+ throw projectionError(
124
+ route,
125
+ `path option "search.${key}" has unsupported value ${JSON.stringify(schemaValue)}`,
126
+ );
127
+ }
128
+ entries.push([key, schemaValue as SearchSchemaValue]);
129
+ }
130
+
131
+ return Object.freeze(Object.fromEntries(entries));
132
+ }
133
+
134
+ function serializeOptions(
135
+ route: ClientUrlRouteRecord,
136
+ ): ClientUrlProjectionOptions {
137
+ const source = route.options;
138
+ if (!source) return Object.freeze({});
139
+
140
+ for (const key of Reflect.ownKeys(source)) {
141
+ if (key === "ppr") {
142
+ throw projectionError(route, 'path option "ppr" is not supported');
143
+ }
144
+ if (!PROJECTION_OPTIONS.has(key)) {
145
+ throw projectionError(
146
+ route,
147
+ `path option ${JSON.stringify(String(key))} is not supported`,
148
+ );
149
+ }
150
+ }
151
+
152
+ const options: {
153
+ search?: Readonly<Record<string, SearchSchemaValue>>;
154
+ trailingSlash?: TrailingSlashMode;
155
+ } = {};
156
+ if (source.search !== undefined) {
157
+ options.search = serializeSearchSchema(route, source.search);
158
+ }
159
+ if (source.trailingSlash !== undefined) {
160
+ options.trailingSlash = source.trailingSlash;
161
+ }
162
+ return Object.freeze(options);
163
+ }
164
+
165
+ function serializeTransition(
166
+ route: ClientUrlRouteRecord,
167
+ ): Readonly<ClientTransitionConfig> | undefined {
168
+ const source = route.transition;
169
+ if (!source) return undefined;
170
+ // The DSL already validated shape and rejected `when`; re-copy defensively
171
+ // so the projection is a plain JSON value (class maps included).
172
+ const config: Record<string, unknown> = {};
173
+ for (const [key, value] of Object.entries(source)) {
174
+ if (value === undefined) continue;
175
+ config[key] =
176
+ typeof value === "object" && value !== null
177
+ ? Object.freeze({ ...(value as Record<string, string>) })
178
+ : value;
179
+ }
180
+ return Object.freeze(config) as Readonly<ClientTransitionConfig>;
181
+ }
182
+
183
+ function serializeRoute(route: ClientUrlRouteRecord): ClientUrlProjectionRoute {
184
+ const loaderIds = route.loaders.map(({ loader }, index) => {
185
+ if (typeof loader.$$id !== "string" || loader.$$id.length === 0) {
186
+ throw projectionError(
187
+ route,
188
+ `loader at index ${index} is missing a non-empty $$id`,
189
+ );
190
+ }
191
+ return loader.$$id;
192
+ });
193
+
194
+ const awaitedLoaderIndices = route.loaders
195
+ .map(({ stream }, index) => (stream === "navigation" ? index : -1))
196
+ .filter((index) => index >= 0);
197
+
198
+ const transition = serializeTransition(route);
199
+ return Object.freeze({
200
+ id: route.id,
201
+ pattern: route.pattern,
202
+ name: route.name ?? null,
203
+ options: serializeOptions(route),
204
+ loaderIds: Object.freeze(loaderIds),
205
+ hasLoading: route.loading !== undefined,
206
+ ...(awaitedLoaderIndices.length > 0
207
+ ? { awaitedLoaderIndices: Object.freeze(awaitedLoaderIndices) }
208
+ : {}),
209
+ ...(transition ? { transition } : {}),
210
+ });
211
+ }
212
+
213
+ function serializeIntercept(
214
+ record: ClientUrlInterceptRecord,
215
+ index: number,
216
+ ): ClientUrlProjectionIntercept {
217
+ const loaderIds = record.loaders.map(({ loader }, loaderIndex) => {
218
+ if (typeof loader.$$id !== "string" || loader.$$id.length === 0) {
219
+ throw new Error(
220
+ `clientUrls() cannot create a server projection for intercept ".${record.targetName}" ` +
221
+ `(index ${index}): loader at index ${loaderIndex} is missing a non-empty $$id`,
222
+ );
223
+ }
224
+ return loader.$$id;
225
+ });
226
+
227
+ return Object.freeze({
228
+ slotName: record.slotName,
229
+ targetName: record.targetName,
230
+ loaderIds: Object.freeze(loaderIds),
231
+ hasLoading: record.loading !== undefined,
232
+ });
233
+ }
234
+
235
+ export function serializeClientUrlPatterns(
236
+ patterns: ClientUrlPatterns,
237
+ ): ClientUrlProjection {
238
+ return Object.freeze({
239
+ version: 1 as const,
240
+ routes: Object.freeze(patterns.routes.map(serializeRoute)),
241
+ intercepts: Object.freeze(
242
+ (patterns.intercepts ?? []).map(serializeIntercept),
243
+ ),
244
+ });
245
+ }
246
+
247
+ export function isClientUrlPatterns(
248
+ value: unknown,
249
+ ): value is ClientUrlPatterns {
250
+ return (
251
+ typeof value === "object" &&
252
+ value !== null &&
253
+ (value as { __brand?: unknown }).__brand === "client-urls" &&
254
+ Array.isArray((value as { routes?: unknown }).routes)
255
+ );
256
+ }
257
+
258
+ export function isClientUrlReference(
259
+ value: unknown,
260
+ ): value is ClientUrlReference {
261
+ if (
262
+ (typeof value !== "object" || value === null) &&
263
+ typeof value !== "function"
264
+ ) {
265
+ return false;
266
+ }
267
+
268
+ try {
269
+ const reference = value as Partial<ClientUrlReference>;
270
+ return (
271
+ reference.$$typeof === CLIENT_REFERENCE &&
272
+ typeof reference.$$id === "string" &&
273
+ reference.$$id.length > 0
274
+ );
275
+ } catch {
276
+ return false;
277
+ }
278
+ }
279
+
280
+ /**
281
+ * Strip vite's HMR timestamp query from a module id. After an HMR update of
282
+ * a clientUrls module, the RSC graph re-imports it under
283
+ * `<path>?t=<timestamp>#default`, so the include's client reference carries a
284
+ * t-stamped $$id while the projection was registered under the bare id — the
285
+ * lookup missed and every request 500'd until a server restart. Only the
286
+ * `t` param is removed (other queries are part of module identity).
287
+ */
288
+ function stripHmrTimestamp(id: string): string {
289
+ return id.replace(/([?&])t=\d+(&)?/, (_match, lead: string, trail?: string) =>
290
+ trail ? lead : "",
291
+ );
292
+ }
293
+
294
+ function projectionKey(reference: string | ClientUrlReference): string {
295
+ if (typeof reference === "string" && reference.length > 0) {
296
+ return stripHmrTimestamp(reference);
297
+ }
298
+ if (isClientUrlReference(reference)) {
299
+ return stripHmrTimestamp(reference.$$id);
300
+ }
301
+ throw new Error(
302
+ "Client URL projections require a React client reference with a non-empty $$id",
303
+ );
304
+ }
305
+
306
+ export function setClientUrlProjection(
307
+ reference: string | ClientUrlReference,
308
+ projection: ClientUrlProjection,
309
+ ): void {
310
+ clientUrlProjections.set(projectionKey(reference), projection);
311
+ }
312
+
313
+ export function getClientUrlProjection(
314
+ reference: string | ClientUrlReference,
315
+ ): ClientUrlProjection | undefined {
316
+ return clientUrlProjections.get(projectionKey(reference));
317
+ }
318
+
319
+ export function clearClientUrlProjections(): void {
320
+ clientUrlProjections.clear();
321
+ }
322
+
323
+ /**
324
+ * Per-request memo for decoded client revalidation decisions: the synthesized
325
+ * predicate below runs once per loader stub per revalidation pass, and every
326
+ * stub reads the same header.
327
+ */
328
+ const decisionsByRequest = new WeakMap<
329
+ Request,
330
+ ClientRevalidationDecisions | null
331
+ >();
332
+
333
+ function clientDecisionsFor(
334
+ request: Request | undefined,
335
+ ): ClientRevalidationDecisions | null {
336
+ if (!request) return null;
337
+ if (decisionsByRequest.has(request)) {
338
+ return decisionsByRequest.get(request) ?? null;
339
+ }
340
+ const decoded = decodeClientRevalidationDecisions(
341
+ request.headers.get(CLIENT_REVALIDATION_HEADER),
342
+ );
343
+ decisionsByRequest.set(request, decoded);
344
+ return decoded;
345
+ }
346
+
347
+ /**
348
+ * The server end of client-run per-loader revalidation: clientUrls()
349
+ * revalidate() predicates EXECUTE in the browser (they are client-module
350
+ * code), and their decisions arrive on the request header. This synthesized
351
+ * predicate — attached to every materialized loader stub — honors a decision
352
+ * addressed to its loader id and otherwise returns the locked default, which
353
+ * is also the behavior for requests that carry no decisions (no-JS, PE,
354
+ * prefetch, document loads). Decisions can only address client-urls stubs;
355
+ * server-tree loaders never see this predicate.
356
+ */
357
+ function makeClientDecisionRevalidate(
358
+ loaderId: string,
359
+ ): (args: {
360
+ defaultShouldRevalidate: boolean;
361
+ context: { request: Request };
362
+ }) => boolean {
363
+ return ({ defaultShouldRevalidate, context }) => {
364
+ const decisions = clientDecisionsFor(context?.request);
365
+ if (decisions) {
366
+ if (decisions.skip.includes(loaderId)) return false;
367
+ if (decisions.force.includes(loaderId)) return true;
368
+ }
369
+ return defaultShouldRevalidate;
370
+ };
371
+ }
372
+
373
+ function createLoaderStub(id: string): LoaderDefinition<unknown> {
374
+ return {
375
+ __brand: "loader",
376
+ $$id: id,
377
+ fn: async (ctx) => {
378
+ const registeredLoader = await getLoaderLazy(id);
379
+ if (!registeredLoader) {
380
+ throw new Error(
381
+ `Projected loader "${id}" was not found in the server loader registry`,
382
+ );
383
+ }
384
+ return registeredLoader.fn(ctx);
385
+ },
386
+ };
387
+ }
388
+
389
+ function materializedPathOptions(route: ClientUrlProjectionRoute): PathOptions {
390
+ return {
391
+ ...(route.name === null ? {} : { name: route.name }),
392
+ ...(route.options.search ? { search: { ...route.options.search } } : {}),
393
+ ...(route.options.trailingSlash
394
+ ? { trailingSlash: route.options.trailingSlash }
395
+ : {}),
396
+ };
397
+ }
398
+
399
+ function materializeRouteItems(
400
+ reference: ClientUrlDefinitionSource,
401
+ projection: ClientUrlProjection,
402
+ {
403
+ path,
404
+ layout,
405
+ loader,
406
+ loading,
407
+ intercept,
408
+ transition,
409
+ revalidate,
410
+ }: PathHelpers<any>,
411
+ ): AllUseItems[] {
412
+ // The urls() builder runs under the include's prefixes, so the composed
413
+ // route-name prefix is available here. ClientUrlsRoot needs it to compose
414
+ // canonical names for intercept-target coordination in the browser.
415
+ const namePrefix = getNamePrefix();
416
+
417
+ // Helper calls attach to the CURRENT ctx.parent as they execute, so these
418
+ // builders must run where the items belong: at the module top level for the
419
+ // flat (no-intercept) shape, or inside the group layout's children callback
420
+ // when intercepts wrap the group.
421
+ const buildRouteItems = (): AllUseItems[] =>
422
+ projection.routes.map(
423
+ (route) =>
424
+ path(
425
+ route.pattern,
426
+ () =>
427
+ React.createElement(ClientUrlsRoot, {
428
+ definition: reference as ClientUrlPatterns,
429
+ routeId: route.id,
430
+ namePrefix,
431
+ }),
432
+ materializedPathOptions(route),
433
+ () => [
434
+ ...route.loaderIds.map((id, loaderIndex) =>
435
+ loader(
436
+ createLoaderStub(id),
437
+ route.awaitedLoaderIndices?.includes(loaderIndex)
438
+ ? { stream: "navigation" }
439
+ : undefined,
440
+ () => [revalidate(makeClientDecisionRevalidate(id))],
441
+ ),
442
+ ),
443
+ ...(route.hasLoading
444
+ ? [
445
+ loading(
446
+ React.createElement(ClientUrlsLoading, {
447
+ definition: reference as ClientUrlPatterns,
448
+ routeId: route.id,
449
+ }),
450
+ ),
451
+ ]
452
+ : []),
453
+ // Data-only per-route transition config: same child position as a
454
+ // hand-written server transition(config) — no `when`.
455
+ ...(route.transition ? [transition({ ...route.transition })] : []),
456
+ ],
457
+ ) as AllUseItems,
458
+ );
459
+
460
+ const intercepts = projection.intercepts ?? [];
461
+ if (intercepts.length === 0) return buildRouteItems();
462
+
463
+ // Two server-side mechanics make client-declared intercepts work:
464
+ //
465
+ // 1. GROUP LAYOUT ATTACHMENT. findInterceptForRoute walks the TARGET
466
+ // route's parent chain, so the intercept must live on an entry in that
467
+ // chain that survives evaluation. Emitting intercepts at the module top
468
+ // level attaches them to the lazy expansion's ISOLATED parent clone
469
+ // (getIsolatedLazyParent in server/context.ts), which is discarded.
470
+ // Wrapping the group in one materialized layout gives them a persistent
471
+ // home in the target chain — and the layout renders each declared slot,
472
+ // so the modal presents inside the group's own subtree (the slot segment
473
+ // attaches to the declaring entry; an outer layout's same-named outlet
474
+ // would never receive it).
475
+ //
476
+ // 2. SYNTHESIZED ORIGIN `when`. The target-chain walk is origin-blind: a
477
+ // bare intercept would claim navigations from ANY origin — and for an
478
+ // out-of-group origin the slot's host layout is not in the rendered
479
+ // tree, so the modal would silently vanish. The declaration contract is
480
+ // module-local, so materialization synthesizes the origin check the DSL
481
+ // deliberately does not expose: activate only when the origin pathname
482
+ // is inside this include's mount. This is server-generated code — no
483
+ // function crosses the "use client" projection boundary.
484
+ const mount = getUrlPrefix() || "/";
485
+ const isInGroupOrigin = ({ from }: InterceptSelectorContext): boolean =>
486
+ mount === "/"
487
+ ? true
488
+ : from.pathname === mount || from.pathname.startsWith(`${mount}/`);
489
+ const slotNames = [...new Set(intercepts.map((record) => record.slotName))];
490
+ const buildInterceptItems = (): AllUseItems[] =>
491
+ intercepts.map(
492
+ (record, interceptIndex) =>
493
+ intercept(
494
+ record.slotName,
495
+ `.${record.targetName}`,
496
+ () =>
497
+ React.createElement(ClientUrlsInterceptSlot, {
498
+ definition: reference as ClientUrlPatterns,
499
+ interceptIndex,
500
+ }),
501
+ { when: isInGroupOrigin },
502
+ () => [
503
+ ...record.loaderIds.map((id) => loader(createLoaderStub(id))),
504
+ ...(record.hasLoading
505
+ ? [
506
+ loading(
507
+ React.createElement(ClientUrlsInterceptLoading, {
508
+ definition: reference as ClientUrlPatterns,
509
+ interceptIndex,
510
+ }),
511
+ ),
512
+ ]
513
+ : []),
514
+ ],
515
+ ) as AllUseItems,
516
+ );
517
+
518
+ function ClientUrlsGroup(): React.ReactNode {
519
+ return React.createElement(ClientUrlsGroupLayout, { slotNames });
520
+ }
521
+
522
+ return [
523
+ layout(ClientUrlsGroup, () => [
524
+ ...buildRouteItems(),
525
+ ...buildInterceptItems(),
526
+ ]) as AllUseItems,
527
+ ];
528
+ }
529
+
530
+ function assertClientUrlSource(
531
+ value: unknown,
532
+ caller: string,
533
+ ): asserts value is ClientUrlDefinitionSource {
534
+ if (!isClientUrlReference(value) && !isClientUrlPatterns(value)) {
535
+ throw new Error(
536
+ `${caller} expects clientUrls() patterns or a React client reference with a non-empty $$id`,
537
+ );
538
+ }
539
+ }
540
+
541
+ export function materializeClientUrlPatterns(
542
+ reference: ClientUrlDefinitionSource,
543
+ projection: ClientUrlProjection,
544
+ ): UrlPatterns {
545
+ assertClientUrlSource(reference, "materializeClientUrlPatterns()");
546
+ return urls((helpers) =>
547
+ materializeRouteItems(reference, projection, helpers),
548
+ );
549
+ }
550
+
551
+ /**
552
+ * Adapt a clientUrls() source for `include()` mounting inside the canonical
553
+ * urls() tree. Materialization is DEFERRED into the returned handler: it
554
+ * resolves the discovery-installed projection at evaluation time (lazy include
555
+ * expansion, build manifest generation, dev per-request trie rebuild) — by
556
+ * then the routes-manifest bootstrap has installed projections, so registration
557
+ * order never matters. The include machinery applies the URL and route-name
558
+ * prefixes exactly as it does for any urls() module; surrounding RSC layouts,
559
+ * middleware scoping, and boundaries derive from the canonical server tree.
560
+ */
561
+ export function clientUrlIncludePatterns(
562
+ source: ClientUrlDefinitionSource,
563
+ ): UrlPatterns {
564
+ assertClientUrlSource(source, "include() with a clientUrls() definition");
565
+ return urls((helpers) => {
566
+ const projection = isClientUrlPatterns(source)
567
+ ? serializeClientUrlPatterns(source)
568
+ : getClientUrlProjection(source);
569
+ if (!projection) {
570
+ const id = isClientUrlReference(source) ? source.$$id : "(inline)";
571
+ throw new Error(
572
+ `include() could not resolve the server projection for clientUrls() module "${id}". ` +
573
+ 'The definition must be the default export of a "use client" module so the ' +
574
+ "Vite discovery pass can project it; in unit tests pass the clientUrls() object directly.",
575
+ );
576
+ }
577
+ return materializeRouteItems(source, projection, helpers);
578
+ });
579
+ }