@rangojs/router 0.0.0-experimental.111 → 0.0.0-experimental.113

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 (875) hide show
  1. package/dist/bin/rango.js +42 -38
  2. package/dist/vite/index.js +147 -194
  3. package/package.json +17 -16
  4. package/skills/cache-guide/SKILL.md +35 -24
  5. package/skills/caching/SKILL.md +115 -7
  6. package/skills/document-cache/SKILL.md +78 -55
  7. package/skills/hooks/SKILL.md +37 -19
  8. package/skills/loader/SKILL.md +3 -3
  9. package/skills/rango/SKILL.md +15 -10
  10. package/skills/use-cache/SKILL.md +34 -5
  11. package/src/browser/action-coordinator.ts +53 -36
  12. package/src/browser/event-controller.ts +42 -66
  13. package/src/browser/navigation-bridge.ts +4 -0
  14. package/src/browser/navigation-client.ts +12 -15
  15. package/src/browser/navigation-store.ts +7 -8
  16. package/src/browser/navigation-transaction.ts +7 -21
  17. package/src/browser/partial-update.ts +8 -16
  18. package/src/browser/react/NavigationProvider.tsx +29 -40
  19. package/src/browser/react/location-state-shared.ts +93 -3
  20. package/src/browser/react/use-params.ts +3 -4
  21. package/src/browser/response-adapter.ts +25 -0
  22. package/src/browser/rsc-router.tsx +16 -2
  23. package/src/browser/server-action-bridge.ts +23 -30
  24. package/src/browser/types.ts +2 -0
  25. package/src/build/generate-manifest.ts +29 -31
  26. package/src/build/generate-route-types.ts +2 -0
  27. package/src/build/route-types/per-module-writer.ts +4 -1
  28. package/src/build/route-types/router-processing.ts +37 -9
  29. package/src/build/runtime-discovery.ts +9 -20
  30. package/src/cache/cache-scope.ts +28 -42
  31. package/src/cache/cf/cf-cache-store.ts +49 -6
  32. package/src/decode-loader-results.ts +36 -0
  33. package/src/errors.ts +11 -0
  34. package/src/loader-store.ts +62 -25
  35. package/src/loader.ts +1 -5
  36. package/src/response-utils.ts +9 -0
  37. package/src/route-content-wrapper.tsx +6 -28
  38. package/src/route-definition/helpers-types.ts +13 -4
  39. package/src/router/content-negotiation.ts +15 -2
  40. package/src/router/intercept-resolution.ts +4 -18
  41. package/src/router/loader-resolution.ts +16 -2
  42. package/src/router/match-middleware/cache-lookup.ts +44 -91
  43. package/src/router/match-middleware/cache-store.ts +3 -2
  44. package/src/router/match-result.ts +32 -30
  45. package/src/router/middleware.ts +46 -78
  46. package/src/router/preview-match.ts +3 -1
  47. package/src/router/request-classification.ts +4 -28
  48. package/src/rsc/handler.ts +20 -65
  49. package/src/rsc/helpers.ts +3 -2
  50. package/src/rsc/origin-guard.ts +28 -10
  51. package/src/rsc/response-route-handler.ts +32 -52
  52. package/src/rsc/rsc-rendering.ts +27 -53
  53. package/src/rsc/runtime-warnings.ts +9 -10
  54. package/src/rsc/server-action.ts +13 -37
  55. package/src/rsc/ssr-setup.ts +16 -0
  56. package/src/segment-system.tsx +46 -47
  57. package/src/server/context.ts +26 -0
  58. package/src/server/cookie-store.ts +28 -4
  59. package/src/types/handler-context.ts +5 -2
  60. package/src/use-loader.tsx +89 -42
  61. package/src/vite/discovery/discover-routers.ts +10 -22
  62. package/src/vite/discovery/route-types-writer.ts +38 -82
  63. package/src/vite/plugins/cjs-to-esm.ts +3 -7
  64. package/src/vite/plugins/expose-ids/handler-transform.ts +8 -61
  65. package/src/vite/plugins/expose-ids/loader-transform.ts +3 -5
  66. package/src/vite/plugins/expose-internal-ids.ts +34 -62
  67. package/src/vite/plugins/use-cache-transform.ts +12 -10
  68. package/src/vite/plugins/version-injector.ts +2 -12
  69. package/src/vite/router-discovery.ts +71 -26
  70. package/src/vite/utils/shared-utils.ts +13 -1
  71. package/dist/__internal.d.ts +0 -83
  72. package/dist/__internal.d.ts.map +0 -1
  73. package/dist/__internal.js +0 -19
  74. package/dist/__internal.js.map +0 -1
  75. package/dist/__mocks__/version.d.ts +0 -7
  76. package/dist/__mocks__/version.d.ts.map +0 -1
  77. package/dist/__mocks__/version.js +0 -7
  78. package/dist/__mocks__/version.js.map +0 -1
  79. package/dist/__tests__/client-href.test.d.ts +0 -2
  80. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  81. package/dist/__tests__/client-href.test.js +0 -74
  82. package/dist/__tests__/client-href.test.js.map +0 -1
  83. package/dist/__tests__/component-utils.test.d.ts +0 -2
  84. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  85. package/dist/__tests__/component-utils.test.js +0 -51
  86. package/dist/__tests__/component-utils.test.js.map +0 -1
  87. package/dist/__tests__/event-controller.test.d.ts +0 -2
  88. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  89. package/dist/__tests__/event-controller.test.js +0 -538
  90. package/dist/__tests__/event-controller.test.js.map +0 -1
  91. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  92. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  93. package/dist/__tests__/helpers/route-tree.js +0 -374
  94. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  95. package/dist/__tests__/match-result.test.d.ts +0 -2
  96. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  97. package/dist/__tests__/match-result.test.js +0 -154
  98. package/dist/__tests__/match-result.test.js.map +0 -1
  99. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  100. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  101. package/dist/__tests__/navigation-store.test.js +0 -440
  102. package/dist/__tests__/navigation-store.test.js.map +0 -1
  103. package/dist/__tests__/partial-update.test.d.ts +0 -2
  104. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  105. package/dist/__tests__/partial-update.test.js +0 -1009
  106. package/dist/__tests__/partial-update.test.js.map +0 -1
  107. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  108. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  109. package/dist/__tests__/reverse-types.test.js +0 -656
  110. package/dist/__tests__/reverse-types.test.js.map +0 -1
  111. package/dist/__tests__/route-definition.test.d.ts +0 -2
  112. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  113. package/dist/__tests__/route-definition.test.js +0 -55
  114. package/dist/__tests__/route-definition.test.js.map +0 -1
  115. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  116. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  117. package/dist/__tests__/router-helpers.test.js +0 -377
  118. package/dist/__tests__/router-helpers.test.js.map +0 -1
  119. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  120. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  121. package/dist/__tests__/router-integration-2.test.js +0 -426
  122. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  123. package/dist/__tests__/router-integration.test.d.ts +0 -2
  124. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  125. package/dist/__tests__/router-integration.test.js +0 -1051
  126. package/dist/__tests__/router-integration.test.js.map +0 -1
  127. package/dist/__tests__/search-params.test.d.ts +0 -5
  128. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  129. package/dist/__tests__/search-params.test.js +0 -306
  130. package/dist/__tests__/search-params.test.js.map +0 -1
  131. package/dist/__tests__/segment-system.test.d.ts +0 -2
  132. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  133. package/dist/__tests__/segment-system.test.js +0 -627
  134. package/dist/__tests__/segment-system.test.js.map +0 -1
  135. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  136. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  137. package/dist/__tests__/static-handler-types.test.js +0 -63
  138. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  139. package/dist/__tests__/urls.test.d.ts +0 -2
  140. package/dist/__tests__/urls.test.d.ts.map +0 -1
  141. package/dist/__tests__/urls.test.js +0 -421
  142. package/dist/__tests__/urls.test.js.map +0 -1
  143. package/dist/__tests__/use-mount.test.d.ts +0 -2
  144. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  145. package/dist/__tests__/use-mount.test.js +0 -35
  146. package/dist/__tests__/use-mount.test.js.map +0 -1
  147. package/dist/bin/rango.d.ts +0 -2
  148. package/dist/bin/rango.d.ts.map +0 -1
  149. package/dist/bin/rango.js.map +0 -1
  150. package/dist/browser/event-controller.d.ts +0 -191
  151. package/dist/browser/event-controller.d.ts.map +0 -1
  152. package/dist/browser/event-controller.js +0 -559
  153. package/dist/browser/event-controller.js.map +0 -1
  154. package/dist/browser/index.d.ts +0 -2
  155. package/dist/browser/index.d.ts.map +0 -1
  156. package/dist/browser/index.js +0 -14
  157. package/dist/browser/index.js.map +0 -1
  158. package/dist/browser/link-interceptor.d.ts +0 -38
  159. package/dist/browser/link-interceptor.d.ts.map +0 -1
  160. package/dist/browser/link-interceptor.js +0 -99
  161. package/dist/browser/link-interceptor.js.map +0 -1
  162. package/dist/browser/logging.d.ts +0 -10
  163. package/dist/browser/logging.d.ts.map +0 -1
  164. package/dist/browser/logging.js +0 -29
  165. package/dist/browser/logging.js.map +0 -1
  166. package/dist/browser/lru-cache.d.ts +0 -17
  167. package/dist/browser/lru-cache.d.ts.map +0 -1
  168. package/dist/browser/lru-cache.js +0 -50
  169. package/dist/browser/lru-cache.js.map +0 -1
  170. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  171. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  172. package/dist/browser/merge-segment-loaders.js +0 -102
  173. package/dist/browser/merge-segment-loaders.js.map +0 -1
  174. package/dist/browser/navigation-bridge.d.ts +0 -102
  175. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  176. package/dist/browser/navigation-bridge.js +0 -708
  177. package/dist/browser/navigation-bridge.js.map +0 -1
  178. package/dist/browser/navigation-client.d.ts +0 -25
  179. package/dist/browser/navigation-client.d.ts.map +0 -1
  180. package/dist/browser/navigation-client.js +0 -157
  181. package/dist/browser/navigation-client.js.map +0 -1
  182. package/dist/browser/navigation-store.d.ts +0 -101
  183. package/dist/browser/navigation-store.d.ts.map +0 -1
  184. package/dist/browser/navigation-store.js +0 -625
  185. package/dist/browser/navigation-store.js.map +0 -1
  186. package/dist/browser/partial-update.d.ts +0 -75
  187. package/dist/browser/partial-update.d.ts.map +0 -1
  188. package/dist/browser/partial-update.js +0 -426
  189. package/dist/browser/partial-update.js.map +0 -1
  190. package/dist/browser/react/Link.d.ts +0 -86
  191. package/dist/browser/react/Link.d.ts.map +0 -1
  192. package/dist/browser/react/Link.js +0 -128
  193. package/dist/browser/react/Link.js.map +0 -1
  194. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  195. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  196. package/dist/browser/react/NavigationProvider.js +0 -216
  197. package/dist/browser/react/NavigationProvider.js.map +0 -1
  198. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  199. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  200. package/dist/browser/react/ScrollRestoration.js +0 -57
  201. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  202. package/dist/browser/react/context.d.ts +0 -46
  203. package/dist/browser/react/context.d.ts.map +0 -1
  204. package/dist/browser/react/context.js +0 -10
  205. package/dist/browser/react/context.js.map +0 -1
  206. package/dist/browser/react/index.d.ts +0 -11
  207. package/dist/browser/react/index.d.ts.map +0 -1
  208. package/dist/browser/react/index.js +0 -22
  209. package/dist/browser/react/index.js.map +0 -1
  210. package/dist/browser/react/location-state-shared.d.ts +0 -63
  211. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  212. package/dist/browser/react/location-state-shared.js +0 -81
  213. package/dist/browser/react/location-state-shared.js.map +0 -1
  214. package/dist/browser/react/location-state.d.ts +0 -23
  215. package/dist/browser/react/location-state.d.ts.map +0 -1
  216. package/dist/browser/react/location-state.js +0 -29
  217. package/dist/browser/react/location-state.js.map +0 -1
  218. package/dist/browser/react/mount-context.d.ts +0 -24
  219. package/dist/browser/react/mount-context.d.ts.map +0 -1
  220. package/dist/browser/react/mount-context.js +0 -24
  221. package/dist/browser/react/mount-context.js.map +0 -1
  222. package/dist/browser/react/use-action.d.ts +0 -64
  223. package/dist/browser/react/use-action.d.ts.map +0 -1
  224. package/dist/browser/react/use-action.js +0 -134
  225. package/dist/browser/react/use-action.js.map +0 -1
  226. package/dist/browser/react/use-client-cache.d.ts +0 -41
  227. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  228. package/dist/browser/react/use-client-cache.js +0 -39
  229. package/dist/browser/react/use-client-cache.js.map +0 -1
  230. package/dist/browser/react/use-handle.d.ts +0 -31
  231. package/dist/browser/react/use-handle.d.ts.map +0 -1
  232. package/dist/browser/react/use-handle.js +0 -144
  233. package/dist/browser/react/use-handle.js.map +0 -1
  234. package/dist/browser/react/use-href.d.ts +0 -33
  235. package/dist/browser/react/use-href.d.ts.map +0 -1
  236. package/dist/browser/react/use-href.js +0 -39
  237. package/dist/browser/react/use-href.js.map +0 -1
  238. package/dist/browser/react/use-link-status.d.ts +0 -37
  239. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  240. package/dist/browser/react/use-link-status.js +0 -99
  241. package/dist/browser/react/use-link-status.js.map +0 -1
  242. package/dist/browser/react/use-mount.d.ts +0 -25
  243. package/dist/browser/react/use-mount.d.ts.map +0 -1
  244. package/dist/browser/react/use-mount.js +0 -30
  245. package/dist/browser/react/use-mount.js.map +0 -1
  246. package/dist/browser/react/use-navigation.d.ts +0 -27
  247. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  248. package/dist/browser/react/use-navigation.js +0 -87
  249. package/dist/browser/react/use-navigation.js.map +0 -1
  250. package/dist/browser/react/use-segments.d.ts +0 -38
  251. package/dist/browser/react/use-segments.d.ts.map +0 -1
  252. package/dist/browser/react/use-segments.js +0 -130
  253. package/dist/browser/react/use-segments.js.map +0 -1
  254. package/dist/browser/request-controller.d.ts +0 -26
  255. package/dist/browser/request-controller.d.ts.map +0 -1
  256. package/dist/browser/request-controller.js +0 -147
  257. package/dist/browser/request-controller.js.map +0 -1
  258. package/dist/browser/rsc-router.d.ts +0 -129
  259. package/dist/browser/rsc-router.d.ts.map +0 -1
  260. package/dist/browser/rsc-router.js +0 -195
  261. package/dist/browser/rsc-router.js.map +0 -1
  262. package/dist/browser/scroll-restoration.d.ts +0 -93
  263. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  264. package/dist/browser/scroll-restoration.js +0 -321
  265. package/dist/browser/scroll-restoration.js.map +0 -1
  266. package/dist/browser/segment-structure-assert.d.ts +0 -17
  267. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  268. package/dist/browser/segment-structure-assert.js +0 -59
  269. package/dist/browser/segment-structure-assert.js.map +0 -1
  270. package/dist/browser/server-action-bridge.d.ts +0 -26
  271. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  272. package/dist/browser/server-action-bridge.js +0 -668
  273. package/dist/browser/server-action-bridge.js.map +0 -1
  274. package/dist/browser/shallow.d.ts +0 -12
  275. package/dist/browser/shallow.d.ts.map +0 -1
  276. package/dist/browser/shallow.js +0 -34
  277. package/dist/browser/shallow.js.map +0 -1
  278. package/dist/browser/types.d.ts +0 -369
  279. package/dist/browser/types.d.ts.map +0 -1
  280. package/dist/browser/types.js +0 -2
  281. package/dist/browser/types.js.map +0 -1
  282. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  283. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  284. package/dist/build/__tests__/generate-cli.test.js +0 -237
  285. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  286. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  287. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  288. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  289. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  290. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  291. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  292. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  293. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  294. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  295. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  296. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  297. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  298. package/dist/build/generate-manifest.d.ts +0 -81
  299. package/dist/build/generate-manifest.d.ts.map +0 -1
  300. package/dist/build/generate-manifest.js +0 -276
  301. package/dist/build/generate-manifest.js.map +0 -1
  302. package/dist/build/generate-route-types.d.ts +0 -115
  303. package/dist/build/generate-route-types.d.ts.map +0 -1
  304. package/dist/build/generate-route-types.js +0 -740
  305. package/dist/build/generate-route-types.js.map +0 -1
  306. package/dist/build/index.d.ts +0 -21
  307. package/dist/build/index.d.ts.map +0 -1
  308. package/dist/build/index.js +0 -21
  309. package/dist/build/index.js.map +0 -1
  310. package/dist/build/route-trie.d.ts +0 -71
  311. package/dist/build/route-trie.d.ts.map +0 -1
  312. package/dist/build/route-trie.js +0 -175
  313. package/dist/build/route-trie.js.map +0 -1
  314. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  315. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  316. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  317. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  318. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  319. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  320. package/dist/cache/__tests__/document-cache.test.js +0 -345
  321. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  322. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  323. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  324. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  325. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  326. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  327. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  328. package/dist/cache/__tests__/memory-store.test.js +0 -367
  329. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  330. package/dist/cache/cache-scope.d.ts +0 -102
  331. package/dist/cache/cache-scope.d.ts.map +0 -1
  332. package/dist/cache/cache-scope.js +0 -440
  333. package/dist/cache/cache-scope.js.map +0 -1
  334. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  335. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  336. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  337. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  338. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  339. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  340. package/dist/cache/cf/cf-cache-store.js +0 -242
  341. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  342. package/dist/cache/cf/index.d.ts +0 -14
  343. package/dist/cache/cf/index.d.ts.map +0 -1
  344. package/dist/cache/cf/index.js +0 -17
  345. package/dist/cache/cf/index.js.map +0 -1
  346. package/dist/cache/document-cache.d.ts +0 -64
  347. package/dist/cache/document-cache.d.ts.map +0 -1
  348. package/dist/cache/document-cache.js +0 -228
  349. package/dist/cache/document-cache.js.map +0 -1
  350. package/dist/cache/index.d.ts +0 -19
  351. package/dist/cache/index.d.ts.map +0 -1
  352. package/dist/cache/index.js +0 -21
  353. package/dist/cache/index.js.map +0 -1
  354. package/dist/cache/memory-segment-store.d.ts +0 -110
  355. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  356. package/dist/cache/memory-segment-store.js +0 -117
  357. package/dist/cache/memory-segment-store.js.map +0 -1
  358. package/dist/cache/memory-store.d.ts +0 -41
  359. package/dist/cache/memory-store.d.ts.map +0 -1
  360. package/dist/cache/memory-store.js +0 -191
  361. package/dist/cache/memory-store.js.map +0 -1
  362. package/dist/cache/types.d.ts +0 -317
  363. package/dist/cache/types.d.ts.map +0 -1
  364. package/dist/cache/types.js +0 -12
  365. package/dist/cache/types.js.map +0 -1
  366. package/dist/client.d.ts +0 -248
  367. package/dist/client.d.ts.map +0 -1
  368. package/dist/client.js +0 -367
  369. package/dist/client.js.map +0 -1
  370. package/dist/client.rsc.d.ts +0 -26
  371. package/dist/client.rsc.d.ts.map +0 -1
  372. package/dist/client.rsc.js +0 -46
  373. package/dist/client.rsc.js.map +0 -1
  374. package/dist/component-utils.d.ts +0 -36
  375. package/dist/component-utils.d.ts.map +0 -1
  376. package/dist/component-utils.js +0 -61
  377. package/dist/component-utils.js.map +0 -1
  378. package/dist/components/DefaultDocument.d.ts +0 -13
  379. package/dist/components/DefaultDocument.d.ts.map +0 -1
  380. package/dist/components/DefaultDocument.js +0 -15
  381. package/dist/components/DefaultDocument.js.map +0 -1
  382. package/dist/debug.d.ts +0 -58
  383. package/dist/debug.d.ts.map +0 -1
  384. package/dist/debug.js +0 -157
  385. package/dist/debug.js.map +0 -1
  386. package/dist/default-error-boundary.d.ts +0 -11
  387. package/dist/default-error-boundary.d.ts.map +0 -1
  388. package/dist/default-error-boundary.js +0 -45
  389. package/dist/default-error-boundary.js.map +0 -1
  390. package/dist/deps/browser.d.ts +0 -2
  391. package/dist/deps/browser.d.ts.map +0 -1
  392. package/dist/deps/browser.js +0 -3
  393. package/dist/deps/browser.js.map +0 -1
  394. package/dist/deps/html-stream-client.d.ts +0 -2
  395. package/dist/deps/html-stream-client.d.ts.map +0 -1
  396. package/dist/deps/html-stream-client.js +0 -3
  397. package/dist/deps/html-stream-client.js.map +0 -1
  398. package/dist/deps/html-stream-server.d.ts +0 -2
  399. package/dist/deps/html-stream-server.d.ts.map +0 -1
  400. package/dist/deps/html-stream-server.js +0 -3
  401. package/dist/deps/html-stream-server.js.map +0 -1
  402. package/dist/deps/rsc.d.ts +0 -2
  403. package/dist/deps/rsc.d.ts.map +0 -1
  404. package/dist/deps/rsc.js +0 -4
  405. package/dist/deps/rsc.js.map +0 -1
  406. package/dist/deps/ssr.d.ts +0 -2
  407. package/dist/deps/ssr.d.ts.map +0 -1
  408. package/dist/deps/ssr.js +0 -3
  409. package/dist/deps/ssr.js.map +0 -1
  410. package/dist/errors.d.ts +0 -174
  411. package/dist/errors.d.ts.map +0 -1
  412. package/dist/errors.js +0 -241
  413. package/dist/errors.js.map +0 -1
  414. package/dist/handle.d.ts +0 -78
  415. package/dist/handle.d.ts.map +0 -1
  416. package/dist/handle.js +0 -82
  417. package/dist/handle.js.map +0 -1
  418. package/dist/handles/MetaTags.d.ts +0 -14
  419. package/dist/handles/MetaTags.d.ts.map +0 -1
  420. package/dist/handles/MetaTags.js +0 -136
  421. package/dist/handles/MetaTags.js.map +0 -1
  422. package/dist/handles/index.d.ts +0 -6
  423. package/dist/handles/index.d.ts.map +0 -1
  424. package/dist/handles/index.js +0 -6
  425. package/dist/handles/index.js.map +0 -1
  426. package/dist/handles/meta.d.ts +0 -39
  427. package/dist/handles/meta.d.ts.map +0 -1
  428. package/dist/handles/meta.js +0 -202
  429. package/dist/handles/meta.js.map +0 -1
  430. package/dist/host/__tests__/errors.test.d.ts +0 -2
  431. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  432. package/dist/host/__tests__/errors.test.js +0 -76
  433. package/dist/host/__tests__/errors.test.js.map +0 -1
  434. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  435. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  436. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  437. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  438. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  439. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  440. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  441. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  442. package/dist/host/__tests__/router.test.d.ts +0 -2
  443. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  444. package/dist/host/__tests__/router.test.js +0 -241
  445. package/dist/host/__tests__/router.test.js.map +0 -1
  446. package/dist/host/__tests__/testing.test.d.ts +0 -2
  447. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  448. package/dist/host/__tests__/testing.test.js +0 -64
  449. package/dist/host/__tests__/testing.test.js.map +0 -1
  450. package/dist/host/__tests__/utils.test.d.ts +0 -2
  451. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  452. package/dist/host/__tests__/utils.test.js +0 -29
  453. package/dist/host/__tests__/utils.test.js.map +0 -1
  454. package/dist/host/cookie-handler.d.ts +0 -34
  455. package/dist/host/cookie-handler.d.ts.map +0 -1
  456. package/dist/host/cookie-handler.js +0 -124
  457. package/dist/host/cookie-handler.js.map +0 -1
  458. package/dist/host/errors.d.ts +0 -56
  459. package/dist/host/errors.d.ts.map +0 -1
  460. package/dist/host/errors.js +0 -79
  461. package/dist/host/errors.js.map +0 -1
  462. package/dist/host/index.d.ts +0 -29
  463. package/dist/host/index.d.ts.map +0 -1
  464. package/dist/host/index.js +0 -32
  465. package/dist/host/index.js.map +0 -1
  466. package/dist/host/pattern-matcher.d.ts +0 -36
  467. package/dist/host/pattern-matcher.d.ts.map +0 -1
  468. package/dist/host/pattern-matcher.js +0 -172
  469. package/dist/host/pattern-matcher.js.map +0 -1
  470. package/dist/host/router.d.ts +0 -26
  471. package/dist/host/router.d.ts.map +0 -1
  472. package/dist/host/router.js +0 -218
  473. package/dist/host/router.js.map +0 -1
  474. package/dist/host/testing.d.ts +0 -36
  475. package/dist/host/testing.d.ts.map +0 -1
  476. package/dist/host/testing.js +0 -55
  477. package/dist/host/testing.js.map +0 -1
  478. package/dist/host/types.d.ts +0 -115
  479. package/dist/host/types.d.ts.map +0 -1
  480. package/dist/host/types.js +0 -7
  481. package/dist/host/types.js.map +0 -1
  482. package/dist/host/utils.d.ts +0 -21
  483. package/dist/host/utils.d.ts.map +0 -1
  484. package/dist/host/utils.js +0 -23
  485. package/dist/host/utils.js.map +0 -1
  486. package/dist/href-client.d.ts +0 -131
  487. package/dist/href-client.d.ts.map +0 -1
  488. package/dist/href-client.js +0 -64
  489. package/dist/href-client.js.map +0 -1
  490. package/dist/href-context.d.ts +0 -29
  491. package/dist/href-context.d.ts.map +0 -1
  492. package/dist/href-context.js +0 -21
  493. package/dist/href-context.js.map +0 -1
  494. package/dist/index.d.ts +0 -73
  495. package/dist/index.d.ts.map +0 -1
  496. package/dist/index.js +0 -91
  497. package/dist/index.js.map +0 -1
  498. package/dist/index.rsc.d.ts +0 -32
  499. package/dist/index.rsc.d.ts.map +0 -1
  500. package/dist/index.rsc.js +0 -40
  501. package/dist/index.rsc.js.map +0 -1
  502. package/dist/internal-debug.d.ts +0 -2
  503. package/dist/internal-debug.d.ts.map +0 -1
  504. package/dist/internal-debug.js +0 -5
  505. package/dist/internal-debug.js.map +0 -1
  506. package/dist/loader.d.ts +0 -14
  507. package/dist/loader.d.ts.map +0 -1
  508. package/dist/loader.js +0 -20
  509. package/dist/loader.js.map +0 -1
  510. package/dist/loader.rsc.d.ts +0 -19
  511. package/dist/loader.rsc.d.ts.map +0 -1
  512. package/dist/loader.rsc.js +0 -99
  513. package/dist/loader.rsc.js.map +0 -1
  514. package/dist/network-error-thrower.d.ts +0 -17
  515. package/dist/network-error-thrower.d.ts.map +0 -1
  516. package/dist/network-error-thrower.js +0 -14
  517. package/dist/network-error-thrower.js.map +0 -1
  518. package/dist/outlet-context.d.ts +0 -13
  519. package/dist/outlet-context.d.ts.map +0 -1
  520. package/dist/outlet-context.js +0 -3
  521. package/dist/outlet-context.js.map +0 -1
  522. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  523. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  524. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  525. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  526. package/dist/prerender/param-hash.d.ts +0 -16
  527. package/dist/prerender/param-hash.d.ts.map +0 -1
  528. package/dist/prerender/param-hash.js +0 -36
  529. package/dist/prerender/param-hash.js.map +0 -1
  530. package/dist/prerender/store.d.ts +0 -38
  531. package/dist/prerender/store.d.ts.map +0 -1
  532. package/dist/prerender/store.js +0 -61
  533. package/dist/prerender/store.js.map +0 -1
  534. package/dist/prerender.d.ts +0 -66
  535. package/dist/prerender.d.ts.map +0 -1
  536. package/dist/prerender.js +0 -57
  537. package/dist/prerender.js.map +0 -1
  538. package/dist/reverse.d.ts +0 -196
  539. package/dist/reverse.d.ts.map +0 -1
  540. package/dist/reverse.js +0 -78
  541. package/dist/reverse.js.map +0 -1
  542. package/dist/root-error-boundary.d.ts +0 -33
  543. package/dist/root-error-boundary.d.ts.map +0 -1
  544. package/dist/root-error-boundary.js +0 -165
  545. package/dist/root-error-boundary.js.map +0 -1
  546. package/dist/route-content-wrapper.d.ts +0 -46
  547. package/dist/route-content-wrapper.d.ts.map +0 -1
  548. package/dist/route-content-wrapper.js +0 -77
  549. package/dist/route-content-wrapper.js.map +0 -1
  550. package/dist/route-definition.d.ts +0 -421
  551. package/dist/route-definition.d.ts.map +0 -1
  552. package/dist/route-definition.js +0 -868
  553. package/dist/route-definition.js.map +0 -1
  554. package/dist/route-map-builder.d.ts +0 -155
  555. package/dist/route-map-builder.d.ts.map +0 -1
  556. package/dist/route-map-builder.js +0 -237
  557. package/dist/route-map-builder.js.map +0 -1
  558. package/dist/route-types.d.ts +0 -165
  559. package/dist/route-types.d.ts.map +0 -1
  560. package/dist/route-types.js +0 -7
  561. package/dist/route-types.js.map +0 -1
  562. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  563. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  564. package/dist/router/__tests__/handler-context.test.js +0 -65
  565. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  566. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  567. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  568. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  569. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  570. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  571. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  572. package/dist/router/__tests__/match-context.test.js +0 -92
  573. package/dist/router/__tests__/match-context.test.js.map +0 -1
  574. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  575. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  576. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  577. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  578. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  579. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  580. package/dist/router/__tests__/match-result.test.js +0 -457
  581. package/dist/router/__tests__/match-result.test.js.map +0 -1
  582. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  583. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  584. package/dist/router/__tests__/on-error.test.js +0 -678
  585. package/dist/router/__tests__/on-error.test.js.map +0 -1
  586. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  587. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  588. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  589. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  590. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  591. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  592. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  593. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  594. package/dist/router/error-handling.d.ts +0 -77
  595. package/dist/router/error-handling.d.ts.map +0 -1
  596. package/dist/router/error-handling.js +0 -202
  597. package/dist/router/error-handling.js.map +0 -1
  598. package/dist/router/handler-context.d.ts +0 -20
  599. package/dist/router/handler-context.d.ts.map +0 -1
  600. package/dist/router/handler-context.js +0 -198
  601. package/dist/router/handler-context.js.map +0 -1
  602. package/dist/router/intercept-resolution.d.ts +0 -66
  603. package/dist/router/intercept-resolution.d.ts.map +0 -1
  604. package/dist/router/intercept-resolution.js +0 -246
  605. package/dist/router/intercept-resolution.js.map +0 -1
  606. package/dist/router/loader-resolution.d.ts +0 -64
  607. package/dist/router/loader-resolution.d.ts.map +0 -1
  608. package/dist/router/loader-resolution.js +0 -284
  609. package/dist/router/loader-resolution.js.map +0 -1
  610. package/dist/router/logging.d.ts +0 -15
  611. package/dist/router/logging.d.ts.map +0 -1
  612. package/dist/router/logging.js +0 -99
  613. package/dist/router/logging.js.map +0 -1
  614. package/dist/router/manifest.d.ts +0 -22
  615. package/dist/router/manifest.d.ts.map +0 -1
  616. package/dist/router/manifest.js +0 -181
  617. package/dist/router/manifest.js.map +0 -1
  618. package/dist/router/match-api.d.ts +0 -35
  619. package/dist/router/match-api.d.ts.map +0 -1
  620. package/dist/router/match-api.js +0 -406
  621. package/dist/router/match-api.js.map +0 -1
  622. package/dist/router/match-context.d.ts +0 -206
  623. package/dist/router/match-context.d.ts.map +0 -1
  624. package/dist/router/match-context.js +0 -17
  625. package/dist/router/match-context.js.map +0 -1
  626. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  627. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  628. package/dist/router/match-middleware/background-revalidation.js +0 -75
  629. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  630. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  631. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  632. package/dist/router/match-middleware/cache-lookup.js +0 -257
  633. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  634. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  635. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  636. package/dist/router/match-middleware/cache-store.js +0 -108
  637. package/dist/router/match-middleware/cache-store.js.map +0 -1
  638. package/dist/router/match-middleware/index.d.ts +0 -81
  639. package/dist/router/match-middleware/index.d.ts.map +0 -1
  640. package/dist/router/match-middleware/index.js +0 -80
  641. package/dist/router/match-middleware/index.js.map +0 -1
  642. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  643. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  644. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  645. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  646. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  647. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  648. package/dist/router/match-middleware/segment-resolution.js +0 -53
  649. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  650. package/dist/router/match-pipelines.d.ts +0 -147
  651. package/dist/router/match-pipelines.d.ts.map +0 -1
  652. package/dist/router/match-pipelines.js +0 -82
  653. package/dist/router/match-pipelines.js.map +0 -1
  654. package/dist/router/match-result.d.ts +0 -126
  655. package/dist/router/match-result.d.ts.map +0 -1
  656. package/dist/router/match-result.js +0 -93
  657. package/dist/router/match-result.js.map +0 -1
  658. package/dist/router/metrics.d.ts +0 -20
  659. package/dist/router/metrics.d.ts.map +0 -1
  660. package/dist/router/metrics.js +0 -47
  661. package/dist/router/metrics.js.map +0 -1
  662. package/dist/router/middleware.d.ts +0 -249
  663. package/dist/router/middleware.d.ts.map +0 -1
  664. package/dist/router/middleware.js +0 -434
  665. package/dist/router/middleware.js.map +0 -1
  666. package/dist/router/middleware.test.d.ts +0 -2
  667. package/dist/router/middleware.test.d.ts.map +0 -1
  668. package/dist/router/middleware.test.js +0 -816
  669. package/dist/router/middleware.test.js.map +0 -1
  670. package/dist/router/pattern-matching.d.ts +0 -149
  671. package/dist/router/pattern-matching.d.ts.map +0 -1
  672. package/dist/router/pattern-matching.js +0 -349
  673. package/dist/router/pattern-matching.js.map +0 -1
  674. package/dist/router/revalidation.d.ts +0 -44
  675. package/dist/router/revalidation.d.ts.map +0 -1
  676. package/dist/router/revalidation.js +0 -147
  677. package/dist/router/revalidation.js.map +0 -1
  678. package/dist/router/router-context.d.ts +0 -135
  679. package/dist/router/router-context.d.ts.map +0 -1
  680. package/dist/router/router-context.js +0 -36
  681. package/dist/router/router-context.js.map +0 -1
  682. package/dist/router/segment-resolution.d.ts +0 -127
  683. package/dist/router/segment-resolution.d.ts.map +0 -1
  684. package/dist/router/segment-resolution.js +0 -919
  685. package/dist/router/segment-resolution.js.map +0 -1
  686. package/dist/router/trie-matching.d.ts +0 -40
  687. package/dist/router/trie-matching.d.ts.map +0 -1
  688. package/dist/router/trie-matching.js +0 -127
  689. package/dist/router/trie-matching.js.map +0 -1
  690. package/dist/router/types.d.ts +0 -136
  691. package/dist/router/types.d.ts.map +0 -1
  692. package/dist/router/types.js +0 -7
  693. package/dist/router/types.js.map +0 -1
  694. package/dist/router.d.ts +0 -753
  695. package/dist/router.d.ts.map +0 -1
  696. package/dist/router.gen.d.ts +0 -6
  697. package/dist/router.gen.d.ts.map +0 -1
  698. package/dist/router.gen.js +0 -6
  699. package/dist/router.gen.js.map +0 -1
  700. package/dist/router.js +0 -1304
  701. package/dist/router.js.map +0 -1
  702. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  703. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  704. package/dist/rsc/__tests__/helpers.test.js +0 -140
  705. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  706. package/dist/rsc/handler.d.ts +0 -45
  707. package/dist/rsc/handler.d.ts.map +0 -1
  708. package/dist/rsc/handler.js +0 -1172
  709. package/dist/rsc/handler.js.map +0 -1
  710. package/dist/rsc/helpers.d.ts +0 -16
  711. package/dist/rsc/helpers.d.ts.map +0 -1
  712. package/dist/rsc/helpers.js +0 -55
  713. package/dist/rsc/helpers.js.map +0 -1
  714. package/dist/rsc/index.d.ts +0 -22
  715. package/dist/rsc/index.d.ts.map +0 -1
  716. package/dist/rsc/index.js +0 -23
  717. package/dist/rsc/index.js.map +0 -1
  718. package/dist/rsc/nonce.d.ts +0 -9
  719. package/dist/rsc/nonce.d.ts.map +0 -1
  720. package/dist/rsc/nonce.js +0 -18
  721. package/dist/rsc/nonce.js.map +0 -1
  722. package/dist/rsc/types.d.ts +0 -206
  723. package/dist/rsc/types.d.ts.map +0 -1
  724. package/dist/rsc/types.js +0 -8
  725. package/dist/rsc/types.js.map +0 -1
  726. package/dist/search-params.d.ts +0 -103
  727. package/dist/search-params.d.ts.map +0 -1
  728. package/dist/search-params.js +0 -74
  729. package/dist/search-params.js.map +0 -1
  730. package/dist/segment-system.d.ts +0 -75
  731. package/dist/segment-system.d.ts.map +0 -1
  732. package/dist/segment-system.js +0 -336
  733. package/dist/segment-system.js.map +0 -1
  734. package/dist/server/context.d.ts +0 -245
  735. package/dist/server/context.d.ts.map +0 -1
  736. package/dist/server/context.js +0 -197
  737. package/dist/server/context.js.map +0 -1
  738. package/dist/server/fetchable-loader-store.d.ts +0 -18
  739. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  740. package/dist/server/fetchable-loader-store.js +0 -18
  741. package/dist/server/fetchable-loader-store.js.map +0 -1
  742. package/dist/server/handle-store.d.ts +0 -85
  743. package/dist/server/handle-store.d.ts.map +0 -1
  744. package/dist/server/handle-store.js +0 -142
  745. package/dist/server/handle-store.js.map +0 -1
  746. package/dist/server/loader-registry.d.ts +0 -55
  747. package/dist/server/loader-registry.d.ts.map +0 -1
  748. package/dist/server/loader-registry.js +0 -132
  749. package/dist/server/loader-registry.js.map +0 -1
  750. package/dist/server/request-context.d.ts +0 -226
  751. package/dist/server/request-context.d.ts.map +0 -1
  752. package/dist/server/request-context.js +0 -290
  753. package/dist/server/request-context.js.map +0 -1
  754. package/dist/server/root-layout.d.ts +0 -4
  755. package/dist/server/root-layout.d.ts.map +0 -1
  756. package/dist/server/root-layout.js +0 -5
  757. package/dist/server/root-layout.js.map +0 -1
  758. package/dist/server.d.ts +0 -15
  759. package/dist/server.d.ts.map +0 -1
  760. package/dist/server.js +0 -20
  761. package/dist/server.js.map +0 -1
  762. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  763. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  764. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  765. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  766. package/dist/ssr/index.d.ts +0 -98
  767. package/dist/ssr/index.d.ts.map +0 -1
  768. package/dist/ssr/index.js +0 -158
  769. package/dist/ssr/index.js.map +0 -1
  770. package/dist/static-handler.d.ts +0 -50
  771. package/dist/static-handler.d.ts.map +0 -1
  772. package/dist/static-handler.gen.d.ts +0 -5
  773. package/dist/static-handler.gen.d.ts.map +0 -1
  774. package/dist/static-handler.gen.js +0 -5
  775. package/dist/static-handler.gen.js.map +0 -1
  776. package/dist/static-handler.js +0 -29
  777. package/dist/static-handler.js.map +0 -1
  778. package/dist/theme/ThemeProvider.d.ts +0 -20
  779. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  780. package/dist/theme/ThemeProvider.js +0 -240
  781. package/dist/theme/ThemeProvider.js.map +0 -1
  782. package/dist/theme/ThemeScript.d.ts +0 -48
  783. package/dist/theme/ThemeScript.d.ts.map +0 -1
  784. package/dist/theme/ThemeScript.js +0 -13
  785. package/dist/theme/ThemeScript.js.map +0 -1
  786. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  787. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  788. package/dist/theme/__tests__/theme.test.js +0 -103
  789. package/dist/theme/__tests__/theme.test.js.map +0 -1
  790. package/dist/theme/constants.d.ts +0 -29
  791. package/dist/theme/constants.d.ts.map +0 -1
  792. package/dist/theme/constants.js +0 -48
  793. package/dist/theme/constants.js.map +0 -1
  794. package/dist/theme/index.d.ts +0 -31
  795. package/dist/theme/index.d.ts.map +0 -1
  796. package/dist/theme/index.js +0 -36
  797. package/dist/theme/index.js.map +0 -1
  798. package/dist/theme/theme-context.d.ts +0 -40
  799. package/dist/theme/theme-context.d.ts.map +0 -1
  800. package/dist/theme/theme-context.js +0 -60
  801. package/dist/theme/theme-context.js.map +0 -1
  802. package/dist/theme/theme-script.d.ts +0 -27
  803. package/dist/theme/theme-script.d.ts.map +0 -1
  804. package/dist/theme/theme-script.js +0 -147
  805. package/dist/theme/theme-script.js.map +0 -1
  806. package/dist/theme/types.d.ts +0 -163
  807. package/dist/theme/types.d.ts.map +0 -1
  808. package/dist/theme/types.js +0 -11
  809. package/dist/theme/types.js.map +0 -1
  810. package/dist/theme/use-theme.d.ts +0 -12
  811. package/dist/theme/use-theme.d.ts.map +0 -1
  812. package/dist/theme/use-theme.js +0 -40
  813. package/dist/theme/use-theme.js.map +0 -1
  814. package/dist/types.d.ts +0 -1479
  815. package/dist/types.d.ts.map +0 -1
  816. package/dist/types.js +0 -10
  817. package/dist/types.js.map +0 -1
  818. package/dist/urls.d.ts +0 -441
  819. package/dist/urls.d.ts.map +0 -1
  820. package/dist/urls.gen.d.ts +0 -8
  821. package/dist/urls.gen.d.ts.map +0 -1
  822. package/dist/urls.gen.js +0 -8
  823. package/dist/urls.gen.js.map +0 -1
  824. package/dist/urls.js +0 -443
  825. package/dist/urls.js.map +0 -1
  826. package/dist/use-loader.d.ts +0 -127
  827. package/dist/use-loader.d.ts.map +0 -1
  828. package/dist/use-loader.js +0 -237
  829. package/dist/use-loader.js.map +0 -1
  830. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  831. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  832. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  833. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  834. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  835. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  836. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  837. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  838. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  839. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  840. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  841. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  842. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  843. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  844. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  845. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  846. package/dist/vite/ast-handler-extract.d.ts +0 -49
  847. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  848. package/dist/vite/ast-handler-extract.js +0 -249
  849. package/dist/vite/ast-handler-extract.js.map +0 -1
  850. package/dist/vite/expose-action-id.d.ts +0 -19
  851. package/dist/vite/expose-action-id.d.ts.map +0 -1
  852. package/dist/vite/expose-action-id.js +0 -250
  853. package/dist/vite/expose-action-id.js.map +0 -1
  854. package/dist/vite/expose-id-utils.d.ts +0 -69
  855. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  856. package/dist/vite/expose-id-utils.js +0 -289
  857. package/dist/vite/expose-id-utils.js.map +0 -1
  858. package/dist/vite/expose-internal-ids.d.ts +0 -22
  859. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  860. package/dist/vite/expose-internal-ids.js +0 -886
  861. package/dist/vite/expose-internal-ids.js.map +0 -1
  862. package/dist/vite/index.d.ts +0 -149
  863. package/dist/vite/index.d.ts.map +0 -1
  864. package/dist/vite/index.js.bak +0 -5448
  865. package/dist/vite/index.js.map +0 -1
  866. package/dist/vite/index.named-routes.gen.ts +0 -103
  867. package/dist/vite/package-resolution.d.ts +0 -43
  868. package/dist/vite/package-resolution.d.ts.map +0 -1
  869. package/dist/vite/package-resolution.js +0 -112
  870. package/dist/vite/package-resolution.js.map +0 -1
  871. package/dist/vite/virtual-entries.d.ts +0 -25
  872. package/dist/vite/virtual-entries.d.ts.map +0 -1
  873. package/dist/vite/virtual-entries.js +0 -110
  874. package/dist/vite/virtual-entries.js.map +0 -1
  875. package/src/browser/action-response-classifier.ts +0 -99
