@rangojs/router 0.0.0-experimental.6fe6a3cc → 0.0.0-experimental.70

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 (942) 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 +115 -58
  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 +57 -5
  24. package/src/browser/prefetch/fetch.ts +38 -23
  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 +53 -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 +60 -5
  79. package/src/router/match-result.ts +22 -6
  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 +5 -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 +193 -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 +429 -296
  95. package/src/router/types.ts +1 -0
  96. package/src/router.ts +59 -6
  97. package/src/rsc/handler.ts +472 -372
  98. package/src/rsc/loader-fetch.ts +23 -3
  99. package/src/rsc/manifest-init.ts +5 -1
  100. package/src/rsc/progressive-enhancement.ts +14 -2
  101. package/src/rsc/rsc-rendering.ts +10 -1
  102. package/src/rsc/server-action.ts +8 -0
  103. package/src/rsc/ssr-setup.ts +2 -2
  104. package/src/rsc/types.ts +9 -1
  105. package/src/segment-system.tsx +140 -4
  106. package/src/server/context.ts +140 -14
  107. package/src/server/handle-store.ts +19 -0
  108. package/src/server/loader-registry.ts +9 -8
  109. package/src/server/request-context.ts +185 -19
  110. package/src/ssr/index.tsx +4 -0
  111. package/src/static-handler.ts +18 -6
  112. package/src/types/cache-types.ts +4 -4
  113. package/src/types/handler-context.ts +137 -33
  114. package/src/types/loader-types.ts +36 -9
  115. package/src/types/route-entry.ts +8 -1
  116. package/src/types/segments.ts +2 -0
  117. package/src/urls/path-helper-types.ts +9 -2
  118. package/src/urls/path-helper.ts +48 -13
  119. package/src/urls/pattern-types.ts +12 -0
  120. package/src/urls/response-types.ts +16 -6
  121. package/src/use-loader.tsx +77 -5
  122. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  123. package/src/vite/discovery/discover-routers.ts +5 -1
  124. package/src/vite/discovery/prerender-collection.ts +128 -74
  125. package/src/vite/discovery/state.ts +13 -6
  126. package/src/vite/index.ts +4 -0
  127. package/src/vite/plugin-types.ts +51 -79
  128. package/src/vite/plugins/expose-action-id.ts +1 -3
  129. package/src/vite/plugins/expose-id-utils.ts +12 -0
  130. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  131. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  132. package/src/vite/plugins/performance-tracks.ts +88 -0
  133. package/src/vite/plugins/refresh-cmd.ts +88 -26
  134. package/src/vite/plugins/version-plugin.ts +13 -1
  135. package/src/vite/rango.ts +163 -211
  136. package/src/vite/router-discovery.ts +178 -45
  137. package/src/vite/utils/banner.ts +3 -3
  138. package/src/vite/utils/prerender-utils.ts +18 -0
  139. package/src/vite/utils/shared-utils.ts +3 -2
  140. package/dist/__internal.d.ts +0 -83
  141. package/dist/__internal.d.ts.map +0 -1
  142. package/dist/__internal.js +0 -19
  143. package/dist/__internal.js.map +0 -1
  144. package/dist/__mocks__/version.d.ts +0 -7
  145. package/dist/__mocks__/version.d.ts.map +0 -1
  146. package/dist/__mocks__/version.js +0 -7
  147. package/dist/__mocks__/version.js.map +0 -1
  148. package/dist/__tests__/client-href.test.d.ts +0 -2
  149. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  150. package/dist/__tests__/client-href.test.js +0 -74
  151. package/dist/__tests__/client-href.test.js.map +0 -1
  152. package/dist/__tests__/component-utils.test.d.ts +0 -2
  153. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  154. package/dist/__tests__/component-utils.test.js +0 -51
  155. package/dist/__tests__/component-utils.test.js.map +0 -1
  156. package/dist/__tests__/event-controller.test.d.ts +0 -2
  157. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  158. package/dist/__tests__/event-controller.test.js +0 -538
  159. package/dist/__tests__/event-controller.test.js.map +0 -1
  160. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  161. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  162. package/dist/__tests__/helpers/route-tree.js +0 -374
  163. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  164. package/dist/__tests__/match-result.test.d.ts +0 -2
  165. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  166. package/dist/__tests__/match-result.test.js +0 -154
  167. package/dist/__tests__/match-result.test.js.map +0 -1
  168. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  169. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  170. package/dist/__tests__/navigation-store.test.js +0 -440
  171. package/dist/__tests__/navigation-store.test.js.map +0 -1
  172. package/dist/__tests__/partial-update.test.d.ts +0 -2
  173. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  174. package/dist/__tests__/partial-update.test.js +0 -1009
  175. package/dist/__tests__/partial-update.test.js.map +0 -1
  176. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  177. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  178. package/dist/__tests__/reverse-types.test.js +0 -656
  179. package/dist/__tests__/reverse-types.test.js.map +0 -1
  180. package/dist/__tests__/route-definition.test.d.ts +0 -2
  181. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  182. package/dist/__tests__/route-definition.test.js +0 -55
  183. package/dist/__tests__/route-definition.test.js.map +0 -1
  184. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  185. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  186. package/dist/__tests__/router-helpers.test.js +0 -377
  187. package/dist/__tests__/router-helpers.test.js.map +0 -1
  188. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  189. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  190. package/dist/__tests__/router-integration-2.test.js +0 -426
  191. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  192. package/dist/__tests__/router-integration.test.d.ts +0 -2
  193. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  194. package/dist/__tests__/router-integration.test.js +0 -1051
  195. package/dist/__tests__/router-integration.test.js.map +0 -1
  196. package/dist/__tests__/search-params.test.d.ts +0 -5
  197. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  198. package/dist/__tests__/search-params.test.js +0 -306
  199. package/dist/__tests__/search-params.test.js.map +0 -1
  200. package/dist/__tests__/segment-system.test.d.ts +0 -2
  201. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  202. package/dist/__tests__/segment-system.test.js +0 -627
  203. package/dist/__tests__/segment-system.test.js.map +0 -1
  204. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  205. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  206. package/dist/__tests__/static-handler-types.test.js +0 -63
  207. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  208. package/dist/__tests__/urls.test.d.ts +0 -2
  209. package/dist/__tests__/urls.test.d.ts.map +0 -1
  210. package/dist/__tests__/urls.test.js +0 -421
  211. package/dist/__tests__/urls.test.js.map +0 -1
  212. package/dist/__tests__/use-mount.test.d.ts +0 -2
  213. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  214. package/dist/__tests__/use-mount.test.js +0 -35
  215. package/dist/__tests__/use-mount.test.js.map +0 -1
  216. package/dist/bin/rango.d.ts +0 -2
  217. package/dist/bin/rango.d.ts.map +0 -1
  218. package/dist/bin/rango.js.map +0 -1
  219. package/dist/browser/event-controller.d.ts +0 -191
  220. package/dist/browser/event-controller.d.ts.map +0 -1
  221. package/dist/browser/event-controller.js +0 -559
  222. package/dist/browser/event-controller.js.map +0 -1
  223. package/dist/browser/index.d.ts +0 -2
  224. package/dist/browser/index.d.ts.map +0 -1
  225. package/dist/browser/index.js +0 -14
  226. package/dist/browser/index.js.map +0 -1
  227. package/dist/browser/link-interceptor.d.ts +0 -38
  228. package/dist/browser/link-interceptor.d.ts.map +0 -1
  229. package/dist/browser/link-interceptor.js +0 -99
  230. package/dist/browser/link-interceptor.js.map +0 -1
  231. package/dist/browser/logging.d.ts +0 -10
  232. package/dist/browser/logging.d.ts.map +0 -1
  233. package/dist/browser/logging.js +0 -29
  234. package/dist/browser/logging.js.map +0 -1
  235. package/dist/browser/lru-cache.d.ts +0 -17
  236. package/dist/browser/lru-cache.d.ts.map +0 -1
  237. package/dist/browser/lru-cache.js +0 -50
  238. package/dist/browser/lru-cache.js.map +0 -1
  239. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  240. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  241. package/dist/browser/merge-segment-loaders.js +0 -102
  242. package/dist/browser/merge-segment-loaders.js.map +0 -1
  243. package/dist/browser/navigation-bridge.d.ts +0 -102
  244. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  245. package/dist/browser/navigation-bridge.js +0 -708
  246. package/dist/browser/navigation-bridge.js.map +0 -1
  247. package/dist/browser/navigation-client.d.ts +0 -25
  248. package/dist/browser/navigation-client.d.ts.map +0 -1
  249. package/dist/browser/navigation-client.js +0 -157
  250. package/dist/browser/navigation-client.js.map +0 -1
  251. package/dist/browser/navigation-store.d.ts +0 -101
  252. package/dist/browser/navigation-store.d.ts.map +0 -1
  253. package/dist/browser/navigation-store.js +0 -625
  254. package/dist/browser/navigation-store.js.map +0 -1
  255. package/dist/browser/partial-update.d.ts +0 -75
  256. package/dist/browser/partial-update.d.ts.map +0 -1
  257. package/dist/browser/partial-update.js +0 -426
  258. package/dist/browser/partial-update.js.map +0 -1
  259. package/dist/browser/react/Link.d.ts +0 -86
  260. package/dist/browser/react/Link.d.ts.map +0 -1
  261. package/dist/browser/react/Link.js +0 -128
  262. package/dist/browser/react/Link.js.map +0 -1
  263. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  264. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  265. package/dist/browser/react/NavigationProvider.js +0 -216
  266. package/dist/browser/react/NavigationProvider.js.map +0 -1
  267. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  268. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  269. package/dist/browser/react/ScrollRestoration.js +0 -57
  270. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  271. package/dist/browser/react/context.d.ts +0 -46
  272. package/dist/browser/react/context.d.ts.map +0 -1
  273. package/dist/browser/react/context.js +0 -10
  274. package/dist/browser/react/context.js.map +0 -1
  275. package/dist/browser/react/index.d.ts +0 -11
  276. package/dist/browser/react/index.d.ts.map +0 -1
  277. package/dist/browser/react/index.js +0 -22
  278. package/dist/browser/react/index.js.map +0 -1
  279. package/dist/browser/react/location-state-shared.d.ts +0 -63
  280. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  281. package/dist/browser/react/location-state-shared.js +0 -81
  282. package/dist/browser/react/location-state-shared.js.map +0 -1
  283. package/dist/browser/react/location-state.d.ts +0 -23
  284. package/dist/browser/react/location-state.d.ts.map +0 -1
  285. package/dist/browser/react/location-state.js +0 -29
  286. package/dist/browser/react/location-state.js.map +0 -1
  287. package/dist/browser/react/mount-context.d.ts +0 -24
  288. package/dist/browser/react/mount-context.d.ts.map +0 -1
  289. package/dist/browser/react/mount-context.js +0 -24
  290. package/dist/browser/react/mount-context.js.map +0 -1
  291. package/dist/browser/react/use-action.d.ts +0 -64
  292. package/dist/browser/react/use-action.d.ts.map +0 -1
  293. package/dist/browser/react/use-action.js +0 -134
  294. package/dist/browser/react/use-action.js.map +0 -1
  295. package/dist/browser/react/use-client-cache.d.ts +0 -41
  296. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  297. package/dist/browser/react/use-client-cache.js +0 -39
  298. package/dist/browser/react/use-client-cache.js.map +0 -1
  299. package/dist/browser/react/use-handle.d.ts +0 -31
  300. package/dist/browser/react/use-handle.d.ts.map +0 -1
  301. package/dist/browser/react/use-handle.js +0 -144
  302. package/dist/browser/react/use-handle.js.map +0 -1
  303. package/dist/browser/react/use-href.d.ts +0 -33
  304. package/dist/browser/react/use-href.d.ts.map +0 -1
  305. package/dist/browser/react/use-href.js +0 -39
  306. package/dist/browser/react/use-href.js.map +0 -1
  307. package/dist/browser/react/use-link-status.d.ts +0 -37
  308. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  309. package/dist/browser/react/use-link-status.js +0 -99
  310. package/dist/browser/react/use-link-status.js.map +0 -1
  311. package/dist/browser/react/use-mount.d.ts +0 -25
  312. package/dist/browser/react/use-mount.d.ts.map +0 -1
  313. package/dist/browser/react/use-mount.js +0 -30
  314. package/dist/browser/react/use-mount.js.map +0 -1
  315. package/dist/browser/react/use-navigation.d.ts +0 -27
  316. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  317. package/dist/browser/react/use-navigation.js +0 -87
  318. package/dist/browser/react/use-navigation.js.map +0 -1
  319. package/dist/browser/react/use-segments.d.ts +0 -38
  320. package/dist/browser/react/use-segments.d.ts.map +0 -1
  321. package/dist/browser/react/use-segments.js +0 -130
  322. package/dist/browser/react/use-segments.js.map +0 -1
  323. package/dist/browser/request-controller.d.ts +0 -26
  324. package/dist/browser/request-controller.d.ts.map +0 -1
  325. package/dist/browser/request-controller.js +0 -147
  326. package/dist/browser/request-controller.js.map +0 -1
  327. package/dist/browser/rsc-router.d.ts +0 -129
  328. package/dist/browser/rsc-router.d.ts.map +0 -1
  329. package/dist/browser/rsc-router.js +0 -195
  330. package/dist/browser/rsc-router.js.map +0 -1
  331. package/dist/browser/scroll-restoration.d.ts +0 -93
  332. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  333. package/dist/browser/scroll-restoration.js +0 -321
  334. package/dist/browser/scroll-restoration.js.map +0 -1
  335. package/dist/browser/segment-structure-assert.d.ts +0 -17
  336. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  337. package/dist/browser/segment-structure-assert.js +0 -59
  338. package/dist/browser/segment-structure-assert.js.map +0 -1
  339. package/dist/browser/server-action-bridge.d.ts +0 -26
  340. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  341. package/dist/browser/server-action-bridge.js +0 -668
  342. package/dist/browser/server-action-bridge.js.map +0 -1
  343. package/dist/browser/shallow.d.ts +0 -12
  344. package/dist/browser/shallow.d.ts.map +0 -1
  345. package/dist/browser/shallow.js +0 -34
  346. package/dist/browser/shallow.js.map +0 -1
  347. package/dist/browser/types.d.ts +0 -369
  348. package/dist/browser/types.d.ts.map +0 -1
  349. package/dist/browser/types.js +0 -2
  350. package/dist/browser/types.js.map +0 -1
  351. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  352. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  353. package/dist/build/__tests__/generate-cli.test.js +0 -237
  354. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  355. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  356. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  357. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  358. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  359. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  360. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  361. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  362. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  363. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  364. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  365. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  366. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  367. package/dist/build/generate-manifest.d.ts +0 -81
  368. package/dist/build/generate-manifest.d.ts.map +0 -1
  369. package/dist/build/generate-manifest.js +0 -276
  370. package/dist/build/generate-manifest.js.map +0 -1
  371. package/dist/build/generate-route-types.d.ts +0 -115
  372. package/dist/build/generate-route-types.d.ts.map +0 -1
  373. package/dist/build/generate-route-types.js +0 -740
  374. package/dist/build/generate-route-types.js.map +0 -1
  375. package/dist/build/index.d.ts +0 -21
  376. package/dist/build/index.d.ts.map +0 -1
  377. package/dist/build/index.js +0 -21
  378. package/dist/build/index.js.map +0 -1
  379. package/dist/build/route-trie.d.ts +0 -71
  380. package/dist/build/route-trie.d.ts.map +0 -1
  381. package/dist/build/route-trie.js +0 -175
  382. package/dist/build/route-trie.js.map +0 -1
  383. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  384. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  385. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  386. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  387. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  388. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  389. package/dist/cache/__tests__/document-cache.test.js +0 -345
  390. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  391. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  392. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  393. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  394. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  395. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  396. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  397. package/dist/cache/__tests__/memory-store.test.js +0 -367
  398. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  399. package/dist/cache/cache-scope.d.ts +0 -102
  400. package/dist/cache/cache-scope.d.ts.map +0 -1
  401. package/dist/cache/cache-scope.js +0 -440
  402. package/dist/cache/cache-scope.js.map +0 -1
  403. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  404. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  405. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  406. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  407. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  408. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  409. package/dist/cache/cf/cf-cache-store.js +0 -242
  410. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  411. package/dist/cache/cf/index.d.ts +0 -14
  412. package/dist/cache/cf/index.d.ts.map +0 -1
  413. package/dist/cache/cf/index.js +0 -17
  414. package/dist/cache/cf/index.js.map +0 -1
  415. package/dist/cache/document-cache.d.ts +0 -64
  416. package/dist/cache/document-cache.d.ts.map +0 -1
  417. package/dist/cache/document-cache.js +0 -228
  418. package/dist/cache/document-cache.js.map +0 -1
  419. package/dist/cache/index.d.ts +0 -19
  420. package/dist/cache/index.d.ts.map +0 -1
  421. package/dist/cache/index.js +0 -21
  422. package/dist/cache/index.js.map +0 -1
  423. package/dist/cache/memory-segment-store.d.ts +0 -110
  424. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  425. package/dist/cache/memory-segment-store.js +0 -117
  426. package/dist/cache/memory-segment-store.js.map +0 -1
  427. package/dist/cache/memory-store.d.ts +0 -41
  428. package/dist/cache/memory-store.d.ts.map +0 -1
  429. package/dist/cache/memory-store.js +0 -191
  430. package/dist/cache/memory-store.js.map +0 -1
  431. package/dist/cache/types.d.ts +0 -317
  432. package/dist/cache/types.d.ts.map +0 -1
  433. package/dist/cache/types.js +0 -12
  434. package/dist/cache/types.js.map +0 -1
  435. package/dist/client.d.ts +0 -248
  436. package/dist/client.d.ts.map +0 -1
  437. package/dist/client.js +0 -367
  438. package/dist/client.js.map +0 -1
  439. package/dist/client.rsc.d.ts +0 -26
  440. package/dist/client.rsc.d.ts.map +0 -1
  441. package/dist/client.rsc.js +0 -46
  442. package/dist/client.rsc.js.map +0 -1
  443. package/dist/component-utils.d.ts +0 -36
  444. package/dist/component-utils.d.ts.map +0 -1
  445. package/dist/component-utils.js +0 -61
  446. package/dist/component-utils.js.map +0 -1
  447. package/dist/components/DefaultDocument.d.ts +0 -13
  448. package/dist/components/DefaultDocument.d.ts.map +0 -1
  449. package/dist/components/DefaultDocument.js +0 -15
  450. package/dist/components/DefaultDocument.js.map +0 -1
  451. package/dist/debug.d.ts +0 -58
  452. package/dist/debug.d.ts.map +0 -1
  453. package/dist/debug.js +0 -157
  454. package/dist/debug.js.map +0 -1
  455. package/dist/default-error-boundary.d.ts +0 -11
  456. package/dist/default-error-boundary.d.ts.map +0 -1
  457. package/dist/default-error-boundary.js +0 -45
  458. package/dist/default-error-boundary.js.map +0 -1
  459. package/dist/deps/browser.d.ts +0 -2
  460. package/dist/deps/browser.d.ts.map +0 -1
  461. package/dist/deps/browser.js +0 -3
  462. package/dist/deps/browser.js.map +0 -1
  463. package/dist/deps/html-stream-client.d.ts +0 -2
  464. package/dist/deps/html-stream-client.d.ts.map +0 -1
  465. package/dist/deps/html-stream-client.js +0 -3
  466. package/dist/deps/html-stream-client.js.map +0 -1
  467. package/dist/deps/html-stream-server.d.ts +0 -2
  468. package/dist/deps/html-stream-server.d.ts.map +0 -1
  469. package/dist/deps/html-stream-server.js +0 -3
  470. package/dist/deps/html-stream-server.js.map +0 -1
  471. package/dist/deps/rsc.d.ts +0 -2
  472. package/dist/deps/rsc.d.ts.map +0 -1
  473. package/dist/deps/rsc.js +0 -4
  474. package/dist/deps/rsc.js.map +0 -1
  475. package/dist/deps/ssr.d.ts +0 -2
  476. package/dist/deps/ssr.d.ts.map +0 -1
  477. package/dist/deps/ssr.js +0 -3
  478. package/dist/deps/ssr.js.map +0 -1
  479. package/dist/errors.d.ts +0 -174
  480. package/dist/errors.d.ts.map +0 -1
  481. package/dist/errors.js +0 -241
  482. package/dist/errors.js.map +0 -1
  483. package/dist/handle.d.ts +0 -78
  484. package/dist/handle.d.ts.map +0 -1
  485. package/dist/handle.js +0 -82
  486. package/dist/handle.js.map +0 -1
  487. package/dist/handles/MetaTags.d.ts +0 -14
  488. package/dist/handles/MetaTags.d.ts.map +0 -1
  489. package/dist/handles/MetaTags.js +0 -136
  490. package/dist/handles/MetaTags.js.map +0 -1
  491. package/dist/handles/index.d.ts +0 -6
  492. package/dist/handles/index.d.ts.map +0 -1
  493. package/dist/handles/index.js +0 -6
  494. package/dist/handles/index.js.map +0 -1
  495. package/dist/handles/meta.d.ts +0 -39
  496. package/dist/handles/meta.d.ts.map +0 -1
  497. package/dist/handles/meta.js +0 -202
  498. package/dist/handles/meta.js.map +0 -1
  499. package/dist/host/__tests__/errors.test.d.ts +0 -2
  500. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  501. package/dist/host/__tests__/errors.test.js +0 -76
  502. package/dist/host/__tests__/errors.test.js.map +0 -1
  503. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  504. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  505. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  506. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  507. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  508. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  509. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  510. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  511. package/dist/host/__tests__/router.test.d.ts +0 -2
  512. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  513. package/dist/host/__tests__/router.test.js +0 -241
  514. package/dist/host/__tests__/router.test.js.map +0 -1
  515. package/dist/host/__tests__/testing.test.d.ts +0 -2
  516. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  517. package/dist/host/__tests__/testing.test.js +0 -64
  518. package/dist/host/__tests__/testing.test.js.map +0 -1
  519. package/dist/host/__tests__/utils.test.d.ts +0 -2
  520. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  521. package/dist/host/__tests__/utils.test.js +0 -29
  522. package/dist/host/__tests__/utils.test.js.map +0 -1
  523. package/dist/host/cookie-handler.d.ts +0 -34
  524. package/dist/host/cookie-handler.d.ts.map +0 -1
  525. package/dist/host/cookie-handler.js +0 -124
  526. package/dist/host/cookie-handler.js.map +0 -1
  527. package/dist/host/errors.d.ts +0 -56
  528. package/dist/host/errors.d.ts.map +0 -1
  529. package/dist/host/errors.js +0 -79
  530. package/dist/host/errors.js.map +0 -1
  531. package/dist/host/index.d.ts +0 -29
  532. package/dist/host/index.d.ts.map +0 -1
  533. package/dist/host/index.js +0 -32
  534. package/dist/host/index.js.map +0 -1
  535. package/dist/host/pattern-matcher.d.ts +0 -36
  536. package/dist/host/pattern-matcher.d.ts.map +0 -1
  537. package/dist/host/pattern-matcher.js +0 -172
  538. package/dist/host/pattern-matcher.js.map +0 -1
  539. package/dist/host/router.d.ts +0 -26
  540. package/dist/host/router.d.ts.map +0 -1
  541. package/dist/host/router.js +0 -218
  542. package/dist/host/router.js.map +0 -1
  543. package/dist/host/testing.d.ts +0 -36
  544. package/dist/host/testing.d.ts.map +0 -1
  545. package/dist/host/testing.js +0 -55
  546. package/dist/host/testing.js.map +0 -1
  547. package/dist/host/types.d.ts +0 -115
  548. package/dist/host/types.d.ts.map +0 -1
  549. package/dist/host/types.js +0 -7
  550. package/dist/host/types.js.map +0 -1
  551. package/dist/host/utils.d.ts +0 -21
  552. package/dist/host/utils.d.ts.map +0 -1
  553. package/dist/host/utils.js +0 -23
  554. package/dist/host/utils.js.map +0 -1
  555. package/dist/href-client.d.ts +0 -131
  556. package/dist/href-client.d.ts.map +0 -1
  557. package/dist/href-client.js +0 -64
  558. package/dist/href-client.js.map +0 -1
  559. package/dist/href-context.d.ts +0 -29
  560. package/dist/href-context.d.ts.map +0 -1
  561. package/dist/href-context.js +0 -21
  562. package/dist/href-context.js.map +0 -1
  563. package/dist/index.d.ts +0 -73
  564. package/dist/index.d.ts.map +0 -1
  565. package/dist/index.js +0 -91
  566. package/dist/index.js.map +0 -1
  567. package/dist/index.rsc.d.ts +0 -32
  568. package/dist/index.rsc.d.ts.map +0 -1
  569. package/dist/index.rsc.js +0 -40
  570. package/dist/index.rsc.js.map +0 -1
  571. package/dist/internal-debug.d.ts +0 -2
  572. package/dist/internal-debug.d.ts.map +0 -1
  573. package/dist/internal-debug.js +0 -5
  574. package/dist/internal-debug.js.map +0 -1
  575. package/dist/loader.d.ts +0 -14
  576. package/dist/loader.d.ts.map +0 -1
  577. package/dist/loader.js +0 -20
  578. package/dist/loader.js.map +0 -1
  579. package/dist/loader.rsc.d.ts +0 -19
  580. package/dist/loader.rsc.d.ts.map +0 -1
  581. package/dist/loader.rsc.js +0 -99
  582. package/dist/loader.rsc.js.map +0 -1
  583. package/dist/network-error-thrower.d.ts +0 -17
  584. package/dist/network-error-thrower.d.ts.map +0 -1
  585. package/dist/network-error-thrower.js +0 -14
  586. package/dist/network-error-thrower.js.map +0 -1
  587. package/dist/outlet-context.d.ts +0 -13
  588. package/dist/outlet-context.d.ts.map +0 -1
  589. package/dist/outlet-context.js +0 -3
  590. package/dist/outlet-context.js.map +0 -1
  591. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  592. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  593. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  594. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  595. package/dist/prerender/param-hash.d.ts +0 -16
  596. package/dist/prerender/param-hash.d.ts.map +0 -1
  597. package/dist/prerender/param-hash.js +0 -36
  598. package/dist/prerender/param-hash.js.map +0 -1
  599. package/dist/prerender/store.d.ts +0 -38
  600. package/dist/prerender/store.d.ts.map +0 -1
  601. package/dist/prerender/store.js +0 -61
  602. package/dist/prerender/store.js.map +0 -1
  603. package/dist/prerender.d.ts +0 -66
  604. package/dist/prerender.d.ts.map +0 -1
  605. package/dist/prerender.js +0 -57
  606. package/dist/prerender.js.map +0 -1
  607. package/dist/reverse.d.ts +0 -196
  608. package/dist/reverse.d.ts.map +0 -1
  609. package/dist/reverse.js +0 -78
  610. package/dist/reverse.js.map +0 -1
  611. package/dist/root-error-boundary.d.ts +0 -33
  612. package/dist/root-error-boundary.d.ts.map +0 -1
  613. package/dist/root-error-boundary.js +0 -165
  614. package/dist/root-error-boundary.js.map +0 -1
  615. package/dist/route-content-wrapper.d.ts +0 -46
  616. package/dist/route-content-wrapper.d.ts.map +0 -1
  617. package/dist/route-content-wrapper.js +0 -77
  618. package/dist/route-content-wrapper.js.map +0 -1
  619. package/dist/route-definition.d.ts +0 -421
  620. package/dist/route-definition.d.ts.map +0 -1
  621. package/dist/route-definition.js +0 -868
  622. package/dist/route-definition.js.map +0 -1
  623. package/dist/route-map-builder.d.ts +0 -155
  624. package/dist/route-map-builder.d.ts.map +0 -1
  625. package/dist/route-map-builder.js +0 -237
  626. package/dist/route-map-builder.js.map +0 -1
  627. package/dist/route-types.d.ts +0 -165
  628. package/dist/route-types.d.ts.map +0 -1
  629. package/dist/route-types.js +0 -7
  630. package/dist/route-types.js.map +0 -1
  631. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  632. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  633. package/dist/router/__tests__/handler-context.test.js +0 -65
  634. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  635. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  636. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  637. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  638. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  639. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  640. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  641. package/dist/router/__tests__/match-context.test.js +0 -92
  642. package/dist/router/__tests__/match-context.test.js.map +0 -1
  643. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  644. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  645. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  646. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  647. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  648. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  649. package/dist/router/__tests__/match-result.test.js +0 -457
  650. package/dist/router/__tests__/match-result.test.js.map +0 -1
  651. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  652. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  653. package/dist/router/__tests__/on-error.test.js +0 -678
  654. package/dist/router/__tests__/on-error.test.js.map +0 -1
  655. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  656. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  657. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  658. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  659. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  660. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  661. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  662. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  663. package/dist/router/error-handling.d.ts +0 -77
  664. package/dist/router/error-handling.d.ts.map +0 -1
  665. package/dist/router/error-handling.js +0 -202
  666. package/dist/router/error-handling.js.map +0 -1
  667. package/dist/router/handler-context.d.ts +0 -20
  668. package/dist/router/handler-context.d.ts.map +0 -1
  669. package/dist/router/handler-context.js +0 -198
  670. package/dist/router/handler-context.js.map +0 -1
  671. package/dist/router/intercept-resolution.d.ts +0 -66
  672. package/dist/router/intercept-resolution.d.ts.map +0 -1
  673. package/dist/router/intercept-resolution.js +0 -246
  674. package/dist/router/intercept-resolution.js.map +0 -1
  675. package/dist/router/loader-resolution.d.ts +0 -64
  676. package/dist/router/loader-resolution.d.ts.map +0 -1
  677. package/dist/router/loader-resolution.js +0 -284
  678. package/dist/router/loader-resolution.js.map +0 -1
  679. package/dist/router/logging.d.ts +0 -15
  680. package/dist/router/logging.d.ts.map +0 -1
  681. package/dist/router/logging.js +0 -99
  682. package/dist/router/logging.js.map +0 -1
  683. package/dist/router/manifest.d.ts +0 -22
  684. package/dist/router/manifest.d.ts.map +0 -1
  685. package/dist/router/manifest.js +0 -181
  686. package/dist/router/manifest.js.map +0 -1
  687. package/dist/router/match-api.d.ts +0 -35
  688. package/dist/router/match-api.d.ts.map +0 -1
  689. package/dist/router/match-api.js +0 -406
  690. package/dist/router/match-api.js.map +0 -1
  691. package/dist/router/match-context.d.ts +0 -206
  692. package/dist/router/match-context.d.ts.map +0 -1
  693. package/dist/router/match-context.js +0 -17
  694. package/dist/router/match-context.js.map +0 -1
  695. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  696. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  697. package/dist/router/match-middleware/background-revalidation.js +0 -75
  698. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  699. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  700. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  701. package/dist/router/match-middleware/cache-lookup.js +0 -257
  702. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  703. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  704. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  705. package/dist/router/match-middleware/cache-store.js +0 -108
  706. package/dist/router/match-middleware/cache-store.js.map +0 -1
  707. package/dist/router/match-middleware/index.d.ts +0 -81
  708. package/dist/router/match-middleware/index.d.ts.map +0 -1
  709. package/dist/router/match-middleware/index.js +0 -80
  710. package/dist/router/match-middleware/index.js.map +0 -1
  711. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  712. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  713. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  714. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  715. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  716. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  717. package/dist/router/match-middleware/segment-resolution.js +0 -53
  718. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  719. package/dist/router/match-pipelines.d.ts +0 -147
  720. package/dist/router/match-pipelines.d.ts.map +0 -1
  721. package/dist/router/match-pipelines.js +0 -82
  722. package/dist/router/match-pipelines.js.map +0 -1
  723. package/dist/router/match-result.d.ts +0 -126
  724. package/dist/router/match-result.d.ts.map +0 -1
  725. package/dist/router/match-result.js +0 -93
  726. package/dist/router/match-result.js.map +0 -1
  727. package/dist/router/metrics.d.ts +0 -20
  728. package/dist/router/metrics.d.ts.map +0 -1
  729. package/dist/router/metrics.js +0 -47
  730. package/dist/router/metrics.js.map +0 -1
  731. package/dist/router/middleware.d.ts +0 -249
  732. package/dist/router/middleware.d.ts.map +0 -1
  733. package/dist/router/middleware.js +0 -434
  734. package/dist/router/middleware.js.map +0 -1
  735. package/dist/router/middleware.test.d.ts +0 -2
  736. package/dist/router/middleware.test.d.ts.map +0 -1
  737. package/dist/router/middleware.test.js +0 -816
  738. package/dist/router/middleware.test.js.map +0 -1
  739. package/dist/router/pattern-matching.d.ts +0 -149
  740. package/dist/router/pattern-matching.d.ts.map +0 -1
  741. package/dist/router/pattern-matching.js +0 -349
  742. package/dist/router/pattern-matching.js.map +0 -1
  743. package/dist/router/revalidation.d.ts +0 -44
  744. package/dist/router/revalidation.d.ts.map +0 -1
  745. package/dist/router/revalidation.js +0 -147
  746. package/dist/router/revalidation.js.map +0 -1
  747. package/dist/router/router-context.d.ts +0 -135
  748. package/dist/router/router-context.d.ts.map +0 -1
  749. package/dist/router/router-context.js +0 -36
  750. package/dist/router/router-context.js.map +0 -1
  751. package/dist/router/segment-resolution.d.ts +0 -127
  752. package/dist/router/segment-resolution.d.ts.map +0 -1
  753. package/dist/router/segment-resolution.js +0 -919
  754. package/dist/router/segment-resolution.js.map +0 -1
  755. package/dist/router/trie-matching.d.ts +0 -40
  756. package/dist/router/trie-matching.d.ts.map +0 -1
  757. package/dist/router/trie-matching.js +0 -127
  758. package/dist/router/trie-matching.js.map +0 -1
  759. package/dist/router/types.d.ts +0 -136
  760. package/dist/router/types.d.ts.map +0 -1
  761. package/dist/router/types.js +0 -7
  762. package/dist/router/types.js.map +0 -1
  763. package/dist/router.d.ts +0 -753
  764. package/dist/router.d.ts.map +0 -1
  765. package/dist/router.gen.d.ts +0 -6
  766. package/dist/router.gen.d.ts.map +0 -1
  767. package/dist/router.gen.js +0 -6
  768. package/dist/router.gen.js.map +0 -1
  769. package/dist/router.js +0 -1304
  770. package/dist/router.js.map +0 -1
  771. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  772. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  773. package/dist/rsc/__tests__/helpers.test.js +0 -140
  774. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  775. package/dist/rsc/handler.d.ts +0 -45
  776. package/dist/rsc/handler.d.ts.map +0 -1
  777. package/dist/rsc/handler.js +0 -1172
  778. package/dist/rsc/handler.js.map +0 -1
  779. package/dist/rsc/helpers.d.ts +0 -16
  780. package/dist/rsc/helpers.d.ts.map +0 -1
  781. package/dist/rsc/helpers.js +0 -55
  782. package/dist/rsc/helpers.js.map +0 -1
  783. package/dist/rsc/index.d.ts +0 -22
  784. package/dist/rsc/index.d.ts.map +0 -1
  785. package/dist/rsc/index.js +0 -23
  786. package/dist/rsc/index.js.map +0 -1
  787. package/dist/rsc/nonce.d.ts +0 -9
  788. package/dist/rsc/nonce.d.ts.map +0 -1
  789. package/dist/rsc/nonce.js +0 -18
  790. package/dist/rsc/nonce.js.map +0 -1
  791. package/dist/rsc/types.d.ts +0 -206
  792. package/dist/rsc/types.d.ts.map +0 -1
  793. package/dist/rsc/types.js +0 -8
  794. package/dist/rsc/types.js.map +0 -1
  795. package/dist/search-params.d.ts +0 -103
  796. package/dist/search-params.d.ts.map +0 -1
  797. package/dist/search-params.js +0 -74
  798. package/dist/search-params.js.map +0 -1
  799. package/dist/segment-system.d.ts +0 -75
  800. package/dist/segment-system.d.ts.map +0 -1
  801. package/dist/segment-system.js +0 -336
  802. package/dist/segment-system.js.map +0 -1
  803. package/dist/server/context.d.ts +0 -245
  804. package/dist/server/context.d.ts.map +0 -1
  805. package/dist/server/context.js +0 -197
  806. package/dist/server/context.js.map +0 -1
  807. package/dist/server/fetchable-loader-store.d.ts +0 -18
  808. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  809. package/dist/server/fetchable-loader-store.js +0 -18
  810. package/dist/server/fetchable-loader-store.js.map +0 -1
  811. package/dist/server/handle-store.d.ts +0 -85
  812. package/dist/server/handle-store.d.ts.map +0 -1
  813. package/dist/server/handle-store.js +0 -142
  814. package/dist/server/handle-store.js.map +0 -1
  815. package/dist/server/loader-registry.d.ts +0 -55
  816. package/dist/server/loader-registry.d.ts.map +0 -1
  817. package/dist/server/loader-registry.js +0 -132
  818. package/dist/server/loader-registry.js.map +0 -1
  819. package/dist/server/request-context.d.ts +0 -226
  820. package/dist/server/request-context.d.ts.map +0 -1
  821. package/dist/server/request-context.js +0 -290
  822. package/dist/server/request-context.js.map +0 -1
  823. package/dist/server/root-layout.d.ts +0 -4
  824. package/dist/server/root-layout.d.ts.map +0 -1
  825. package/dist/server/root-layout.js +0 -5
  826. package/dist/server/root-layout.js.map +0 -1
  827. package/dist/server.d.ts +0 -15
  828. package/dist/server.d.ts.map +0 -1
  829. package/dist/server.js +0 -20
  830. package/dist/server.js.map +0 -1
  831. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  832. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  833. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  834. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  835. package/dist/ssr/index.d.ts +0 -98
  836. package/dist/ssr/index.d.ts.map +0 -1
  837. package/dist/ssr/index.js +0 -158
  838. package/dist/ssr/index.js.map +0 -1
  839. package/dist/static-handler.d.ts +0 -50
  840. package/dist/static-handler.d.ts.map +0 -1
  841. package/dist/static-handler.gen.d.ts +0 -5
  842. package/dist/static-handler.gen.d.ts.map +0 -1
  843. package/dist/static-handler.gen.js +0 -5
  844. package/dist/static-handler.gen.js.map +0 -1
  845. package/dist/static-handler.js +0 -29
  846. package/dist/static-handler.js.map +0 -1
  847. package/dist/theme/ThemeProvider.d.ts +0 -20
  848. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  849. package/dist/theme/ThemeProvider.js +0 -240
  850. package/dist/theme/ThemeProvider.js.map +0 -1
  851. package/dist/theme/ThemeScript.d.ts +0 -48
  852. package/dist/theme/ThemeScript.d.ts.map +0 -1
  853. package/dist/theme/ThemeScript.js +0 -13
  854. package/dist/theme/ThemeScript.js.map +0 -1
  855. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  856. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  857. package/dist/theme/__tests__/theme.test.js +0 -103
  858. package/dist/theme/__tests__/theme.test.js.map +0 -1
  859. package/dist/theme/constants.d.ts +0 -29
  860. package/dist/theme/constants.d.ts.map +0 -1
  861. package/dist/theme/constants.js +0 -48
  862. package/dist/theme/constants.js.map +0 -1
  863. package/dist/theme/index.d.ts +0 -31
  864. package/dist/theme/index.d.ts.map +0 -1
  865. package/dist/theme/index.js +0 -36
  866. package/dist/theme/index.js.map +0 -1
  867. package/dist/theme/theme-context.d.ts +0 -40
  868. package/dist/theme/theme-context.d.ts.map +0 -1
  869. package/dist/theme/theme-context.js +0 -60
  870. package/dist/theme/theme-context.js.map +0 -1
  871. package/dist/theme/theme-script.d.ts +0 -27
  872. package/dist/theme/theme-script.d.ts.map +0 -1
  873. package/dist/theme/theme-script.js +0 -147
  874. package/dist/theme/theme-script.js.map +0 -1
  875. package/dist/theme/types.d.ts +0 -163
  876. package/dist/theme/types.d.ts.map +0 -1
  877. package/dist/theme/types.js +0 -11
  878. package/dist/theme/types.js.map +0 -1
  879. package/dist/theme/use-theme.d.ts +0 -12
  880. package/dist/theme/use-theme.d.ts.map +0 -1
  881. package/dist/theme/use-theme.js +0 -40
  882. package/dist/theme/use-theme.js.map +0 -1
  883. package/dist/types.d.ts +0 -1479
  884. package/dist/types.d.ts.map +0 -1
  885. package/dist/types.js +0 -10
  886. package/dist/types.js.map +0 -1
  887. package/dist/urls.d.ts +0 -441
  888. package/dist/urls.d.ts.map +0 -1
  889. package/dist/urls.gen.d.ts +0 -8
  890. package/dist/urls.gen.d.ts.map +0 -1
  891. package/dist/urls.gen.js +0 -8
  892. package/dist/urls.gen.js.map +0 -1
  893. package/dist/urls.js +0 -443
  894. package/dist/urls.js.map +0 -1
  895. package/dist/use-loader.d.ts +0 -127
  896. package/dist/use-loader.d.ts.map +0 -1
  897. package/dist/use-loader.js +0 -237
  898. package/dist/use-loader.js.map +0 -1
  899. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  900. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  901. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  902. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  903. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  904. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  905. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  906. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  907. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  908. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  909. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  910. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  911. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  912. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  913. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  914. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  915. package/dist/vite/ast-handler-extract.d.ts +0 -49
  916. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  917. package/dist/vite/ast-handler-extract.js +0 -249
  918. package/dist/vite/ast-handler-extract.js.map +0 -1
  919. package/dist/vite/expose-action-id.d.ts +0 -19
  920. package/dist/vite/expose-action-id.d.ts.map +0 -1
  921. package/dist/vite/expose-action-id.js +0 -250
  922. package/dist/vite/expose-action-id.js.map +0 -1
  923. package/dist/vite/expose-id-utils.d.ts +0 -69
  924. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  925. package/dist/vite/expose-id-utils.js +0 -289
  926. package/dist/vite/expose-id-utils.js.map +0 -1
  927. package/dist/vite/expose-internal-ids.d.ts +0 -22
  928. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  929. package/dist/vite/expose-internal-ids.js +0 -886
  930. package/dist/vite/expose-internal-ids.js.map +0 -1
  931. package/dist/vite/index.d.ts +0 -149
  932. package/dist/vite/index.d.ts.map +0 -1
  933. package/dist/vite/index.js.map +0 -1
  934. package/dist/vite/index.named-routes.gen.ts +0 -103
  935. package/dist/vite/package-resolution.d.ts +0 -43
  936. package/dist/vite/package-resolution.d.ts.map +0 -1
  937. package/dist/vite/package-resolution.js +0 -112
  938. package/dist/vite/package-resolution.js.map +0 -1
  939. package/dist/vite/virtual-entries.d.ts +0 -25
  940. package/dist/vite/virtual-entries.d.ts.map +0 -1
  941. package/dist/vite/virtual-entries.js +0 -110
  942. package/dist/vite/virtual-entries.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rangojs/router",
