@rangojs/router 0.0.0-experimental.78a48627 → 0.0.0-experimental.7dc955ec

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 (866) hide show
  1. package/dist/bin/rango.js +8 -3
  2. package/dist/vite/index.js +155 -201
  3. package/package.json +1 -1
  4. package/skills/cache-guide/SKILL.md +32 -0
  5. package/skills/caching/SKILL.md +45 -4
  6. package/skills/parallel/SKILL.md +126 -0
  7. package/skills/route/SKILL.md +31 -0
  8. package/skills/typesafety/SKILL.md +10 -0
  9. package/src/browser/event-controller.ts +5 -0
  10. package/src/browser/navigation-client.ts +60 -27
  11. package/src/browser/partial-update.ts +23 -16
  12. package/src/browser/prefetch/cache.ts +57 -5
  13. package/src/browser/prefetch/fetch.ts +30 -21
  14. package/src/browser/prefetch/queue.ts +53 -13
  15. package/src/browser/react/Link.tsx +9 -1
  16. package/src/browser/react/NavigationProvider.tsx +3 -3
  17. package/src/browser/rsc-router.tsx +109 -57
  18. package/src/browser/scroll-restoration.ts +11 -10
  19. package/src/browser/segment-reconciler.ts +6 -1
  20. package/src/build/route-types/router-processing.ts +12 -2
  21. package/src/cache/cache-runtime.ts +15 -11
  22. package/src/cache/cache-scope.ts +48 -7
  23. package/src/cache/cf/cf-cache-store.ts +453 -11
  24. package/src/cache/cf/index.ts +5 -1
  25. package/src/cache/document-cache.ts +17 -7
  26. package/src/cache/index.ts +1 -0
  27. package/src/cache/taint.ts +55 -0
  28. package/src/context-var.ts +72 -2
  29. package/src/debug.ts +2 -2
  30. package/src/route-definition/dsl-helpers.ts +32 -7
  31. package/src/route-definition/redirect.ts +2 -2
  32. package/src/router/handler-context.ts +31 -8
  33. package/src/router/lazy-includes.ts +2 -1
  34. package/src/router/logging.ts +1 -1
  35. package/src/router/manifest.ts +6 -2
  36. package/src/router/match-middleware/background-revalidation.ts +30 -2
  37. package/src/router/match-middleware/cache-lookup.ts +66 -9
  38. package/src/router/match-middleware/cache-store.ts +53 -10
  39. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  40. package/src/router/match-middleware/segment-resolution.ts +7 -5
  41. package/src/router/match-result.ts +22 -6
  42. package/src/router/metrics.ts +6 -1
  43. package/src/router/middleware-types.ts +6 -2
  44. package/src/router/middleware.ts +4 -3
  45. package/src/router/router-context.ts +1 -0
  46. package/src/router/segment-resolution/fresh.ts +141 -17
  47. package/src/router/segment-resolution/loader-cache.ts +1 -0
  48. package/src/router/segment-resolution/revalidation.ts +357 -289
  49. package/src/router.ts +1 -1
  50. package/src/segment-system.tsx +140 -4
  51. package/src/server/context.ts +102 -13
  52. package/src/server/request-context.ts +54 -13
  53. package/src/ssr/index.tsx +1 -0
  54. package/src/types/handler-context.ts +113 -19
  55. package/src/types/segments.ts +2 -0
  56. package/src/urls/path-helper.ts +1 -1
  57. package/src/vite/discovery/state.ts +0 -2
  58. package/src/vite/plugin-types.ts +0 -83
  59. package/src/vite/plugins/expose-action-id.ts +1 -3
  60. package/src/vite/plugins/version-plugin.ts +13 -1
  61. package/src/vite/rango.ts +144 -209
  62. package/src/vite/router-discovery.ts +0 -8
  63. package/src/vite/utils/banner.ts +3 -3
  64. package/dist/__internal.d.ts +0 -83
  65. package/dist/__internal.d.ts.map +0 -1
  66. package/dist/__internal.js +0 -19
  67. package/dist/__internal.js.map +0 -1
  68. package/dist/__mocks__/version.d.ts +0 -7
  69. package/dist/__mocks__/version.d.ts.map +0 -1
  70. package/dist/__mocks__/version.js +0 -7
  71. package/dist/__mocks__/version.js.map +0 -1
  72. package/dist/__tests__/client-href.test.d.ts +0 -2
  73. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  74. package/dist/__tests__/client-href.test.js +0 -74
  75. package/dist/__tests__/client-href.test.js.map +0 -1
  76. package/dist/__tests__/component-utils.test.d.ts +0 -2
  77. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  78. package/dist/__tests__/component-utils.test.js +0 -51
  79. package/dist/__tests__/component-utils.test.js.map +0 -1
  80. package/dist/__tests__/event-controller.test.d.ts +0 -2
  81. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  82. package/dist/__tests__/event-controller.test.js +0 -538
  83. package/dist/__tests__/event-controller.test.js.map +0 -1
  84. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  85. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  86. package/dist/__tests__/helpers/route-tree.js +0 -374
  87. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  88. package/dist/__tests__/match-result.test.d.ts +0 -2
  89. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  90. package/dist/__tests__/match-result.test.js +0 -154
  91. package/dist/__tests__/match-result.test.js.map +0 -1
  92. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  93. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  94. package/dist/__tests__/navigation-store.test.js +0 -440
  95. package/dist/__tests__/navigation-store.test.js.map +0 -1
  96. package/dist/__tests__/partial-update.test.d.ts +0 -2
  97. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  98. package/dist/__tests__/partial-update.test.js +0 -1009
  99. package/dist/__tests__/partial-update.test.js.map +0 -1
  100. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  101. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  102. package/dist/__tests__/reverse-types.test.js +0 -656
  103. package/dist/__tests__/reverse-types.test.js.map +0 -1
  104. package/dist/__tests__/route-definition.test.d.ts +0 -2
  105. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  106. package/dist/__tests__/route-definition.test.js +0 -55
  107. package/dist/__tests__/route-definition.test.js.map +0 -1
  108. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  109. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  110. package/dist/__tests__/router-helpers.test.js +0 -377
  111. package/dist/__tests__/router-helpers.test.js.map +0 -1
  112. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  113. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  114. package/dist/__tests__/router-integration-2.test.js +0 -426
  115. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  116. package/dist/__tests__/router-integration.test.d.ts +0 -2
  117. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  118. package/dist/__tests__/router-integration.test.js +0 -1051
  119. package/dist/__tests__/router-integration.test.js.map +0 -1
  120. package/dist/__tests__/search-params.test.d.ts +0 -5
  121. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  122. package/dist/__tests__/search-params.test.js +0 -306
  123. package/dist/__tests__/search-params.test.js.map +0 -1
  124. package/dist/__tests__/segment-system.test.d.ts +0 -2
  125. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  126. package/dist/__tests__/segment-system.test.js +0 -627
  127. package/dist/__tests__/segment-system.test.js.map +0 -1
  128. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  129. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  130. package/dist/__tests__/static-handler-types.test.js +0 -63
  131. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  132. package/dist/__tests__/urls.test.d.ts +0 -2
  133. package/dist/__tests__/urls.test.d.ts.map +0 -1
  134. package/dist/__tests__/urls.test.js +0 -421
  135. package/dist/__tests__/urls.test.js.map +0 -1
  136. package/dist/__tests__/use-mount.test.d.ts +0 -2
  137. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  138. package/dist/__tests__/use-mount.test.js +0 -35
  139. package/dist/__tests__/use-mount.test.js.map +0 -1
  140. package/dist/bin/rango.d.ts +0 -2
  141. package/dist/bin/rango.d.ts.map +0 -1
  142. package/dist/bin/rango.js.map +0 -1
  143. package/dist/browser/event-controller.d.ts +0 -191
  144. package/dist/browser/event-controller.d.ts.map +0 -1
  145. package/dist/browser/event-controller.js +0 -559
  146. package/dist/browser/event-controller.js.map +0 -1
  147. package/dist/browser/index.d.ts +0 -2
  148. package/dist/browser/index.d.ts.map +0 -1
  149. package/dist/browser/index.js +0 -14
  150. package/dist/browser/index.js.map +0 -1
  151. package/dist/browser/link-interceptor.d.ts +0 -38
  152. package/dist/browser/link-interceptor.d.ts.map +0 -1
  153. package/dist/browser/link-interceptor.js +0 -99
  154. package/dist/browser/link-interceptor.js.map +0 -1
  155. package/dist/browser/logging.d.ts +0 -10
  156. package/dist/browser/logging.d.ts.map +0 -1
  157. package/dist/browser/logging.js +0 -29
  158. package/dist/browser/logging.js.map +0 -1
  159. package/dist/browser/lru-cache.d.ts +0 -17
  160. package/dist/browser/lru-cache.d.ts.map +0 -1
  161. package/dist/browser/lru-cache.js +0 -50
  162. package/dist/browser/lru-cache.js.map +0 -1
  163. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  164. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  165. package/dist/browser/merge-segment-loaders.js +0 -102
  166. package/dist/browser/merge-segment-loaders.js.map +0 -1
  167. package/dist/browser/navigation-bridge.d.ts +0 -102
  168. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  169. package/dist/browser/navigation-bridge.js +0 -708
  170. package/dist/browser/navigation-bridge.js.map +0 -1
  171. package/dist/browser/navigation-client.d.ts +0 -25
  172. package/dist/browser/navigation-client.d.ts.map +0 -1
  173. package/dist/browser/navigation-client.js +0 -157
  174. package/dist/browser/navigation-client.js.map +0 -1
  175. package/dist/browser/navigation-store.d.ts +0 -101
  176. package/dist/browser/navigation-store.d.ts.map +0 -1
  177. package/dist/browser/navigation-store.js +0 -625
  178. package/dist/browser/navigation-store.js.map +0 -1
  179. package/dist/browser/partial-update.d.ts +0 -75
  180. package/dist/browser/partial-update.d.ts.map +0 -1
  181. package/dist/browser/partial-update.js +0 -426
  182. package/dist/browser/partial-update.js.map +0 -1
  183. package/dist/browser/react/Link.d.ts +0 -86
  184. package/dist/browser/react/Link.d.ts.map +0 -1
  185. package/dist/browser/react/Link.js +0 -128
  186. package/dist/browser/react/Link.js.map +0 -1
  187. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  188. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  189. package/dist/browser/react/NavigationProvider.js +0 -216
  190. package/dist/browser/react/NavigationProvider.js.map +0 -1
  191. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  192. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  193. package/dist/browser/react/ScrollRestoration.js +0 -57
  194. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  195. package/dist/browser/react/context.d.ts +0 -46
  196. package/dist/browser/react/context.d.ts.map +0 -1
  197. package/dist/browser/react/context.js +0 -10
  198. package/dist/browser/react/context.js.map +0 -1
  199. package/dist/browser/react/index.d.ts +0 -11
  200. package/dist/browser/react/index.d.ts.map +0 -1
  201. package/dist/browser/react/index.js +0 -22
  202. package/dist/browser/react/index.js.map +0 -1
  203. package/dist/browser/react/location-state-shared.d.ts +0 -63
  204. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  205. package/dist/browser/react/location-state-shared.js +0 -81
  206. package/dist/browser/react/location-state-shared.js.map +0 -1
  207. package/dist/browser/react/location-state.d.ts +0 -23
  208. package/dist/browser/react/location-state.d.ts.map +0 -1
  209. package/dist/browser/react/location-state.js +0 -29
  210. package/dist/browser/react/location-state.js.map +0 -1
  211. package/dist/browser/react/mount-context.d.ts +0 -24
  212. package/dist/browser/react/mount-context.d.ts.map +0 -1
  213. package/dist/browser/react/mount-context.js +0 -24
  214. package/dist/browser/react/mount-context.js.map +0 -1
  215. package/dist/browser/react/use-action.d.ts +0 -64
  216. package/dist/browser/react/use-action.d.ts.map +0 -1
  217. package/dist/browser/react/use-action.js +0 -134
  218. package/dist/browser/react/use-action.js.map +0 -1
  219. package/dist/browser/react/use-client-cache.d.ts +0 -41
  220. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  221. package/dist/browser/react/use-client-cache.js +0 -39
  222. package/dist/browser/react/use-client-cache.js.map +0 -1
  223. package/dist/browser/react/use-handle.d.ts +0 -31
  224. package/dist/browser/react/use-handle.d.ts.map +0 -1
  225. package/dist/browser/react/use-handle.js +0 -144
  226. package/dist/browser/react/use-handle.js.map +0 -1
  227. package/dist/browser/react/use-href.d.ts +0 -33
  228. package/dist/browser/react/use-href.d.ts.map +0 -1
  229. package/dist/browser/react/use-href.js +0 -39
  230. package/dist/browser/react/use-href.js.map +0 -1
  231. package/dist/browser/react/use-link-status.d.ts +0 -37
  232. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  233. package/dist/browser/react/use-link-status.js +0 -99
  234. package/dist/browser/react/use-link-status.js.map +0 -1
  235. package/dist/browser/react/use-mount.d.ts +0 -25
  236. package/dist/browser/react/use-mount.d.ts.map +0 -1
  237. package/dist/browser/react/use-mount.js +0 -30
  238. package/dist/browser/react/use-mount.js.map +0 -1
  239. package/dist/browser/react/use-navigation.d.ts +0 -27
  240. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  241. package/dist/browser/react/use-navigation.js +0 -87
  242. package/dist/browser/react/use-navigation.js.map +0 -1
  243. package/dist/browser/react/use-segments.d.ts +0 -38
  244. package/dist/browser/react/use-segments.d.ts.map +0 -1
  245. package/dist/browser/react/use-segments.js +0 -130
  246. package/dist/browser/react/use-segments.js.map +0 -1
  247. package/dist/browser/request-controller.d.ts +0 -26
  248. package/dist/browser/request-controller.d.ts.map +0 -1
  249. package/dist/browser/request-controller.js +0 -147
  250. package/dist/browser/request-controller.js.map +0 -1
  251. package/dist/browser/rsc-router.d.ts +0 -129
  252. package/dist/browser/rsc-router.d.ts.map +0 -1
  253. package/dist/browser/rsc-router.js +0 -195
  254. package/dist/browser/rsc-router.js.map +0 -1
  255. package/dist/browser/scroll-restoration.d.ts +0 -93
  256. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  257. package/dist/browser/scroll-restoration.js +0 -321
  258. package/dist/browser/scroll-restoration.js.map +0 -1
  259. package/dist/browser/segment-structure-assert.d.ts +0 -17
  260. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  261. package/dist/browser/segment-structure-assert.js +0 -59
  262. package/dist/browser/segment-structure-assert.js.map +0 -1
  263. package/dist/browser/server-action-bridge.d.ts +0 -26
  264. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  265. package/dist/browser/server-action-bridge.js +0 -668
  266. package/dist/browser/server-action-bridge.js.map +0 -1
  267. package/dist/browser/shallow.d.ts +0 -12
  268. package/dist/browser/shallow.d.ts.map +0 -1
  269. package/dist/browser/shallow.js +0 -34
  270. package/dist/browser/shallow.js.map +0 -1
  271. package/dist/browser/types.d.ts +0 -369
  272. package/dist/browser/types.d.ts.map +0 -1
  273. package/dist/browser/types.js +0 -2
  274. package/dist/browser/types.js.map +0 -1
  275. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  276. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  277. package/dist/build/__tests__/generate-cli.test.js +0 -237
  278. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  279. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  280. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  281. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  282. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  283. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  284. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  285. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  286. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  287. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  288. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  289. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  290. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  291. package/dist/build/generate-manifest.d.ts +0 -81
  292. package/dist/build/generate-manifest.d.ts.map +0 -1
  293. package/dist/build/generate-manifest.js +0 -276
  294. package/dist/build/generate-manifest.js.map +0 -1
  295. package/dist/build/generate-route-types.d.ts +0 -115
  296. package/dist/build/generate-route-types.d.ts.map +0 -1
  297. package/dist/build/generate-route-types.js +0 -740
  298. package/dist/build/generate-route-types.js.map +0 -1
  299. package/dist/build/index.d.ts +0 -21
  300. package/dist/build/index.d.ts.map +0 -1
  301. package/dist/build/index.js +0 -21
  302. package/dist/build/index.js.map +0 -1
  303. package/dist/build/route-trie.d.ts +0 -71
  304. package/dist/build/route-trie.d.ts.map +0 -1
  305. package/dist/build/route-trie.js +0 -175
  306. package/dist/build/route-trie.js.map +0 -1
  307. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  308. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  309. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  310. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  311. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  312. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  313. package/dist/cache/__tests__/document-cache.test.js +0 -345
  314. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  315. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  316. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  317. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  318. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  319. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  320. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  321. package/dist/cache/__tests__/memory-store.test.js +0 -367
  322. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  323. package/dist/cache/cache-scope.d.ts +0 -102
  324. package/dist/cache/cache-scope.d.ts.map +0 -1
  325. package/dist/cache/cache-scope.js +0 -440
  326. package/dist/cache/cache-scope.js.map +0 -1
  327. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  328. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  329. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  330. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  331. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  332. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  333. package/dist/cache/cf/cf-cache-store.js +0 -242
  334. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  335. package/dist/cache/cf/index.d.ts +0 -14
  336. package/dist/cache/cf/index.d.ts.map +0 -1
  337. package/dist/cache/cf/index.js +0 -17
  338. package/dist/cache/cf/index.js.map +0 -1
  339. package/dist/cache/document-cache.d.ts +0 -64
  340. package/dist/cache/document-cache.d.ts.map +0 -1
  341. package/dist/cache/document-cache.js +0 -228
  342. package/dist/cache/document-cache.js.map +0 -1
  343. package/dist/cache/index.d.ts +0 -19
  344. package/dist/cache/index.d.ts.map +0 -1
  345. package/dist/cache/index.js +0 -21
  346. package/dist/cache/index.js.map +0 -1
  347. package/dist/cache/memory-segment-store.d.ts +0 -110
  348. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  349. package/dist/cache/memory-segment-store.js +0 -117
  350. package/dist/cache/memory-segment-store.js.map +0 -1
  351. package/dist/cache/memory-store.d.ts +0 -41
  352. package/dist/cache/memory-store.d.ts.map +0 -1
  353. package/dist/cache/memory-store.js +0 -191
  354. package/dist/cache/memory-store.js.map +0 -1
  355. package/dist/cache/types.d.ts +0 -317
  356. package/dist/cache/types.d.ts.map +0 -1
  357. package/dist/cache/types.js +0 -12
  358. package/dist/cache/types.js.map +0 -1
  359. package/dist/client.d.ts +0 -248
  360. package/dist/client.d.ts.map +0 -1
  361. package/dist/client.js +0 -367
  362. package/dist/client.js.map +0 -1
  363. package/dist/client.rsc.d.ts +0 -26
  364. package/dist/client.rsc.d.ts.map +0 -1
  365. package/dist/client.rsc.js +0 -46
  366. package/dist/client.rsc.js.map +0 -1
  367. package/dist/component-utils.d.ts +0 -36
  368. package/dist/component-utils.d.ts.map +0 -1
  369. package/dist/component-utils.js +0 -61
  370. package/dist/component-utils.js.map +0 -1
  371. package/dist/components/DefaultDocument.d.ts +0 -13
  372. package/dist/components/DefaultDocument.d.ts.map +0 -1
  373. package/dist/components/DefaultDocument.js +0 -15
  374. package/dist/components/DefaultDocument.js.map +0 -1
  375. package/dist/debug.d.ts +0 -58
  376. package/dist/debug.d.ts.map +0 -1
  377. package/dist/debug.js +0 -157
  378. package/dist/debug.js.map +0 -1
  379. package/dist/default-error-boundary.d.ts +0 -11
  380. package/dist/default-error-boundary.d.ts.map +0 -1
  381. package/dist/default-error-boundary.js +0 -45
  382. package/dist/default-error-boundary.js.map +0 -1
  383. package/dist/deps/browser.d.ts +0 -2
  384. package/dist/deps/browser.d.ts.map +0 -1
  385. package/dist/deps/browser.js +0 -3
  386. package/dist/deps/browser.js.map +0 -1
  387. package/dist/deps/html-stream-client.d.ts +0 -2
  388. package/dist/deps/html-stream-client.d.ts.map +0 -1
  389. package/dist/deps/html-stream-client.js +0 -3
  390. package/dist/deps/html-stream-client.js.map +0 -1
  391. package/dist/deps/html-stream-server.d.ts +0 -2
  392. package/dist/deps/html-stream-server.d.ts.map +0 -1
  393. package/dist/deps/html-stream-server.js +0 -3
  394. package/dist/deps/html-stream-server.js.map +0 -1
  395. package/dist/deps/rsc.d.ts +0 -2
  396. package/dist/deps/rsc.d.ts.map +0 -1
  397. package/dist/deps/rsc.js +0 -4
  398. package/dist/deps/rsc.js.map +0 -1
  399. package/dist/deps/ssr.d.ts +0 -2
  400. package/dist/deps/ssr.d.ts.map +0 -1
  401. package/dist/deps/ssr.js +0 -3
  402. package/dist/deps/ssr.js.map +0 -1
  403. package/dist/errors.d.ts +0 -174
  404. package/dist/errors.d.ts.map +0 -1
  405. package/dist/errors.js +0 -241
  406. package/dist/errors.js.map +0 -1
  407. package/dist/handle.d.ts +0 -78
  408. package/dist/handle.d.ts.map +0 -1
  409. package/dist/handle.js +0 -82
  410. package/dist/handle.js.map +0 -1
  411. package/dist/handles/MetaTags.d.ts +0 -14
  412. package/dist/handles/MetaTags.d.ts.map +0 -1
  413. package/dist/handles/MetaTags.js +0 -136
  414. package/dist/handles/MetaTags.js.map +0 -1
  415. package/dist/handles/index.d.ts +0 -6
  416. package/dist/handles/index.d.ts.map +0 -1
  417. package/dist/handles/index.js +0 -6
  418. package/dist/handles/index.js.map +0 -1
  419. package/dist/handles/meta.d.ts +0 -39
  420. package/dist/handles/meta.d.ts.map +0 -1
  421. package/dist/handles/meta.js +0 -202
  422. package/dist/handles/meta.js.map +0 -1
  423. package/dist/host/__tests__/errors.test.d.ts +0 -2
  424. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  425. package/dist/host/__tests__/errors.test.js +0 -76
  426. package/dist/host/__tests__/errors.test.js.map +0 -1
  427. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  428. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  429. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  430. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  431. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  432. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  433. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  434. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  435. package/dist/host/__tests__/router.test.d.ts +0 -2
  436. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  437. package/dist/host/__tests__/router.test.js +0 -241
  438. package/dist/host/__tests__/router.test.js.map +0 -1
  439. package/dist/host/__tests__/testing.test.d.ts +0 -2
  440. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  441. package/dist/host/__tests__/testing.test.js +0 -64
  442. package/dist/host/__tests__/testing.test.js.map +0 -1
  443. package/dist/host/__tests__/utils.test.d.ts +0 -2
  444. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  445. package/dist/host/__tests__/utils.test.js +0 -29
  446. package/dist/host/__tests__/utils.test.js.map +0 -1
  447. package/dist/host/cookie-handler.d.ts +0 -34
  448. package/dist/host/cookie-handler.d.ts.map +0 -1
  449. package/dist/host/cookie-handler.js +0 -124
  450. package/dist/host/cookie-handler.js.map +0 -1
  451. package/dist/host/errors.d.ts +0 -56
  452. package/dist/host/errors.d.ts.map +0 -1
  453. package/dist/host/errors.js +0 -79
  454. package/dist/host/errors.js.map +0 -1
  455. package/dist/host/index.d.ts +0 -29
  456. package/dist/host/index.d.ts.map +0 -1
  457. package/dist/host/index.js +0 -32
  458. package/dist/host/index.js.map +0 -1
  459. package/dist/host/pattern-matcher.d.ts +0 -36
  460. package/dist/host/pattern-matcher.d.ts.map +0 -1
  461. package/dist/host/pattern-matcher.js +0 -172
  462. package/dist/host/pattern-matcher.js.map +0 -1
  463. package/dist/host/router.d.ts +0 -26
  464. package/dist/host/router.d.ts.map +0 -1
  465. package/dist/host/router.js +0 -218
  466. package/dist/host/router.js.map +0 -1
  467. package/dist/host/testing.d.ts +0 -36
  468. package/dist/host/testing.d.ts.map +0 -1
  469. package/dist/host/testing.js +0 -55
  470. package/dist/host/testing.js.map +0 -1
  471. package/dist/host/types.d.ts +0 -115
  472. package/dist/host/types.d.ts.map +0 -1
  473. package/dist/host/types.js +0 -7
  474. package/dist/host/types.js.map +0 -1
  475. package/dist/host/utils.d.ts +0 -21
  476. package/dist/host/utils.d.ts.map +0 -1
  477. package/dist/host/utils.js +0 -23
  478. package/dist/host/utils.js.map +0 -1
  479. package/dist/href-client.d.ts +0 -131
  480. package/dist/href-client.d.ts.map +0 -1
  481. package/dist/href-client.js +0 -64
  482. package/dist/href-client.js.map +0 -1
  483. package/dist/href-context.d.ts +0 -29
  484. package/dist/href-context.d.ts.map +0 -1
  485. package/dist/href-context.js +0 -21
  486. package/dist/href-context.js.map +0 -1
  487. package/dist/index.d.ts +0 -73
  488. package/dist/index.d.ts.map +0 -1
  489. package/dist/index.js +0 -91
  490. package/dist/index.js.map +0 -1
  491. package/dist/index.rsc.d.ts +0 -32
  492. package/dist/index.rsc.d.ts.map +0 -1
  493. package/dist/index.rsc.js +0 -40
  494. package/dist/index.rsc.js.map +0 -1
  495. package/dist/internal-debug.d.ts +0 -2
  496. package/dist/internal-debug.d.ts.map +0 -1
  497. package/dist/internal-debug.js +0 -5
  498. package/dist/internal-debug.js.map +0 -1
  499. package/dist/loader.d.ts +0 -14
  500. package/dist/loader.d.ts.map +0 -1
  501. package/dist/loader.js +0 -20
  502. package/dist/loader.js.map +0 -1
  503. package/dist/loader.rsc.d.ts +0 -19
  504. package/dist/loader.rsc.d.ts.map +0 -1
  505. package/dist/loader.rsc.js +0 -99
  506. package/dist/loader.rsc.js.map +0 -1
  507. package/dist/network-error-thrower.d.ts +0 -17
  508. package/dist/network-error-thrower.d.ts.map +0 -1
  509. package/dist/network-error-thrower.js +0 -14
  510. package/dist/network-error-thrower.js.map +0 -1
  511. package/dist/outlet-context.d.ts +0 -13
  512. package/dist/outlet-context.d.ts.map +0 -1
  513. package/dist/outlet-context.js +0 -3
  514. package/dist/outlet-context.js.map +0 -1
  515. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  516. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  517. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  518. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  519. package/dist/prerender/param-hash.d.ts +0 -16
  520. package/dist/prerender/param-hash.d.ts.map +0 -1
  521. package/dist/prerender/param-hash.js +0 -36
  522. package/dist/prerender/param-hash.js.map +0 -1
  523. package/dist/prerender/store.d.ts +0 -38
  524. package/dist/prerender/store.d.ts.map +0 -1
  525. package/dist/prerender/store.js +0 -61
  526. package/dist/prerender/store.js.map +0 -1
  527. package/dist/prerender.d.ts +0 -66
  528. package/dist/prerender.d.ts.map +0 -1
  529. package/dist/prerender.js +0 -57
  530. package/dist/prerender.js.map +0 -1
  531. package/dist/reverse.d.ts +0 -196
  532. package/dist/reverse.d.ts.map +0 -1
  533. package/dist/reverse.js +0 -78
  534. package/dist/reverse.js.map +0 -1
  535. package/dist/root-error-boundary.d.ts +0 -33
  536. package/dist/root-error-boundary.d.ts.map +0 -1
  537. package/dist/root-error-boundary.js +0 -165
  538. package/dist/root-error-boundary.js.map +0 -1
  539. package/dist/route-content-wrapper.d.ts +0 -46
  540. package/dist/route-content-wrapper.d.ts.map +0 -1
  541. package/dist/route-content-wrapper.js +0 -77
  542. package/dist/route-content-wrapper.js.map +0 -1
  543. package/dist/route-definition.d.ts +0 -421
  544. package/dist/route-definition.d.ts.map +0 -1
  545. package/dist/route-definition.js +0 -868
  546. package/dist/route-definition.js.map +0 -1
  547. package/dist/route-map-builder.d.ts +0 -155
  548. package/dist/route-map-builder.d.ts.map +0 -1
  549. package/dist/route-map-builder.js +0 -237
  550. package/dist/route-map-builder.js.map +0 -1
  551. package/dist/route-types.d.ts +0 -165
  552. package/dist/route-types.d.ts.map +0 -1
  553. package/dist/route-types.js +0 -7
  554. package/dist/route-types.js.map +0 -1
  555. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  556. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  557. package/dist/router/__tests__/handler-context.test.js +0 -65
  558. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  559. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  560. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  561. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  562. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  563. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  564. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  565. package/dist/router/__tests__/match-context.test.js +0 -92
  566. package/dist/router/__tests__/match-context.test.js.map +0 -1
  567. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  568. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  569. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  570. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  571. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  572. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  573. package/dist/router/__tests__/match-result.test.js +0 -457
  574. package/dist/router/__tests__/match-result.test.js.map +0 -1
  575. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  576. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  577. package/dist/router/__tests__/on-error.test.js +0 -678
  578. package/dist/router/__tests__/on-error.test.js.map +0 -1
  579. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  580. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  581. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  582. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  583. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  584. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  585. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  586. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  587. package/dist/router/error-handling.d.ts +0 -77
  588. package/dist/router/error-handling.d.ts.map +0 -1
  589. package/dist/router/error-handling.js +0 -202
  590. package/dist/router/error-handling.js.map +0 -1
  591. package/dist/router/handler-context.d.ts +0 -20
  592. package/dist/router/handler-context.d.ts.map +0 -1
  593. package/dist/router/handler-context.js +0 -198
  594. package/dist/router/handler-context.js.map +0 -1
  595. package/dist/router/intercept-resolution.d.ts +0 -66
  596. package/dist/router/intercept-resolution.d.ts.map +0 -1
  597. package/dist/router/intercept-resolution.js +0 -246
  598. package/dist/router/intercept-resolution.js.map +0 -1
  599. package/dist/router/loader-resolution.d.ts +0 -64
  600. package/dist/router/loader-resolution.d.ts.map +0 -1
  601. package/dist/router/loader-resolution.js +0 -284
  602. package/dist/router/loader-resolution.js.map +0 -1
  603. package/dist/router/logging.d.ts +0 -15
  604. package/dist/router/logging.d.ts.map +0 -1
  605. package/dist/router/logging.js +0 -99
  606. package/dist/router/logging.js.map +0 -1
  607. package/dist/router/manifest.d.ts +0 -22
  608. package/dist/router/manifest.d.ts.map +0 -1
  609. package/dist/router/manifest.js +0 -181
  610. package/dist/router/manifest.js.map +0 -1
  611. package/dist/router/match-api.d.ts +0 -35
  612. package/dist/router/match-api.d.ts.map +0 -1
  613. package/dist/router/match-api.js +0 -406
  614. package/dist/router/match-api.js.map +0 -1
  615. package/dist/router/match-context.d.ts +0 -206
  616. package/dist/router/match-context.d.ts.map +0 -1
  617. package/dist/router/match-context.js +0 -17
  618. package/dist/router/match-context.js.map +0 -1
  619. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  620. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  621. package/dist/router/match-middleware/background-revalidation.js +0 -75
  622. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  623. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  624. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  625. package/dist/router/match-middleware/cache-lookup.js +0 -257
  626. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  627. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  628. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  629. package/dist/router/match-middleware/cache-store.js +0 -108
  630. package/dist/router/match-middleware/cache-store.js.map +0 -1
  631. package/dist/router/match-middleware/index.d.ts +0 -81
  632. package/dist/router/match-middleware/index.d.ts.map +0 -1
  633. package/dist/router/match-middleware/index.js +0 -80
  634. package/dist/router/match-middleware/index.js.map +0 -1
  635. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  636. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  637. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  638. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  639. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  640. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  641. package/dist/router/match-middleware/segment-resolution.js +0 -53
  642. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  643. package/dist/router/match-pipelines.d.ts +0 -147
  644. package/dist/router/match-pipelines.d.ts.map +0 -1
  645. package/dist/router/match-pipelines.js +0 -82
  646. package/dist/router/match-pipelines.js.map +0 -1
  647. package/dist/router/match-result.d.ts +0 -126
  648. package/dist/router/match-result.d.ts.map +0 -1
  649. package/dist/router/match-result.js +0 -93
  650. package/dist/router/match-result.js.map +0 -1
  651. package/dist/router/metrics.d.ts +0 -20
  652. package/dist/router/metrics.d.ts.map +0 -1
  653. package/dist/router/metrics.js +0 -47
  654. package/dist/router/metrics.js.map +0 -1
  655. package/dist/router/middleware.d.ts +0 -249
  656. package/dist/router/middleware.d.ts.map +0 -1
  657. package/dist/router/middleware.js +0 -434
  658. package/dist/router/middleware.js.map +0 -1
  659. package/dist/router/middleware.test.d.ts +0 -2
  660. package/dist/router/middleware.test.d.ts.map +0 -1
  661. package/dist/router/middleware.test.js +0 -816
  662. package/dist/router/middleware.test.js.map +0 -1
  663. package/dist/router/pattern-matching.d.ts +0 -149
  664. package/dist/router/pattern-matching.d.ts.map +0 -1
  665. package/dist/router/pattern-matching.js +0 -349
  666. package/dist/router/pattern-matching.js.map +0 -1
  667. package/dist/router/revalidation.d.ts +0 -44
  668. package/dist/router/revalidation.d.ts.map +0 -1
  669. package/dist/router/revalidation.js +0 -147
  670. package/dist/router/revalidation.js.map +0 -1
  671. package/dist/router/router-context.d.ts +0 -135
  672. package/dist/router/router-context.d.ts.map +0 -1
  673. package/dist/router/router-context.js +0 -36
  674. package/dist/router/router-context.js.map +0 -1
  675. package/dist/router/segment-resolution.d.ts +0 -127
  676. package/dist/router/segment-resolution.d.ts.map +0 -1
  677. package/dist/router/segment-resolution.js +0 -919
  678. package/dist/router/segment-resolution.js.map +0 -1
  679. package/dist/router/trie-matching.d.ts +0 -40
  680. package/dist/router/trie-matching.d.ts.map +0 -1
  681. package/dist/router/trie-matching.js +0 -127
  682. package/dist/router/trie-matching.js.map +0 -1
  683. package/dist/router/types.d.ts +0 -136
  684. package/dist/router/types.d.ts.map +0 -1
  685. package/dist/router/types.js +0 -7
  686. package/dist/router/types.js.map +0 -1
  687. package/dist/router.d.ts +0 -753
  688. package/dist/router.d.ts.map +0 -1
  689. package/dist/router.gen.d.ts +0 -6
  690. package/dist/router.gen.d.ts.map +0 -1
  691. package/dist/router.gen.js +0 -6
  692. package/dist/router.gen.js.map +0 -1
  693. package/dist/router.js +0 -1304
  694. package/dist/router.js.map +0 -1
  695. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  696. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  697. package/dist/rsc/__tests__/helpers.test.js +0 -140
  698. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  699. package/dist/rsc/handler.d.ts +0 -45
  700. package/dist/rsc/handler.d.ts.map +0 -1
  701. package/dist/rsc/handler.js +0 -1172
  702. package/dist/rsc/handler.js.map +0 -1
  703. package/dist/rsc/helpers.d.ts +0 -16
  704. package/dist/rsc/helpers.d.ts.map +0 -1
  705. package/dist/rsc/helpers.js +0 -55
  706. package/dist/rsc/helpers.js.map +0 -1
  707. package/dist/rsc/index.d.ts +0 -22
  708. package/dist/rsc/index.d.ts.map +0 -1
  709. package/dist/rsc/index.js +0 -23
  710. package/dist/rsc/index.js.map +0 -1
  711. package/dist/rsc/nonce.d.ts +0 -9
  712. package/dist/rsc/nonce.d.ts.map +0 -1
  713. package/dist/rsc/nonce.js +0 -18
  714. package/dist/rsc/nonce.js.map +0 -1
  715. package/dist/rsc/types.d.ts +0 -206
  716. package/dist/rsc/types.d.ts.map +0 -1
  717. package/dist/rsc/types.js +0 -8
  718. package/dist/rsc/types.js.map +0 -1
  719. package/dist/search-params.d.ts +0 -103
  720. package/dist/search-params.d.ts.map +0 -1
  721. package/dist/search-params.js +0 -74
  722. package/dist/search-params.js.map +0 -1
  723. package/dist/segment-system.d.ts +0 -75
  724. package/dist/segment-system.d.ts.map +0 -1
  725. package/dist/segment-system.js +0 -336
  726. package/dist/segment-system.js.map +0 -1
  727. package/dist/server/context.d.ts +0 -245
  728. package/dist/server/context.d.ts.map +0 -1
  729. package/dist/server/context.js +0 -197
  730. package/dist/server/context.js.map +0 -1
  731. package/dist/server/fetchable-loader-store.d.ts +0 -18
  732. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  733. package/dist/server/fetchable-loader-store.js +0 -18
  734. package/dist/server/fetchable-loader-store.js.map +0 -1
  735. package/dist/server/handle-store.d.ts +0 -85
  736. package/dist/server/handle-store.d.ts.map +0 -1
  737. package/dist/server/handle-store.js +0 -142
  738. package/dist/server/handle-store.js.map +0 -1
  739. package/dist/server/loader-registry.d.ts +0 -55
  740. package/dist/server/loader-registry.d.ts.map +0 -1
  741. package/dist/server/loader-registry.js +0 -132
  742. package/dist/server/loader-registry.js.map +0 -1
  743. package/dist/server/request-context.d.ts +0 -226
  744. package/dist/server/request-context.d.ts.map +0 -1
  745. package/dist/server/request-context.js +0 -290
  746. package/dist/server/request-context.js.map +0 -1
  747. package/dist/server/root-layout.d.ts +0 -4
  748. package/dist/server/root-layout.d.ts.map +0 -1
  749. package/dist/server/root-layout.js +0 -5
  750. package/dist/server/root-layout.js.map +0 -1
  751. package/dist/server.d.ts +0 -15
  752. package/dist/server.d.ts.map +0 -1
  753. package/dist/server.js +0 -20
  754. package/dist/server.js.map +0 -1
  755. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  756. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  757. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  758. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  759. package/dist/ssr/index.d.ts +0 -98
  760. package/dist/ssr/index.d.ts.map +0 -1
  761. package/dist/ssr/index.js +0 -158
  762. package/dist/ssr/index.js.map +0 -1
  763. package/dist/static-handler.d.ts +0 -50
  764. package/dist/static-handler.d.ts.map +0 -1
  765. package/dist/static-handler.gen.d.ts +0 -5
  766. package/dist/static-handler.gen.d.ts.map +0 -1
  767. package/dist/static-handler.gen.js +0 -5
  768. package/dist/static-handler.gen.js.map +0 -1
  769. package/dist/static-handler.js +0 -29
  770. package/dist/static-handler.js.map +0 -1
  771. package/dist/theme/ThemeProvider.d.ts +0 -20
  772. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  773. package/dist/theme/ThemeProvider.js +0 -240
  774. package/dist/theme/ThemeProvider.js.map +0 -1
  775. package/dist/theme/ThemeScript.d.ts +0 -48
  776. package/dist/theme/ThemeScript.d.ts.map +0 -1
  777. package/dist/theme/ThemeScript.js +0 -13
  778. package/dist/theme/ThemeScript.js.map +0 -1
  779. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  780. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  781. package/dist/theme/__tests__/theme.test.js +0 -103
  782. package/dist/theme/__tests__/theme.test.js.map +0 -1
  783. package/dist/theme/constants.d.ts +0 -29
  784. package/dist/theme/constants.d.ts.map +0 -1
  785. package/dist/theme/constants.js +0 -48
  786. package/dist/theme/constants.js.map +0 -1
  787. package/dist/theme/index.d.ts +0 -31
  788. package/dist/theme/index.d.ts.map +0 -1
  789. package/dist/theme/index.js +0 -36
  790. package/dist/theme/index.js.map +0 -1
  791. package/dist/theme/theme-context.d.ts +0 -40
  792. package/dist/theme/theme-context.d.ts.map +0 -1
  793. package/dist/theme/theme-context.js +0 -60
  794. package/dist/theme/theme-context.js.map +0 -1
  795. package/dist/theme/theme-script.d.ts +0 -27
  796. package/dist/theme/theme-script.d.ts.map +0 -1
  797. package/dist/theme/theme-script.js +0 -147
  798. package/dist/theme/theme-script.js.map +0 -1
  799. package/dist/theme/types.d.ts +0 -163
  800. package/dist/theme/types.d.ts.map +0 -1
  801. package/dist/theme/types.js +0 -11
  802. package/dist/theme/types.js.map +0 -1
  803. package/dist/theme/use-theme.d.ts +0 -12
  804. package/dist/theme/use-theme.d.ts.map +0 -1
  805. package/dist/theme/use-theme.js +0 -40
  806. package/dist/theme/use-theme.js.map +0 -1
  807. package/dist/types.d.ts +0 -1479
  808. package/dist/types.d.ts.map +0 -1
  809. package/dist/types.js +0 -10
  810. package/dist/types.js.map +0 -1
  811. package/dist/urls.d.ts +0 -441
  812. package/dist/urls.d.ts.map +0 -1
  813. package/dist/urls.gen.d.ts +0 -8
  814. package/dist/urls.gen.d.ts.map +0 -1
  815. package/dist/urls.gen.js +0 -8
  816. package/dist/urls.gen.js.map +0 -1
  817. package/dist/urls.js +0 -443
  818. package/dist/urls.js.map +0 -1
  819. package/dist/use-loader.d.ts +0 -127
  820. package/dist/use-loader.d.ts.map +0 -1
  821. package/dist/use-loader.js +0 -237
  822. package/dist/use-loader.js.map +0 -1
  823. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  824. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  825. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  826. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  827. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  828. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  829. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  830. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  831. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  832. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  833. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  834. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  835. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  836. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  837. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  838. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  839. package/dist/vite/ast-handler-extract.d.ts +0 -49
  840. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  841. package/dist/vite/ast-handler-extract.js +0 -249
  842. package/dist/vite/ast-handler-extract.js.map +0 -1
  843. package/dist/vite/expose-action-id.d.ts +0 -19
  844. package/dist/vite/expose-action-id.d.ts.map +0 -1
  845. package/dist/vite/expose-action-id.js +0 -250
  846. package/dist/vite/expose-action-id.js.map +0 -1
  847. package/dist/vite/expose-id-utils.d.ts +0 -69
  848. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  849. package/dist/vite/expose-id-utils.js +0 -289
  850. package/dist/vite/expose-id-utils.js.map +0 -1
  851. package/dist/vite/expose-internal-ids.d.ts +0 -22
  852. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  853. package/dist/vite/expose-internal-ids.js +0 -886
  854. package/dist/vite/expose-internal-ids.js.map +0 -1
  855. package/dist/vite/index.d.ts +0 -149
  856. package/dist/vite/index.d.ts.map +0 -1
  857. package/dist/vite/index.js.map +0 -1
  858. package/dist/vite/index.named-routes.gen.ts +0 -103
  859. package/dist/vite/package-resolution.d.ts +0 -43
  860. package/dist/vite/package-resolution.d.ts.map +0 -1
  861. package/dist/vite/package-resolution.js +0 -112
  862. package/dist/vite/package-resolution.js.map +0 -1
  863. package/dist/vite/virtual-entries.d.ts +0 -25
  864. package/dist/vite/virtual-entries.d.ts.map +0 -1
  865. package/dist/vite/virtual-entries.js +0 -110
  866. package/dist/vite/virtual-entries.js.map +0 -1