@@ -187,6 +187,32 @@ export class CacheScope {
187
187
  return resolveCacheKey(keyFn, this.getStore(), defaultKey, "CacheScope");
188
188
  }
189
189
 
190
+ /**
191
+ * Evaluate the cache `condition` predicate. Returns false (skip the cache
192
+ * operation) when the predicate returns false or throws; returns true when
193
+ * there is no condition or no request context to evaluate it against.
194
+ */
195
+ private conditionAllows(op: "read" | "write"): boolean {
196
+ if (this.config === false || !this.config.condition) return true;
197
+ const requestCtx = getRequestContext();
198
+ if (!requestCtx) return true;
199
+ try {
200
+ if (!this.config.condition(requestCtx)) {
201
+ debugCacheLog(
202
+ `[CacheScope] condition returned false, skipping cache ${op}`,
203
+ );
204
+ return false;
205
+ }
206
+ return true;
207
+ } catch (error) {
208
+ console.error(
209
+ `[CacheScope] condition function threw, skipping cache ${op}:`,
210
+ error,
211
+ );
212
+ return false;
213
+ }
214
+ }
215
+
190
216
  /**
191
217
  * Lookup cached segments for a route (single cache entry per request).
192
218
  * Returns { segments, shouldRevalidate } or null if cache miss.
@@ -204,27 +230,7 @@ export class CacheScope {
204
230
  shouldRevalidate: boolean;
205
231
  } | null> {
206
232
  if (!this.enabled) return null;
207
-
208
- // Evaluate condition — skip cache read when condition returns false
209
- if (this.config !== false && this.config.condition) {
210
- const requestCtx = getRequestContext();
211
- if (requestCtx) {
212
- try {
213
- if (!this.config.condition(requestCtx)) {
214
- debugCacheLog(
215
- `[CacheScope] condition returned false, skipping cache read`,
216
- );
217
- return null;
218
- }
219
- } catch (error) {
220
- console.error(
221
- `[CacheScope] condition function threw, skipping cache read:`,
222
- error,
223
- );
224
- return null;
225
- }
226
- }
227
- }
233
+ if (!this.conditionAllows("read")) return null;
228
234
 
229
235
  const store = this.getStore();
230
236
  if (!store) return null;
@@ -284,27 +290,7 @@ export class CacheScope {
284
290
  isIntercept?: boolean,
285
291
  ): Promise<void> {
286
292
  if (!this.enabled || segments.length === 0) return;
287
-
288
- // Evaluate condition — skip cache write when condition returns false
289
- if (this.config !== false && this.config.condition) {
290
- const conditionCtx = getRequestContext();
291
- if (conditionCtx) {
292
- try {
293
- if (!this.config.condition(conditionCtx)) {
294
- debugCacheLog(
295
- `[CacheScope] condition returned false, skipping cache write`,
296
- );
297
- return;
298
- }
299
- } catch (error) {
300
- console.error(
301
- `[CacheScope] condition function threw, skipping cache write:`,
302
- error,
303
- );
304
- return;
305
- }
306
- }
307
- }
293
+ if (!this.conditionAllows("write")) return;
308
294
 
309
295
  const store = this.getStore();
310
296
  if (!store) return;
@@ -56,6 +56,15 @@ export const CACHE_STALE_AT_HEADER = "x-edge-cache-stale-at";
56
56
  /** Header storing cache status: HIT | REVALIDATING */
