@rangojs/router 0.0.0-experimental.760a71d9 → 0.0.0-experimental.78

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 (932) hide show
  1. package/README.md +76 -18
  2. package/dist/bin/rango.js +130 -47
  3. package/dist/vite/index.js +716 -237
  4. package/package.json +3 -3
  5. package/skills/cache-guide/SKILL.md +32 -0
  6. package/skills/caching/SKILL.md +8 -0
  7. package/skills/handler-use/SKILL.md +362 -0
  8. package/skills/intercept/SKILL.md +20 -0
  9. package/skills/layout/SKILL.md +22 -0
  10. package/skills/links/SKILL.md +3 -1
  11. package/skills/loader/SKILL.md +53 -43
  12. package/skills/middleware/SKILL.md +34 -3
  13. package/skills/migrate-nextjs/SKILL.md +560 -0
  14. package/skills/migrate-react-router/SKILL.md +764 -0
  15. package/skills/parallel/SKILL.md +126 -0
  16. package/skills/prerender/SKILL.md +110 -68
  17. package/skills/rango/SKILL.md +24 -22
  18. package/skills/route/SKILL.md +55 -0
  19. package/skills/router-setup/SKILL.md +87 -2
  20. package/skills/typesafety/SKILL.md +10 -0
  21. package/src/__internal.ts +1 -1
  22. package/src/browser/app-version.ts +14 -0
  23. package/src/browser/navigation-bridge.ts +37 -5
  24. package/src/browser/navigation-client.ts +98 -46
  25. package/src/browser/navigation-store.ts +43 -8
  26. package/src/browser/partial-update.ts +41 -7
  27. package/src/browser/prefetch/cache.ts +16 -6
  28. package/src/browser/prefetch/fetch.ts +68 -6
  29. package/src/browser/prefetch/queue.ts +61 -29
  30. package/src/browser/prefetch/resource-ready.ts +77 -0
  31. package/src/browser/react/Link.tsx +67 -8
  32. package/src/browser/react/NavigationProvider.tsx +13 -4
  33. package/src/browser/react/context.ts +7 -2
  34. package/src/browser/react/use-handle.ts +9 -58
  35. package/src/browser/react/use-router.ts +21 -8
  36. package/src/browser/rsc-router.tsx +26 -3
  37. package/src/browser/scroll-restoration.ts +10 -8
  38. package/src/browser/segment-reconciler.ts +36 -14
  39. package/src/browser/server-action-bridge.ts +8 -6
  40. package/src/browser/types.ts +27 -5
  41. package/src/build/generate-manifest.ts +6 -6
  42. package/src/build/generate-route-types.ts +3 -0
  43. package/src/build/route-trie.ts +50 -24
  44. package/src/build/route-types/include-resolution.ts +8 -1
  45. package/src/build/route-types/router-processing.ts +211 -72
  46. package/src/build/route-types/scan-filter.ts +8 -1
  47. package/src/cache/cache-scope.ts +46 -5
  48. package/src/cache/taint.ts +55 -0
  49. package/src/client.tsx +84 -230
  50. package/src/context-var.ts +72 -2
  51. package/src/handle.ts +40 -0
  52. package/src/index.rsc.ts +3 -1
  53. package/src/index.ts +46 -6
  54. package/src/prerender/store.ts +5 -4
  55. package/src/prerender.ts +138 -77
  56. package/src/reverse.ts +25 -1
  57. package/src/route-definition/dsl-helpers.ts +194 -32
  58. package/src/route-definition/helpers-types.ts +67 -19
  59. package/src/route-definition/index.ts +3 -0
  60. package/src/route-definition/redirect.ts +9 -1
  61. package/src/route-definition/resolve-handler-use.ts +149 -0
  62. package/src/route-types.ts +11 -0
  63. package/src/router/content-negotiation.ts +100 -1
  64. package/src/router/handler-context.ts +82 -23
  65. package/src/router/intercept-resolution.ts +9 -4
  66. package/src/router/loader-resolution.ts +156 -21
  67. package/src/router/match-api.ts +124 -189
  68. package/src/router/match-middleware/background-revalidation.ts +12 -1
  69. package/src/router/match-middleware/cache-lookup.ts +40 -13
  70. package/src/router/match-middleware/cache-store.ts +21 -4
  71. package/src/router/match-middleware/segment-resolution.ts +53 -0
  72. package/src/router/match-result.ts +82 -4
  73. package/src/router/middleware-types.ts +6 -8
  74. package/src/router/middleware.ts +2 -5
  75. package/src/router/navigation-snapshot.ts +182 -0
  76. package/src/router/prerender-match.ts +110 -10
  77. package/src/router/preview-match.ts +30 -102
  78. package/src/router/request-classification.ts +310 -0
  79. package/src/router/route-snapshot.ts +245 -0
  80. package/src/router/router-context.ts +1 -0
  81. package/src/router/router-interfaces.ts +36 -4
  82. package/src/router/router-options.ts +37 -11
  83. package/src/router/segment-resolution/fresh.ts +80 -9
  84. package/src/router/segment-resolution/helpers.ts +29 -24
  85. package/src/router/segment-resolution/revalidation.ts +91 -8
  86. package/src/router/types.ts +1 -0
  87. package/src/router.ts +54 -5
  88. package/src/rsc/handler.ts +472 -372
  89. package/src/rsc/loader-fetch.ts +23 -3
  90. package/src/rsc/manifest-init.ts +5 -1
  91. package/src/rsc/progressive-enhancement.ts +14 -2
  92. package/src/rsc/rsc-rendering.ts +10 -1
  93. package/src/rsc/server-action.ts +8 -0
  94. package/src/rsc/ssr-setup.ts +2 -2
  95. package/src/rsc/types.ts +9 -1
  96. package/src/segment-content-promise.ts +67 -0
  97. package/src/segment-loader-promise.ts +122 -0
  98. package/src/segment-system.tsx +11 -61
  99. package/src/server/context.ts +50 -1
  100. package/src/server/handle-store.ts +19 -0
  101. package/src/server/loader-registry.ts +9 -8
  102. package/src/server/request-context.ts +175 -15
  103. package/src/ssr/index.tsx +3 -0
  104. package/src/static-handler.ts +18 -6
  105. package/src/types/cache-types.ts +4 -4
  106. package/src/types/handler-context.ts +37 -19
  107. package/src/types/loader-types.ts +36 -9
  108. package/src/types/route-entry.ts +1 -1
  109. package/src/types/segments.ts +1 -1
  110. package/src/urls/path-helper-types.ts +39 -6
  111. package/src/urls/path-helper.ts +47 -12
  112. package/src/urls/pattern-types.ts +12 -0
  113. package/src/urls/response-types.ts +16 -6
  114. package/src/use-loader.tsx +77 -5
  115. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  116. package/src/vite/discovery/discover-routers.ts +5 -1
  117. package/src/vite/discovery/prerender-collection.ts +128 -74
  118. package/src/vite/discovery/state.ts +13 -4
  119. package/src/vite/index.ts +4 -0
  120. package/src/vite/plugin-types.ts +60 -5
  121. package/src/vite/plugins/expose-id-utils.ts +12 -0
  122. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  123. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  124. package/src/vite/plugins/performance-tracks.ts +88 -0
  125. package/src/vite/plugins/refresh-cmd.ts +88 -26
  126. package/src/vite/rango.ts +19 -2
  127. package/src/vite/router-discovery.ts +178 -37
  128. package/src/vite/utils/prerender-utils.ts +37 -5
  129. package/src/vite/utils/shared-utils.ts +3 -2
  130. package/dist/__internal.d.ts +0 -83
  131. package/dist/__internal.d.ts.map +0 -1
  132. package/dist/__internal.js +0 -19
  133. package/dist/__internal.js.map +0 -1
  134. package/dist/__mocks__/version.d.ts +0 -7
  135. package/dist/__mocks__/version.d.ts.map +0 -1
  136. package/dist/__mocks__/version.js +0 -7
  137. package/dist/__mocks__/version.js.map +0 -1
  138. package/dist/__tests__/client-href.test.d.ts +0 -2
  139. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  140. package/dist/__tests__/client-href.test.js +0 -74
  141. package/dist/__tests__/client-href.test.js.map +0 -1
  142. package/dist/__tests__/component-utils.test.d.ts +0 -2
  143. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  144. package/dist/__tests__/component-utils.test.js +0 -51
  145. package/dist/__tests__/component-utils.test.js.map +0 -1
  146. package/dist/__tests__/event-controller.test.d.ts +0 -2
  147. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  148. package/dist/__tests__/event-controller.test.js +0 -538
  149. package/dist/__tests__/event-controller.test.js.map +0 -1
  150. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  151. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  152. package/dist/__tests__/helpers/route-tree.js +0 -374
  153. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  154. package/dist/__tests__/match-result.test.d.ts +0 -2
  155. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  156. package/dist/__tests__/match-result.test.js +0 -154
  157. package/dist/__tests__/match-result.test.js.map +0 -1
  158. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  159. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  160. package/dist/__tests__/navigation-store.test.js +0 -440
  161. package/dist/__tests__/navigation-store.test.js.map +0 -1
  162. package/dist/__tests__/partial-update.test.d.ts +0 -2
  163. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  164. package/dist/__tests__/partial-update.test.js +0 -1009
  165. package/dist/__tests__/partial-update.test.js.map +0 -1
  166. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  167. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  168. package/dist/__tests__/reverse-types.test.js +0 -656
  169. package/dist/__tests__/reverse-types.test.js.map +0 -1
  170. package/dist/__tests__/route-definition.test.d.ts +0 -2
  171. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  172. package/dist/__tests__/route-definition.test.js +0 -55
  173. package/dist/__tests__/route-definition.test.js.map +0 -1
  174. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  175. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  176. package/dist/__tests__/router-helpers.test.js +0 -377
  177. package/dist/__tests__/router-helpers.test.js.map +0 -1
  178. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  179. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  180. package/dist/__tests__/router-integration-2.test.js +0 -426
  181. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  182. package/dist/__tests__/router-integration.test.d.ts +0 -2
  183. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  184. package/dist/__tests__/router-integration.test.js +0 -1051
  185. package/dist/__tests__/router-integration.test.js.map +0 -1
  186. package/dist/__tests__/search-params.test.d.ts +0 -5
  187. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  188. package/dist/__tests__/search-params.test.js +0 -306
  189. package/dist/__tests__/search-params.test.js.map +0 -1
  190. package/dist/__tests__/segment-system.test.d.ts +0 -2
  191. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  192. package/dist/__tests__/segment-system.test.js +0 -627
  193. package/dist/__tests__/segment-system.test.js.map +0 -1
  194. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  195. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  196. package/dist/__tests__/static-handler-types.test.js +0 -63
  197. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  198. package/dist/__tests__/urls.test.d.ts +0 -2
  199. package/dist/__tests__/urls.test.d.ts.map +0 -1
  200. package/dist/__tests__/urls.test.js +0 -421
  201. package/dist/__tests__/urls.test.js.map +0 -1
  202. package/dist/__tests__/use-mount.test.d.ts +0 -2
  203. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  204. package/dist/__tests__/use-mount.test.js +0 -35
  205. package/dist/__tests__/use-mount.test.js.map +0 -1
  206. package/dist/bin/rango.d.ts +0 -2
  207. package/dist/bin/rango.d.ts.map +0 -1
  208. package/dist/bin/rango.js.map +0 -1
  209. package/dist/browser/event-controller.d.ts +0 -191
  210. package/dist/browser/event-controller.d.ts.map +0 -1
  211. package/dist/browser/event-controller.js +0 -559
  212. package/dist/browser/event-controller.js.map +0 -1
  213. package/dist/browser/index.d.ts +0 -2
  214. package/dist/browser/index.d.ts.map +0 -1
  215. package/dist/browser/index.js +0 -14
  216. package/dist/browser/index.js.map +0 -1
  217. package/dist/browser/link-interceptor.d.ts +0 -38
  218. package/dist/browser/link-interceptor.d.ts.map +0 -1
  219. package/dist/browser/link-interceptor.js +0 -99
  220. package/dist/browser/link-interceptor.js.map +0 -1
  221. package/dist/browser/logging.d.ts +0 -10
  222. package/dist/browser/logging.d.ts.map +0 -1
  223. package/dist/browser/logging.js +0 -29
  224. package/dist/browser/logging.js.map +0 -1
  225. package/dist/browser/lru-cache.d.ts +0 -17
  226. package/dist/browser/lru-cache.d.ts.map +0 -1
  227. package/dist/browser/lru-cache.js +0 -50
  228. package/dist/browser/lru-cache.js.map +0 -1
  229. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  230. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  231. package/dist/browser/merge-segment-loaders.js +0 -102
  232. package/dist/browser/merge-segment-loaders.js.map +0 -1
  233. package/dist/browser/navigation-bridge.d.ts +0 -102
  234. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  235. package/dist/browser/navigation-bridge.js +0 -708
  236. package/dist/browser/navigation-bridge.js.map +0 -1
  237. package/dist/browser/navigation-client.d.ts +0 -25
  238. package/dist/browser/navigation-client.d.ts.map +0 -1
  239. package/dist/browser/navigation-client.js +0 -157
  240. package/dist/browser/navigation-client.js.map +0 -1
  241. package/dist/browser/navigation-store.d.ts +0 -101
  242. package/dist/browser/navigation-store.d.ts.map +0 -1
  243. package/dist/browser/navigation-store.js +0 -625
  244. package/dist/browser/navigation-store.js.map +0 -1
  245. package/dist/browser/partial-update.d.ts +0 -75
  246. package/dist/browser/partial-update.d.ts.map +0 -1
  247. package/dist/browser/partial-update.js +0 -426
  248. package/dist/browser/partial-update.js.map +0 -1
  249. package/dist/browser/react/Link.d.ts +0 -86
  250. package/dist/browser/react/Link.d.ts.map +0 -1
  251. package/dist/browser/react/Link.js +0 -128
  252. package/dist/browser/react/Link.js.map +0 -1
  253. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  254. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  255. package/dist/browser/react/NavigationProvider.js +0 -216
  256. package/dist/browser/react/NavigationProvider.js.map +0 -1
  257. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  258. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  259. package/dist/browser/react/ScrollRestoration.js +0 -57
  260. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  261. package/dist/browser/react/context.d.ts +0 -46
  262. package/dist/browser/react/context.d.ts.map +0 -1
  263. package/dist/browser/react/context.js +0 -10
  264. package/dist/browser/react/context.js.map +0 -1
  265. package/dist/browser/react/index.d.ts +0 -11
  266. package/dist/browser/react/index.d.ts.map +0 -1
  267. package/dist/browser/react/index.js +0 -22
  268. package/dist/browser/react/index.js.map +0 -1
  269. package/dist/browser/react/location-state-shared.d.ts +0 -63
  270. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  271. package/dist/browser/react/location-state-shared.js +0 -81
  272. package/dist/browser/react/location-state-shared.js.map +0 -1
  273. package/dist/browser/react/location-state.d.ts +0 -23
  274. package/dist/browser/react/location-state.d.ts.map +0 -1
  275. package/dist/browser/react/location-state.js +0 -29
  276. package/dist/browser/react/location-state.js.map +0 -1
  277. package/dist/browser/react/mount-context.d.ts +0 -24
  278. package/dist/browser/react/mount-context.d.ts.map +0 -1
  279. package/dist/browser/react/mount-context.js +0 -24
  280. package/dist/browser/react/mount-context.js.map +0 -1
  281. package/dist/browser/react/use-action.d.ts +0 -64
  282. package/dist/browser/react/use-action.d.ts.map +0 -1
  283. package/dist/browser/react/use-action.js +0 -134
  284. package/dist/browser/react/use-action.js.map +0 -1
  285. package/dist/browser/react/use-client-cache.d.ts +0 -41
  286. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  287. package/dist/browser/react/use-client-cache.js +0 -39
  288. package/dist/browser/react/use-client-cache.js.map +0 -1
  289. package/dist/browser/react/use-handle.d.ts +0 -31
  290. package/dist/browser/react/use-handle.d.ts.map +0 -1
  291. package/dist/browser/react/use-handle.js +0 -144
  292. package/dist/browser/react/use-handle.js.map +0 -1
  293. package/dist/browser/react/use-href.d.ts +0 -33
  294. package/dist/browser/react/use-href.d.ts.map +0 -1
  295. package/dist/browser/react/use-href.js +0 -39
  296. package/dist/browser/react/use-href.js.map +0 -1
  297. package/dist/browser/react/use-link-status.d.ts +0 -37
  298. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  299. package/dist/browser/react/use-link-status.js +0 -99
  300. package/dist/browser/react/use-link-status.js.map +0 -1
  301. package/dist/browser/react/use-mount.d.ts +0 -25
  302. package/dist/browser/react/use-mount.d.ts.map +0 -1
  303. package/dist/browser/react/use-mount.js +0 -30
  304. package/dist/browser/react/use-mount.js.map +0 -1
  305. package/dist/browser/react/use-navigation.d.ts +0 -27
  306. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  307. package/dist/browser/react/use-navigation.js +0 -87
  308. package/dist/browser/react/use-navigation.js.map +0 -1
  309. package/dist/browser/react/use-segments.d.ts +0 -38
  310. package/dist/browser/react/use-segments.d.ts.map +0 -1
  311. package/dist/browser/react/use-segments.js +0 -130
  312. package/dist/browser/react/use-segments.js.map +0 -1
  313. package/dist/browser/request-controller.d.ts +0 -26
  314. package/dist/browser/request-controller.d.ts.map +0 -1
  315. package/dist/browser/request-controller.js +0 -147
  316. package/dist/browser/request-controller.js.map +0 -1
  317. package/dist/browser/rsc-router.d.ts +0 -129
  318. package/dist/browser/rsc-router.d.ts.map +0 -1
  319. package/dist/browser/rsc-router.js +0 -195
  320. package/dist/browser/rsc-router.js.map +0 -1
  321. package/dist/browser/scroll-restoration.d.ts +0 -93
  322. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  323. package/dist/browser/scroll-restoration.js +0 -321
  324. package/dist/browser/scroll-restoration.js.map +0 -1
  325. package/dist/browser/segment-structure-assert.d.ts +0 -17
  326. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  327. package/dist/browser/segment-structure-assert.js +0 -59
  328. package/dist/browser/segment-structure-assert.js.map +0 -1
  329. package/dist/browser/server-action-bridge.d.ts +0 -26
  330. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  331. package/dist/browser/server-action-bridge.js +0 -668
  332. package/dist/browser/server-action-bridge.js.map +0 -1
  333. package/dist/browser/shallow.d.ts +0 -12
  334. package/dist/browser/shallow.d.ts.map +0 -1
  335. package/dist/browser/shallow.js +0 -34
  336. package/dist/browser/shallow.js.map +0 -1
  337. package/dist/browser/types.d.ts +0 -369
  338. package/dist/browser/types.d.ts.map +0 -1
  339. package/dist/browser/types.js +0 -2
  340. package/dist/browser/types.js.map +0 -1
  341. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  342. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  343. package/dist/build/__tests__/generate-cli.test.js +0 -237
  344. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  345. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  346. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  347. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  348. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  349. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  350. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  351. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  352. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  353. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  354. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  355. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  356. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  357. package/dist/build/generate-manifest.d.ts +0 -81
  358. package/dist/build/generate-manifest.d.ts.map +0 -1
  359. package/dist/build/generate-manifest.js +0 -276
  360. package/dist/build/generate-manifest.js.map +0 -1
  361. package/dist/build/generate-route-types.d.ts +0 -115
  362. package/dist/build/generate-route-types.d.ts.map +0 -1
  363. package/dist/build/generate-route-types.js +0 -740
  364. package/dist/build/generate-route-types.js.map +0 -1
  365. package/dist/build/index.d.ts +0 -21
  366. package/dist/build/index.d.ts.map +0 -1
  367. package/dist/build/index.js +0 -21
  368. package/dist/build/index.js.map +0 -1
  369. package/dist/build/route-trie.d.ts +0 -71
  370. package/dist/build/route-trie.d.ts.map +0 -1
  371. package/dist/build/route-trie.js +0 -175
  372. package/dist/build/route-trie.js.map +0 -1
  373. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  374. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  375. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  376. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  377. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  378. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  379. package/dist/cache/__tests__/document-cache.test.js +0 -345
  380. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  381. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  382. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  383. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  384. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  385. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  386. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  387. package/dist/cache/__tests__/memory-store.test.js +0 -367
  388. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  389. package/dist/cache/cache-scope.d.ts +0 -102
  390. package/dist/cache/cache-scope.d.ts.map +0 -1
  391. package/dist/cache/cache-scope.js +0 -440
  392. package/dist/cache/cache-scope.js.map +0 -1
  393. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  394. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  395. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  396. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  397. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  398. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  399. package/dist/cache/cf/cf-cache-store.js +0 -242
  400. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  401. package/dist/cache/cf/index.d.ts +0 -14
  402. package/dist/cache/cf/index.d.ts.map +0 -1
  403. package/dist/cache/cf/index.js +0 -17
  404. package/dist/cache/cf/index.js.map +0 -1
  405. package/dist/cache/document-cache.d.ts +0 -64
  406. package/dist/cache/document-cache.d.ts.map +0 -1
  407. package/dist/cache/document-cache.js +0 -228
  408. package/dist/cache/document-cache.js.map +0 -1
  409. package/dist/cache/index.d.ts +0 -19
  410. package/dist/cache/index.d.ts.map +0 -1
  411. package/dist/cache/index.js +0 -21
  412. package/dist/cache/index.js.map +0 -1
  413. package/dist/cache/memory-segment-store.d.ts +0 -110
  414. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  415. package/dist/cache/memory-segment-store.js +0 -117
  416. package/dist/cache/memory-segment-store.js.map +0 -1
  417. package/dist/cache/memory-store.d.ts +0 -41
  418. package/dist/cache/memory-store.d.ts.map +0 -1
  419. package/dist/cache/memory-store.js +0 -191
  420. package/dist/cache/memory-store.js.map +0 -1
  421. package/dist/cache/types.d.ts +0 -317
  422. package/dist/cache/types.d.ts.map +0 -1
  423. package/dist/cache/types.js +0 -12
  424. package/dist/cache/types.js.map +0 -1
  425. package/dist/client.d.ts +0 -248
  426. package/dist/client.d.ts.map +0 -1
  427. package/dist/client.js +0 -367
  428. package/dist/client.js.map +0 -1
  429. package/dist/client.rsc.d.ts +0 -26
  430. package/dist/client.rsc.d.ts.map +0 -1
  431. package/dist/client.rsc.js +0 -46
  432. package/dist/client.rsc.js.map +0 -1
  433. package/dist/component-utils.d.ts +0 -36
  434. package/dist/component-utils.d.ts.map +0 -1
  435. package/dist/component-utils.js +0 -61
  436. package/dist/component-utils.js.map +0 -1
  437. package/dist/components/DefaultDocument.d.ts +0 -13
  438. package/dist/components/DefaultDocument.d.ts.map +0 -1
  439. package/dist/components/DefaultDocument.js +0 -15
  440. package/dist/components/DefaultDocument.js.map +0 -1
  441. package/dist/debug.d.ts +0 -58
  442. package/dist/debug.d.ts.map +0 -1
  443. package/dist/debug.js +0 -157
  444. package/dist/debug.js.map +0 -1
  445. package/dist/default-error-boundary.d.ts +0 -11
  446. package/dist/default-error-boundary.d.ts.map +0 -1
  447. package/dist/default-error-boundary.js +0 -45
  448. package/dist/default-error-boundary.js.map +0 -1
  449. package/dist/deps/browser.d.ts +0 -2
  450. package/dist/deps/browser.d.ts.map +0 -1
  451. package/dist/deps/browser.js +0 -3
  452. package/dist/deps/browser.js.map +0 -1
  453. package/dist/deps/html-stream-client.d.ts +0 -2
  454. package/dist/deps/html-stream-client.d.ts.map +0 -1
  455. package/dist/deps/html-stream-client.js +0 -3
  456. package/dist/deps/html-stream-client.js.map +0 -1
  457. package/dist/deps/html-stream-server.d.ts +0 -2
  458. package/dist/deps/html-stream-server.d.ts.map +0 -1
  459. package/dist/deps/html-stream-server.js +0 -3
  460. package/dist/deps/html-stream-server.js.map +0 -1
  461. package/dist/deps/rsc.d.ts +0 -2
  462. package/dist/deps/rsc.d.ts.map +0 -1
  463. package/dist/deps/rsc.js +0 -4
  464. package/dist/deps/rsc.js.map +0 -1
  465. package/dist/deps/ssr.d.ts +0 -2
  466. package/dist/deps/ssr.d.ts.map +0 -1
  467. package/dist/deps/ssr.js +0 -3
  468. package/dist/deps/ssr.js.map +0 -1
  469. package/dist/errors.d.ts +0 -174
  470. package/dist/errors.d.ts.map +0 -1
  471. package/dist/errors.js +0 -241
  472. package/dist/errors.js.map +0 -1
  473. package/dist/handle.d.ts +0 -78
  474. package/dist/handle.d.ts.map +0 -1
  475. package/dist/handle.js +0 -82
  476. package/dist/handle.js.map +0 -1
  477. package/dist/handles/MetaTags.d.ts +0 -14
  478. package/dist/handles/MetaTags.d.ts.map +0 -1
  479. package/dist/handles/MetaTags.js +0 -136
  480. package/dist/handles/MetaTags.js.map +0 -1
  481. package/dist/handles/index.d.ts +0 -6
  482. package/dist/handles/index.d.ts.map +0 -1
  483. package/dist/handles/index.js +0 -6
  484. package/dist/handles/index.js.map +0 -1
  485. package/dist/handles/meta.d.ts +0 -39
  486. package/dist/handles/meta.d.ts.map +0 -1
  487. package/dist/handles/meta.js +0 -202
  488. package/dist/handles/meta.js.map +0 -1
  489. package/dist/host/__tests__/errors.test.d.ts +0 -2
  490. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  491. package/dist/host/__tests__/errors.test.js +0 -76
  492. package/dist/host/__tests__/errors.test.js.map +0 -1
  493. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  494. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  495. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  496. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  497. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  498. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  499. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  500. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  501. package/dist/host/__tests__/router.test.d.ts +0 -2
  502. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  503. package/dist/host/__tests__/router.test.js +0 -241
  504. package/dist/host/__tests__/router.test.js.map +0 -1
  505. package/dist/host/__tests__/testing.test.d.ts +0 -2
  506. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  507. package/dist/host/__tests__/testing.test.js +0 -64
  508. package/dist/host/__tests__/testing.test.js.map +0 -1
  509. package/dist/host/__tests__/utils.test.d.ts +0 -2
  510. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  511. package/dist/host/__tests__/utils.test.js +0 -29
  512. package/dist/host/__tests__/utils.test.js.map +0 -1
  513. package/dist/host/cookie-handler.d.ts +0 -34
  514. package/dist/host/cookie-handler.d.ts.map +0 -1
  515. package/dist/host/cookie-handler.js +0 -124
  516. package/dist/host/cookie-handler.js.map +0 -1
  517. package/dist/host/errors.d.ts +0 -56
  518. package/dist/host/errors.d.ts.map +0 -1
  519. package/dist/host/errors.js +0 -79
  520. package/dist/host/errors.js.map +0 -1
  521. package/dist/host/index.d.ts +0 -29
  522. package/dist/host/index.d.ts.map +0 -1
  523. package/dist/host/index.js +0 -32
  524. package/dist/host/index.js.map +0 -1
  525. package/dist/host/pattern-matcher.d.ts +0 -36
  526. package/dist/host/pattern-matcher.d.ts.map +0 -1
  527. package/dist/host/pattern-matcher.js +0 -172
  528. package/dist/host/pattern-matcher.js.map +0 -1
  529. package/dist/host/router.d.ts +0 -26
  530. package/dist/host/router.d.ts.map +0 -1
  531. package/dist/host/router.js +0 -218
  532. package/dist/host/router.js.map +0 -1
  533. package/dist/host/testing.d.ts +0 -36
  534. package/dist/host/testing.d.ts.map +0 -1
  535. package/dist/host/testing.js +0 -55
  536. package/dist/host/testing.js.map +0 -1
  537. package/dist/host/types.d.ts +0 -115
  538. package/dist/host/types.d.ts.map +0 -1
  539. package/dist/host/types.js +0 -7
  540. package/dist/host/types.js.map +0 -1
  541. package/dist/host/utils.d.ts +0 -21
  542. package/dist/host/utils.d.ts.map +0 -1
  543. package/dist/host/utils.js +0 -23
  544. package/dist/host/utils.js.map +0 -1
  545. package/dist/href-client.d.ts +0 -131
  546. package/dist/href-client.d.ts.map +0 -1
  547. package/dist/href-client.js +0 -64
  548. package/dist/href-client.js.map +0 -1
  549. package/dist/href-context.d.ts +0 -29
  550. package/dist/href-context.d.ts.map +0 -1
  551. package/dist/href-context.js +0 -21
  552. package/dist/href-context.js.map +0 -1
  553. package/dist/index.d.ts +0 -73
  554. package/dist/index.d.ts.map +0 -1
  555. package/dist/index.js +0 -91
  556. package/dist/index.js.map +0 -1
  557. package/dist/index.rsc.d.ts +0 -32
  558. package/dist/index.rsc.d.ts.map +0 -1
  559. package/dist/index.rsc.js +0 -40
  560. package/dist/index.rsc.js.map +0 -1
  561. package/dist/internal-debug.d.ts +0 -2
  562. package/dist/internal-debug.d.ts.map +0 -1
  563. package/dist/internal-debug.js +0 -5
  564. package/dist/internal-debug.js.map +0 -1
  565. package/dist/loader.d.ts +0 -14
  566. package/dist/loader.d.ts.map +0 -1
  567. package/dist/loader.js +0 -20
  568. package/dist/loader.js.map +0 -1
  569. package/dist/loader.rsc.d.ts +0 -19
  570. package/dist/loader.rsc.d.ts.map +0 -1
  571. package/dist/loader.rsc.js +0 -99
  572. package/dist/loader.rsc.js.map +0 -1
  573. package/dist/network-error-thrower.d.ts +0 -17
  574. package/dist/network-error-thrower.d.ts.map +0 -1
  575. package/dist/network-error-thrower.js +0 -14
  576. package/dist/network-error-thrower.js.map +0 -1
  577. package/dist/outlet-context.d.ts +0 -13
  578. package/dist/outlet-context.d.ts.map +0 -1
  579. package/dist/outlet-context.js +0 -3
  580. package/dist/outlet-context.js.map +0 -1
  581. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  582. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  583. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  584. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  585. package/dist/prerender/param-hash.d.ts +0 -16
  586. package/dist/prerender/param-hash.d.ts.map +0 -1
  587. package/dist/prerender/param-hash.js +0 -36
  588. package/dist/prerender/param-hash.js.map +0 -1
  589. package/dist/prerender/store.d.ts +0 -38
  590. package/dist/prerender/store.d.ts.map +0 -1
  591. package/dist/prerender/store.js +0 -61
  592. package/dist/prerender/store.js.map +0 -1
  593. package/dist/prerender.d.ts +0 -66
  594. package/dist/prerender.d.ts.map +0 -1
  595. package/dist/prerender.js +0 -57
  596. package/dist/prerender.js.map +0 -1
  597. package/dist/reverse.d.ts +0 -196
  598. package/dist/reverse.d.ts.map +0 -1
  599. package/dist/reverse.js +0 -78
  600. package/dist/reverse.js.map +0 -1
  601. package/dist/root-error-boundary.d.ts +0 -33
  602. package/dist/root-error-boundary.d.ts.map +0 -1
  603. package/dist/root-error-boundary.js +0 -165
  604. package/dist/root-error-boundary.js.map +0 -1
  605. package/dist/route-content-wrapper.d.ts +0 -46
  606. package/dist/route-content-wrapper.d.ts.map +0 -1
  607. package/dist/route-content-wrapper.js +0 -77
  608. package/dist/route-content-wrapper.js.map +0 -1
  609. package/dist/route-definition.d.ts +0 -421
  610. package/dist/route-definition.d.ts.map +0 -1
  611. package/dist/route-definition.js +0 -868
  612. package/dist/route-definition.js.map +0 -1
  613. package/dist/route-map-builder.d.ts +0 -155
  614. package/dist/route-map-builder.d.ts.map +0 -1
  615. package/dist/route-map-builder.js +0 -237
  616. package/dist/route-map-builder.js.map +0 -1
  617. package/dist/route-types.d.ts +0 -165
  618. package/dist/route-types.d.ts.map +0 -1
  619. package/dist/route-types.js +0 -7
  620. package/dist/route-types.js.map +0 -1
  621. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  622. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  623. package/dist/router/__tests__/handler-context.test.js +0 -65
  624. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  625. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  626. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  627. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  628. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  629. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  630. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  631. package/dist/router/__tests__/match-context.test.js +0 -92
  632. package/dist/router/__tests__/match-context.test.js.map +0 -1
  633. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  634. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  635. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  636. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  637. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  638. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  639. package/dist/router/__tests__/match-result.test.js +0 -457
  640. package/dist/router/__tests__/match-result.test.js.map +0 -1
  641. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  642. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  643. package/dist/router/__tests__/on-error.test.js +0 -678
  644. package/dist/router/__tests__/on-error.test.js.map +0 -1
  645. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  646. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  647. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  648. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  649. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  650. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  651. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  652. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  653. package/dist/router/error-handling.d.ts +0 -77
  654. package/dist/router/error-handling.d.ts.map +0 -1
  655. package/dist/router/error-handling.js +0 -202
  656. package/dist/router/error-handling.js.map +0 -1
  657. package/dist/router/handler-context.d.ts +0 -20
  658. package/dist/router/handler-context.d.ts.map +0 -1
  659. package/dist/router/handler-context.js +0 -198
  660. package/dist/router/handler-context.js.map +0 -1
  661. package/dist/router/intercept-resolution.d.ts +0 -66
  662. package/dist/router/intercept-resolution.d.ts.map +0 -1
  663. package/dist/router/intercept-resolution.js +0 -246
  664. package/dist/router/intercept-resolution.js.map +0 -1
  665. package/dist/router/loader-resolution.d.ts +0 -64
  666. package/dist/router/loader-resolution.d.ts.map +0 -1
  667. package/dist/router/loader-resolution.js +0 -284
  668. package/dist/router/loader-resolution.js.map +0 -1
  669. package/dist/router/logging.d.ts +0 -15
  670. package/dist/router/logging.d.ts.map +0 -1
  671. package/dist/router/logging.js +0 -99
  672. package/dist/router/logging.js.map +0 -1
  673. package/dist/router/manifest.d.ts +0 -22
  674. package/dist/router/manifest.d.ts.map +0 -1
  675. package/dist/router/manifest.js +0 -181
  676. package/dist/router/manifest.js.map +0 -1
  677. package/dist/router/match-api.d.ts +0 -35
  678. package/dist/router/match-api.d.ts.map +0 -1
  679. package/dist/router/match-api.js +0 -406
  680. package/dist/router/match-api.js.map +0 -1
  681. package/dist/router/match-context.d.ts +0 -206
  682. package/dist/router/match-context.d.ts.map +0 -1
  683. package/dist/router/match-context.js +0 -17
  684. package/dist/router/match-context.js.map +0 -1
  685. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  686. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  687. package/dist/router/match-middleware/background-revalidation.js +0 -75
  688. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  689. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  690. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  691. package/dist/router/match-middleware/cache-lookup.js +0 -257
  692. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  693. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  694. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  695. package/dist/router/match-middleware/cache-store.js +0 -108
  696. package/dist/router/match-middleware/cache-store.js.map +0 -1
  697. package/dist/router/match-middleware/index.d.ts +0 -81
  698. package/dist/router/match-middleware/index.d.ts.map +0 -1
  699. package/dist/router/match-middleware/index.js +0 -80
  700. package/dist/router/match-middleware/index.js.map +0 -1
  701. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  702. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  703. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  704. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  705. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  706. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  707. package/dist/router/match-middleware/segment-resolution.js +0 -53
  708. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  709. package/dist/router/match-pipelines.d.ts +0 -147
  710. package/dist/router/match-pipelines.d.ts.map +0 -1
  711. package/dist/router/match-pipelines.js +0 -82
  712. package/dist/router/match-pipelines.js.map +0 -1
  713. package/dist/router/match-result.d.ts +0 -126
  714. package/dist/router/match-result.d.ts.map +0 -1
  715. package/dist/router/match-result.js +0 -93
  716. package/dist/router/match-result.js.map +0 -1
  717. package/dist/router/metrics.d.ts +0 -20
  718. package/dist/router/metrics.d.ts.map +0 -1
  719. package/dist/router/metrics.js +0 -47
  720. package/dist/router/metrics.js.map +0 -1
  721. package/dist/router/middleware.d.ts +0 -249
  722. package/dist/router/middleware.d.ts.map +0 -1
  723. package/dist/router/middleware.js +0 -434
  724. package/dist/router/middleware.js.map +0 -1
  725. package/dist/router/middleware.test.d.ts +0 -2
  726. package/dist/router/middleware.test.d.ts.map +0 -1
  727. package/dist/router/middleware.test.js +0 -816
  728. package/dist/router/middleware.test.js.map +0 -1
  729. package/dist/router/pattern-matching.d.ts +0 -149
  730. package/dist/router/pattern-matching.d.ts.map +0 -1
  731. package/dist/router/pattern-matching.js +0 -349
  732. package/dist/router/pattern-matching.js.map +0 -1
  733. package/dist/router/revalidation.d.ts +0 -44
  734. package/dist/router/revalidation.d.ts.map +0 -1
  735. package/dist/router/revalidation.js +0 -147
  736. package/dist/router/revalidation.js.map +0 -1
  737. package/dist/router/router-context.d.ts +0 -135
  738. package/dist/router/router-context.d.ts.map +0 -1
  739. package/dist/router/router-context.js +0 -36
  740. package/dist/router/router-context.js.map +0 -1
  741. package/dist/router/segment-resolution.d.ts +0 -127
  742. package/dist/router/segment-resolution.d.ts.map +0 -1
  743. package/dist/router/segment-resolution.js +0 -919
  744. package/dist/router/segment-resolution.js.map +0 -1
  745. package/dist/router/trie-matching.d.ts +0 -40
  746. package/dist/router/trie-matching.d.ts.map +0 -1
  747. package/dist/router/trie-matching.js +0 -127
  748. package/dist/router/trie-matching.js.map +0 -1
  749. package/dist/router/types.d.ts +0 -136
  750. package/dist/router/types.d.ts.map +0 -1
  751. package/dist/router/types.js +0 -7
  752. package/dist/router/types.js.map +0 -1
  753. package/dist/router.d.ts +0 -753
  754. package/dist/router.d.ts.map +0 -1
  755. package/dist/router.gen.d.ts +0 -6
  756. package/dist/router.gen.d.ts.map +0 -1
  757. package/dist/router.gen.js +0 -6
  758. package/dist/router.gen.js.map +0 -1
  759. package/dist/router.js +0 -1304
  760. package/dist/router.js.map +0 -1
  761. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  762. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  763. package/dist/rsc/__tests__/helpers.test.js +0 -140
  764. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  765. package/dist/rsc/handler.d.ts +0 -45
  766. package/dist/rsc/handler.d.ts.map +0 -1
  767. package/dist/rsc/handler.js +0 -1172
  768. package/dist/rsc/handler.js.map +0 -1
  769. package/dist/rsc/helpers.d.ts +0 -16
  770. package/dist/rsc/helpers.d.ts.map +0 -1
  771. package/dist/rsc/helpers.js +0 -55
  772. package/dist/rsc/helpers.js.map +0 -1
  773. package/dist/rsc/index.d.ts +0 -22
  774. package/dist/rsc/index.d.ts.map +0 -1
  775. package/dist/rsc/index.js +0 -23
  776. package/dist/rsc/index.js.map +0 -1
  777. package/dist/rsc/nonce.d.ts +0 -9
  778. package/dist/rsc/nonce.d.ts.map +0 -1
  779. package/dist/rsc/nonce.js +0 -18
  780. package/dist/rsc/nonce.js.map +0 -1
  781. package/dist/rsc/types.d.ts +0 -206
  782. package/dist/rsc/types.d.ts.map +0 -1
  783. package/dist/rsc/types.js +0 -8
  784. package/dist/rsc/types.js.map +0 -1
  785. package/dist/search-params.d.ts +0 -103
  786. package/dist/search-params.d.ts.map +0 -1
  787. package/dist/search-params.js +0 -74
  788. package/dist/search-params.js.map +0 -1
  789. package/dist/segment-system.d.ts +0 -75
  790. package/dist/segment-system.d.ts.map +0 -1
  791. package/dist/segment-system.js +0 -336
  792. package/dist/segment-system.js.map +0 -1
  793. package/dist/server/context.d.ts +0 -245
  794. package/dist/server/context.d.ts.map +0 -1
  795. package/dist/server/context.js +0 -197
  796. package/dist/server/context.js.map +0 -1
  797. package/dist/server/fetchable-loader-store.d.ts +0 -18
  798. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  799. package/dist/server/fetchable-loader-store.js +0 -18
  800. package/dist/server/fetchable-loader-store.js.map +0 -1
  801. package/dist/server/handle-store.d.ts +0 -85
  802. package/dist/server/handle-store.d.ts.map +0 -1
  803. package/dist/server/handle-store.js +0 -142
  804. package/dist/server/handle-store.js.map +0 -1
  805. package/dist/server/loader-registry.d.ts +0 -55
  806. package/dist/server/loader-registry.d.ts.map +0 -1
  807. package/dist/server/loader-registry.js +0 -132
  808. package/dist/server/loader-registry.js.map +0 -1
  809. package/dist/server/request-context.d.ts +0 -226
  810. package/dist/server/request-context.d.ts.map +0 -1
  811. package/dist/server/request-context.js +0 -290
  812. package/dist/server/request-context.js.map +0 -1
  813. package/dist/server/root-layout.d.ts +0 -4
  814. package/dist/server/root-layout.d.ts.map +0 -1
  815. package/dist/server/root-layout.js +0 -5
  816. package/dist/server/root-layout.js.map +0 -1
  817. package/dist/server.d.ts +0 -15
  818. package/dist/server.d.ts.map +0 -1
  819. package/dist/server.js +0 -20
  820. package/dist/server.js.map +0 -1
  821. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  822. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  823. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  824. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  825. package/dist/ssr/index.d.ts +0 -98
  826. package/dist/ssr/index.d.ts.map +0 -1
  827. package/dist/ssr/index.js +0 -158
  828. package/dist/ssr/index.js.map +0 -1
  829. package/dist/static-handler.d.ts +0 -50
  830. package/dist/static-handler.d.ts.map +0 -1
  831. package/dist/static-handler.gen.d.ts +0 -5
  832. package/dist/static-handler.gen.d.ts.map +0 -1
  833. package/dist/static-handler.gen.js +0 -5
  834. package/dist/static-handler.gen.js.map +0 -1
  835. package/dist/static-handler.js +0 -29
  836. package/dist/static-handler.js.map +0 -1
  837. package/dist/theme/ThemeProvider.d.ts +0 -20
  838. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  839. package/dist/theme/ThemeProvider.js +0 -240
  840. package/dist/theme/ThemeProvider.js.map +0 -1
  841. package/dist/theme/ThemeScript.d.ts +0 -48
  842. package/dist/theme/ThemeScript.d.ts.map +0 -1
  843. package/dist/theme/ThemeScript.js +0 -13
  844. package/dist/theme/ThemeScript.js.map +0 -1
  845. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  846. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  847. package/dist/theme/__tests__/theme.test.js +0 -103
  848. package/dist/theme/__tests__/theme.test.js.map +0 -1
  849. package/dist/theme/constants.d.ts +0 -29
  850. package/dist/theme/constants.d.ts.map +0 -1
  851. package/dist/theme/constants.js +0 -48
  852. package/dist/theme/constants.js.map +0 -1
  853. package/dist/theme/index.d.ts +0 -31
  854. package/dist/theme/index.d.ts.map +0 -1
  855. package/dist/theme/index.js +0 -36
  856. package/dist/theme/index.js.map +0 -1
  857. package/dist/theme/theme-context.d.ts +0 -40
  858. package/dist/theme/theme-context.d.ts.map +0 -1
  859. package/dist/theme/theme-context.js +0 -60
  860. package/dist/theme/theme-context.js.map +0 -1
  861. package/dist/theme/theme-script.d.ts +0 -27
  862. package/dist/theme/theme-script.d.ts.map +0 -1
  863. package/dist/theme/theme-script.js +0 -147
  864. package/dist/theme/theme-script.js.map +0 -1
  865. package/dist/theme/types.d.ts +0 -163
  866. package/dist/theme/types.d.ts.map +0 -1
  867. package/dist/theme/types.js +0 -11
  868. package/dist/theme/types.js.map +0 -1
  869. package/dist/theme/use-theme.d.ts +0 -12
  870. package/dist/theme/use-theme.d.ts.map +0 -1
  871. package/dist/theme/use-theme.js +0 -40
  872. package/dist/theme/use-theme.js.map +0 -1
  873. package/dist/types.d.ts +0 -1479
  874. package/dist/types.d.ts.map +0 -1
  875. package/dist/types.js +0 -10
  876. package/dist/types.js.map +0 -1
  877. package/dist/urls.d.ts +0 -441
  878. package/dist/urls.d.ts.map +0 -1
  879. package/dist/urls.gen.d.ts +0 -8
  880. package/dist/urls.gen.d.ts.map +0 -1
  881. package/dist/urls.gen.js +0 -8
  882. package/dist/urls.gen.js.map +0 -1
  883. package/dist/urls.js +0 -443
  884. package/dist/urls.js.map +0 -1
  885. package/dist/use-loader.d.ts +0 -127
  886. package/dist/use-loader.d.ts.map +0 -1
  887. package/dist/use-loader.js +0 -237
  888. package/dist/use-loader.js.map +0 -1
  889. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  890. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  891. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  892. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  893. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  894. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  895. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  896. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  897. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  898. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  899. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  900. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  901. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  902. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  903. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  904. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  905. package/dist/vite/ast-handler-extract.d.ts +0 -49
  906. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  907. package/dist/vite/ast-handler-extract.js +0 -249
  908. package/dist/vite/ast-handler-extract.js.map +0 -1
  909. package/dist/vite/expose-action-id.d.ts +0 -19
  910. package/dist/vite/expose-action-id.d.ts.map +0 -1
  911. package/dist/vite/expose-action-id.js +0 -250
  912. package/dist/vite/expose-action-id.js.map +0 -1
  913. package/dist/vite/expose-id-utils.d.ts +0 -69
  914. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  915. package/dist/vite/expose-id-utils.js +0 -289
  916. package/dist/vite/expose-id-utils.js.map +0 -1
  917. package/dist/vite/expose-internal-ids.d.ts +0 -22
  918. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  919. package/dist/vite/expose-internal-ids.js +0 -886
  920. package/dist/vite/expose-internal-ids.js.map +0 -1
  921. package/dist/vite/index.d.ts +0 -149
  922. package/dist/vite/index.d.ts.map +0 -1
  923. package/dist/vite/index.js.map +0 -1
  924. package/dist/vite/index.named-routes.gen.ts +0 -103
  925. package/dist/vite/package-resolution.d.ts +0 -43
  926. package/dist/vite/package-resolution.d.ts.map +0 -1
  927. package/dist/vite/package-resolution.js +0 -112
  928. package/dist/vite/package-resolution.js.map +0 -1
  929. package/dist/vite/virtual-entries.d.ts +0 -25
  930. package/dist/vite/virtual-entries.d.ts.map +0 -1
  931. package/dist/vite/virtual-entries.js +0 -110
  932. package/dist/vite/virtual-entries.js.map +0 -1