package/src/router.ts CHANGED
@@ -690,7 +690,7 @@ export function createRouter<TEnv = any>(
690
690
  errorBoundary: [],
691
691
  notFoundBoundary: [],
692
692
  layout: [],
693
- parallel: [],
693
+ parallel: {},
694
694
  intercept: [],
695
695
  loader: [],
696
696
  };
@@ -20,6 +20,61 @@ import { RootErrorBoundary } from "./root-error-boundary.js";
20
20
  const ReactViewTransition: any =
21
21
  "ViewTransition" in React ? (React as any).ViewTransition : null;
22
22
 
23
+ function restoreParallelLoaderMarkers(
24
+ segments: ResolvedSegment[],
25
+ ): ResolvedSegment[] {
26
+ const parallelLoadingByNamespace = new Map<string, ReactNode>();
27
+ let nextSegments: ResolvedSegment[] | null = null;
28
+
29
+ for (let i = 0; i < segments.length; i++) {
30
+ const segment = segments[i];
31
+
32
+ if (segment.type === "parallel") {
33
+ if (
34
+ segment.namespace &&
35
+ segment.loading !== undefined &&
36
+ segment.loading !== null &&
37
+ segment.loading !== false
38
+ ) {
39
+ parallelLoadingByNamespace.set(segment.namespace, segment.loading);
40
+ }
41
+ continue;
42
+ }
43
+
44
+ if (segment.type !== "loader" || segment.parallelLoading !== undefined) {
45
+ continue;
46
+ }
47
+
48
+ const parallelLoading = segment.namespace
49
+ ? parallelLoadingByNamespace.get(segment.namespace)
50
+ : undefined;
51
+ if (parallelLoading === undefined) {
52
+ continue;
53
+ }
54
+
55
+ if (!nextSegments) {
56
+ nextSegments = segments.slice();
57
+ }
58
+ nextSegments[i] = { ...segment, parallelLoading };
59
+ }
60
+
61
+ return nextSegments ?? segments;
62
+ }
63
+
64
+ function hasSameReferences(a: unknown[] | undefined, b: unknown[]): boolean {
65
+ if (!a || a.length !== b.length) {
66
+ return false;
67
+ }
68
+
69
+ for (let i = 0; i < a.length; i++) {
70
+ if (a[i] !== b[i]) {
71
+ return false;
72
+ }
73
+ }
74
+
75
+ return true;
76
+ }
77
+
23
78
  /**
24
79
  * Resolve loader data from raw results, unwrapping LoaderDataResult wrappers
25
80
  */