57
57
  export const CACHE_STATUS_HEADER = "x-edge-cache-status";
58
58
 
59
+ /**
60
+ * Header stashing the route author's original Cache-Control on L1 document
61
+ * entries. putResponse/promoteResponseToL1 overwrite Cache-Control with a long
62
+ * `max-age` so the CF Cache API retains the entry across the whole SWR window;
63
+ * getResponse restores this original value before serving so the client and any
64
+ * upstream CDN see the author's intended directive, not the internal edge TTL.
65
+ */
66
+ const CACHE_ORIG_CC_HEADER = "x-edge-cache-orig-cc";
67
+
59
68
  /**
60
69
  * Maximum age in seconds for REVALIDATING status before allowing new revalidation.
61
70
  * After this period, a stale entry in REVALIDATING status will trigger revalidation again.
@@ -182,7 +191,7 @@ export interface CFCacheStoreOptions<TEnv = unknown> {
182
191
  * Cache version string override. When this changes, all cached entries are
183
192
  * effectively invalidated (new keys won't match old entries).
184
193
  *
185
- * Defaults to the auto-generated VERSION from `rsc-router:version` virtual module.
194
+ * Defaults to the auto-generated VERSION from the `@rangojs/router:version` virtual module.
186
195
  * Only set this if you need a custom versioning strategy.
187
196
  */