3
- "version": "0.0.0-experimental.6fe6a3cc",
3
+ "version": "0.0.0-experimental.70",
4
4
  "description": "Django-inspired RSC router with composable URL patterns",
5
5
  "keywords": [
6
6
  "react",
@@ -142,7 +142,7 @@
142
142
  "test:unit:watch": "vitest"
143
143
  },
144
144
  "dependencies": {
145
- "@vitejs/plugin-rsc": "^0.5.14",
145
+ "@vitejs/plugin-rsc": "^0.5.19",
146
146
  "magic-string": "^0.30.17",
147
147
  "picomatch": "^4.0.3",
148
148
  "rsc-html-stream": "^0.0.7"
@@ -162,6 +162,38 @@ middleware(async (ctx, next) => {
162
162
  });
163
163
  ```
164
164
 
165
+ ## Context Variable Cache Safety
166
+
167
+ Context variables created with `createVar()` are cacheable by default and can
168
+ be read freely inside `cache()` and `"use cache"` scopes. Non-cacheable vars
169
+ throw at read time to prevent request-specific data from being captured.
170
+
171
+ There are two ways to mark a value as non-cacheable:
172
+
173
+ ```typescript
174
+ // Var-level policy — inherently request-specific data
175
+ const Session = createVar<SessionData>({ cache: false });
176
+
177
+ // Write-level escalation — this specific write is non-cacheable
178
+ ctx.set(Theme, derivedTheme, { cache: false });
179
+ ```
180
+
181
+ "Least cacheable wins": if either the var definition or the `ctx.set()` call
182
+ specifies `cache: false`, the value is non-cacheable.
183
+
184
+ **Behavior inside cache scopes:**
185
+
186
+ | Operation | Inside `cache()` / `"use cache"` |
187
+ | ----------------------------------- | -------------------------------- |
188
+ | `ctx.get(cacheableVar)` | Allowed |
189
+ | `ctx.get(nonCacheableVar)` | Throws |
190
+ | `ctx.set(var, value)` (cacheable) | Allowed |
191
+ | `ctx.header()`, `ctx.cookie()`, etc | Throws (response side effects) |
192
+
193
+ Write is dumb — `ctx.set()` stores the cache metadata but does not enforce.
194
+ Enforcement happens at read time (`ctx.get()`), where ALS detects the cache
195
+ scope and rejects non-cacheable reads.
196
+
165
197
  ## Loaders Are Always Fresh
166
198
 
167
199
  Loaders are **never cached** by route-level `cache()`. Even on a full cache hit
@@ -120,9 +120,9 @@ const store = new MemorySegmentCacheStore({
120
120
  });
121
121
  ```
122
122
 
123
- ### Cloudflare KV Store
123
+ ### Cloudflare Edge Cache Store
124
124
 
125
- For distributed caching on Cloudflare Workers:
125
+ For distributed caching on Cloudflare Workers using the Cache API:
126
126
 
127
127
  ```typescript
128
128
  import { CFCacheStore } from "@rangojs/router/cache";
@@ -132,14 +132,55 @@ const router = createRouter<AppBindings>({
132
132
  urls: urlpatterns,
133
133
  cache: (env, ctx) => ({
134
134
  store: new CFCacheStore({
135
- kv: env.CACHE_KV,
136
- waitUntil: (fn) => ctx!.waitUntil(fn),
135
+ ctx,
136
+ defaults: { ttl: 60, swr: 300 },
137
137
  }),
138
138
  enabled: true,
139
139
  }),
140
140
  });
141
141
  ```
142
142
 
143
+ ### With KV L2 Persistence
144
+
145
+ Add a KV namespace for global cross-colo persistence. On Cache API miss, KV is
146
+ checked and hits are promoted back to L1. Writes go to both layers.
147
+
148
+ ```typescript
149
+ import { CFCacheStore } from "@rangojs/router/cache";
150
+
151
+ const router = createRouter<AppBindings>({
152
+ document: Document,
153
+ urls: urlpatterns,
154
+ cache: (env, ctx) => ({
155
+ store: new CFCacheStore({
156
+ ctx,
157
+ kv: env.CACHE_KV, // optional KV namespace binding
158
+ defaults: { ttl: 60, swr: 300 },
159
+ }),
160
+ enabled: true,
161
+ }),
162
+ });
163
+ ```
164
+
165
+ **How the two layers work:**
166
+
167
+ | Scenario | L1 (Cache API) | L2 (KV) | Result |
168
+ | ------------ | -------------- | ------- | ----------------------------- |
169
+ | Hot request | HIT | — | Serve from L1 (fast) |
170
+ | Cold colo | MISS | HIT | Serve from KV, promote to L1 |
171
+ | First render | MISS | MISS | Render, write to both L1 + KV |
172
+
173
+ KV entries require `expirationTtl >= 60s`. Short-lived entries (< 60s total TTL)
174
+ are only cached in L1.
175
+
176
+ ## Context Variables Inside Cache Boundaries
177
+
178
+ Context variables (`createVar`) are cacheable by default and can be read and
179
+ written inside `cache()` scopes. Variables marked with `{ cache: false }` (at
180
+ the var level or write level) throw when read inside a cache scope. Response
181
+ side effects (`ctx.header()`, `ctx.cookie()`) always throw inside cache
182
+ boundaries. See `/cache-guide` for the full cache safety table.
183
+
143
184
  ## Nested Cache Boundaries
144
185
 
145
186
  Override cache settings for specific sections:
@@ -139,7 +139,9 @@ function GlobalNav() {
139
139
  }
140
140
  ```
141
141
 
142
- `href()` is an identity function at runtime but provides compile-time validation via `ValidPaths` type. Paths are validated against registered route patterns using `PatternToPath`.
142
+ `href()` provides compile-time validation via `ValidPaths` type. Paths are validated against registered route patterns using `PatternToPath`.
143
+
144
+ `href()` is a raw path helper — it is **not** basename-aware. It returns the path as-is (or with the include mount prefix via `useHref()`). For basename-aware navigation, use `Link`, `useRouter().push()`, or `reverse()`, which auto-prefix root-relative paths with the router's basename.
143
145
 
144
146
  ## Client: useHref()
145
147
 
@@ -65,24 +65,10 @@ export const urlpatterns = urls(({ path, loader }) => [
65
65
 
66
66
  ## Consuming Loader Data
67
67
 
68
- Loaders are the **live data layer** they resolve fresh on every request.
69
- The way you consume them depends on whether you're in a server component
70
- (route handler) or a client component.
71
-
72
- > **IMPORTANT: Prefer consuming loaders in client components.** Keeping data
73
- > fetching in loaders and consumption in client components creates a clean
74
- > separation: the server-side handler renders static markup that can be
75
- > freely cached with `cache()`, while loader data stays fresh on every
76
- > request. When you consume loaders in server handlers via `ctx.use()`, the
77
- > handler output depends on the loader data, which means caching the handler
78
- > also caches the data — defeating the purpose of the live data layer.
79
-
80
- ### In Client Components (Preferred)
81
-
82
- Client components use `useLoader()` from `@rangojs/router/client`.
83
- The loader **must** be registered with `loader()` in the route's DSL
84
- segments so the framework knows to resolve it during SSR and stream
85
- the data to the client:
68
+ Register loaders with `loader()` in the DSL and consume them in client
69
+ components with `useLoader()`. This is the recommended pattern it keeps
70
+ data fetching on the server and consumption on the client, with a clean
71
+ separation that works correctly with `cache()`.
86
72
 
87
73
  ```typescript
88
74
  "use client";
@@ -96,40 +82,60 @@ function ProductDetails() {
96
82
  ```
97
83
 
98
84
  ```typescript
99
- // Route definition — loader() registration required for client consumption
85
+ // Route definition — loader() registration required
100
86
  path("/product/:slug", ProductPage, { name: "product" }, () => [
101
- loader(ProductLoader), // Required for useLoader() in client components
87
+ loader(ProductLoader),
102
88
  ]);
103
89
  ```
104
90
 
105
- ### In Route Handlers (Server Components)
91
+ DSL loaders are the **live data layer** — they resolve fresh on every
92
+ request, even when the route is inside a `cache()` boundary. The router
93
+ excludes them from the segment cache at storage time and re-resolves them
94
+ on retrieval. This means `cache()` gives you cached UI + fresh data by
95
+ default.
106
96
 
107
- In server components, use `ctx.use(Loader)` directly in the route handler.
108
- This doesn't require `loader()` registration in the DSL — it works
109
- standalone. **However**, prefer client-side consumption when possible (see
110
- note above).
97
+ ### Cache safety
111
98
 
112
- ```typescript
113
- import { ProductLoader } from "./loaders/product";
99
+ DSL loaders can safely read `createVar({ cache: false })` variables
100
+ because they are always resolved fresh. The read guard is bypassed for
101
+ loader functions — they never produce stale data.
102
+
103
+ ### ctx.use(Loader) — escape hatch
104
+
105
+ For cases where you need loader data in the server handler itself (e.g.,
106
+ to set ctx variables or make routing decisions), use `ctx.use(Loader)`:
114
107
 
115
- // Route handler — server component
108
+ ```typescript
116
109
  path("/product/:slug", async (ctx) => {
117
110
  const { product } = await ctx.use(ProductLoader);
118
- return <h1>{product.name}</h1>;
119
- }, { name: "product" })
111
+ ctx.set(Product, product); // make available to children
112
+ return <ProductPage />;
113
+ }, { name: "product" }, () => [
114
+ loader(ProductLoader), // still register for client consumption
115
+ ])
120
116
  ```
121
117
 
122
- When you do register with `loader()` in the DSL, `ctx.use()` returns the
118
+ When you register with `loader()` in the DSL, `ctx.use()` returns the
123
119
  same memoized result — loaders never run twice per request.
124
120
 
121
+ **Limitations of ctx.use(Loader):**
122
+
123
+ - The handler output depends on the loader data. If the route is inside
124
+ `cache()`, the handler is cached with the loader result baked in —
125
+ defeating the live data guarantee.
126
+ - Non-cacheable variable reads (`createVar({ cache: false })`) inside the
127
+ handler still throw, even if the data came from a loader.
128
+ - Prefer DSL `loader()` + client `useLoader()` for data that depends on
129
+ non-cacheable context variables.
130
+
125
131
  **Never use `useLoader()` in server components** — it is a client-only API.
126
132
 
127
133
  ### Summary
128
134
 
129
- | Context | API | `loader()` DSL required? |
130
- | ---------------------------- | ------------------- | ------------------------ |
131
- | Client component (preferred) | `useLoader(Loader)` | **Yes** |
132
- | Route handler (server) | `ctx.use(Loader)` | No |
135
+ | Pattern | API | Cache-safe | Recommended |
136
+ | ---------------------- | ------------------- | ---------- | ----------- |
137
+ | DSL + client component | `useLoader(Loader)` | Yes | Yes |
138
+ | Handler escape hatch | `ctx.use(Loader)` | No | When needed |
133
139
 
134
140
  ## Loader Context
135
141
 
@@ -548,7 +554,7 @@ export const ProductLoader = createLoader(async (ctx) => {
548
554
  .first();
549
555
 
550
556
  if (!product) {
551
- throw new Response("Product not found", { status: 404 });
557
+ notFound("Product not found");
552
558
  }
553
559
 
554
560
  return { product };
@@ -564,10 +570,9 @@ export const CartLoader = createLoader(async (ctx) => {
564
570
  return { cart };
565
571
  });
566
572
 
567
- // urls.tsx
573
+ // urls.tsx — register loaders in the DSL
568
574
  export const urlpatterns = urls(({ path, layout, loader, loading, cache, revalidate }) => [
569
575
  layout(<ShopLayout />, () => [
570
- // Shared cart loader for all shop routes
571
576
  loader(CartLoader, () => [
572
577
  revalidate(({ actionId }) => actionId?.includes("Cart") ?? false),
573
578
  ]),
@@ -579,17 +584,22 @@ export const urlpatterns = urls(({ path, layout, loader, loading, cache, revalid
579
584
  ]),
580
585
  ]);
581
586
 
582
- // pages/product.tsx — server component (route handler)
587
+ // components/ProductDetails.tsx — consume in client component
588
+ "use client";
589
+ import { useLoader } from "@rangojs/router/client";
583
590
  import { ProductLoader, CartLoader } from "./loaders/shop";
584
591
 
585
- async function ProductPage(ctx) {
586
- const { product } = await ctx.use(ProductLoader);
587
- const { cart } = await ctx.use(CartLoader);
592
+ function ProductDetails() {
593
+ const { data: { product } } = useLoader(ProductLoader);
594
+ const { data: { cart } } = useLoader(CartLoader);
588
595
 
589
596
  return (
590
597
  <div>
591
598
  <h1>{product.name}</h1>
592
- <AddToCartButton productId={product.id} inCart={cart?.items.includes(product.id)} />
599
+ <AddToCartButton
600
+ productId={product.id}
601
+ inCart={cart?.items.includes(product.id)}
602
+ />
593
603
  </div>
594
604
  );
595
605
  }
@@ -26,6 +26,8 @@ const router = createRouter<AppEnv>({})
26
26
  .routes(urlpatterns);
27
27
  ```
28
28
 
29
+ When the router has a `basename`, pattern-scoped `.use()` patterns are automatically prefixed. For example, with `basename: "/app"`, `.use("/admin/*", mw)` matches `/app/admin/*`.
30
+
29
31
  ### Route middleware (`middleware()` in `urls()`)
30
32
 
31
33
  Registered inside `urls()` callback. Wraps **rendering only** -- it does NOT wrap server action execution. Actions run before route middleware, so when route middleware executes during post-action revalidation, it can observe state that the action set (cookies, context variables, headers).
@@ -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:
@@ -109,6 +176,65 @@ parallel(
109
176
  )
110
177
  ```
111
178
 
179
+ ### Streaming Behavior
180
+
181
+ Parallels with `loading()` are **independent streaming units**. They don't
182
+ block the parent layout or sibling routes during SSR:
183
+
184
+ - **With `loading()`**: The skeleton renders immediately. The loader runs
185
+ in the background and streams data to the client when ready. The rest
186
+ of the page (layout, route content, other parallels) renders without
187
+ waiting.
188
+ - **Without `loading()`**: The parallel's loaders block the parent layout's
189
+ rendering. Use this when the data must be available before the page
190
+ paints (e.g., critical above-the-fold content).
191
+ - **SPA navigation**: Parallel loaders resolve in the background. The
192
+ existing parallel UI stays visible — no skeleton flash on route changes
193
+ within the same layout.
194
+
195
+ ```typescript
196
+ // Sidebar streams independently — page renders immediately
197
+ parallel(
198
+ { "@sidebar": () => <Sidebar /> },
199
+ () => [loader(SlowSidebarLoader), loading(<SidebarSkeleton />)]
200
+ )
201
+
202
+ // Cart data blocks layout — must be ready before paint
203
+ parallel(
204
+ { "@cartBadge": () => <CartBadge /> },
205
+ () => [loader(CartCountLoader)] // No loading() = awaited
206
+ )
207
+ ```
208
+
209
+ ## Slot Override Semantics
210
+
211
+ When multiple `parallel()` calls define the same slot name, **the last
212
+ definition wins**. Earlier definitions of that slot are removed. Other
213
+ slots from the earlier call are preserved.
214
+
215
+ This enables composition patterns where included routes override
216
+ parent-defined slots:
217
+
218
+ ```typescript
219
+ layout(DashboardLayout, () => [
220
+ // Base slots
221
+ parallel({
222
+ "@sidebar": () => <DefaultSidebar />,
223
+ "@footer": () => <Footer />,
224
+ }),
225
+
226
+ // Override just @sidebar — @footer is preserved
227
+ parallel({ "@sidebar": () => <CustomSidebar /> }),
228
+
229
+ path("/", DashboardIndex, { name: "index" }),
230
+ ])
231
+ ```
232
+
233
+ After resolution, the layout has two parallel entries:
234
+
235
+ - `{ "@footer": () => <Footer /> }` (first call, `@sidebar` removed)
236
+ - `{ "@sidebar": () => <CustomSidebar /> }` (second call, wins)
237
+
112
238
  ## Multiple Parallel Slots
113
239
 
114
240
  ```typescript