@@ -143,6 +198,10 @@ export async function renderSegments(
143
198
  } = options || {};
144
199
 
145
200
  const temporalLazyRefs: Promise<any>[] = [];
201
+ const normalizedSegments = restoreParallelLoaderMarkers(segments);
202
+ const normalizedInterceptSegments = interceptSegments
203
+ ? restoreParallelLoaderMarkers(interceptSegments)
204
+ : undefined;
146
205
 
147
206
  /**
148
207
  * Registers promises from lazy/async components for awaiting.
@@ -167,7 +226,7 @@ export async function renderSegments(
167
226
  );
168
227
  }
169
228
  // Separate segments by type, passing intercept segments for explicit injection
170
- const tree = segmentTreeWalk(segments, interceptSegments);
229
+ const tree = segmentTreeWalk(normalizedSegments, normalizedInterceptSegments);
171
230
  // Render content segments as siblings
172
231
  let content: ReactNode = null;
173
232
  for (const node of tree) {
@@ -284,13 +343,90 @@ export async function renderSegments(
284
343
  children: nodeContent,
285
344
  });
286
345
  } else {
287
- // Has loaders but no loading skeleton - await loaders and render directly
288
- const resolvedData = await loaderDataPromise;
346
+ // Has loaders but no loading skeleton.
347
+ // Split: parallel-owned loaders stream (their parallel has loading()),
348
+ // layout-owned loaders are awaited (they gate the layout content).
349
+ const layoutLoaders = loaderEntries.filter((l) => !l.parallelLoading);
350
+ const parallelOwnedLoaders = loaderEntries.filter(
351
+ (l) => !!l.parallelLoading,
352
+ );
353
+
354
+ // Await only layout-owned loaders
355
+ const layoutLoaderIds = layoutLoaders.map((l) => l.loaderId!);
356
+ const layoutLoaderDataPromise =
357
+ layoutLoaders.length > 0
358
+ ? Promise.all(
359
+ layoutLoaders.map((l) =>
360
+ l.loaderData instanceof Promise
361
+ ? l.loaderData
362
+ : Promise.resolve(l.loaderData),
363
+ ),
364
+ )
365
+ : Promise.resolve([]);
366
+ const resolvedData = await layoutLoaderDataPromise;
289
367
  const { loaderData, errorFallback } = resolveLoaderData(
290
368
  resolvedData,
291
- loaderIds,
369
+ layoutLoaderIds,
292
370
  );
293
371
 
372
+ // Parallel-owned loaders: attach to their owning parallel segment
373
+ // as loaderDataPromise so ParallelOutlet wraps in LoaderBoundary
374
+ if (parallelOwnedLoaders.length > 0) {
375
+ const loadersByParallelNamespace = new Map<string, ResolvedSegment[]>();
376
+
377
+ for (const loader of parallelOwnedLoaders) {
378
+ if (!loader.namespace) {
379
+ continue;
380
+ }
381
+ const existing = loadersByParallelNamespace.get(loader.namespace);
382
+ if (existing) {
383
+ existing.push(loader);
384
+ } else {
385
+ loadersByParallelNamespace.set(loader.namespace, [loader]);
386
+ }
387
+ }
388
+
389
+ for (const p of node.parallel) {
390
+ if (!p.loading || !p.namespace) {
391
+ continue;
392
+ }
393
+
394
+ const ownedLoaders = loadersByParallelNamespace.get(p.namespace);
395
+ if (!ownedLoaders || ownedLoaders.length === 0) {
396
+ continue;
397
+ }
398
+
399
+ const parallelLoaderIds = ownedLoaders.map((l) => l.loaderId!);
400
+ const parallelLoaderSources = ownedLoaders.map((l) => l.loaderData);
401
+ p.loaderIds = parallelLoaderIds;
402
+
403
+ const shouldReuseParallelPromise =
404
+ p.loaderDataPromise !== undefined &&
405
+ hasSameReferences(p.parallelLoaderSources, parallelLoaderSources);
406
+
407
+ const parallelLoaderDataPromise = shouldReuseParallelPromise
408
+ ? p.loaderDataPromise
409
+ : forceAwait || isAction
410
+ ? await Promise.all(
411
+ ownedLoaders.map((l) =>
412
+ l.loaderData instanceof Promise
413
+ ? l.loaderData
414
+ : Promise.resolve(l.loaderData),
415
+ ),
416
+ )
417
+ : Promise.all(
418
+ ownedLoaders.map((l) =>
419
+ l.loaderData instanceof Promise
420
+ ? l.loaderData
421
+ : Promise.resolve(l.loaderData),
422
+ ),
423
+ );
424
+
425
+ p.loaderDataPromise = parallelLoaderDataPromise;
426
+ p.parallelLoaderSources = parallelLoaderSources;
427
+ }
428
+ }
429
+
294
430
  content = createElement(OutletProvider, {
295
431
  key,
296
432
  content: outletContent,
@@ -157,10 +157,24 @@ export type InterceptEntry = {
157
157
  when: InterceptWhenFn[]; // Selector conditions - all must return true to intercept
158
158
  };
159
159
 
160
+ export interface ParallelEntryData
161
+ extends EntryPropCommon, EntryPropDatas, EntryPropSegments {
162
+ type: "parallel";
163
+ handler: Record<`@${string}`, Handler<any, any, any> | ReactNode>;
164
+ loading?: ReactNode | false;
165
+ transition?: TransitionConfig;
166
+ /** Set when any parallel slot is a Static definition */
167
+ isStaticPrerender?: true;
168
+ /** Per-slot static handler $$ids for build-time store lookup */
169
+ staticHandlerIds?: Record<string, string>;
170
+ }
171
+
172
+ export type ParallelEntries = Partial<Record<`@${string}`, ParallelEntryData>>;
173
+
160
174
  export type EntryPropSegments = {
161
175
  loader: LoaderEntry[];
162
176
  layout: EntryData[];
163
- parallel: EntryData[]; // type: "parallel" entries with their own loaders/revalidate/loading
177
+ parallel: ParallelEntries; // slot -> parallel entry (same entry may back multiple slots)
164
178
  intercept: InterceptEntry[]; // intercept definitions for soft navigation
165
179
  };