188
197
  version?: string;
@@ -419,7 +428,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
419
428
  }
420
429
 
421
430
  // L2: persist to KV
422
- this.kvSetSegment(key, data, staleAt, totalTtl);
431
+ this.kvSetSegment(key, data, staleAt, totalTtl, swrWindow);
423
432
  } catch (error) {
424
433
  console.error("[CFCacheStore] set failed:", error);
425
434
  }
@@ -478,7 +487,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
478
487
  const isStale = staleAt > 0 && Date.now() > staleAt;
479
488
 
480
489
  return {
481
- response,
490
+ response: this.toClientResponse(response),
482
491
  shouldRevalidate: isStale,
483
492
  };
484
493
  } catch (error) {
@@ -487,6 +496,30 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
487
496
  }
488
497
  }
489
498
 
499
+ /**
500
+ * Strip internal edge headers and restore the author's Cache-Control before a
501
+ * cached document Response is served to a client. L1 entries carry the
502
+ * internal staleness/status headers and a rewritten Cache-Control; none of
503
+ * those should reach the browser or an upstream CDN.
504
+ */
505
+ private toClientResponse(response: Response): Response {
506
+ const headers = new Headers(response.headers);
507
+ const originalCacheControl = headers.get(CACHE_ORIG_CC_HEADER);
508
+ if (originalCacheControl !== null) {
509
+ headers.set("Cache-Control", originalCacheControl);
510
+ } else {
511
+ headers.delete("Cache-Control");
512
+ }
513
+ headers.delete(CACHE_ORIG_CC_HEADER);
514
+ headers.delete(CACHE_STALE_AT_HEADER);
515
+ headers.delete(CACHE_STATUS_HEADER);
516
+ return new Response(response.body, {
517
+ status: response.status,
518
+ statusText: response.statusText,
519
+ headers,
520
+ });
521
+ }
522
+
490
523
  /**
491
524
  * Store a Response with TTL and optional SWR window (for document-level caching).
492
525
  * When KV is configured, also persists to L2.
@@ -513,8 +546,14 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
513
546
  : [null, null]
514
547
  : [response.body, null];
515
548
 
516
- // Clone and add cache headers
549
+ // Clone and add cache headers. The author's Cache-Control is stashed and
550
+ // replaced with a long max-age so the CF Cache API holds the entry across
551
+ // the SWR window; getResponse restores the original before serving.
517
552
  const headers = new Headers(response.headers);
553
+ const originalCacheControl = response.headers.get("Cache-Control");
554
+ if (originalCacheControl !== null) {
555
+ headers.set(CACHE_ORIG_CC_HEADER, originalCacheControl);
556
+ }
518
557
  headers.set("Cache-Control", `public, max-age=${totalTtl}`);
519
558
  headers.set(CACHE_STALE_AT_HEADER, String(staleAt));
520
559
 
@@ -764,13 +803,13 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
764
803
  data: CachedEntryData,
765
804
  staleAt: number,
766
805
  totalTtl: number,
806
+ swrWindow: number,
767
807
  ): void {
768
808
  // KV requires expirationTtl >= 60s. Skip write for short-lived entries.
769
809
  if (!this.kv || !this.waitUntil || totalTtl < 60) return;
770
810
 
771
811
  const kvKey = this.toKVKey(key);
772
- const swrWindow = totalTtl * 1000 - (staleAt - Date.now());
773
- const expiresAt = staleAt + swrWindow;
812
+ const expiresAt = staleAt + swrWindow * 1000;
774
813
 
775
814
  this.waitUntil(async () => {
776
815
  try {
@@ -937,6 +976,10 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
937
976
  const request = this.keyToRequest(`doc:${key}`);
938
977
 
939
978
  const headers = new Headers(envelope.hd);
979
+ const originalCacheControl = headers.get("Cache-Control");
980
+ if (originalCacheControl !== null) {
981
+ headers.set(CACHE_ORIG_CC_HEADER, originalCacheControl);
982
+ }
940
983
  headers.set("Cache-Control", `public, max-age=${remainingTtl}`);
941
984
  headers.set(CACHE_STALE_AT_HEADER, String(envelope.s));
942
985
 
@@ -0,0 +1,36 @@
1
+ import type { ReactNode } from "react";
2
+ import { isLoaderDataResult } from "./types.js";
3
+
4
+ // Shared by segment-system (server) and LoaderResolver (client) so the
5
+ // legacy/ok/error-fallback/throw decode of resolved loader values lives once.
6
+ // Last failing loader wins errorFallback; an error without a fallback throws.
7
+ export function decodeLoaderResults(
8
+ resolvedData: any[],
9
+ loaderIds: string[],
10
+ ): { loaderData: Record<string, any>; errorFallback: ReactNode } {
11
+ const loaderData: Record<string, any> = {};
12
+ let errorFallback: ReactNode = null;
13
+
14
+ for (let i = 0; i < loaderIds.length; i++) {
15
+ const id = loaderIds[i];
16
+ const result = resolvedData[i];
17
+
18
+ if (!isLoaderDataResult(result)) {
19
+ loaderData[id] = result;
20
+ continue;
21
+ }
22
+
23
+ if (result.ok) {
24
+ loaderData[id] = result.data;
25
+ continue;
26
+ }
27
+
28
+ if (result.fallback) {
29
+ errorFallback = result.fallback;
30
+ } else {
31
+ throw new Error(result.error.message);
32
+ }
33
+ }
34
+
35
+ return { loaderData, errorFallback };
36
+ }
package/src/errors.ts CHANGED
@@ -27,6 +27,17 @@ export class RouteNotFoundError extends Error {
27
27
  }
28
28
  }
29
29
 
30
+ // name fallback covers cross-realm errors (Vite dev dupes, RSC serialization)
31
+ // where instanceof fails.
32
+ export function isRouteNotFoundError(
33
+ error: unknown,
34
+ ): error is RouteNotFoundError {
35
+ return (
36
+ error instanceof RouteNotFoundError ||
37
+ (error instanceof Error && error.name === "RouteNotFoundError")
38
+ );
39
+ }
40
+
30
41
  /**
31
42
  * Thrown when data is not found (e.g., product with ID doesn't exist)
32
43
  * Use this in handlers/loaders to trigger the nearest notFoundBoundary
@@ -36,6 +36,13 @@
36
36
 
37
37
  export interface LoaderEntry<T = unknown> {
38
38
  readonly value: T | undefined;
39
+ /**
40
+ * Whether a load has committed a value to this bucket. Distinguishes a
41
+ * committed `null`/`undefined` result from "never loaded", so a loader that
42
+ * resolves to a falsy value is not mistaken for an empty bucket and is not
43
+ * overridden by the server-seeded context value.
44
+ */
45
+ readonly hasValue: boolean;
39
46
  readonly error: Error | null;