@@ -92,6 +92,73 @@ path("/dashboard/:id", (ctx) => {
92
92
  ])
93
93
  ```
94
94
 
95
+ ## Setting Handles (Meta, Breadcrumbs)
96
+
97
+ Parallel slot handlers can call `ctx.use(Meta)` or `ctx.use(Breadcrumbs)` to
98
+ push handle data. The data is associated with the **parent** layout or route
99
+ segment, not the parallel segment itself. This is because parallels execute
100
+ after their parent handler and inherit its segment scope.
101
+
102
+ This works well for document-level metadata — the handle data follows the
103
+ parent's lifecycle (appears when the parent is mounted, removed when it
104
+ unmounts).
105
+
106
+ ```typescript
107
+ parallel({
108
+ "@meta": (ctx) => {
109
+ const meta = ctx.use(Meta);
110
+ meta({ title: "Product Detail" });
111
+ meta({ name: "description", content: "..." });
112
+ return null; // UI-less slot, only sets metadata
113
+ },
114
+ "@sidebar": (ctx) => <Sidebar />,
115
+ })
116
+ ```
117
+
118
+ Multiple parallels on the same parent can each push handle data — they all
119
+ accumulate under the parent segment ID.
120
+
121
+ ### Pattern: `@meta` slot for per-route metadata overrides
122
+
123
+ A dedicated `@meta` parallel slot lets routes define metadata separately from
124
+ their handler logic. The layout sets defaults via a title template, and each
125
+ route overrides via its own `@meta` slot. Since child segments push after
126
+ parents and `collectMeta` uses last-wins deduplication, overrides work
127
+ naturally.
128
+
129
+ ```typescript
130
+ // Layout sets defaults
131
+ layout((ctx) => {
132
+ ctx.use(Meta)({ title: { template: "%s | Store", default: "Store" } });
133
+ return <StoreLayout />;
134
+ }, () => [
135
+ // Route with @meta override — decoupled from handler rendering
136
+ path("/:slug", ProductPage, { name: "product" }, () => [
137
+ parallel({
138
+ "@meta": async (ctx) => {
139
+ const product = await ctx.use(ProductLoader);
140
+ const meta = ctx.use(Meta);
141
+ meta({ title: product.name });
142
+ meta({ name: "description", content: product.description });
143
+ meta({
144
+ "script:ld+json": {
145
+ "@context": "https://schema.org",
146
+ "@type": "Product",
147
+ name: product.name,
148
+ description: product.description,
149
+ },
150
+ });
151
+ return null; // UI-less slot
152
+ },
153
+ }),
154
+ ]),
155
+ ])
156
+ ```
157
+
158
+ This keeps the route handler focused on rendering UI while metadata
159
+ (title, description, Open Graph, JSON-LD) lives in a composable slot that
160
+ can be added, removed, or swapped per route without touching the handler.
161
+
95
162
  ## Parallel Routes with Loaders
96
163
 
97
164
  Add loaders and loading states to parallel routes:
@@ -139,6 +206,65 @@ parallel(
139
206
  )
140
207
  ```
