@rangojs/router 0.0.0-experimental.0b82333f → 0.0.0-experimental.0e02cd4e

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 (943) hide show
  1. package/README.md +76 -18
  2. package/dist/bin/rango.js +138 -50
  3. package/dist/vite/index.js +839 -429
  4. package/package.json +2 -2
  5. package/skills/cache-guide/SKILL.md +32 -0
  6. package/skills/caching/SKILL.md +45 -4
  7. package/skills/links/SKILL.md +3 -1
  8. package/skills/loader/SKILL.md +53 -43
  9. package/skills/middleware/SKILL.md +2 -0
  10. package/skills/parallel/SKILL.md +126 -0
  11. package/skills/prerender/SKILL.md +110 -68
  12. package/skills/route/SKILL.md +31 -0
  13. package/skills/router-setup/SKILL.md +87 -2
  14. package/skills/typesafety/SKILL.md +10 -0
  15. package/src/__internal.ts +1 -1
  16. package/src/browser/app-version.ts +14 -0
  17. package/src/browser/event-controller.ts +5 -0
  18. package/src/browser/navigation-bridge.ts +17 -6
  19. package/src/browser/navigation-client.ts +132 -61
  20. package/src/browser/navigation-store.ts +43 -8
  21. package/src/browser/navigation-transaction.ts +11 -9
  22. package/src/browser/partial-update.ts +76 -13
  23. package/src/browser/prefetch/cache.ts +78 -11
  24. package/src/browser/prefetch/fetch.ts +76 -27
  25. package/src/browser/prefetch/queue.ts +92 -20
  26. package/src/browser/prefetch/resource-ready.ts +77 -0
  27. package/src/browser/react/Link.tsx +67 -9
  28. package/src/browser/react/NavigationProvider.tsx +40 -4
  29. package/src/browser/react/context.ts +7 -2
  30. package/src/browser/react/use-handle.ts +9 -58
  31. package/src/browser/react/use-router.ts +21 -8
  32. package/src/browser/rsc-router.tsx +134 -59
  33. package/src/browser/scroll-restoration.ts +30 -15
  34. package/src/browser/segment-reconciler.ts +6 -1
  35. package/src/browser/server-action-bridge.ts +8 -6
  36. package/src/browser/types.ts +36 -5
  37. package/src/build/generate-manifest.ts +6 -6
  38. package/src/build/generate-route-types.ts +3 -0
  39. package/src/build/route-types/include-resolution.ts +8 -1
  40. package/src/build/route-types/router-processing.ts +223 -74
  41. package/src/build/route-types/scan-filter.ts +8 -1
  42. package/src/cache/cache-runtime.ts +15 -11
  43. package/src/cache/cache-scope.ts +48 -7
  44. package/src/cache/cf/cf-cache-store.ts +453 -11
  45. package/src/cache/cf/index.ts +5 -1
  46. package/src/cache/document-cache.ts +17 -7
  47. package/src/cache/index.ts +1 -0
  48. package/src/cache/taint.ts +55 -0
  49. package/src/client.tsx +2 -56
  50. package/src/context-var.ts +72 -2
  51. package/src/debug.ts +2 -2
  52. package/src/handle.ts +40 -0
  53. package/src/index.rsc.ts +3 -1
  54. package/src/index.ts +12 -0
  55. package/src/prerender/store.ts +5 -4
  56. package/src/prerender.ts +138 -77
  57. package/src/reverse.ts +22 -1
  58. package/src/route-definition/dsl-helpers.ts +73 -25
  59. package/src/route-definition/helpers-types.ts +10 -6
  60. package/src/route-definition/index.ts +3 -0
  61. package/src/route-definition/redirect.ts +11 -3
  62. package/src/route-definition/resolve-handler-use.ts +149 -0
  63. package/src/route-map-builder.ts +7 -1
  64. package/src/route-types.ts +11 -0
  65. package/src/router/content-negotiation.ts +100 -1
  66. package/src/router/find-match.ts +4 -2
  67. package/src/router/handler-context.ts +79 -23
  68. package/src/router/intercept-resolution.ts +11 -4
  69. package/src/router/lazy-includes.ts +4 -1
  70. package/src/router/loader-resolution.ts +156 -21
  71. package/src/router/logging.ts +5 -2
  72. package/src/router/manifest.ts +9 -3
  73. package/src/router/match-api.ts +124 -189
  74. package/src/router/match-middleware/background-revalidation.ts +30 -2
  75. package/src/router/match-middleware/cache-lookup.ts +92 -16
  76. package/src/router/match-middleware/cache-store.ts +53 -10
  77. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  78. package/src/router/match-middleware/segment-resolution.ts +61 -5
  79. package/src/router/match-result.ts +104 -10
  80. package/src/router/metrics.ts +6 -1
  81. package/src/router/middleware-types.ts +6 -8
  82. package/src/router/middleware.ts +4 -6
  83. package/src/router/navigation-snapshot.ts +182 -0
  84. package/src/router/prerender-match.ts +110 -10
  85. package/src/router/preview-match.ts +30 -102
  86. package/src/router/request-classification.ts +310 -0
  87. package/src/router/route-snapshot.ts +245 -0
  88. package/src/router/router-context.ts +6 -1
  89. package/src/router/router-interfaces.ts +36 -4
  90. package/src/router/router-options.ts +37 -11
  91. package/src/router/segment-resolution/fresh.ts +198 -20
  92. package/src/router/segment-resolution/helpers.ts +29 -24
  93. package/src/router/segment-resolution/loader-cache.ts +1 -0
  94. package/src/router/segment-resolution/revalidation.ts +437 -297
  95. package/src/router/segment-wrappers.ts +2 -0
  96. package/src/router/types.ts +1 -0
  97. package/src/router.ts +59 -6
  98. package/src/rsc/handler.ts +472 -372
  99. package/src/rsc/loader-fetch.ts +23 -3
  100. package/src/rsc/manifest-init.ts +5 -1
  101. package/src/rsc/progressive-enhancement.ts +14 -2
  102. package/src/rsc/rsc-rendering.ts +10 -1
  103. package/src/rsc/server-action.ts +8 -0
  104. package/src/rsc/ssr-setup.ts +2 -2
  105. package/src/rsc/types.ts +9 -1
  106. package/src/segment-system.tsx +140 -4
  107. package/src/server/context.ts +140 -14
  108. package/src/server/handle-store.ts +19 -0
  109. package/src/server/loader-registry.ts +9 -8
  110. package/src/server/request-context.ts +185 -19
  111. package/src/ssr/index.tsx +4 -0
  112. package/src/static-handler.ts +18 -6
  113. package/src/types/cache-types.ts +4 -4
  114. package/src/types/handler-context.ts +137 -33
  115. package/src/types/loader-types.ts +36 -9
  116. package/src/types/route-entry.ts +8 -1
  117. package/src/types/segments.ts +3 -0
  118. package/src/urls/path-helper-types.ts +9 -2
  119. package/src/urls/path-helper.ts +48 -13
  120. package/src/urls/pattern-types.ts +12 -0
  121. package/src/urls/response-types.ts +16 -6
  122. package/src/use-loader.tsx +77 -5
  123. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  124. package/src/vite/discovery/discover-routers.ts +5 -1
  125. package/src/vite/discovery/prerender-collection.ts +128 -74
  126. package/src/vite/discovery/state.ts +13 -6
  127. package/src/vite/index.ts +4 -0
  128. package/src/vite/plugin-types.ts +51 -79
  129. package/src/vite/plugins/expose-action-id.ts +1 -3
  130. package/src/vite/plugins/expose-id-utils.ts +12 -0
  131. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  132. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  133. package/src/vite/plugins/performance-tracks.ts +88 -0
  134. package/src/vite/plugins/refresh-cmd.ts +88 -26
  135. package/src/vite/plugins/version-plugin.ts +13 -1
  136. package/src/vite/rango.ts +163 -211
  137. package/src/vite/router-discovery.ts +178 -45
  138. package/src/vite/utils/banner.ts +3 -3
  139. package/src/vite/utils/prerender-utils.ts +18 -0
  140. package/src/vite/utils/shared-utils.ts +3 -2
  141. package/dist/__internal.d.ts +0 -83
  142. package/dist/__internal.d.ts.map +0 -1
  143. package/dist/__internal.js +0 -19
  144. package/dist/__internal.js.map +0 -1
  145. package/dist/__mocks__/version.d.ts +0 -7
  146. package/dist/__mocks__/version.d.ts.map +0 -1
  147. package/dist/__mocks__/version.js +0 -7
  148. package/dist/__mocks__/version.js.map +0 -1
  149. package/dist/__tests__/client-href.test.d.ts +0 -2
  150. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  151. package/dist/__tests__/client-href.test.js +0 -74
  152. package/dist/__tests__/client-href.test.js.map +0 -1
  153. package/dist/__tests__/component-utils.test.d.ts +0 -2
  154. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  155. package/dist/__tests__/component-utils.test.js +0 -51
  156. package/dist/__tests__/component-utils.test.js.map +0 -1
  157. package/dist/__tests__/event-controller.test.d.ts +0 -2
  158. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  159. package/dist/__tests__/event-controller.test.js +0 -538
  160. package/dist/__tests__/event-controller.test.js.map +0 -1
  161. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  162. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  163. package/dist/__tests__/helpers/route-tree.js +0 -374
  164. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  165. package/dist/__tests__/match-result.test.d.ts +0 -2
  166. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  167. package/dist/__tests__/match-result.test.js +0 -154
  168. package/dist/__tests__/match-result.test.js.map +0 -1
  169. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  170. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  171. package/dist/__tests__/navigation-store.test.js +0 -440
  172. package/dist/__tests__/navigation-store.test.js.map +0 -1
  173. package/dist/__tests__/partial-update.test.d.ts +0 -2
  174. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  175. package/dist/__tests__/partial-update.test.js +0 -1009
  176. package/dist/__tests__/partial-update.test.js.map +0 -1
  177. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  178. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  179. package/dist/__tests__/reverse-types.test.js +0 -656
  180. package/dist/__tests__/reverse-types.test.js.map +0 -1
  181. package/dist/__tests__/route-definition.test.d.ts +0 -2
  182. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  183. package/dist/__tests__/route-definition.test.js +0 -55
  184. package/dist/__tests__/route-definition.test.js.map +0 -1
  185. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  186. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  187. package/dist/__tests__/router-helpers.test.js +0 -377
  188. package/dist/__tests__/router-helpers.test.js.map +0 -1
  189. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  190. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  191. package/dist/__tests__/router-integration-2.test.js +0 -426
  192. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  193. package/dist/__tests__/router-integration.test.d.ts +0 -2
  194. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  195. package/dist/__tests__/router-integration.test.js +0 -1051
  196. package/dist/__tests__/router-integration.test.js.map +0 -1
  197. package/dist/__tests__/search-params.test.d.ts +0 -5
  198. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  199. package/dist/__tests__/search-params.test.js +0 -306
  200. package/dist/__tests__/search-params.test.js.map +0 -1
  201. package/dist/__tests__/segment-system.test.d.ts +0 -2
  202. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  203. package/dist/__tests__/segment-system.test.js +0 -627
  204. package/dist/__tests__/segment-system.test.js.map +0 -1
  205. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  206. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  207. package/dist/__tests__/static-handler-types.test.js +0 -63
  208. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  209. package/dist/__tests__/urls.test.d.ts +0 -2
  210. package/dist/__tests__/urls.test.d.ts.map +0 -1
  211. package/dist/__tests__/urls.test.js +0 -421
  212. package/dist/__tests__/urls.test.js.map +0 -1
  213. package/dist/__tests__/use-mount.test.d.ts +0 -2
  214. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  215. package/dist/__tests__/use-mount.test.js +0 -35
  216. package/dist/__tests__/use-mount.test.js.map +0 -1
  217. package/dist/bin/rango.d.ts +0 -2
  218. package/dist/bin/rango.d.ts.map +0 -1
  219. package/dist/bin/rango.js.map +0 -1
  220. package/dist/browser/event-controller.d.ts +0 -191
  221. package/dist/browser/event-controller.d.ts.map +0 -1
  222. package/dist/browser/event-controller.js +0 -559
  223. package/dist/browser/event-controller.js.map +0 -1
  224. package/dist/browser/index.d.ts +0 -2
  225. package/dist/browser/index.d.ts.map +0 -1
  226. package/dist/browser/index.js +0 -14
  227. package/dist/browser/index.js.map +0 -1
  228. package/dist/browser/link-interceptor.d.ts +0 -38
  229. package/dist/browser/link-interceptor.d.ts.map +0 -1
  230. package/dist/browser/link-interceptor.js +0 -99
  231. package/dist/browser/link-interceptor.js.map +0 -1
  232. package/dist/browser/logging.d.ts +0 -10
  233. package/dist/browser/logging.d.ts.map +0 -1
  234. package/dist/browser/logging.js +0 -29
  235. package/dist/browser/logging.js.map +0 -1
  236. package/dist/browser/lru-cache.d.ts +0 -17
  237. package/dist/browser/lru-cache.d.ts.map +0 -1
  238. package/dist/browser/lru-cache.js +0 -50
  239. package/dist/browser/lru-cache.js.map +0 -1
  240. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  241. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  242. package/dist/browser/merge-segment-loaders.js +0 -102
  243. package/dist/browser/merge-segment-loaders.js.map +0 -1
  244. package/dist/browser/navigation-bridge.d.ts +0 -102
  245. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  246. package/dist/browser/navigation-bridge.js +0 -708
  247. package/dist/browser/navigation-bridge.js.map +0 -1
  248. package/dist/browser/navigation-client.d.ts +0 -25
  249. package/dist/browser/navigation-client.d.ts.map +0 -1
  250. package/dist/browser/navigation-client.js +0 -157
  251. package/dist/browser/navigation-client.js.map +0 -1
  252. package/dist/browser/navigation-store.d.ts +0 -101
  253. package/dist/browser/navigation-store.d.ts.map +0 -1
  254. package/dist/browser/navigation-store.js +0 -625
  255. package/dist/browser/navigation-store.js.map +0 -1
  256. package/dist/browser/partial-update.d.ts +0 -75
  257. package/dist/browser/partial-update.d.ts.map +0 -1
  258. package/dist/browser/partial-update.js +0 -426
  259. package/dist/browser/partial-update.js.map +0 -1
  260. package/dist/browser/react/Link.d.ts +0 -86
  261. package/dist/browser/react/Link.d.ts.map +0 -1
  262. package/dist/browser/react/Link.js +0 -128
  263. package/dist/browser/react/Link.js.map +0 -1
  264. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  265. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  266. package/dist/browser/react/NavigationProvider.js +0 -216
  267. package/dist/browser/react/NavigationProvider.js.map +0 -1
  268. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  269. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  270. package/dist/browser/react/ScrollRestoration.js +0 -57
  271. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  272. package/dist/browser/react/context.d.ts +0 -46
  273. package/dist/browser/react/context.d.ts.map +0 -1
  274. package/dist/browser/react/context.js +0 -10
  275. package/dist/browser/react/context.js.map +0 -1
  276. package/dist/browser/react/index.d.ts +0 -11
  277. package/dist/browser/react/index.d.ts.map +0 -1
  278. package/dist/browser/react/index.js +0 -22
  279. package/dist/browser/react/index.js.map +0 -1
  280. package/dist/browser/react/location-state-shared.d.ts +0 -63
  281. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  282. package/dist/browser/react/location-state-shared.js +0 -81
  283. package/dist/browser/react/location-state-shared.js.map +0 -1
  284. package/dist/browser/react/location-state.d.ts +0 -23
  285. package/dist/browser/react/location-state.d.ts.map +0 -1
  286. package/dist/browser/react/location-state.js +0 -29
  287. package/dist/browser/react/location-state.js.map +0 -1
  288. package/dist/browser/react/mount-context.d.ts +0 -24
  289. package/dist/browser/react/mount-context.d.ts.map +0 -1
  290. package/dist/browser/react/mount-context.js +0 -24
  291. package/dist/browser/react/mount-context.js.map +0 -1
  292. package/dist/browser/react/use-action.d.ts +0 -64
  293. package/dist/browser/react/use-action.d.ts.map +0 -1
  294. package/dist/browser/react/use-action.js +0 -134
  295. package/dist/browser/react/use-action.js.map +0 -1
  296. package/dist/browser/react/use-client-cache.d.ts +0 -41
  297. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  298. package/dist/browser/react/use-client-cache.js +0 -39
  299. package/dist/browser/react/use-client-cache.js.map +0 -1
  300. package/dist/browser/react/use-handle.d.ts +0 -31
  301. package/dist/browser/react/use-handle.d.ts.map +0 -1
  302. package/dist/browser/react/use-handle.js +0 -144
  303. package/dist/browser/react/use-handle.js.map +0 -1
  304. package/dist/browser/react/use-href.d.ts +0 -33
  305. package/dist/browser/react/use-href.d.ts.map +0 -1
  306. package/dist/browser/react/use-href.js +0 -39
  307. package/dist/browser/react/use-href.js.map +0 -1
  308. package/dist/browser/react/use-link-status.d.ts +0 -37
  309. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  310. package/dist/browser/react/use-link-status.js +0 -99
  311. package/dist/browser/react/use-link-status.js.map +0 -1
  312. package/dist/browser/react/use-mount.d.ts +0 -25
  313. package/dist/browser/react/use-mount.d.ts.map +0 -1
  314. package/dist/browser/react/use-mount.js +0 -30
  315. package/dist/browser/react/use-mount.js.map +0 -1
  316. package/dist/browser/react/use-navigation.d.ts +0 -27
  317. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  318. package/dist/browser/react/use-navigation.js +0 -87
  319. package/dist/browser/react/use-navigation.js.map +0 -1
  320. package/dist/browser/react/use-segments.d.ts +0 -38
  321. package/dist/browser/react/use-segments.d.ts.map +0 -1
  322. package/dist/browser/react/use-segments.js +0 -130
  323. package/dist/browser/react/use-segments.js.map +0 -1
  324. package/dist/browser/request-controller.d.ts +0 -26
  325. package/dist/browser/request-controller.d.ts.map +0 -1
  326. package/dist/browser/request-controller.js +0 -147
  327. package/dist/browser/request-controller.js.map +0 -1
  328. package/dist/browser/rsc-router.d.ts +0 -129
  329. package/dist/browser/rsc-router.d.ts.map +0 -1
  330. package/dist/browser/rsc-router.js +0 -195
  331. package/dist/browser/rsc-router.js.map +0 -1
  332. package/dist/browser/scroll-restoration.d.ts +0 -93
  333. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  334. package/dist/browser/scroll-restoration.js +0 -321
  335. package/dist/browser/scroll-restoration.js.map +0 -1
  336. package/dist/browser/segment-structure-assert.d.ts +0 -17
  337. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  338. package/dist/browser/segment-structure-assert.js +0 -59
  339. package/dist/browser/segment-structure-assert.js.map +0 -1
  340. package/dist/browser/server-action-bridge.d.ts +0 -26
  341. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  342. package/dist/browser/server-action-bridge.js +0 -668
  343. package/dist/browser/server-action-bridge.js.map +0 -1
  344. package/dist/browser/shallow.d.ts +0 -12
  345. package/dist/browser/shallow.d.ts.map +0 -1
  346. package/dist/browser/shallow.js +0 -34
  347. package/dist/browser/shallow.js.map +0 -1
  348. package/dist/browser/types.d.ts +0 -369
  349. package/dist/browser/types.d.ts.map +0 -1
  350. package/dist/browser/types.js +0 -2
  351. package/dist/browser/types.js.map +0 -1
  352. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  353. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  354. package/dist/build/__tests__/generate-cli.test.js +0 -237
  355. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  356. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  357. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  358. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  359. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  360. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  361. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  362. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  363. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  364. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  365. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  366. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  367. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  368. package/dist/build/generate-manifest.d.ts +0 -81
  369. package/dist/build/generate-manifest.d.ts.map +0 -1
  370. package/dist/build/generate-manifest.js +0 -276
  371. package/dist/build/generate-manifest.js.map +0 -1
  372. package/dist/build/generate-route-types.d.ts +0 -115
  373. package/dist/build/generate-route-types.d.ts.map +0 -1
  374. package/dist/build/generate-route-types.js +0 -740
  375. package/dist/build/generate-route-types.js.map +0 -1
  376. package/dist/build/index.d.ts +0 -21
  377. package/dist/build/index.d.ts.map +0 -1
  378. package/dist/build/index.js +0 -21
  379. package/dist/build/index.js.map +0 -1
  380. package/dist/build/route-trie.d.ts +0 -71
  381. package/dist/build/route-trie.d.ts.map +0 -1
  382. package/dist/build/route-trie.js +0 -175
  383. package/dist/build/route-trie.js.map +0 -1
  384. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  385. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  386. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  387. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  388. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  389. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  390. package/dist/cache/__tests__/document-cache.test.js +0 -345
  391. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  392. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  393. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  394. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  395. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  396. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  397. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  398. package/dist/cache/__tests__/memory-store.test.js +0 -367
  399. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  400. package/dist/cache/cache-scope.d.ts +0 -102
  401. package/dist/cache/cache-scope.d.ts.map +0 -1
  402. package/dist/cache/cache-scope.js +0 -440
  403. package/dist/cache/cache-scope.js.map +0 -1
  404. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  405. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  406. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  407. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  408. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  409. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  410. package/dist/cache/cf/cf-cache-store.js +0 -242
  411. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  412. package/dist/cache/cf/index.d.ts +0 -14
  413. package/dist/cache/cf/index.d.ts.map +0 -1
  414. package/dist/cache/cf/index.js +0 -17
  415. package/dist/cache/cf/index.js.map +0 -1
  416. package/dist/cache/document-cache.d.ts +0 -64
  417. package/dist/cache/document-cache.d.ts.map +0 -1
  418. package/dist/cache/document-cache.js +0 -228
  419. package/dist/cache/document-cache.js.map +0 -1
  420. package/dist/cache/index.d.ts +0 -19
  421. package/dist/cache/index.d.ts.map +0 -1
  422. package/dist/cache/index.js +0 -21
  423. package/dist/cache/index.js.map +0 -1
  424. package/dist/cache/memory-segment-store.d.ts +0 -110
  425. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  426. package/dist/cache/memory-segment-store.js +0 -117
  427. package/dist/cache/memory-segment-store.js.map +0 -1
  428. package/dist/cache/memory-store.d.ts +0 -41
  429. package/dist/cache/memory-store.d.ts.map +0 -1
  430. package/dist/cache/memory-store.js +0 -191
  431. package/dist/cache/memory-store.js.map +0 -1
  432. package/dist/cache/types.d.ts +0 -317
  433. package/dist/cache/types.d.ts.map +0 -1
  434. package/dist/cache/types.js +0 -12
  435. package/dist/cache/types.js.map +0 -1
  436. package/dist/client.d.ts +0 -248
  437. package/dist/client.d.ts.map +0 -1
  438. package/dist/client.js +0 -367
  439. package/dist/client.js.map +0 -1
  440. package/dist/client.rsc.d.ts +0 -26
  441. package/dist/client.rsc.d.ts.map +0 -1
  442. package/dist/client.rsc.js +0 -46
  443. package/dist/client.rsc.js.map +0 -1
  444. package/dist/component-utils.d.ts +0 -36
  445. package/dist/component-utils.d.ts.map +0 -1
  446. package/dist/component-utils.js +0 -61
  447. package/dist/component-utils.js.map +0 -1
  448. package/dist/components/DefaultDocument.d.ts +0 -13
  449. package/dist/components/DefaultDocument.d.ts.map +0 -1
  450. package/dist/components/DefaultDocument.js +0 -15
  451. package/dist/components/DefaultDocument.js.map +0 -1
  452. package/dist/debug.d.ts +0 -58
  453. package/dist/debug.d.ts.map +0 -1
  454. package/dist/debug.js +0 -157
  455. package/dist/debug.js.map +0 -1
  456. package/dist/default-error-boundary.d.ts +0 -11
  457. package/dist/default-error-boundary.d.ts.map +0 -1
  458. package/dist/default-error-boundary.js +0 -45
  459. package/dist/default-error-boundary.js.map +0 -1
  460. package/dist/deps/browser.d.ts +0 -2
  461. package/dist/deps/browser.d.ts.map +0 -1
  462. package/dist/deps/browser.js +0 -3
  463. package/dist/deps/browser.js.map +0 -1
  464. package/dist/deps/html-stream-client.d.ts +0 -2
  465. package/dist/deps/html-stream-client.d.ts.map +0 -1
  466. package/dist/deps/html-stream-client.js +0 -3
  467. package/dist/deps/html-stream-client.js.map +0 -1
  468. package/dist/deps/html-stream-server.d.ts +0 -2
  469. package/dist/deps/html-stream-server.d.ts.map +0 -1
  470. package/dist/deps/html-stream-server.js +0 -3
  471. package/dist/deps/html-stream-server.js.map +0 -1
  472. package/dist/deps/rsc.d.ts +0 -2
  473. package/dist/deps/rsc.d.ts.map +0 -1
  474. package/dist/deps/rsc.js +0 -4
  475. package/dist/deps/rsc.js.map +0 -1
  476. package/dist/deps/ssr.d.ts +0 -2
  477. package/dist/deps/ssr.d.ts.map +0 -1
  478. package/dist/deps/ssr.js +0 -3
  479. package/dist/deps/ssr.js.map +0 -1
  480. package/dist/errors.d.ts +0 -174
  481. package/dist/errors.d.ts.map +0 -1
  482. package/dist/errors.js +0 -241
  483. package/dist/errors.js.map +0 -1
  484. package/dist/handle.d.ts +0 -78
  485. package/dist/handle.d.ts.map +0 -1
  486. package/dist/handle.js +0 -82
  487. package/dist/handle.js.map +0 -1
  488. package/dist/handles/MetaTags.d.ts +0 -14
  489. package/dist/handles/MetaTags.d.ts.map +0 -1
  490. package/dist/handles/MetaTags.js +0 -136
  491. package/dist/handles/MetaTags.js.map +0 -1
  492. package/dist/handles/index.d.ts +0 -6
  493. package/dist/handles/index.d.ts.map +0 -1
  494. package/dist/handles/index.js +0 -6
  495. package/dist/handles/index.js.map +0 -1
  496. package/dist/handles/meta.d.ts +0 -39
  497. package/dist/handles/meta.d.ts.map +0 -1
  498. package/dist/handles/meta.js +0 -202
  499. package/dist/handles/meta.js.map +0 -1
  500. package/dist/host/__tests__/errors.test.d.ts +0 -2
  501. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  502. package/dist/host/__tests__/errors.test.js +0 -76
  503. package/dist/host/__tests__/errors.test.js.map +0 -1
  504. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  505. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  506. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  507. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  508. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  509. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  510. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  511. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  512. package/dist/host/__tests__/router.test.d.ts +0 -2
  513. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  514. package/dist/host/__tests__/router.test.js +0 -241
  515. package/dist/host/__tests__/router.test.js.map +0 -1
  516. package/dist/host/__tests__/testing.test.d.ts +0 -2
  517. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  518. package/dist/host/__tests__/testing.test.js +0 -64
  519. package/dist/host/__tests__/testing.test.js.map +0 -1
  520. package/dist/host/__tests__/utils.test.d.ts +0 -2
  521. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  522. package/dist/host/__tests__/utils.test.js +0 -29
  523. package/dist/host/__tests__/utils.test.js.map +0 -1
  524. package/dist/host/cookie-handler.d.ts +0 -34
  525. package/dist/host/cookie-handler.d.ts.map +0 -1
  526. package/dist/host/cookie-handler.js +0 -124
  527. package/dist/host/cookie-handler.js.map +0 -1
  528. package/dist/host/errors.d.ts +0 -56
  529. package/dist/host/errors.d.ts.map +0 -1
  530. package/dist/host/errors.js +0 -79
  531. package/dist/host/errors.js.map +0 -1
  532. package/dist/host/index.d.ts +0 -29
  533. package/dist/host/index.d.ts.map +0 -1
  534. package/dist/host/index.js +0 -32
  535. package/dist/host/index.js.map +0 -1
  536. package/dist/host/pattern-matcher.d.ts +0 -36
  537. package/dist/host/pattern-matcher.d.ts.map +0 -1
  538. package/dist/host/pattern-matcher.js +0 -172
  539. package/dist/host/pattern-matcher.js.map +0 -1
  540. package/dist/host/router.d.ts +0 -26
  541. package/dist/host/router.d.ts.map +0 -1
  542. package/dist/host/router.js +0 -218
  543. package/dist/host/router.js.map +0 -1
  544. package/dist/host/testing.d.ts +0 -36
  545. package/dist/host/testing.d.ts.map +0 -1
  546. package/dist/host/testing.js +0 -55
  547. package/dist/host/testing.js.map +0 -1
  548. package/dist/host/types.d.ts +0 -115
  549. package/dist/host/types.d.ts.map +0 -1
  550. package/dist/host/types.js +0 -7
  551. package/dist/host/types.js.map +0 -1
  552. package/dist/host/utils.d.ts +0 -21
  553. package/dist/host/utils.d.ts.map +0 -1
  554. package/dist/host/utils.js +0 -23
  555. package/dist/host/utils.js.map +0 -1
  556. package/dist/href-client.d.ts +0 -131
  557. package/dist/href-client.d.ts.map +0 -1
  558. package/dist/href-client.js +0 -64
  559. package/dist/href-client.js.map +0 -1
  560. package/dist/href-context.d.ts +0 -29
  561. package/dist/href-context.d.ts.map +0 -1
  562. package/dist/href-context.js +0 -21
  563. package/dist/href-context.js.map +0 -1
  564. package/dist/index.d.ts +0 -73
  565. package/dist/index.d.ts.map +0 -1
  566. package/dist/index.js +0 -91
  567. package/dist/index.js.map +0 -1
  568. package/dist/index.rsc.d.ts +0 -32
  569. package/dist/index.rsc.d.ts.map +0 -1
  570. package/dist/index.rsc.js +0 -40
  571. package/dist/index.rsc.js.map +0 -1
  572. package/dist/internal-debug.d.ts +0 -2
  573. package/dist/internal-debug.d.ts.map +0 -1
  574. package/dist/internal-debug.js +0 -5
  575. package/dist/internal-debug.js.map +0 -1
  576. package/dist/loader.d.ts +0 -14
  577. package/dist/loader.d.ts.map +0 -1
  578. package/dist/loader.js +0 -20
  579. package/dist/loader.js.map +0 -1
  580. package/dist/loader.rsc.d.ts +0 -19
  581. package/dist/loader.rsc.d.ts.map +0 -1
  582. package/dist/loader.rsc.js +0 -99
  583. package/dist/loader.rsc.js.map +0 -1
  584. package/dist/network-error-thrower.d.ts +0 -17
  585. package/dist/network-error-thrower.d.ts.map +0 -1
  586. package/dist/network-error-thrower.js +0 -14
  587. package/dist/network-error-thrower.js.map +0 -1
  588. package/dist/outlet-context.d.ts +0 -13
  589. package/dist/outlet-context.d.ts.map +0 -1
  590. package/dist/outlet-context.js +0 -3
  591. package/dist/outlet-context.js.map +0 -1
  592. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  593. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  594. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  595. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  596. package/dist/prerender/param-hash.d.ts +0 -16
  597. package/dist/prerender/param-hash.d.ts.map +0 -1
  598. package/dist/prerender/param-hash.js +0 -36
  599. package/dist/prerender/param-hash.js.map +0 -1
  600. package/dist/prerender/store.d.ts +0 -38
  601. package/dist/prerender/store.d.ts.map +0 -1
  602. package/dist/prerender/store.js +0 -61
  603. package/dist/prerender/store.js.map +0 -1
  604. package/dist/prerender.d.ts +0 -66
  605. package/dist/prerender.d.ts.map +0 -1
  606. package/dist/prerender.js +0 -57
  607. package/dist/prerender.js.map +0 -1
  608. package/dist/reverse.d.ts +0 -196
  609. package/dist/reverse.d.ts.map +0 -1
  610. package/dist/reverse.js +0 -78
  611. package/dist/reverse.js.map +0 -1
  612. package/dist/root-error-boundary.d.ts +0 -33
  613. package/dist/root-error-boundary.d.ts.map +0 -1
  614. package/dist/root-error-boundary.js +0 -165
  615. package/dist/root-error-boundary.js.map +0 -1
  616. package/dist/route-content-wrapper.d.ts +0 -46
  617. package/dist/route-content-wrapper.d.ts.map +0 -1
  618. package/dist/route-content-wrapper.js +0 -77
  619. package/dist/route-content-wrapper.js.map +0 -1
  620. package/dist/route-definition.d.ts +0 -421
  621. package/dist/route-definition.d.ts.map +0 -1
  622. package/dist/route-definition.js +0 -868
  623. package/dist/route-definition.js.map +0 -1
  624. package/dist/route-map-builder.d.ts +0 -155
  625. package/dist/route-map-builder.d.ts.map +0 -1
  626. package/dist/route-map-builder.js +0 -237
  627. package/dist/route-map-builder.js.map +0 -1
  628. package/dist/route-types.d.ts +0 -165
  629. package/dist/route-types.d.ts.map +0 -1
  630. package/dist/route-types.js +0 -7
  631. package/dist/route-types.js.map +0 -1
  632. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  633. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  634. package/dist/router/__tests__/handler-context.test.js +0 -65
  635. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  636. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  637. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  638. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  639. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  640. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  641. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  642. package/dist/router/__tests__/match-context.test.js +0 -92
  643. package/dist/router/__tests__/match-context.test.js.map +0 -1
  644. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  645. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  646. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  647. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  648. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  649. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  650. package/dist/router/__tests__/match-result.test.js +0 -457
  651. package/dist/router/__tests__/match-result.test.js.map +0 -1
  652. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  653. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  654. package/dist/router/__tests__/on-error.test.js +0 -678
  655. package/dist/router/__tests__/on-error.test.js.map +0 -1
  656. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  657. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  658. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  659. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  660. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  661. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  662. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  663. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  664. package/dist/router/error-handling.d.ts +0 -77
  665. package/dist/router/error-handling.d.ts.map +0 -1
  666. package/dist/router/error-handling.js +0 -202
  667. package/dist/router/error-handling.js.map +0 -1
  668. package/dist/router/handler-context.d.ts +0 -20
  669. package/dist/router/handler-context.d.ts.map +0 -1
  670. package/dist/router/handler-context.js +0 -198
  671. package/dist/router/handler-context.js.map +0 -1
  672. package/dist/router/intercept-resolution.d.ts +0 -66
  673. package/dist/router/intercept-resolution.d.ts.map +0 -1
  674. package/dist/router/intercept-resolution.js +0 -246
  675. package/dist/router/intercept-resolution.js.map +0 -1
  676. package/dist/router/loader-resolution.d.ts +0 -64
  677. package/dist/router/loader-resolution.d.ts.map +0 -1
  678. package/dist/router/loader-resolution.js +0 -284
  679. package/dist/router/loader-resolution.js.map +0 -1
  680. package/dist/router/logging.d.ts +0 -15
  681. package/dist/router/logging.d.ts.map +0 -1
  682. package/dist/router/logging.js +0 -99
  683. package/dist/router/logging.js.map +0 -1
  684. package/dist/router/manifest.d.ts +0 -22
  685. package/dist/router/manifest.d.ts.map +0 -1
  686. package/dist/router/manifest.js +0 -181
  687. package/dist/router/manifest.js.map +0 -1
  688. package/dist/router/match-api.d.ts +0 -35
  689. package/dist/router/match-api.d.ts.map +0 -1
  690. package/dist/router/match-api.js +0 -406
  691. package/dist/router/match-api.js.map +0 -1
  692. package/dist/router/match-context.d.ts +0 -206
  693. package/dist/router/match-context.d.ts.map +0 -1
  694. package/dist/router/match-context.js +0 -17
  695. package/dist/router/match-context.js.map +0 -1
  696. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  697. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  698. package/dist/router/match-middleware/background-revalidation.js +0 -75
  699. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  700. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  701. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  702. package/dist/router/match-middleware/cache-lookup.js +0 -257
  703. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  704. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  705. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  706. package/dist/router/match-middleware/cache-store.js +0 -108
  707. package/dist/router/match-middleware/cache-store.js.map +0 -1
  708. package/dist/router/match-middleware/index.d.ts +0 -81
  709. package/dist/router/match-middleware/index.d.ts.map +0 -1
  710. package/dist/router/match-middleware/index.js +0 -80
  711. package/dist/router/match-middleware/index.js.map +0 -1
  712. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  713. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  714. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  715. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  716. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  717. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  718. package/dist/router/match-middleware/segment-resolution.js +0 -53
  719. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  720. package/dist/router/match-pipelines.d.ts +0 -147
  721. package/dist/router/match-pipelines.d.ts.map +0 -1
  722. package/dist/router/match-pipelines.js +0 -82
  723. package/dist/router/match-pipelines.js.map +0 -1
  724. package/dist/router/match-result.d.ts +0 -126
  725. package/dist/router/match-result.d.ts.map +0 -1
  726. package/dist/router/match-result.js +0 -93
  727. package/dist/router/match-result.js.map +0 -1
  728. package/dist/router/metrics.d.ts +0 -20
  729. package/dist/router/metrics.d.ts.map +0 -1
  730. package/dist/router/metrics.js +0 -47
  731. package/dist/router/metrics.js.map +0 -1
  732. package/dist/router/middleware.d.ts +0 -249
  733. package/dist/router/middleware.d.ts.map +0 -1
  734. package/dist/router/middleware.js +0 -434
  735. package/dist/router/middleware.js.map +0 -1
  736. package/dist/router/middleware.test.d.ts +0 -2
  737. package/dist/router/middleware.test.d.ts.map +0 -1
  738. package/dist/router/middleware.test.js +0 -816
  739. package/dist/router/middleware.test.js.map +0 -1
  740. package/dist/router/pattern-matching.d.ts +0 -149
  741. package/dist/router/pattern-matching.d.ts.map +0 -1
  742. package/dist/router/pattern-matching.js +0 -349
  743. package/dist/router/pattern-matching.js.map +0 -1
  744. package/dist/router/revalidation.d.ts +0 -44
  745. package/dist/router/revalidation.d.ts.map +0 -1
  746. package/dist/router/revalidation.js +0 -147
  747. package/dist/router/revalidation.js.map +0 -1
  748. package/dist/router/router-context.d.ts +0 -135
  749. package/dist/router/router-context.d.ts.map +0 -1
  750. package/dist/router/router-context.js +0 -36
  751. package/dist/router/router-context.js.map +0 -1
  752. package/dist/router/segment-resolution.d.ts +0 -127
  753. package/dist/router/segment-resolution.d.ts.map +0 -1
  754. package/dist/router/segment-resolution.js +0 -919
  755. package/dist/router/segment-resolution.js.map +0 -1
  756. package/dist/router/trie-matching.d.ts +0 -40
  757. package/dist/router/trie-matching.d.ts.map +0 -1
  758. package/dist/router/trie-matching.js +0 -127
  759. package/dist/router/trie-matching.js.map +0 -1
  760. package/dist/router/types.d.ts +0 -136
  761. package/dist/router/types.d.ts.map +0 -1
  762. package/dist/router/types.js +0 -7
  763. package/dist/router/types.js.map +0 -1
  764. package/dist/router.d.ts +0 -753
  765. package/dist/router.d.ts.map +0 -1
  766. package/dist/router.gen.d.ts +0 -6
  767. package/dist/router.gen.d.ts.map +0 -1
  768. package/dist/router.gen.js +0 -6
  769. package/dist/router.gen.js.map +0 -1
  770. package/dist/router.js +0 -1304
  771. package/dist/router.js.map +0 -1
  772. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  773. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  774. package/dist/rsc/__tests__/helpers.test.js +0 -140
  775. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  776. package/dist/rsc/handler.d.ts +0 -45
  777. package/dist/rsc/handler.d.ts.map +0 -1
  778. package/dist/rsc/handler.js +0 -1172
  779. package/dist/rsc/handler.js.map +0 -1
  780. package/dist/rsc/helpers.d.ts +0 -16
  781. package/dist/rsc/helpers.d.ts.map +0 -1
  782. package/dist/rsc/helpers.js +0 -55
  783. package/dist/rsc/helpers.js.map +0 -1
  784. package/dist/rsc/index.d.ts +0 -22
  785. package/dist/rsc/index.d.ts.map +0 -1
  786. package/dist/rsc/index.js +0 -23
  787. package/dist/rsc/index.js.map +0 -1
  788. package/dist/rsc/nonce.d.ts +0 -9
  789. package/dist/rsc/nonce.d.ts.map +0 -1
  790. package/dist/rsc/nonce.js +0 -18
  791. package/dist/rsc/nonce.js.map +0 -1
  792. package/dist/rsc/types.d.ts +0 -206
  793. package/dist/rsc/types.d.ts.map +0 -1
  794. package/dist/rsc/types.js +0 -8
  795. package/dist/rsc/types.js.map +0 -1
  796. package/dist/search-params.d.ts +0 -103
  797. package/dist/search-params.d.ts.map +0 -1
  798. package/dist/search-params.js +0 -74
  799. package/dist/search-params.js.map +0 -1
  800. package/dist/segment-system.d.ts +0 -75
  801. package/dist/segment-system.d.ts.map +0 -1
  802. package/dist/segment-system.js +0 -336
  803. package/dist/segment-system.js.map +0 -1
  804. package/dist/server/context.d.ts +0 -245
  805. package/dist/server/context.d.ts.map +0 -1
  806. package/dist/server/context.js +0 -197
  807. package/dist/server/context.js.map +0 -1
  808. package/dist/server/fetchable-loader-store.d.ts +0 -18
  809. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  810. package/dist/server/fetchable-loader-store.js +0 -18
  811. package/dist/server/fetchable-loader-store.js.map +0 -1
  812. package/dist/server/handle-store.d.ts +0 -85
  813. package/dist/server/handle-store.d.ts.map +0 -1
  814. package/dist/server/handle-store.js +0 -142
  815. package/dist/server/handle-store.js.map +0 -1
  816. package/dist/server/loader-registry.d.ts +0 -55
  817. package/dist/server/loader-registry.d.ts.map +0 -1
  818. package/dist/server/loader-registry.js +0 -132
  819. package/dist/server/loader-registry.js.map +0 -1
  820. package/dist/server/request-context.d.ts +0 -226
  821. package/dist/server/request-context.d.ts.map +0 -1
  822. package/dist/server/request-context.js +0 -290
  823. package/dist/server/request-context.js.map +0 -1
  824. package/dist/server/root-layout.d.ts +0 -4
  825. package/dist/server/root-layout.d.ts.map +0 -1
  826. package/dist/server/root-layout.js +0 -5
  827. package/dist/server/root-layout.js.map +0 -1
  828. package/dist/server.d.ts +0 -15
  829. package/dist/server.d.ts.map +0 -1
  830. package/dist/server.js +0 -20
  831. package/dist/server.js.map +0 -1
  832. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  833. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  834. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  835. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  836. package/dist/ssr/index.d.ts +0 -98
  837. package/dist/ssr/index.d.ts.map +0 -1
  838. package/dist/ssr/index.js +0 -158
  839. package/dist/ssr/index.js.map +0 -1
  840. package/dist/static-handler.d.ts +0 -50
  841. package/dist/static-handler.d.ts.map +0 -1
  842. package/dist/static-handler.gen.d.ts +0 -5
  843. package/dist/static-handler.gen.d.ts.map +0 -1
  844. package/dist/static-handler.gen.js +0 -5
  845. package/dist/static-handler.gen.js.map +0 -1
  846. package/dist/static-handler.js +0 -29
  847. package/dist/static-handler.js.map +0 -1
  848. package/dist/theme/ThemeProvider.d.ts +0 -20
  849. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  850. package/dist/theme/ThemeProvider.js +0 -240
  851. package/dist/theme/ThemeProvider.js.map +0 -1
  852. package/dist/theme/ThemeScript.d.ts +0 -48
  853. package/dist/theme/ThemeScript.d.ts.map +0 -1
  854. package/dist/theme/ThemeScript.js +0 -13
  855. package/dist/theme/ThemeScript.js.map +0 -1
  856. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  857. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  858. package/dist/theme/__tests__/theme.test.js +0 -103
  859. package/dist/theme/__tests__/theme.test.js.map +0 -1
  860. package/dist/theme/constants.d.ts +0 -29
  861. package/dist/theme/constants.d.ts.map +0 -1
  862. package/dist/theme/constants.js +0 -48
  863. package/dist/theme/constants.js.map +0 -1
  864. package/dist/theme/index.d.ts +0 -31
  865. package/dist/theme/index.d.ts.map +0 -1
  866. package/dist/theme/index.js +0 -36
  867. package/dist/theme/index.js.map +0 -1
  868. package/dist/theme/theme-context.d.ts +0 -40
  869. package/dist/theme/theme-context.d.ts.map +0 -1
  870. package/dist/theme/theme-context.js +0 -60
  871. package/dist/theme/theme-context.js.map +0 -1
  872. package/dist/theme/theme-script.d.ts +0 -27
  873. package/dist/theme/theme-script.d.ts.map +0 -1
  874. package/dist/theme/theme-script.js +0 -147
  875. package/dist/theme/theme-script.js.map +0 -1
  876. package/dist/theme/types.d.ts +0 -163
  877. package/dist/theme/types.d.ts.map +0 -1
  878. package/dist/theme/types.js +0 -11
  879. package/dist/theme/types.js.map +0 -1
  880. package/dist/theme/use-theme.d.ts +0 -12
  881. package/dist/theme/use-theme.d.ts.map +0 -1
  882. package/dist/theme/use-theme.js +0 -40
  883. package/dist/theme/use-theme.js.map +0 -1
  884. package/dist/types.d.ts +0 -1479
  885. package/dist/types.d.ts.map +0 -1
  886. package/dist/types.js +0 -10
  887. package/dist/types.js.map +0 -1
  888. package/dist/urls.d.ts +0 -441
  889. package/dist/urls.d.ts.map +0 -1
  890. package/dist/urls.gen.d.ts +0 -8
  891. package/dist/urls.gen.d.ts.map +0 -1
  892. package/dist/urls.gen.js +0 -8
  893. package/dist/urls.gen.js.map +0 -1
  894. package/dist/urls.js +0 -443
  895. package/dist/urls.js.map +0 -1
  896. package/dist/use-loader.d.ts +0 -127
  897. package/dist/use-loader.d.ts.map +0 -1
  898. package/dist/use-loader.js +0 -237
  899. package/dist/use-loader.js.map +0 -1
  900. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  901. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  902. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  903. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  904. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  905. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  906. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  907. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  908. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  909. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  910. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  911. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  912. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  913. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  914. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  915. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  916. package/dist/vite/ast-handler-extract.d.ts +0 -49
  917. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  918. package/dist/vite/ast-handler-extract.js +0 -249
  919. package/dist/vite/ast-handler-extract.js.map +0 -1
  920. package/dist/vite/expose-action-id.d.ts +0 -19
  921. package/dist/vite/expose-action-id.d.ts.map +0 -1
  922. package/dist/vite/expose-action-id.js +0 -250
  923. package/dist/vite/expose-action-id.js.map +0 -1
  924. package/dist/vite/expose-id-utils.d.ts +0 -69
  925. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  926. package/dist/vite/expose-id-utils.js +0 -289
  927. package/dist/vite/expose-id-utils.js.map +0 -1
  928. package/dist/vite/expose-internal-ids.d.ts +0 -22
  929. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  930. package/dist/vite/expose-internal-ids.js +0 -886
  931. package/dist/vite/expose-internal-ids.js.map +0 -1
  932. package/dist/vite/index.d.ts +0 -149
  933. package/dist/vite/index.d.ts.map +0 -1
  934. package/dist/vite/index.js.map +0 -1
  935. package/dist/vite/index.named-routes.gen.ts +0 -103
  936. package/dist/vite/package-resolution.d.ts +0 -43
  937. package/dist/vite/package-resolution.d.ts.map +0 -1
  938. package/dist/vite/package-resolution.js +0 -112
  939. package/dist/vite/package-resolution.js.map +0 -1
  940. package/dist/vite/virtual-entries.d.ts +0 -25
  941. package/dist/vite/virtual-entries.d.ts.map +0 -1
  942. package/dist/vite/virtual-entries.js +0 -110
  943. package/dist/vite/virtual-entries.js.map +0 -1