166
180
 
@@ -200,18 +214,7 @@ export type EntryData =
200
214
  } & EntryPropCommon &
201
215
  EntryPropDatas &
202
216
  EntryPropSegments)
203
- | ({
204
- type: "parallel";
205
- handler: Record<`@${string}`, Handler<any, any, any> | ReactNode>;
206
- loading?: ReactNode | false;
207
- transition?: TransitionConfig;
208
- /** Set when any parallel slot is a Static definition */
209
- isStaticPrerender?: true;
210
- /** Per-slot static handler $$ids for build-time store lookup */
211
- staticHandlerIds?: Record<string, string>;
212
- } & EntryPropCommon &
213
- EntryPropDatas &
214
- EntryPropSegments)
217
+ | ParallelEntryData
215
218
  | ({
216
219
  type: "cache";
217
220
  /** Cache entries create cache boundaries and render like layouts (with Outlet) */
@@ -270,6 +273,9 @@ interface HelperContext {
270
273
  string,
271
274
  import("../cache/profile-registry.js").CacheProfile
272
275
  >;
276
+ /** True when resolving handlers inside a cache() DSL boundary.
277
+ * Read by ctx.get() to guard non-cacheable variable reads. */
278
+ insideCacheScope?: boolean;
273
279
  }
274
280
  // Use a global symbol key so the AsyncLocalStorage instance survives HMR
275
281
  // module re-evaluation. Without this, Vite's RSC module runner may create
@@ -553,6 +559,80 @@ export function getRootScoped(): boolean {
553
559
  // Export HelperContext type for use in other modules
554
560
  export type { HelperContext };
555
561
 
562
+ /**
563
+ * Return an isolated copy of a lazy include's captured parent entry.
564
+ *
565
+ * DSL helpers (loader(), middleware(), etc.) mutate ctx.parent in place.
566
+ * Multiple include() scopes capture the *same* syntheticMapRoot as their
567
+ * parent, so without isolation one include's loaders/middleware leak into
568
+ * every other route that shares that root.
569
+ *
570
+ * The clone is shallow: only the mutable arrays are copied so each
571
+ * include pushes to its own list. The rest of the entry (id, shortCode,
572
+ * parent pointer, handler) stays shared, which is correct and cheap.
573
+ */
574
+ export function getIsolatedLazyParent(
575
+ captured: EntryData | null | undefined,
576
+ ): EntryData | null {
577
+ if (!captured) return null;
578
+ return {
579
+ ...captured,
580
+ loader: [...captured.loader],
581
+ middleware: [...captured.middleware],
582
+ revalidate: [...captured.revalidate],
583
+ errorBoundary: [...captured.errorBoundary],
584
+ notFoundBoundary: [...captured.notFoundBoundary],
585
+ layout: [...captured.layout],
586
+ parallel: { ...captured.parallel },
587
+ intercept: [...captured.intercept],
588
+ };
589
+ }
590
+
591
+ export function getParallelEntries(
592
+ parallels: ParallelEntries | EntryData[] | undefined,
593
+ ): ParallelEntryData[] {
594
+ if (!parallels) return [];
595
+ if (Array.isArray(parallels)) {
596
+ return parallels.filter(
597
+ (entry): entry is ParallelEntryData => entry.type === "parallel",
598
+ );
599
+ }
600
+ return Object.values(parallels).filter(
601
+ (entry): entry is ParallelEntryData => !!entry,
602
+ );
603
+ }
604
+
605
+ export function getParallelSlotEntries(
606
+ parallels: ParallelEntries | EntryData[] | undefined,
607
+ ): Array<{ slot: `@${string}`; entry: ParallelEntryData }> {
608
+ if (!parallels) return [];
609
+
610
+ if (Array.isArray(parallels)) {
611
+ return getParallelEntries(parallels).flatMap((entry) =>
612
+ (Object.keys(entry.handler) as `@${string}`[]).map((slot) => ({
613
+ slot,
614
+ entry,
615
+ })),
616
+ );
617
+ }
618
+
619
+ return Object.entries(parallels)
620
+ .filter(([, entry]) => !!entry)
621
+ .map(([slot, entry]) => ({
622
+ slot: slot as `@${string}`,
623
+ entry: entry!,
624
+ }));
625
+ }
626
+
627
+ export function getParallelSlotCount(
628
+ parallels: ParallelEntries | EntryData[] | undefined,
629
+ ): number {
630
+ if (!parallels) return 0;
631
+ return Array.isArray(parallels)
632
+ ? parallels.filter((entry) => entry?.type === "parallel").length
633
+ : Object.keys(parallels).length;
634
+ }
635
+
556
636
  // ============================================================================
557
637
  // Performance Metrics Helpers
558
638
  // ============================================================================
@@ -589,3 +669,12 @@ export function track(label: string, depth?: number): () => void {
589
669
  });
590
670
  };
591
671
  }