141
208
 
209
+ ## Composable Slots via `handler.use`
210
+
211
+ Slot handlers can carry their own loader, loading, error/notFound boundaries, revalidation, and transition defaults via `.use`. The mount site then declares **just the slot names** — no per-call data wiring.
212
+
213
+ ```typescript
214
+ const CartSummary: Handler = async (ctx) => {
215
+ const cart = await ctx.use(CartLoader);
216
+ return <CartSummaryView cart={cart} />;
217
+ };
218
+ CartSummary.use = () => [
219
+ loader(CartLoader),
220
+ loading(<CartSkeleton />),
221
+ revalidate(revalidateCartData),
222
+ ];
223
+
224
+ // Same slot, no copy-pasted plumbing across layouts.
225
+ layout(<DashboardLayout />, () => [
226
+ parallel({ "@cart": CartSummary }),
227
+ path("/dashboard", DashboardIndex, { name: "dashboard.index" }),
228
+ ]);
229
+
230
+ layout(<AccountLayout />, () => [
231
+ parallel({ "@cart": CartSummary }),
232
+ path("/account", AccountIndex, { name: "account.index" }),
233
+ ]);
234
+ ```
235
+
236
+ A slot's `loading()` (whether from `handler.use` or explicit) makes that slot an independent streaming unit, exactly as in the **Streaming Behavior** section above.
237
+
238
+ The `parallel` mount site has the narrowest allow-list for `handler.use` items — slots cannot bring their own middleware or layout, only `revalidate`, `loader`, `loading`, `errorBoundary`, `notFoundBoundary`, and `transition`. See [skills/handler-use](../handler-use/SKILL.md) for the full table and merge rules.
239
+
240
+ ### Two scopes for explicit `use`: shared (broadcast) and slot-local
241
+
242
+ `parallel({...slots}, () => [...use])` runs the shared `use()` callback **once per slot** ([dsl-helpers.ts](../../src/route-definition/dsl-helpers.ts)) — items in that callback land on every slot's entry. That's the right behavior for the items the parallel allow-list permits and that accumulate (`loader`, `revalidate`, `errorBoundary`, `notFoundBoundary`, `transition`). (Slots cannot bring `middleware` or `layout` — see the allowed-types note above.)
243
+
244
+ For single-assignment items like `loading()`, broadcasting overwrites every slot's `handler.use` default. Pass a **slot descriptor** `{ handler, use }` instead — items in the descriptor's `use` apply only to that slot:
245
+
246
+ ```typescript
247
+ // @cart gets a custom skeleton; @notifs keeps its handler.use default.
248
+ parallel({
249
+ "@cart": {
250
+ handler: Cart,
251
+ use: () => [loading(<CustomCartSkeleton />)],
252
+ },
253
+ "@notifs": Notifs,
254
+ });
255
+
256
+ // Opt one slot out of streaming while siblings still stream the broadcast.
257
+ parallel(
258
+ {
259
+ "@cart": { handler: Cart, use: () => [loading(false)] },
260
+ "@notifs": Notifs,
261
+ },
262
+ () => [loading(<BroadcastSkeleton />)],
263
+ );
264
+ ```
265
+
266
+ Per-slot merge order is **handler.use → shared use → slot-local use**. Slot-local is the narrowest scope, so it wins for last-write-wins items. See [skills/handler-use § `loading()` is a single-assignment item — scope it correctly](../handler-use/SKILL.md#loading-is-a-single-assignment-item--scope-it-correctly) for the full reasoning.
267
+
142
268
  ## Slot Override Semantics
143
269
 
144
270
  When multiple `parallel()` calls define the same slot name, **the last
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: prerender
3
- description: Pre-render route segments at build time with Prerender and passthrough fallback
3
+ description: Pre-render route segments at build time with Prerender and Passthrough live fallback
4
4
  argument-hint: [passthrough]
5
5
  ---
6
6
 
@@ -54,8 +54,14 @@ path("/blog/:slug", BlogPost, { name: "blog.post" })
54
54
 
55
55
  ### With Passthrough (live fallback for unknown params)
56
56
 
57
+ Wrap a `Prerender` definition with `Passthrough()` to add a separate live handler
58
+ for unknown params at runtime. The build handler runs at build time, the live
59
+ handler runs at request time.
60
+
57
61
  ```typescript
58
- export const ProductPage = Prerender(
62
+ import { Prerender, Passthrough } from "@rangojs/router";
63
+
64
+ export const ProductPageDef = Prerender(
59
65
  async () => {
60
66
  const top = await db.query("SELECT id FROM products WHERE featured");
61
67
  return top.map(p => ({ id: p.id }));
@@ -64,32 +70,41 @@ export const ProductPage = Prerender(
64
70
  const product = await db.query("SELECT * FROM products WHERE id = ?", ctx.params.id);
65
71
  return <Product data={product} />;
66
72
  },
67
- { passthrough: true, concurrency: 4 }
73
+ { concurrency: 4 }
68
74
  );
75
+
76
+ // In route definition:
77
+ path("/products/:id", Passthrough(ProductPageDef, async (ctx) => {
78
+ const product = await ctx.env.DB.query("SELECT * FROM products WHERE id = ?", ctx.params.id);
79
+ return <Product data={product} />;
80
+ }), { name: "product" })
69
81
  ```
70
82
 
71
- ## Passthrough Mode
83
+ ## Passthrough Wrapper
72
84
 
73
- Controls whether the handler stays in the RSC server bundle after build:
85
+ `Passthrough(prerenderDef, liveHandler)` wraps a `Prerender` definition with a
86
+ separate handler for runtime fallback. The build and live handlers are separate
87
+ functions — no `ctx.build` branching needed.
74
88
 
75
- | | `passthrough: false` (default) | `passthrough: true` |
76
- | ------------------- | --------------------------------------- | --------------------------------------- |
77
- | Known params | Served from pre-rendered Flight payload | Served from pre-rendered Flight payload |
78
- | Unknown params | Handler evicted, no live fallback | Handler runs live at request time |
79
- | `ctx.passthrough()` | Throws (not allowed) | Skips artifact, defers to live fallback |
80
- | Bundle size | Handler code + imports removed | Handler code kept in RSC bundle |
81
- | `revalidate()` | Not allowed (handler gone) | Allowed (handler can re-render) |
82
- | `loading()` | Ignored (segments fully resolved) | Works for live fallback renders |
89
+ | | Plain `Prerender` (no wrapper) | `Passthrough(def, liveHandler)` |
90
+ | ------------------- | --------------------------------------- | ---------------------------------------- |
91
+ | Known params | Served from pre-rendered Flight payload | Served from pre-rendered Flight payload |
92
+ | Unknown params | Handler evicted, no live fallback | Live handler runs at request time |
93
+ | `ctx.passthrough()` | Throws (not on Passthrough route) | Skips artifact, defers to live handler |
94
+ | Bundle size | Build handler code + imports removed | Build handler evicted, live handler kept |
95
+ | `revalidate()` | Not allowed (handler gone) | Allowed (live handler can re-render) |
96
+ | `loading()` | Ignored (segments fully resolved) | Works for live fallback renders |
83
97
 
84
- ### When to use passthrough
98
+ ### When to use Passthrough
85
99
 
86
- Use `passthrough: true` when:
100
+ Use `Passthrough()` when:
87
101
 
88
102
  - The route has a large or open-ended param space (e.g., user profiles, product pages)
89
103
  - You want to pre-render popular/known params for speed but still serve unknown params live
90
104
  - You need `revalidate()` on the route
105
+ - The live handler needs runtime bindings (e.g., `ctx.env.DB`)
91
106
 
92
- Use `passthrough: false` (default) when:
107
+ Use plain `Prerender` (no wrapper) when:
93
108
 
94
109
  - All possible params are known at build time (e.g., markdown files, config-driven pages)
95
110
  - You want maximum bundle size reduction (handler code + node:fs imports removed)
@@ -103,6 +118,7 @@ Handlers receive `BuildContext` at build time, a subset of the runtime `HandlerC
103
118
  interface BuildContext<TParams> {
104
119
  params: TParams; // From getParams
105
120
  build: true; // Always true at build time
121
+ dev: boolean; // true in Vite dev mode, false during production build
106
122
  use: <T>(handle: Handle<T>) => (data: T) => void; // Push handle data
107
123
  url: URL; // Synthetic URL from pattern + params
108
124
  pathname: string; // Pathname from synthetic URL
@@ -115,8 +131,9 @@ interface BuildContext<TParams> {
115
131
  params?: Record<string, string>,
116
132
  search?: Record<string, unknown>,
117
133
  ): string; // URL generation
118
- passthrough(): PrerenderPassthroughResult; // Skip local artifact (passthrough routes only)
119
- // NOT available: req, headers, cookies, env (throws descriptive errors)
134
+ passthrough(): PrerenderPassthroughResult; // Skip local artifact (Passthrough routes only)
135
+ env: DefaultEnv; // Available when buildEnv is configured in rango() (throws otherwise)
136
+ // NOT available: request, headers, cookies (always throw)
120
137
  }
121
138
  ```
122
139
 
@@ -183,18 +200,17 @@ In production builds, `Prerender` exports are replaced with stubs:
183
200
  // Original
184
201
  export const BlogPost = Prerender(getParams, handler);
185
202
 
186
- // Stubbed (ships to server bundle when passthrough: false)
203
+ // Stubbed (all Prerender handlers are evicted)
187
204
  export const BlogPost = {
188
205
  __brand: "prerenderHandler",
189
206
  $$id: "abc123#BlogPost",
190
207
  };
191
208
  ```
192
209
 
193
- The original module and its imports (node:fs, markdown libs) are excluded from
194
- the bundle. With `passthrough: true`, the handler code stays in the RSC bundle.
210
+ All Prerender handlers are evicted in production. The live handler for
211
+ `Passthrough()` routes lives in the urls module and is not evicted.
195
212
 
196
- In client and SSR environments, ALL prerender handlers are always stubbed
197
- (passthrough only affects the RSC server bundle).
213
+ In client and SSR environments, ALL prerender handlers are always stubbed.
198
214
 
199
215
  ## Sub-use Semantics
200
216
 
@@ -231,15 +247,15 @@ path("/blog/:slug", BlogPost, { name: "blog.post" }, () => [
231
247
  | DSL item | Behavior with Prerender |
232
248
  | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
233
249
  | `loader()` | Live at runtime, bundled normally. Use `cache()` for caching. |
234
- | `revalidate()` | Not allowed without passthrough. Allowed with passthrough. |
250
+ | `revalidate()` | Not allowed without Passthrough. Allowed with Passthrough. |
235
251
  | `cache()` | Orthogonal -- use on parent layouts and loaders. |
236
252
  | `layout()` | Child layouts inside path are pre-rendered. Parent layouts are live. |
237
253
  | `parallel()` | Parallel slots inside path are pre-rendered. |
238
254
  | `middleware()` | Skipped during pre-render (no request). Runs at request time for loaders. |
239
- | `loading()` | Ignored without passthrough. Works for live fallback with passthrough. |
255
+ | `loading()` | Ignored without Passthrough. Works for live fallback with Passthrough. |
240
256
  | `intercept()` | Pre-rendered at build time. Intercept variant stored under `/i` key alongside main segments. At runtime, the correct variant is served based on `ctx.isIntercept`. `when()` conditions are skipped at build time (all intercepts are pre-rendered unconditionally). |
241
257
 
242
- When passthrough revalidation is enabled, remember that revalidation is
258
+ When Passthrough revalidation is enabled, remember that revalidation is
243
259
  still partial: opting a child segment into revalidation does not
244
260
  implicitly re-run outer prerender-derived handlers/layouts.
245
261
 
@@ -304,12 +320,19 @@ export const BlogPost = Prerender(
304
320
  }
305
321
  return <PostPage slug={ctx.params.slug} />;
306
322
  },
307
- { passthrough: true },
308
323
  );
324
+
325
+ // Wrap with Passthrough to serve skipped params live at runtime
326
+ export const BlogPost = Passthrough(BlogPostDef, async (ctx) => {
327
+ if (ctx.params.slug === "draft") {
328
+ throw new Skip("Draft articles are not pre-rendered");
329
+ }
330
+ return <PostPage slug={ctx.params.slug} />;
331
+ });
309
332
  ```
310
333
 
311
- Skipped entries are excluded from the build output. With `passthrough: true`,
312
- the handler stays in the bundle and serves skipped params live at request time.
334
+ Skipped entries are excluded from the build output. With `Passthrough()`,
335
+ the live handler serves skipped params at request time.
313
336
 
314
337
  `Skip` also works in `Static` handlers:
315
338
 
@@ -326,7 +349,7 @@ export const TocSidebar = Static(() => {
326
349
  | Handler outcome | Effect |
327
350
  | --------------------------- | ----------------------------------------------------- |
328
351
  | JSX / `null` | Normal prerender entry, log OK |
329
- | `return ctx.passthrough()` | Skip entry, log PASS, continue (passthrough routes) |
352
+ | `return ctx.passthrough()` | Skip entry, log PASS, continue (Passthrough routes) |
330
353
  | `throw new Skip("reason")` | Skip entry, log SKIP, continue with remaining entries |
331
354
  | `throw new Error("reason")` | Log FAIL, stop ALL pre-rendering, fail the build |
332
355
 
@@ -366,56 +389,59 @@ falls back according to normal dev/runtime behavior.
366
389
 
367
390
  ## Per-Param Passthrough with ctx.passthrough()
368
391
 
369
- On `{ passthrough: true }` routes, a handler can return `ctx.passthrough()`
370
- to skip writing a local prerender artifact for a specific param set. At
371
- runtime, the missing entry falls through to the live handler.
392
+ On routes wrapped with `Passthrough()`, the build handler can return
393
+ `ctx.passthrough()` to skip writing a local prerender artifact for a specific
394
+ param set. At runtime, the missing entry falls through to the live handler.
372
395
 
373
396
  ```typescript
374
- export const BlogPost = Prerender(
397
+ export const BlogPostDef = Prerender(
375
398
  async () => [{ slug: "a" }, { slug: "b" }, { slug: "c" }],
376
399
  async (ctx) => {
377
400
  const post = await getPost(ctx.params.slug);
378
401
  if (!post) return ctx.passthrough();
379
402
  return <article>{post.content}</article>;
380
403
  },
381
- { passthrough: true },
382
404
  );
405
+
406
+ export const BlogPost = Passthrough(BlogPostDef, async (ctx) => {
407
+ const post = await getPost(ctx.params.slug);
408
+ return <article>{post.content}</article>;
409
+ });
383
410
  ```
384
411
 
385
412
  ### Semantics
386
413
 
387
- - JSX or `null` from the handler produces a normal prerender entry.
414
+ - JSX or `null` from the build handler produces a normal prerender entry.
388
415
  - `ctx.passthrough()` returns a sentinel that signals "no local artifact".
389
416
  The build skips the manifest entry for that param set.
390
- - `ctx.passthrough()` on a non-passthrough route throws an invariant error.
417
+ - `ctx.passthrough()` on a route not wrapped with `Passthrough()` throws.
391
418
  - `ctx.passthrough()` at runtime (`ctx.build === false`) also throws.
392
419
  It is a build-time-only control flow.
393
- - `getParams()` still enumerates the param set; the handler decides per-param
394
- whether to produce an artifact or defer to runtime.
420
+ - `getParams()` still enumerates the param set; the build handler decides
421
+ per-param whether to produce an artifact or defer to the live handler.
395
422
 
396
423
  ### Difference from Skip
397
424
 
398
- | Mechanism | Effect on build | Runtime behavior |
399
- | ------------------- | ---------------------- | ---------------------------------------------------- |
400
- | `throw new Skip()` | Skips entry, logs SKIP | No artifact, no live fallback unless passthrough |
401
- | `ctx.passthrough()` | Skips entry, logs PASS | Always defers to live handler (requires passthrough) |
425
+ | Mechanism | Effect on build | Runtime behavior |
426
+ | ------------------- | ---------------------- | ------------------------------------------------------ |
427
+ | `throw new Skip()` | Skips entry, logs SKIP | No artifact, no live fallback unless Passthrough route |
428
+ | `ctx.passthrough()` | Skips entry, logs PASS | Always defers to live handler (requires Passthrough) |
402
429
 
403
- Use `ctx.passthrough()` when you want the handler to run live at request time
430
+ Use `ctx.passthrough()` when you want the live handler to run at request time
404
431
  for specific params. Use `Skip` when you want to exclude params entirely.
405
432
 
406
433
  ### Use case: Remote storage
407
434
 
408
435
  `ctx.passthrough()` enables a pattern where build-time data is stored in a
409
- remote KV store instead of the local prerender manifest. The handler
436
+ remote KV store instead of the local prerender manifest. The build handler
410
437
  pre-computes data during `getParams`, pushes it to KV, then calls
411
438
  `ctx.passthrough()` so the local build skips the artifact. At runtime,
412
- the live handler reads from KV:
439
+ the Passthrough live handler reads from KV:
413
440
 
414
441
  ```typescript
415
- export const Product = Prerender(
442
+ export const ProductDef = Prerender(
416
443
  async () => {
417
444
  const products = await db.getFeaturedProducts();
418
- // Pre-compute and store in remote KV during build
419
445
  for (const p of products) {
420
446
  await kv.put(`product:${p.id}`, await renderProduct(p));
421
447
  }
@@ -423,14 +449,16 @@ export const Product = Prerender(
423
449
  },
424
450
  async (ctx) => {
425
451
  // At build time: skip local artifact, data is in KV
426
- if (ctx.build) return ctx.passthrough();
427
- // At runtime: read from KV
428
- const cached = await kv.get(`product:${ctx.params.id}`);
429
- if (cached) return cached;
430
- return <Product data={await db.getProduct(ctx.params.id)} />;
452
+ return ctx.passthrough();
431
453
  },
432
- { passthrough: true },
433
454
  );
455
+
456
+ export const Product = Passthrough(ProductDef, async (ctx) => {
457
+ // At runtime: read from KV, fall back to DB
458
+ const cached = await kv.get(`product:${ctx.params.id}`);
459
+ if (cached) return cached;
460
+ return <Product data={await ctx.env.DB.getProduct(ctx.params.id)} />;
461
+ });
434
462
  ```
435
463
 
436
464
  ### Build logs
@@ -458,8 +486,8 @@ Flight payload. They do not update at request time.
458
486
  ### Server actions work normally
459
487
 
460
488
  Actions do not re-render the B segment. The pre-rendered handler output stays
461
- frozen. Loaders are live and can be revalidated by actions. With `passthrough: true`
462
- and `revalidate()`, the handler itself can re-render live.
489
+ frozen. Loaders are live and can be revalidated by actions. With `Passthrough()`
490
+ and `revalidate()`, the live handler can re-render.
463
491
 
464
492
  ### Empty getParams
465
493
 
@@ -470,21 +498,21 @@ If `getParams` returns an empty array, no Flight payloads are written. No error.
470
498
  Routes using `Prerender` must have a `name` in path options.
471
499
  The name is used as the storage key for Flight payloads.
472
500
 
473
- ### No revalidate without passthrough
501
+ ### No revalidate without Passthrough
474
502
 
475
- Using `revalidate()` with `passthrough: false` produces a build-time warning.
503
+ Using `revalidate()` without `Passthrough()` produces a build-time warning.
476
504
  The handler is evicted -- there is nothing to re-render.
477
505
 
478
- ### loading() is ignored without passthrough
506
+ ### loading() is ignored without Passthrough
479
507
 
480
508
  Pre-rendered segments are fully resolved at build time and never suspend.
481
- With `passthrough: true`, `loading()` works for live fallback renders.
509
+ With `Passthrough()`, `loading()` works for live fallback renders.
482
510
 
483
511
  ## Complete Example
484
512
 
485
513
  ```typescript
486
514
  // pages/guides-handler.tsx
487
- import { Prerender } from "@rangojs/router";
515
+ import { Prerender, Passthrough } from "@rangojs/router";
488
516
  import { Link } from "@rangojs/router/client";
489
517
  import { href } from "../router.js";
490
518
 
@@ -493,7 +521,7 @@ const knownGuides: Record<string, string> = {
493
521
  caching: "Caching Guide",
494
522
  };
495
523
 
496
- export const GuidesDetail = Prerender<{ slug: string }>(
524
+ export const GuidesDetailDef = Prerender<{ slug: string }>(
497
525
  async () => Object.keys(knownGuides).map((slug) => ({ slug })),
498
526
  async (ctx) => {
499
527
  const title = knownGuides[ctx.params.slug] ?? `Guide: ${ctx.params.slug}`;
@@ -509,9 +537,23 @@ export const GuidesDetail = Prerender<{ slug: string }>(
509
537
  </div>
510
538
  );
511
539
  },
512
- { passthrough: true },
513
540
  );
514
541
 
542
+ export const GuidesDetail = Passthrough(GuidesDetailDef, async (ctx) => {
543
+ const title = knownGuides[ctx.params.slug] ?? `Guide: ${ctx.params.slug}`;
544
+ return (
545
+ <div>
546
+ <h1>{title}</h1>
547
+ <p>Slug: {ctx.params.slug}</p>
548
+ <nav>
549
+ <Link to={href("guides.detail", { slug: "routing" })}>Routing</Link>
550
+ {" | "}
551
+ <Link to={href("guides.detail", { slug: "dynamic-test" })}>Dynamic</Link>
552
+ </nav>
553
+ </div>
554
+ );
555
+ });
556
+
515
557
  // pages/guides.tsx
516
558
  import { urls } from "@rangojs/router";
517
559
  import { GuidesDetail } from "./guides-handler.js";
@@ -588,12 +630,12 @@ Loaders run fresh at request time for both variants.
588
630
  Pre-rendered routes set flags on the route trie leaf at build time:
589
631
 
590
632
  - `pr: true` -- route has pre-rendered B segment data
591
- - `pt: true` -- passthrough mode (handler available for live fallback)
633
+ - `pt: true` -- route wrapped with `Passthrough()` (live handler available)
592
634
 
593
635
  At runtime, the cache-lookup middleware uses these flags:
594
636
 
595
637
  - `pr + hit` -- serve pre-rendered Flight payload
596
- - `pr + pt + miss` -- fall through to live handler (handler kept in bundle)
638
+ - `pr + pt + miss` -- fall through to Passthrough live handler
597
639
  - `pr + miss` (no pt) -- fall through (handler stubbed, no live render)
598
640
 
599
641
  ## Contributor Checklist
@@ -603,7 +645,7 @@ Before changing prerender behavior, read these docs and run these tests.
603
645
  ### Docs to re-read
604
646
 
605
647
  - [Prerender API design](../../docs/prerender-api-design.md) -- canonical
606
- architecture: build-time flow, runtime flow, storage, passthrough, intercept
648
+ architecture: build-time flow, runtime flow, storage, Passthrough, intercept
607
649
  - [Execution model](../../docs/internal/execution-model.md) -- handler-first
608
650
  ordering, middleware scope, context visibility rules
609
651
  - [Semantic change checklist](../../docs/internal/semantic-change-checklist.md)
@@ -612,7 +654,7 @@ Before changing prerender behavior, read these docs and run these tests.
612
654
  ### Tests to run
613
655
 
614
656
  ```bash
615
- # Core prerender e2e (passthrough, eviction, loaders, sub-use, intercept)
657
+ # Core prerender e2e (Passthrough, eviction, loaders, sub-use, intercept)
616
658
  pnpm --filter @rangojs/router exec playwright test prerender
617
659
 
618
660
  # Prerender-specific unit test
@@ -632,7 +674,7 @@ pnpm --filter @rangojs/router exec playwright test handler-first
632
674
  `/__rsc_prerender` endpoint tests and node.js dev-server fallback.
633
675
  - Log-based assertions (build output lines, debug cache logs) are inherently
634
676
  dev/build-only and do not need a production counterpart.
635
- - Behavioral assertions (rendered content, loader freshness, passthrough
677
+ - Behavioral assertions (rendered content, loader freshness, Passthrough
636
678
  fallback, intercept variant selection) must work in the production build.
637
679
 
638
680
  ## Maintenance References
@@ -10,28 +10,30 @@ Django-inspired RSC router with composable URL patterns, type-safe href, and ser
10
10
 
11
11
  ## Skills
12
12
 
13
- | Skill | Description |
14
- | ------------------ | -------------------------------------------------------------------------- |
15
- | `/router-setup` | Create and configure the RSC router |
16
- | `/route` | Define routes with `urls()` and `path()` |
17
- | `/layout` | Layouts that wrap child routes |
18
- | `/loader` | Data loaders with `createLoader()` |
19
- | `/middleware` | Request processing and authentication |
20
- | `/intercept` | Modal/slide-over patterns for soft navigation |
21
- | `/parallel` | Multi-column layouts and sidebars |
22
- | `/caching` | Segment caching with memory or KV stores |
23
- | `/use-cache` | Function-level caching with `"use cache"` directive |
24
- | `/cache-guide` | When to use `cache()` vs `"use cache"` — differences and decision guide |
25
- | `/document-cache` | Edge caching with Cache-Control headers |
26
- | `/theme` | Light/dark mode with FOUC prevention |
27
- | `/links` | URL generation: ctx.reverse, href, useHref, useMount, scopedReverse |
28
- | `/hooks` | Client-side React hooks |
29
- | `/typesafety` | Type-safe routes, params, href, and environment |
30
- | `/host-router` | Multi-app host routing with domain/subdomain patterns |
31
- | `/tailwind` | Set up Tailwind CSS v4 with `?url` imports |
32
- | `/response-routes` | JSON/text/HTML/XML/stream endpoints with `path.json()`, `path.text()` |
33
- | `/mime-routes` | Content negotiation — same URL, different response types via Accept header |
34
- | `/fonts` | Load web fonts with preload hints |
13
+ | Skill | Description |
14
+ | ----------------------- | -------------------------------------------------------------------------- |
15
+ | `/router-setup` | Create and configure the RSC router |
16
+ | `/route` | Define routes with `urls()` and `path()` |
17
+ | `/layout` | Layouts that wrap child routes |
18
+ | `/loader` | Data loaders with `createLoader()` |
19
+ | `/middleware` | Request processing and authentication |
20
+ | `/intercept` | Modal/slide-over patterns for soft navigation |
21
+ | `/parallel` | Multi-column layouts and sidebars |
22
+ | `/caching` | Segment caching with memory or KV stores |
23
+ | `/use-cache` | Function-level caching with `"use cache"` directive |
24
+ | `/cache-guide` | When to use `cache()` vs `"use cache"` — differences and decision guide |
25
+ | `/document-cache` | Edge caching with Cache-Control headers |
26
+ | `/theme` | Light/dark mode with FOUC prevention |
27
+ | `/links` | URL generation: ctx.reverse, href, useHref, useMount, scopedReverse |
28
+ | `/hooks` | Client-side React hooks |
29
+ | `/typesafety` | Type-safe routes, params, href, and environment |
30
+ | `/host-router` | Multi-app host routing with domain/subdomain patterns |
31
+ | `/tailwind` | Set up Tailwind CSS v4 with `?url` imports |
32
+ | `/response-routes` | JSON/text/HTML/XML/stream endpoints with `path.json()`, `path.text()` |
33
+ | `/mime-routes` | Content negotiation — same URL, different response types via Accept header |
34
+ | `/fonts` | Load web fonts with preload hints |
35
+ | `/migrate-nextjs` | Migrate a Next.js App Router project to Rango |
36
+ | `/migrate-react-router` | Migrate a React Router / Remix project to Rango |
35
37
 
36
38
  ## Quick Start
37
39
 
@@ -181,6 +181,37 @@ String keys still work (`ctx.set("key", value)` / `ctx.get("key")`), but
181
181
  Only route handlers and middleware can call `ctx.set()`. Layouts, parallels,
182
182
  and intercepts can only read via `ctx.get()`.
183
183
 
184
+ #### Non-cacheable context variables
185
+
186
+ Mark a var as non-cacheable when it holds inherently request-specific data
187
+ (sessions, auth tokens, per-request IDs). There are two ways:
188
+
189
+ ```typescript
190
+ // Var-level: every value written to this var is non-cacheable
191
+ const Session = createVar<SessionData>({ cache: false });
192
+
193
+ // Write-level: escalate a normally-cacheable var for this specific write
194
+ const Theme = createVar<string>();
195
+ ctx.set(Theme, userTheme, { cache: false });
196
+ ```
197
+
198
+ "Least cacheable wins" — if either the var definition or the write site says
199
+ `cache: false`, the value is non-cacheable.
200
+
201
+ Reading a non-cacheable var inside `cache()` or `"use cache"` throws at
202
+ runtime. This prevents request-specific data from leaking into cached output:
203
+
204
+ ```typescript
205
+ // This throws — Session is non-cacheable
206
+ async function CachedWidget(ctx) {
207
+ "use cache";
208
+ const session = ctx.get(Session); // Error: non-cacheable var read inside cache scope
209
+ return <Widget />;
210
+ }
211
+ ```
212
+
213
+ Cacheable vars (the default) can be read freely inside cache scopes.
214
+
184
215
  ### Revalidation Contracts for Handler Data
185
216
 
186
217
  Handler-first guarantees apply within a single full render pass. For partial
@@ -352,6 +383,30 @@ urls(({ path, layout }) => [
352
383
  ])
353
384
  ```
354
385
 
386
+ ## Handler-attached `.use`
387
+
388
+ Page handlers can carry their own loader, middleware, error boundaries, parallels, and other defaults via a `.use` callback — so the page is self-contained and reusable across mount sites without re-wiring the same items.
389
+
390
+ ```typescript
391
+ const ProductPage: Handler<"/product/:slug"> = async (ctx) => {
392
+ const product = await ctx.use(ProductLoader);
393
+ return <ProductView product={product} />;
394
+ };
395
+ ProductPage.use = () => [
396
+ loader(ProductLoader),
397
+ loading(<ProductSkeleton />),
398
+ middleware(async (ctx, next) => {
399
+ await next();
400
+ ctx.header("Cache-Control", "private, max-age=60");
401
+ }),
402
+ ];
403
+
404
+ // Mount site has no per-page wiring — defaults travel with the handler.
405
+ path("/product/:slug", ProductPage, { name: "product" });
406
+ ```
407
+
408
+ Explicit `use()` at the mount site merges with `handler.use` (handler defaults first, explicit second). See [skills/handler-use](../handler-use/SKILL.md) for the merge order, allowed item types per mount site, and override semantics.
409
+
355
410
  ## Complete Example
356
411
 
357
412
  ```typescript