@@ -67,10 +67,11 @@
67
67
  * Keep if:
68
68
  * - component !== null (needs rendering)
69
69
  * - type === "loader" (carries data even with null component)
70
+ * - client doesn't have the segment (structurally required parent node)
70
71
  *
71
72
  * Skip if:
72
- * - component === null AND type !== "loader"
73
- * - (Client already has this segment's UI)
73
+ * - component === null AND type !== "loader" AND client has it cached
74
+ * - (Revalidation skip — client already has this segment's UI)
74
75
  *
75
76
  *
76
77
  * INTERCEPT HANDLING
@@ -109,6 +110,7 @@
109
110
  import type { MatchResult, ResolvedSegment } from "../types.js";
110
111
  import type { MatchContext, MatchPipelineState } from "./match-context.js";
111
112
  import { debugLog } from "./logging.js";
113
+ import { appendMetric } from "./metrics.js";
112
114
 
113
115
  /**
114
116
  * Collect all segments from an async generator
@@ -123,6 +125,69 @@ export async function collectSegments(
123
125
  return segments;
124
126
  }
125
127
 
128
+ /**
129
+ * Deduplicate inherited loader segments by loaderId.
130
+ *
131
+ * When a route has loaders and a child layout has parallel slots, the same
132
+ * loader is resolved twice: once for the route and once inherited into the
133
+ * layout (tagged with `_inherited`). The inherited copy is only needed when
134
+ * the route uses `loading()` — in that case, the loader data is inside a
135
+ * LoaderBoundary/Suspense that parallel slots can't reach through. Without
136
+ * loading(), useLoader() traverses parent contexts and finds the data.
137
+ */
138
+ function deduplicateLoaderSegments(
139
+ segments: ResolvedSegment[],
140
+ logPrefix: string,
141
+ ): ResolvedSegment[] {
142
+ // First pass: collect loaderIds of original (non-inherited) segments
143
+ // and whether their parent entry uses loading()
144
+ const originalLoaders = new Set<string>();
145
+ const loadersWithLoading = new Set<string>();
146
+ for (const s of segments) {
147
+ if (s.type === "loader" && s.loaderId && !s._inherited) {
148
+ originalLoaders.add(s.loaderId);
149
+ // If the segment has a sibling with loading, the parent uses loading()
150
+ // We detect this by checking if any non-loader segment in the same
151
+ // namespace has loading defined
152
+ }
153
+ }
154
+ // Check if any layout/route segment has loading — if a loader's namespace
155
+ // matches a segment with loading, the inherited copy is needed
156
+ for (const s of segments) {
157
+ if (s.type !== "loader" && s.loading !== undefined && s.loading !== false) {
158
+ // Find loaders in this namespace
159
+ for (const l of segments) {
160
+ if (l.type === "loader" && l.namespace === s.namespace && l.loaderId) {
161
+ loadersWithLoading.add(l.loaderId);
162
+ }
163
+ }
164
+ }
165
+ }
166
+
167
+ const result: ResolvedSegment[] = [];
168
+ let dedupCount = 0;
169
+
170
+ for (const s of segments) {
171
+ if (
172
+ s.type === "loader" &&
173
+ s.loaderId &&
174
+ s._inherited &&
175
+ originalLoaders.has(s.loaderId) &&
176
+ !loadersWithLoading.has(s.loaderId)
177
+ ) {
178
+ dedupCount++;
179
+ continue;
180
+ }
181
+ result.push(s);
182
+ }
183
+
184
+ if (dedupCount > 0) {
185
+ debugLog(logPrefix, `deduped ${dedupCount} inherited loader segment(s)`);
186
+ }
187
+
188
+ return result;
189
+ }
190
+
126
191
  /**
127
192
  * Build the final MatchResult from collected segments and context
128
193
  */
@@ -167,13 +232,23 @@ export function buildMatchResult<TEnv>(
167
232
  // Deduplicate allIds (defense-in-depth for partial match path)
168
233
  allIds = [...new Set(allIds)];
169
234
 
170
- // Filter out segments with null components (client already has them)
171
- // BUT always include loader segments - they carry data even with null component
235
+ // Filter out null-component segments only when the client already has
236
+ // them cached (revalidation skip). If the client doesn't have the segment,
237
+ // it must be included even with null component — it's structurally required
238
+ // as a parent node for child layouts/parallels to reconcile against.
239
+ // Loader segments are always included as they carry data.
240
+ const clientIdSet = new Set(ctx.clientSegmentIds);
172
241
  segmentsToRender = allSegments.filter(
173
- (s) => s.component !== null || s.type === "loader",
242
+ (s) =>
243
+ s.component !== null || s.type === "loader" || !clientIdSet.has(s.id),
174
244
  );
175
245
  }
176
246
 
247
+ const dedupedSegments = deduplicateLoaderSegments(
248
+ segmentsToRender,
249
+ logPrefix,
250
+ );
251
+
177
252
  debugLog(logPrefix, "all segments", {
178
253
  segments: allSegments.map((s) => ({
179
254
  id: s.id,
@@ -182,13 +257,23 @@ export function buildMatchResult<TEnv>(
182
257
  })),
183
258
  });
184
259
  debugLog(logPrefix, "segments to render", {
185
- segmentIds: segmentsToRender.map((s) => s.id),
260
+ segmentIds: dedupedSegments.map((s) => s.id),
186
261
  });
187
262
 
263
+ // Remove deduped loader IDs from matched so the client doesn't treat
264
+ // them as missing segments and trigger a fallback refetch.
265
+ const removedIds = new Set(
266
+ segmentsToRender
267
+ .filter((s) => !dedupedSegments.includes(s))
268
+ .map((s) => s.id),
269
+ );
270
+ const matchedIds =
271
+ removedIds.size > 0 ? allIds.filter((id) => !removedIds.has(id)) : allIds;
272
+
188
273
  return {
189
- segments: segmentsToRender,
190
- matched: allIds,
191
- diff: segmentsToRender.map((s) => s.id),
274
+ segments: dedupedSegments,
275
+ matched: matchedIds,
276
+ diff: dedupedSegments.map((s) => s.id),
192
277
  params: ctx.matched.params,
193
278
  routeName: ctx.routeKey,
194
279
  slots: Object.keys(state.slots).length > 0 ? state.slots : undefined,
@@ -210,10 +295,19 @@ export async function collectMatchResult<TEnv>(
210
295
  ): Promise<MatchResult> {
211
296
  const allSegments = await collectSegments(pipeline);
212
297
 
298
+ const buildStart = performance.now();
299
+
213
300
  // Update state with collected segments if not already set
214
301
  if (state.segments.length === 0) {
215
302
  state.segments = allSegments;
216
303
  }
217
304
 
218
- return buildMatchResult(allSegments, ctx, state);
305
+ const result = buildMatchResult(allSegments, ctx, state);
306
+ appendMetric(
307
+ ctx.metricsStore,
308
+ "collect-result",
309
+ buildStart,
310
+ performance.now() - buildStart,
311
+ );
312
+ return result;
219
313
  }
@@ -15,7 +15,12 @@ function formatMs(value: number): string {
15
15
  }
16
16
 
17
17
  function sortMetrics(metrics: PerformanceMetric[]): PerformanceMetric[] {
18
- return [...metrics].sort((a, b) => a.startTime - b.startTime);
18
+ return [...metrics].sort((a, b) => {
19
+ // handler:total always goes last (it wraps everything)
20
+ if (a.label === "handler:total") return 1;
21
+ if (b.label === "handler:total") return -1;
22
+ return a.startTime - b.startTime;
23
+ });
19
24
  }
20
25
 
21
26
  interface Span {
@@ -27,8 +27,12 @@ type GetVariableFn = {
27
27
  * Set variable function type
28
28
  */
29
29
  type SetVariableFn = {
30
- <T>(contextVar: ContextVar<T>, value: T): void;
31
- <K extends keyof DefaultVars>(key: K, value: DefaultVars[K]): void;
30
+ <T>(contextVar: ContextVar<T>, value: T, options?: { cache?: boolean }): void;
31
+ <K extends keyof DefaultVars>(
32
+ key: K,
33
+ value: DefaultVars[K],
34
+ options?: { cache?: boolean },
35
+ ): void;
32
36
  };
33
37
 
34
38
  /**
@@ -91,12 +95,6 @@ export interface MiddlewareContext<
91
95
  /** Set a context variable (shared with route handlers) */
92
96
  set: SetVariableFn;
93
97
 
94
- /**
95
- * Middleware-injected variables.
96
- * Same shared dictionary as `ctx.get()`/`ctx.set()`.
97
- */
98
- var: DefaultVars;
99
-
100
98
  /**
101
99
  * Set a response header - can be called before or after `next()`.
102
100
  *
@@ -21,6 +21,7 @@ import type {
21
21
  import { _getRequestContext } from "../server/request-context.js";
22
22
  import { isAutoGeneratedRouteName } from "../route-name.js";
23
23
  import { appendMetric, createMetricsStore } from "./metrics.js";
24
+ import { stripInternalParams } from "./handler-context.js";
24
25
 
25
26
  // Re-export types and cookie utilities for backward compatibility
26
27
  export type {
@@ -147,7 +148,7 @@ export function createMiddlewareContext<TEnv>(
147
148
  search?: Record<string, unknown>,
148
149
  ) => string,
149
150
  ): MiddlewareContext<TEnv> {
150
- const url = new URL(request.url);
151
+ const url = stripInternalParams(new URL(request.url));
151
152
 
152
153
  // Track the initial response to detect pre/post-next() phase.
153
154
  // Before next(): responseHolder.response === initialResponse (the stub).
@@ -203,12 +204,9 @@ export function createMiddlewareContext<TEnv>(
203
204
  get: ((keyOrVar: any) =>
204
205
  contextGet(variables, keyOrVar)) as MiddlewareContext<TEnv>["get"],
205
206
 
206
- set: ((keyOrVar: any, value: unknown) => {
207
- contextSet(variables, keyOrVar, value);
207
+ set: ((keyOrVar: any, value: unknown, options?: any) => {
208
+ contextSet(variables, keyOrVar, value, options);
208
209
  }) as MiddlewareContext<TEnv>["set"],
209
-
210
- var: variables as MiddlewareContext<TEnv>["var"],
211
-
212
210
  header(name: string, value: string): void {
213
211
  // Before next(): delegate to shared RequestContext stub
214
212
  if (isPreNext()) {
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Navigation Snapshot
3
+ *
4
+ * Pure data type representing the navigation-specific state for partial requests.
5
+ * Consolidates the header parsing, previous-route matching, intercept-context
6
+ * detection, and segment ID filtering that previously lived inline in
7
+ * createMatchContextForPartial (match-api.ts).
8
+ *
9
+ * resolveNavigation() is the factory: given a request + URL + current route key,
10
+ * it returns a NavigationSnapshot (or null if no previous URL).
11
+ */
12
+
13
+ import type { RouteMatchResult } from "./pattern-matching.js";
14
+
15
+ /**
16
+ * Snapshot of navigation state for a partial (navigation/action) request.
17
+ *
18
+ * Contains the "where are we coming from?" data: previous route, intercept
19
+ * source, client segment state, and derived flags.
20
+ */
21
+ export interface NavigationSnapshot {
22
+ /** Previous page URL (from X-RSC-Router-Client-Path or Referer) */
23
+ prevUrl: URL;
24
+ /** Params from the previous route match */
25
+ prevParams: Record<string, string>;
26
+ /** Previous route match result (null if prev URL doesn't match any route) */
27
+ prevMatch: RouteMatchResult | null;
28
+
29
+ /** URL used as intercept context source */
30
+ interceptContextUrl: URL;
31
+ /** Route match for the intercept context URL */
32
+ interceptContextMatch: RouteMatchResult | null;
33
+
34
+ /** Raw segment IDs the client currently has */
35
+ clientSegmentIds: string[];
36
+ /** Set version for O(1) lookup */
37
+ clientSegmentSet: Set<string>;
38
+ /** Segment IDs filtered to remove parallel (.@) and loader (D\d+.) entries */
39
+ filteredSegmentIds: string[];
40
+
41
+ /** Whether client considers its cache stale */
42
+ stale: boolean;
43
+
44
+ /** Whether the intercept context route is the same as the current route */
45
+ isSameRouteNavigation: boolean;
46
+
47
+ /** Effective "from" URL (intercept source URL when present, else prevUrl) */
48
+ effectiveFromUrl: URL;
49
+ /** Effective "from" match (intercept source match when present, else prevMatch) */
50
+ effectiveFromMatch: RouteMatchResult | null;
51
+
52
+ /** Whether an intercept source header was present */
53
+ hasInterceptSource: boolean;
54
+
55
+ /** Whether an HMR request header was present */
56
+ isHmr: boolean;
57
+ }
58
+
59
+ export interface ResolveNavigationDeps {
60
+ findMatch: (pathname: string) => RouteMatchResult | null;
61
+ }
62
+
63
+ /**
64
+ * Resolve navigation state from a partial request.
65
+ *
66
+ * Returns null if no previous URL is available (required for partial navigation).
67
+ *
68
+ * @param request - The incoming HTTP request
69
+ * @param url - Parsed URL of the request
70
+ * @param currentRouteKey - Route key of the current (target) route match
71
+ * @param deps - Dependencies (findMatch)
72
+ */
73
+ export function resolveNavigation(
74
+ request: Request,
75
+ url: URL,
76
+ currentRouteKey: string,
77
+ deps: ResolveNavigationDeps,
78
+ ): NavigationSnapshot | null {
79
+ // Parse client state from RSC request params/headers
80
+ const clientSegmentIds =
81
+ url.searchParams.get("_rsc_segments")?.split(",").filter(Boolean) || [];
82
+ const stale = url.searchParams.get("_rsc_stale") === "true";
83
+ const previousUrl =
84
+ request.headers.get("X-RSC-Router-Client-Path") ||
85
+ request.headers.get("Referer");
86
+ const interceptSourceUrl = request.headers.get(
87
+ "X-RSC-Router-Intercept-Source",
88
+ );
89
+ const isHmr = !!request.headers.get("X-RSC-HMR");
90
+
91
+ if (!previousUrl) {
92
+ return null;
93
+ }
94
+
95
+ // Parse previous URL
96
+ let prevUrl: URL;
97
+ try {
98
+ prevUrl = new URL(previousUrl, url.origin);
99
+ } catch {
100
+ return null;
101
+ }
102
+
103
+ // Parse intercept context URL
104
+ let interceptContextUrl: URL;
105
+ try {
106
+ interceptContextUrl = interceptSourceUrl
107
+ ? new URL(interceptSourceUrl, url.origin)
108
+ : prevUrl;
109
+ } catch {
110
+ interceptContextUrl = prevUrl;
111
+ }
112
+
113
+ // Match previous and intercept context routes
114
+ const prevMatch = deps.findMatch(prevUrl.pathname);
115
+ const prevParams = prevMatch?.params || {};
116
+ const interceptContextMatch = interceptSourceUrl
117
+ ? deps.findMatch(interceptContextUrl.pathname)
118
+ : prevMatch;
119
+
120
+ // Derived state
121
+ const isSameRouteNavigation = !!(
122
+ interceptContextMatch && interceptContextMatch.routeKey === currentRouteKey
123
+ );
124
+
125
+ const hasInterceptSource = !!interceptSourceUrl;
126
+ const effectiveFromUrl = hasInterceptSource ? interceptContextUrl : prevUrl;
127
+ const effectiveFromMatch = hasInterceptSource
128
+ ? interceptContextMatch
129
+ : prevMatch;
130
+
131
+ // Filter segment IDs: remove parallel (.@) and loader (D\d+.) entries
132
+ const filteredSegmentIds = clientSegmentIds.filter((id) => {
133
+ if (id.includes(".@")) return false;
134
+ if (/D\d+\./.test(id)) return false;
135
+ return true;
136
+ });
137
+
138
+ const clientSegmentSet = new Set(clientSegmentIds);
139
+
140
+ return {
141
+ prevUrl,
142
+ prevParams,
143
+ prevMatch,
144
+ interceptContextUrl,
145
+ interceptContextMatch,
146
+ clientSegmentIds,
147
+ clientSegmentSet,
148
+ filteredSegmentIds,
149
+ stale,
150
+ isSameRouteNavigation,
151
+ effectiveFromUrl,
152
+ effectiveFromMatch,
153
+ hasInterceptSource,
154
+ isHmr,
155
+ };
156
+ }
157
+
158
+ /**
159
+ * Test helper: create a NavigationSnapshot with sensible defaults and overrides.
160
+ */
161
+ export function createNavigationSnapshot(
162
+ overrides?: Partial<NavigationSnapshot>,
163
+ ): NavigationSnapshot {
164
+ const defaultUrl = new URL("http://localhost/");
165
+ return {
166
+ prevUrl: defaultUrl,
167
+ prevParams: {},
168
+ prevMatch: null,
169
+ interceptContextUrl: defaultUrl,
170
+ interceptContextMatch: null,
171
+ clientSegmentIds: [],
172
+ clientSegmentSet: new Set(),
173
+ filteredSegmentIds: [],
174
+ stale: false,
175
+ isSameRouteNavigation: false,
176
+ effectiveFromUrl: defaultUrl,
177
+ effectiveFromMatch: null,
178
+ hasInterceptSource: false,
179
+ isHmr: false,
180
+ ...overrides,
181
+ };
182
+ }
@@ -54,6 +54,9 @@ export async function matchForPrerender<TEnv = any>(
54
54
  deps: PrerenderMatchDeps<TEnv>,
55
55
  buildVars?: Record<string, any>,
56
56
  isPassthroughRoute?: boolean,
57
+ buildEnv?: TEnv,
58
+ /** Dev-only: check getParams() for passthrough routes to skip unknown params. */
59
+ devMode?: boolean,
57
60
  ): Promise<{
58
61
  segments: SerializedSegmentData[];
59
62
  handles: Record<string, SegmentHandleData>;
@@ -90,21 +93,106 @@ export async function matchForPrerender<TEnv = any>(
90
93
  entries.push(entry);
91
94
  }
92
95
 
96
+ // 3b. Dev-mode passthrough shortcut: if the route is a Passthrough route
97
+ // and has getParams(), check if the matched params are in the known list.
98
+ // In production, only known params are pre-rendered; unknown params fall
99
+ // through to the live handler. Mirror that behavior in dev mode to avoid
100
+ // rendering unknown params with build: true.
101
+ // Vars collected from getParams() probe — merged into render context below.
102
+ let devProbeBuildVars: Record<string, any> | undefined;
103
+
104
+ if (devMode && matchedPassthroughRoute) {
105
+ const routeEntry = entries.find(
106
+ (
107
+ e,
108
+ ): e is EntryData & {
109
+ type: "route";
110
+ prerenderDef: { getParams: (ctx: any) => Promise<any[]> | any[] };
111
+ } =>
112
+ e.type === "route" &&
113
+ !!(e as any).isPassthrough &&
114
+ !!(e as any).prerenderDef?.getParams,
115
+ );
116
+ if (routeEntry) {
117
+ try {
118
+ const probeBuildVars: Record<string, any> = {};
119
+ const knownParamsList = await routeEntry.prerenderDef.getParams({
120
+ build: true as const,
121
+ dev: true,
122
+ set: ((keyOrVar: any, value: any) => {
123
+ contextSet(probeBuildVars, keyOrVar, value);
124
+ }) as any,
125
+ reverse: createReverseFunction(deps.mergedRouteMap),
126
+ get env() {
127
+ if (buildEnv !== undefined) return buildEnv;
128
+ throw new Error(
129
+ "[rsc-router] ctx.env is not available during dev-mode getParams(). " +
130
+ "Configure buildEnv in your rango() plugin options to enable build-time env access.",
131
+ );
132
+ },
133
+ });
134
+ // Compare only the keys returned by getParams — ignore mount params
135
+ // from include() prefixes that aren't part of the handler's params.
136
+ const isKnown = knownParamsList.some((known: Record<string, any>) => {
137
+ const knownKeys = Object.keys(known);
138
+ return knownKeys.every(
139
+ (k) => String(known[k]) === String(matchedParams[k]),
140
+ );
141
+ });
142
+ if (!isKnown) {
143
+ return {
144
+ segments: [],
145
+ handles: {},
146
+ routeName: matched.routeKey,
147
+ params: matchedParams,
148
+ passthrough: true as const,
149
+ };
150
+ }
151
+ // Preserve vars set by getParams() for the render context
152
+ if (
153
+ Object.keys(probeBuildVars).length > 0 ||
154
+ Object.getOwnPropertySymbols(probeBuildVars).length > 0
155
+ ) {
156
+ devProbeBuildVars = probeBuildVars;
157
+ }
158
+ } catch (err: any) {
159
+ // Mirror production semantics (prerender-collection.ts):
160
+ // Skip errors are intentional — treat as passthrough.
161
+ // All other errors propagate so dev surfaces them.
162
+ if (err?.name === "Skip") {
163
+ return {
164
+ segments: [],
165
+ handles: {},
166
+ routeName: matched.routeKey,
167
+ params: matchedParams,
168
+ passthrough: true as const,
169
+ };
170
+ }
171
+ throw err;
172
+ }
173
+ }
174
+ }
175
+
93
176
  // 4. Create handle store for collecting handle data
94
177
  const handleStore = createHandleStore();
95
178
 
96
179
  // 5. Create a minimal request context with the handle store
97
- // Shallow-copy getParams vars so each param set is independent
98
- const variables: Record<string, any> = buildVars ? { ...buildVars } : {};
180
+ // Shallow-copy getParams vars so each param set is independent.
181
+ // In dev mode, merge vars from the getParams() probe if the caller
182
+ // didn't provide buildVars (production passes them from expandPrerenderRoutes).
183
+ const effectiveBuildVars = buildVars ?? devProbeBuildVars;
184
+ const variables: Record<string, any> = effectiveBuildVars
185
+ ? { ...effectiveBuildVars }
186
+ : {};
99
187
  const stubRes = new Response(null, { status: 200 });
100
188
  const minimalRequestContext: RequestContext<TEnv> = {
101
- env: {} as TEnv,
189
+ env: buildEnv ?? ({} as TEnv),
102
190
  request: new Request("http://prerender" + pathname),
103
191
  url: new URL("http://prerender" + pathname),
104
192
  originalUrl: new URL("http://prerender" + pathname),
105
193
  pathname,
106
194
  searchParams: new URLSearchParams(),
107
- var: variables,
195
+ _variables: variables,
108
196
  get: ((keyOrVar: any) => contextGet(variables, keyOrVar)) as any,
109
197
  set: ((keyOrVar: any, value: any) => {
110
198
  contextSet(variables, keyOrVar, value);
@@ -128,6 +216,8 @@ export async function matchForPrerender<TEnv = any>(
128
216
  _onResponseCallbacks: [],
129
217
  setLocationState() {},
130
218
  _locationState: undefined,
219
+ _renderBarrier: Promise.resolve(),
220
+ _resolveRenderBarrier: () => {},
131
221
  _reportedErrors: new WeakSet<object>(),
132
222
  reverse: createReverseFunction(
133
223
  deps.mergedRouteMap,
@@ -140,7 +230,7 @@ export async function matchForPrerender<TEnv = any>(
140
230
  return runWithRequestContext(minimalRequestContext, async () => {
141
231
  // 6. Create prerender context with synthetic URL.
142
232
  // Prerender handlers get params, pathname, url, searchParams, search,
143
- // reverse, and use(handle) but no request, env, headers, or cookies.
233
+ // reverse, use(handle), and optionally env (when buildEnv is configured).
144
234
  const buildCtx = createPrerenderContext<TEnv>(
145
235
  matchedParams,
146
236
  pathname,
@@ -148,6 +238,8 @@ export async function matchForPrerender<TEnv = any>(
148
238
  matched.routeKey,
149
239
  variables,
150
240
  matchedPassthroughRoute,
241
+ buildEnv,
242
+ devMode,
151
243
  );
152
244
 
153
245
  // 7. Wire use() for handles only (loaders throw)
@@ -320,6 +412,8 @@ export async function renderStaticSegment<TEnv = any>(
320
412
  handlerId: string,
321
413
  mergedRouteMap: Record<string, string>,
322
414
  routeName?: string,
415
+ buildEnv?: TEnv,
416
+ devMode?: boolean,
323
417
  ): Promise<{ encoded: string; handles: Record<string, unknown[]> } | null> {
324
418
  const syntheticUrl = new URL("http://prerender/");
325
419
  const syntheticRequest = new Request(syntheticUrl);
@@ -330,13 +424,13 @@ export async function renderStaticSegment<TEnv = any>(
330
424
  // Minimal request context so setupBuildUse can find the HandleStore
331
425
  const stubRes = new Response(null, { status: 200 });
332
426
  const minimalRequestContext: RequestContext<TEnv> = {
333
- env: {} as TEnv,
427
+ env: buildEnv ?? ({} as TEnv),
334
428
  request: syntheticRequest,
335
429
  url: syntheticUrl,
336
430
  originalUrl: syntheticUrl,
337
431
  pathname: "/",
338
432
  searchParams: syntheticUrl.searchParams,
339
- var: {},
433
+ _variables: {},
340
434
  get: () => undefined as any,
341
435
  set: () => {},
342
436
  params: {},
@@ -358,6 +452,8 @@ export async function renderStaticSegment<TEnv = any>(
358
452
  _onResponseCallbacks: [],
359
453
  setLocationState() {},
360
454
  _locationState: undefined,
455
+ _renderBarrier: Promise.resolve(),
456
+ _resolveRenderBarrier: () => {},
361
457
  _reportedErrors: new WeakSet<object>(),
362
458
  reverse: createReverseFunction(
363
459
  mergedRouteMap,
@@ -368,9 +464,13 @@ export async function renderStaticSegment<TEnv = any>(
368
464
  };
369
465
 
370
466
  return runWithRequestContext(minimalRequestContext, async () => {
371
- // Static handlers get only reverse and use(handle) no URL, params,
372
- // request, env, headers, or cookies.
373
- const buildCtx = createStaticContext<TEnv>(mergedRouteMap, routeName);
467
+ // Static handlers get only reverse, use(handle), and optionally env.
468
+ const buildCtx = createStaticContext<TEnv>(
469
+ mergedRouteMap,
470
+ routeName,
471
+ buildEnv,
472
+ devMode,
473
+ );
374
474
 
375
475
  // Set segment ID so handle pushes are keyed correctly
376
476
  (buildCtx as InternalHandlerContext<any, TEnv>)._currentSegmentId =