672
+
673
+ /**
674
+ * Check if the current execution is inside a cache() DSL boundary.
675
+ * Returns false inside loader execution — loaders are always fresh
676
+ * (never cached), so non-cacheable reads are safe.
677
+ */
678
+ export function isInsideCacheScope(): boolean {
679
+ return RSCRouterContext.getStore()?.insideCacheScope === true;
680
+ }
@@ -20,17 +20,27 @@ import type {
20
20
  DefaultRouteName,
21
21
  } from "../types/global-namespace.js";
22
22
  import type { Handle } from "../handle.js";
23
- import { type ContextVar, contextGet, contextSet } from "../context-var.js";
23
+ import {
24
+ type ContextVar,
25
+ contextGet,
26
+ contextSet,
27
+ isContextVar,
28
+ isNonCacheable,
29
+ } from "../context-var.js";
24
30
  import { createHandleStore, type HandleStore } from "./handle-store.js";
25
31
  import { isHandle } from "../handle.js";
26
- import { track, type MetricsStore } from "./context.js";
32
+ import { track, RSCRouterContext, type MetricsStore } from "./context.js";
27
33
  import { getFetchableLoader } from "./fetchable-loader-store.js";
28
34
  import type { SegmentCacheStore } from "../cache/types.js";
29
35
  import type { Theme, ResolvedThemeConfig } from "../theme/types.js";