40
47
  readonly isLoading: boolean;
41
48
  /** Identifies the request that produced this snapshot. 0 means "no request". */
@@ -44,6 +51,7 @@ export interface LoaderEntry<T = unknown> {
44
51
 
45
52
  const EMPTY_SNAPSHOT: LoaderEntry = Object.freeze({
46
53
  value: undefined,
54
+ hasValue: false,
47
55
  error: null,
48
56
  isLoading: false,
49
57
  requestId: 0,
@@ -67,14 +75,15 @@ export interface SubscribeOptions {
67
75
  */
68
76
  ephemeral?: boolean;
69
77
  /**
70
- * Cross-loader refresh group name. Tags this bucket so `refreshGroup(name)`
71
- * can refresh it alongside buckets of other loaders. Group membership follows
72
- * subscriber presence: a bucket leaves its group when its last subscriber
73
- * unsubscribes.
78
+ * Cross-loader refresh group name(s). Tags this bucket so `refreshGroups(name)`
79
+ * can refresh it alongside buckets of other loaders. A bucket may be tagged
80
+ * with several group names at once (pass an array); it is then refreshed when
81
+ * ANY of its groups is refreshed. Group membership follows subscriber presence:
82
+ * a bucket leaves a group when that group's last subscriber unsubscribes.
74
83
  */
75
- group?: string;
84
+ group?: string | string[];
76
85
  /**
77
- * Plain-GET refresh thunk used by `refreshGroup`. Provided alongside `group`.
86
+ * Plain-GET refresh thunk used by `refreshGroups`. Provided alongside `group`.
78
87
  * Refreshes this bucket in place (no params/body) and rejects on failure.
79
88
  */
80
89
  refetch?: () => Promise<void>;
@@ -102,20 +111,31 @@ interface InternalEntry {
102
111
  /**
103
112
  * Cross-loader refresh groups this bucket belongs to, mapped to the number of
104
113
  * current subscribers that requested each group. A bucket can be in several
105
- * groups at once (different subscribers may tag the same shared bucket with
106
- * different group names); refcounting keeps membership independent of
107
- * subscribe/unsubscribe order.
114
+ * groups at once (one read tagged with multiple names, or different subscribers
115
+ * tagging the same shared bucket with different names); refcounting keeps
116
+ * membership independent of subscribe/unsubscribe order.
108
117
  */
109
118
  groups: Map<string, number>;
110
- /** Plain-GET refresh thunk for `refreshGroup`, set while in any group. */
119
+ /** Plain-GET refresh thunk for `refreshGroups`, set while in any group. */
111
120
  refetch: (() => Promise<void>) | undefined;
112
121
  }
113
122
 
123
+ /**
124
+ * Normalize a group tag option (`undefined | string | string[]`) to a deduped
125
+ * list of names. Deduping keeps a single subscriber from being counted more than
126
+ * once in one group when the caller passes a repeated name.
127
+ */
128
+ function normalizeGroups(group: string | string[] | undefined): string[] {
129
+ if (group === undefined) return [];
130
+ if (typeof group === "string") return [group];
131
+ return [...new Set(group)];
132
+ }
133
+
114
134
  export class LoaderStore {
115
135
  private readonly entries = new Map<string, InternalEntry>();
116
136
  /** loader.$$id -> set of bucket keys, so clearFamily() can reach every bucket. */
117
137
  private readonly families = new Map<string, Set<string>>();
118
- /** refresh group name -> set of bucket keys, for refreshGroup(). */
138
+ /** refresh group name -> set of bucket keys, for refreshGroups(). */
119
139
  private readonly groups = new Map<string, Set<string>>();
120
140
 
121
141
  private getOrCreate(bucketKey: string): InternalEntry {
@@ -163,8 +183,11 @@ export class LoaderStore {
163
183
  e.loaderId = loaderId;
164
184
  this.registerFamily(loaderId, bucketKey);
165
185
  if (options?.ephemeral !== true) e.sticky = true;
166
- const group = options?.group;
167
- if (group !== undefined) {
186
+ // Normalize the group tag(s) to a deduped list so one subscriber is counted
187
+ // once per distinct group, and subscribe/unsubscribe stay symmetric (the
188
+ // same list drives both addToGroup and releaseGroup).
189
+ const groups = normalizeGroups(options?.group);
190
+ for (const group of groups) {
168
191
  this.addToGroup(group, bucketKey, e, options?.refetch);
169
192
  }
170
193
  // A fresh subscriber means the bucket is wanted again: cancel any pending
@@ -174,11 +197,11 @@ export class LoaderStore {
174
197
  e.listeners.add(cb);
175
198
  return () => {
176
199
  e.listeners.delete(cb);
177
- // Group membership is refcounted per subscriber so refreshGroup() never
200
+ // Group membership is refcounted per subscriber so refreshGroups() never
178
201
  // fetches for an unmounted reader, and a bucket shared by subscribers in
179
202
  // different groups stays in each group until ALL of that group's
180
203
  // subscribers have left (order-independent).
181
- if (group !== undefined) this.releaseGroup(group, bucketKey, e);
204
+ for (const group of groups) this.releaseGroup(group, bucketKey, e);
182
205
  this.maybeScheduleRefcountClear(bucketKey, e);
183
206
  };
184
207
  }
@@ -232,17 +255,27 @@ export class LoaderStore {
232
255
  }
233
256
 
234
257
  /**
235
- * Refresh every currently-mounted bucket in a cross-loader refresh group with
236
- * a plain GET (no params/body). Buckets are deduped by key, so multiple reads
237
- * of one bucket trigger a single fetch. Resolves when all refreshes settle;
238
- * rejects with an `AggregateError` of the failures if any member fails — each
239
- * failing member also records its error on its own snapshot.
258
+ * Refresh every currently-mounted bucket tagged with ANY of the given group
259
+ * names, with a plain GET (no params/body). Accepts a single name or an array
260
+ * of names. A bucket that belongs to more than one of the named groups is
261
+ * refreshed exactly once (members are unioned and deduped by bucket key), as
262
+ * are multiple reads of one bucket. Resolves when all refreshes settle; rejects
263
+ * with an `AggregateError` of the failures if any member fails — each failing
264
+ * member also records its error on its own snapshot.
240
265
  */
241
- async refreshGroup(group: string): Promise<void> {
242
- const members = this.groups.get(group);
243
- if (!members || members.size === 0) return;
266
+ async refreshGroups(groups: string | string[]): Promise<void> {
267
+ const names = typeof groups === "string" ? [groups] : groups;
268
+ // Union the member buckets across every named group, deduped by key, so a
269
+ // bucket tagged into two of the requested groups is fetched a single time.
270
+ const buckets = new Set<string>();
271
+ for (const name of names) {
272
+ const members = this.groups.get(name);
273
+ if (!members) continue;
274
+ for (const bucketKey of members) buckets.add(bucketKey);
275
+ }
276
+ if (buckets.size === 0) return;
244
277
  const thunks: Array<() => Promise<void>> = [];
245
- for (const bucketKey of members) {
278
+ for (const bucketKey of buckets) {
246
279
  const e = this.entries.get(bucketKey);
247
280
  if (!e || e.listeners.size === 0 || !e.refetch) continue;
248
281
  thunks.push(e.refetch);
@@ -253,9 +286,10 @@ export class LoaderStore {
253
286
  .filter((r): r is PromiseRejectedResult => r.status === "rejected")
254
287
  .map((r) => r.reason);
255
288
  if (reasons.length > 0) {
289
+ const label = names.map((n) => `"${n}"`).join(", ");
256
290
  throw new AggregateError(
257
291
  reasons,
258
- `refreshGroup("${group}") had ${reasons.length} failure(s)`,
292
+ `refreshGroups(${label}) had ${reasons.length} failure(s)`,
259
293
  );
260
294
  }
261
295
  }
@@ -346,6 +380,7 @@ export class LoaderStore {
346
380
  if (e.snapshot.isLoading && e.snapshot.error === null) return;
347
381
  e.snapshot = Object.freeze({
348
382
  value: e.snapshot.value,
383
+ hasValue: e.snapshot.hasValue,
349
384
  error: null,
350
385
  isLoading: true,
351
386
  requestId,
@@ -363,6 +398,7 @@ export class LoaderStore {
363
398
  if (!e || requestId !== e.latestRequestId) return;
364
399
  e.snapshot = Object.freeze({
365
400
  value,
401
+ hasValue: true,
366
402
  error: null,
367
403
  isLoading: false,
368
404
  requestId,
@@ -381,6 +417,7 @@ export class LoaderStore {
381
417
  if (!e || requestId !== e.latestRequestId) return;
382
418
  e.snapshot = Object.freeze({
383
419
  value: e.snapshot.value,
420
+ hasValue: e.snapshot.hasValue,
384
421
  error,
385
422
  isLoading: false,
386
423
  requestId,
package/src/loader.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rsc-router/loader (client version)
2
+ * @rangojs/router/loader (client version)
3
3
  *
4
4
  * Client-only stub for createLoader. Returns a minimal loader definition
5
5
  * ({ __brand, $$id }) that can be passed to hooks like useLoader.
@@ -38,10 +38,6 @@ export function createLoader<T>(
38
38
 
39
39
  // Implementation - client stub that just returns the loader definition
40
40
  // The $$id parameter is injected by Vite plugin, not user-provided
41
- //
42
- // NOTE: For export-only loader files, the Vite plugin replaces the entire
43
- // file with object literals (bypassing this function). This function only
44
- // runs when loaders are in mixed files (not export-only).
45
41
  export function createLoader<T>(
46
42
  _fn: LoaderFn<T, Record<string, string | undefined>, any>,
47
43
  _fetchable?: true | FetchableLoaderOptions,
@@ -26,3 +26,12 @@ export function isWebSocketUpgradeResponse(response: Response): boolean {
26
26
  (response as unknown as { webSocket?: unknown }).webSocket != null
27
27
  );
28
28
  }
29
+
30
+ // Location truthiness (not presence) so an empty `Location: ""` is not a redirect.
31
+ export function isRedirectResponse(response: Response): boolean {
32
+ return (
33
+ response.status >= 300 &&
34
+ response.status < 400 &&
35
+ Boolean(response.headers.get("Location"))
36
+ );
37
+ }
@@ -4,7 +4,7 @@ import { Suspense, use, useId } from "react";
4
4
  import { invariant } from "./errors";
5
5
  import { OutletProvider } from "./outlet-provider.js";
6
6
  import type { ResolvedSegment } from "./types.js";
7
- import { isLoaderDataResult } from "./types.js";
7
+ import { decodeLoaderResults } from "./decode-loader-results.js";
8
8
 
9
9
  /**
10
10
  * Stable async wrapper component for route content
@@ -26,10 +26,6 @@ export function RouteContentWrapper({
26
26
  fallback?: ReactNode;
27
27
  segmentId?: string;
28
28
  }): ReactNode {
29
- if (!content) {
30
- // Already resolved
31
- return content as ReactNode;
32
- }
33
29
  return (
34
30
  <Suspense
35
31
  fallback={fallback ?? null}
@@ -159,28 +155,10 @@ function LoaderResolver({
159
155
  ? use(loaderDataPromise)
160
156
  : loaderDataPromise;
161
157
 
162
- // Build loaderData record from resolved values
163
- const loaderData: Record<string, any> = {};
164
- let loaderErrorFallback: ReactNode = null;
165
-
166
- loaderIds.forEach((id, i) => {
167
- const result = resolvedData[i];
168
-
169
- if (isLoaderDataResult(result)) {
170
- if (result.ok) {
171
- loaderData[id] = result.data;
172
- } else {
173
- if (result.fallback) {
174
- loaderErrorFallback = result.fallback;
175
- } else {
176
- throw new Error(result.error.message);
177
- }
178
- }
179
- } else {
180
- // Legacy format - direct data
181
- loaderData[id] = result;
182
- }
183
- });
158
+ const { loaderData, errorFallback } = decodeLoaderResults(
159
+ resolvedData,
160
+ loaderIds,
161
+ );
184
162
 
185
163
  return (
186
164
  <OutletProvider
@@ -190,7 +168,7 @@ function LoaderResolver({
190
168
  parallel={parallel}
191
169
  loaderData={Object.keys(loaderData).length > 0 ? loaderData : undefined}
192
170
  >
193
- {loaderErrorFallback ?? children}
171
+ {errorFallback ?? children}
194
172
  </OutletProvider>
195
173
  );
196
174
  }
@@ -449,10 +449,19 @@ export type RouteHelpers<T extends RouteDefinition, TEnv> = {
449
449
  ): CacheItem;
450
450
  };
451
451
  /**
452
- * Attach a ViewTransition boundary to the current segment or a group of routes
453
- *
454
- * Wraps segment content with React's `<ViewTransition>` component.
455
- * Only takes effect when React experimental is used (no-op on stable React).
452
+ * Attach a ViewTransition boundary to the current segment or a group of routes,
453
+ * and opt the route into same-route stale-while-revalidate navigation.
454
+ *
455
+ * Two effects, both opt-in via this helper:
456
+ * - Same-route navigation (same route, different params, e.g. /product/1 ->
457
+ * /product/2) reconciles the route subtree instead of remounting it, so the
458
+ * previous content is held while the new loader resolves rather than flashing
459
+ * the route's loading() skeleton. This works on ALL React versions (it is
460
+ * plain startTransition + Suspense; see segment-system.tsx inTransitionScope).
461
+ * - On React experimental, the segment content is additionally wrapped in
462
+ * `<ViewTransition>`, so the held same-route swap animates (update/share
463
+ * morph) and cross-route swaps animate exit/enter. The animation layer is a
464
+ * no-op on stable React; the content-hold is not.
456
465
  *
457
466
  * ```typescript
458
467
  * // Attach to a single route
@@ -135,8 +135,8 @@ export interface NegotiationResult {
135
135
  manifestEntry: EntryData;
136
136
  /** Route middleware for the winning variant */
137
137
  routeMiddleware: CollectedMiddleware[];
138
- /** Always true negotiation occurred */
139
- negotiated: true;
138
+ /** True when negotiation selected a variant; false for a plain response route. */
139
+ negotiated: boolean;
140
140
  }
141
141
 
142
142
  /**
@@ -155,6 +155,19 @@ export async function negotiateRoute(
155
155
  ): Promise<NegotiationResult | null> {
156
156
  const { matched, manifestEntry, routeMiddleware, responseType } = snapshot;
157
157
  if (!matched.negotiateVariants || matched.negotiateVariants.length === 0) {
158
+ // No variants: a plain response route still yields a result (negotiated:false)
159
+ // so callers don't re-derive it; RSC routes (no responseType/handler) -> null.
160
+ const handler =
161
+ manifestEntry.type === "route" ? manifestEntry.handler : undefined;
162
+ if (responseType && handler) {
163
+ return {
164
+ responseType,
165
+ handler: handler as Function,
166
+ manifestEntry,
167
+ routeMiddleware,
168
+ negotiated: false,
169
+ };
170
+ }
158
171
  return null;
159
172
  }
160
173
 
@@ -66,28 +66,14 @@ export function findInterceptForRoute(
66
66
  let current: EntryData | null = fromEntry;
67
67
 
68
68
  while (current) {
69
- if (current.intercept && current.intercept.length > 0) {
70
- for (const intercept of current.intercept) {
69
+ // current first, then its sibling layouts — same order as before.
70
+ for (const source of [current, ...current.layout]) {
71
+ for (const intercept of source.intercept) {
71
72
  if (
72
73
  intercept.routeName === targetRouteKey &&
73
74
  evaluateInterceptWhen(intercept, selectorContext, isAction)
74
75
  ) {
75
- return { intercept, entry: current };
76
- }
77
- }
78
- }
79
-
80
- if (current.layout && current.layout.length > 0) {
81
- for (const siblingLayout of current.layout) {
82
- if (siblingLayout.intercept && siblingLayout.intercept.length > 0) {
83
- for (const intercept of siblingLayout.intercept) {
84
- if (
85
- intercept.routeName === targetRouteKey &&
86
- evaluateInterceptWhen(intercept, selectorContext, isAction)
87
- ) {
88
- return { intercept, entry: siblingLayout };
89
- }
90
- }
76
+ return { intercept, entry: source };
91
77
  }
92
78
  }
93
79
  }
@@ -24,7 +24,10 @@ import { isHandle, collectHandleData, type Handle } from "../handle.js";
24
24
  import { buildHandleSnapshot } from "../server/handle-store.js";
25
25
  import { getFetchableLoader } from "../server/fetchable-loader-store.js";
26
26
  import { _getRequestContext } from "../server/request-context.js";
27
- import { isInsideLoaderScope } from "../server/context.js";
27
+ import {
28
+ isInsideLoaderScope,
29
+ runInsideLoaderBodyScope,
30
+ } from "../server/context.js";
28
31
  import { debugLog } from "./logging.js";
29
32
 
30
33
  /**
@@ -353,8 +356,19 @@ function createLoaderExecutor<TEnv>(
353
356
  };
354
357
 
355
358
  const doneLoader = track(`loader:${loader.$$id}`, 2);
359
+ // Run the loader body inside loader scope so request-scoped reads
360
+ // (cookies()/headers() and non-cacheable ctx.get) are exempt from the
361
+ // cache-purity guards: loaders always run fresh, so their reads never leak
362
+ // into a cached segment. DSL loaders are already wrapped by fresh.ts; this
363
+ // also covers handler-invoked loaders (ctx.use(Loader) from a handler),
364
+ // which otherwise execute in the caller's cache scope and would wrongly
365
+ // throw. rendered() gating uses the captured isDslLoader (above), so this
366
+ // does not grant rendered() to handler-invoked loaders. Uses a body-only
367
+ // scope, so isInsideLoaderScope() / barrier / deadlock gating is unchanged.
356
368
  const promise = Promise.resolve(
357
- loaderFn(loaderCtx as LoaderContext<any, TEnv>),
369
+ runInsideLoaderBodyScope(() =>
370
+ loaderFn(loaderCtx as LoaderContext<any, TEnv>),
371
+ ),
358
372
  ).finally(() => {
359
373
  pendingLoaders.delete(loader.$$id);
360
374
  doneLoader();