30
36
  import { THEME_COOKIE } from "../theme/constants.js";
31
37
  import type { LocationStateEntry } from "../browser/react/location-state-shared.js";
32
38
  import { NOCACHE_SYMBOL, assertNotInsideCacheExec } from "../cache/taint.js";
33
- import { createReverseFunction } from "../router/handler-context.js";
39
+ import { isInsideCacheScope } from "./context.js";
40
+ import {
41
+ createReverseFunction,
42
+ stripInternalParams,
43
+ } from "../router/handler-context.js";
34
44
  import { getGlobalRouteMap, isRouteRootScoped } from "../route-map-builder.js";
35
45
  import { invariant } from "../errors.js";
36
46
  import { isAutoGeneratedRouteName } from "../route-name.js";
@@ -58,7 +68,7 @@ export interface RequestContext<
58
68
  originalUrl: URL;
59
69
  /** URL pathname */
60
70
  pathname: string;
61
- /** URL search params (system params like _rsc* are NOT filtered here) */
71
+ /** URL search params (with internal `_rsc*` params stripped, same as `url.searchParams`) */
62
72
  searchParams: URLSearchParams;
63
73
  /** Variables set by middleware (same as ctx.var) */
64
74
  var: Record<string, any>;
@@ -69,8 +79,12 @@ export interface RequestContext<
69
79
  };
70
80
  /** Set a variable (shared with middleware and handlers) */
71
81
  set: {
72
- <T>(contextVar: ContextVar<T>, value: T): void;
73
- <K extends string>(key: K, value: any): void;
82
+ <T>(
83
+ contextVar: ContextVar<T>,
84
+ value: T,
85
+ options?: { cache?: boolean },
86
+ ): void;
87
+ <K extends string>(key: K, value: any, options?: { cache?: boolean }): void;
74
88
  };
75
89
  /**
76
90
  * Route params (populated after route matching)
@@ -503,6 +517,18 @@ export function createRequestContext<TEnv>(
503
517
  responseCookieCache = null;
504
518
  };
505
519
 
520
+ // Guard: throw if a response-level side effect is called inside a cache() scope.
521
+ // Uses ALS to detect the scope (set during segment resolution).
522
+ function assertNotInsideCacheScopeALS(methodName: string): void {
523
+ if (isInsideCacheScope()) {
524
+ throw new Error(
525
+ `ctx.${methodName}() cannot be called inside a cache() boundary. ` +
526
+ `On cache hit the handler is skipped, so this side effect would be lost. ` +
527
+ `Move ctx.${methodName}() to a middleware or layout outside the cache() scope.`,
528
+ );
529
+ }
530
+ }
531
+
506
532
  // Effective cookie read: response stub Set-Cookie wins, then original header.
507
533
  // The stub IS the source of truth for same-request mutations.
508
534
  const effectiveCookie = (name: string): string | undefined => {
@@ -555,20 +581,31 @@ export function createRequestContext<TEnv>(
555
581
  invalidateResponseCookieCache();
556
582
  };
557
583
 
584
+ // Strip internal _rsc* params so userland sees a clean URL.
585
+ const cleanUrl = stripInternalParams(url);
586
+
558
587
  // Build the context object first (without use), then add use
559
588
  const ctx: RequestContext<TEnv> = {
560
589
  env,
561
590
  request,
562
- url,
591
+ url: cleanUrl,
563
592
  originalUrl: new URL(request.url),
564
593
  pathname: url.pathname,
565
- searchParams: url.searchParams,
594
+ searchParams: cleanUrl.searchParams,
566
595
  var: variables,
567
- get: ((keyOrVar: any) =>
568
- contextGet(variables, keyOrVar)) as RequestContext<TEnv>["get"],
569
- set: ((keyOrVar: any, value: any) => {
596
+ get: ((keyOrVar: any) => {
597
+ if (isNonCacheable(variables, keyOrVar) && isInsideCacheScope()) {
598
+ throw new Error(
599
+ `ctx.get() for a non-cacheable variable cannot be called inside a cache() boundary. ` +
600
+ `The variable was created with { cache: false } or set with { cache: false }, ` +
601
+ `and its value would be stale on cache hit. Move the read outside the cached scope.`,
602
+ );
603
+ }
604
+ return contextGet(variables, keyOrVar);
605
+ }) as RequestContext<TEnv>["get"],
606
+ set: ((keyOrVar: any, value: any, options?: any) => {
570
607
  assertNotInsideCacheExec(ctx, "set");
571
- contextSet(variables, keyOrVar, value);
608
+ contextSet(variables, keyOrVar, value, options);
572
609
  }) as RequestContext<TEnv>["set"],
573
610
  params: {} as Record<string, string>,
574
611
 
@@ -606,6 +643,7 @@ export function createRequestContext<TEnv>(
606
643
 
607
644
  setCookie(name: string, value: string, options?: CookieOptions): void {
608
645
  assertNotInsideCacheExec(ctx, "setCookie");
646
+ assertNotInsideCacheScopeALS("setCookie");
609
647
  stubResponse.headers.append(
610
648
  "Set-Cookie",
611
649
  serializeCookieValue(name, value, options),
@@ -618,6 +656,7 @@ export function createRequestContext<TEnv>(
618
656
  options?: Pick<CookieOptions, "domain" | "path">,
619
657
  ): void {
620
658
  assertNotInsideCacheExec(ctx, "deleteCookie");
659
+ assertNotInsideCacheScopeALS("deleteCookie");
621
660
  stubResponse.headers.append(
622
661
  "Set-Cookie",
623
662
  serializeCookieValue(name, "", { ...options, maxAge: 0 }),
@@ -627,11 +666,13 @@ export function createRequestContext<TEnv>(
627
666
 
628
667
  header(name: string, value: string): void {
629
668
  assertNotInsideCacheExec(ctx, "header");
669
+ assertNotInsideCacheScopeALS("header");
630
670
  stubResponse.headers.set(name, value);
631
671
  },
632
672
 
633
673
  setStatus(status: number): void {
634
674
  assertNotInsideCacheExec(ctx, "setStatus");
675
+ assertNotInsideCacheScopeALS("setStatus");
635
676
  stubResponse = new Response(null, {
636
677
  status,
637
678
  headers: stubResponse.headers,
@@ -670,6 +711,7 @@ export function createRequestContext<TEnv>(
670
711
 
671
712
  onResponse(callback: (response: Response) => Response): void {
672
713
  assertNotInsideCacheExec(ctx, "onResponse");
714
+ assertNotInsideCacheScopeALS("onResponse");
673
715
  this._onResponseCallbacks.push(callback);
674
716
  },
675
717
 
@@ -900,7 +942,6 @@ export function createUseFunction<TEnv>(
900
942
  ),
901
943
  };
902
944
 
903
- // Start loader execution with tracking
904
945
  const doneLoader = track(`loader:${loader.$$id}`, 2);
905
946
  const promise = Promise.resolve(loaderFn(loaderCtx)).finally(() => {
906
947
  doneLoader();
package/src/ssr/index.tsx CHANGED
@@ -168,6 +168,7 @@ function createSsrEventController(opts: {
168
168
  const state: DerivedNavigationState = {
169
169
  state: "idle",
170
170
  isStreaming: false,
171
+ isNavigating: false,
171
172
  location,
172
173
  pendingUrl: null,
173
174
  inflightActions: [],
@@ -272,8 +272,16 @@ export type HandlerContext<
272
272
  * ```
273
273
  */
274
274
  set: {
275
- <T>(contextVar: ContextVar<T>, value: T): void;
276
- } & (<K extends keyof DefaultVars>(key: K, value: DefaultVars[K]) => void);
275
+ <T>(
276
+ contextVar: ContextVar<T>,
277
+ value: T,
278
+ options?: { cache?: boolean },
279
+ ): void;
280
+ } & ((
281
+ key: keyof DefaultVars,
282
+ value: DefaultVars[keyof DefaultVars],
283
+ options?: { cache?: boolean },
284
+ ) => void);
277
285
  /**
278
286
  * Response headers. Headers set here are merged into the final response.
279
287
  *
@@ -289,8 +297,12 @@ export type HandlerContext<
289
297
  /**
290
298
  * Access loader data or push handle data.
291
299
  *
300
+ * Available in route handlers, layout handlers, middleware, server actions,
301
+ * and server components rendered within the request context.
302
+ *
292
303
  * For loaders: Returns a promise that resolves to the loader data.
293
- * Loaders are executed in parallel and memoized per request.
304
+ * Loaders are executed in parallel and memoized per request — calling
305
+ * `ctx.use(SameLoader)` multiple times returns the same promise.
294
306
  *
295
307
  * For handles: Returns a push function to add data for this segment.
296
308
  * Handle data accumulates across all matched route segments.
@@ -519,30 +531,112 @@ export type RevalidateParams<TParams = GenericParams, TEnv = any> = Parameters<
519
531
  * })
520
532
  * ```
521
533
  */
534
+ /**
535
+ * Revalidation function called during client-side navigation to decide whether
536
+ * a segment (layout, route, parallel slot, or loader) should be re-rendered.
537
+ *
538
+ * Return `true` to re-render, `false` to skip (keep client's current version),
539
+ * or `{ defaultShouldRevalidate: boolean }` to override the default for
540
+ * downstream segments.
541
+ *
542
+ * @example
543
+ * ```ts
544
+ * // Re-render only when a cart action happened or browser signals staleness
545
+ * revalidate(({ actionId, stale }) =>
546
+ * actionId?.includes("cart") || stale || false
547
+ * )
548
+ *
549
+ * // Always re-render when params change (default behavior made explicit)
550
+ * revalidate(({ defaultShouldRevalidate }) => defaultShouldRevalidate)
551
+ * ```
552
+ */
522
553
  export type ShouldRevalidateFn<TParams = GenericParams, TEnv = any> = (args: {
554
+ /** Route params from the page being navigated away from. */
523
555
  currentParams: TParams;
556
+ /** Full URL of the page being navigated away from. */
524
557
  currentUrl: URL;
558
+ /** Route params for the navigation target. */
525
559
  nextParams: TParams;
560
+ /** Full URL of the navigation target. */
526
561
  nextUrl: URL;
562
+ /**
563
+ * The router's default revalidation decision for this segment.
564
+ * `true` when params changed or the segment is new to the client.
565
+ * Return this when you want default behavior plus your own conditions.
566
+ */
527
567
  defaultShouldRevalidate: boolean;
568
+ /** Full handler context — access to `ctx.use()`, `ctx.env`, `ctx.params`, etc. */
528
569
  context: HandlerContext<TParams, TEnv>;
529
- // Segment metadata (which segment is being evaluated):
570
+
571
+ // ── Segment metadata (which segment is being evaluated) ──────────────
572
+
573
+ /** The type of segment being revalidated. */
530
574
  segmentType: "layout" | "route" | "parallel";
531
- layoutName?: string; // Layout name (e.g., "root", "shop", "auth") - only for layouts
532
- slotName?: string; // Slot name (e.g., "@sidebar", "@modal") - only for parallels
533
- // Action context (populated when revalidation triggered by server action):
534
- actionId?: string; // Action identifier (e.g., "src/actions.ts#addToCart")
535
- actionUrl?: URL; // URL where action was executed
536
- actionResult?: any; // Return value from action execution
537
- formData?: FormData; // FormData from action request
538
- method?: string; // Request method: 'GET' for navigation, 'POST' for actions
539
- routeName?: DefaultRouteName; // Route name of the navigation target (alias for toRouteName)
540
- // Named-route identity for both ends of a navigation transition.
541
- // Undefined for unnamed internal routes (those without a `name` option).
542
- fromRouteName?: DefaultRouteName; // Route name being navigated away from
543
- toRouteName?: DefaultRouteName; // Route name being navigated to
544
- // Stale cache revalidation (SWR pattern):
545
- stale?: boolean; // True if this is a stale cache revalidation request
575
+ /** Layout name (e.g., `"root"`, `"shop"`, `"auth"`). Only set for layout segments. */
576
+ layoutName?: string;
577
+ /** Slot name (e.g., `"@sidebar"`, `"@modal"`). Only set for parallel segments. */
578
+ slotName?: string;
579
+
580
+ // ── Action context (populated when revalidation is triggered by a server action) ──
581
+
582
+ /**
583
+ * Identifier of the server action that triggered revalidation.
584
+ * `undefined` during normal navigation (no action involved).
585
+ *
586
+ * Format: `"src/<path>#<exportName>"` the file path is the source path
587
+ * relative to the project root, followed by `#` and the exported function name.
588
+ *
589
+ * This is stable and can be used for path-based matching to revalidate
590
+ * when any action in a module or directory fires:
591
+ *
592
+ * @example
593
+ * ```ts
594
+ * // Match a specific action
595
+ * revalidate(({ actionId }) => actionId === "src/actions/cart.ts#addToCart")
596
+ *
597
+ * // Match any action in the cart module
598
+ * revalidate(({ actionId }) => actionId?.includes("cart") ?? false)
599
+ *
600
+ * // Match any action under src/apps/store/actions/
601
+ * revalidate(({ actionId }) => actionId?.startsWith("src/apps/store/actions/") ?? false)
602
+ * ```
603
+ */
604
+ actionId?: string;
605
+ /** URL where the action was executed (the page the user was on when they triggered the action). */
606
+ actionUrl?: URL;
607
+ /** Return value from the action execution. Can be used to conditionally revalidate based on the action's outcome. */
608
+ actionResult?: any;
609
+ /** FormData from the action request body. Only set for form-based actions (not inline `"use server"` actions). */
610
+ formData?: FormData;
611
+ /** HTTP method: `"GET"` for navigation, `"POST"` for server actions. */
612
+ method?: string;
613
+
614
+ // ── Route identity ───────────────────────────────────────────────────
615
+
616
+ /** Route name of the navigation target. Alias for `toRouteName`. */
617
+ routeName?: DefaultRouteName;
618
+ /**
619
+ * Route name being navigated away from.
620
+ * `undefined` for unnamed internal routes (those without a `name` option).
621
+ */
622
+ fromRouteName?: DefaultRouteName;
623
+ /**
624
+ * Route name being navigated to.
625
+ * `undefined` for unnamed internal routes (those without a `name` option).
626
+ */
627
+ toRouteName?: DefaultRouteName;
628
+
629
+ // ── Staleness signal ─────────────────────────────────────────────────
630
+
631
+ /**
632
+ * `true` when the browser signals that data may be stale — typically because
633
+ * a server action was executed in this or another tab (`_rsc_stale` header).
634
+ *
635
+ * This is NOT segment cache staleness (loaders are never segment-cached).
636
+ * Use this to decide whether loader data should be re-fetched after an
637
+ * action that may have mutated backend state.
638
+ */
639
+ stale?: boolean;
546
640
  }) => boolean | { defaultShouldRevalidate: boolean };
547
641
 
548
642
  // MiddlewareFn is imported from "../router/middleware.js" and re-exported
@@ -51,9 +51,11 @@ export interface ResolvedSegment {
51
51
  // Loader-specific fields
52
52
  loaderId?: string; // For loaders: the loader $$id identifier
53
53
  loaderData?: any; // For loaders: the resolved data from loader execution
54
+ parallelLoading?: ReactNode; // For parallel-owned loaders: the parallel's loading fallback
54
55
  // Intercept loader fields (for streaming loader data in parallel segments)
55
56
  loaderDataPromise?: Promise<any[]> | any[]; // Loader data promise or resolved array
56
57
  loaderIds?: string[]; // IDs ($$id) of loaders for this segment
58
+ parallelLoaderSources?: any[]; // Internal: preserves stable aggregate promise across renders
57
59
  // Error-specific fields
58
60
  error?: ErrorInfo; // For error segments: the error information
59
61
  // NotFound-specific fields
@@ -199,7 +199,7 @@ export function createPathHelper<TEnv>(): PathFn<TEnv> {
199
199
  errorBoundary: [],
200
200
  notFoundBoundary: [],
201
201
  layout: [],
202
- parallel: [],
202
+ parallel: {},
203
203
  intercept: [],
204
204
  loader: [],
205
205
  ...(urlPrefix ? { mountPath: urlPrefix } : {}),