@rangojs/router 0.0.0-experimental.78a48627 → 0.0.0-experimental.78adc454

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 (863) 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/caching/SKILL.md +37 -4
  5. package/skills/parallel/SKILL.md +126 -0
  6. package/src/browser/event-controller.ts +5 -0
  7. package/src/browser/navigation-client.ts +60 -27
  8. package/src/browser/partial-update.ts +23 -16
  9. package/src/browser/prefetch/cache.ts +57 -5
  10. package/src/browser/prefetch/fetch.ts +30 -21
  11. package/src/browser/prefetch/queue.ts +53 -13
  12. package/src/browser/react/Link.tsx +9 -1
  13. package/src/browser/react/NavigationProvider.tsx +3 -3
  14. package/src/browser/rsc-router.tsx +109 -57
  15. package/src/browser/scroll-restoration.ts +11 -10
  16. package/src/browser/segment-reconciler.ts +6 -1
  17. package/src/build/route-types/router-processing.ts +12 -2
  18. package/src/cache/cache-runtime.ts +15 -11
  19. package/src/cache/cache-scope.ts +48 -7
  20. package/src/cache/cf/cf-cache-store.ts +453 -11
  21. package/src/cache/cf/index.ts +5 -1
  22. package/src/cache/document-cache.ts +17 -7
  23. package/src/cache/index.ts +1 -0
  24. package/src/cache/taint.ts +55 -0
  25. package/src/context-var.ts +72 -2
  26. package/src/debug.ts +2 -2
  27. package/src/route-definition/dsl-helpers.ts +32 -7
  28. package/src/route-definition/redirect.ts +2 -2
  29. package/src/router/handler-context.ts +31 -8
  30. package/src/router/lazy-includes.ts +2 -1
  31. package/src/router/logging.ts +1 -1
  32. package/src/router/manifest.ts +6 -2
  33. package/src/router/match-middleware/background-revalidation.ts +30 -2
  34. package/src/router/match-middleware/cache-lookup.ts +66 -9
  35. package/src/router/match-middleware/cache-store.ts +53 -10
  36. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  37. package/src/router/match-middleware/segment-resolution.ts +7 -5
  38. package/src/router/match-result.ts +22 -6
  39. package/src/router/metrics.ts +6 -1
  40. package/src/router/middleware-types.ts +6 -2
  41. package/src/router/middleware.ts +4 -3
  42. package/src/router/router-context.ts +1 -0
  43. package/src/router/segment-resolution/fresh.ts +130 -16
  44. package/src/router/segment-resolution/loader-cache.ts +1 -0
  45. package/src/router/segment-resolution/revalidation.ts +348 -289
  46. package/src/router.ts +1 -1
  47. package/src/segment-system.tsx +140 -4
  48. package/src/server/context.ts +101 -13
  49. package/src/server/request-context.ts +53 -11
  50. package/src/ssr/index.tsx +1 -0
  51. package/src/types/handler-context.ts +113 -19
  52. package/src/types/segments.ts +2 -0
  53. package/src/urls/path-helper.ts +1 -1
  54. package/src/vite/discovery/state.ts +0 -2
  55. package/src/vite/plugin-types.ts +0 -83
  56. package/src/vite/plugins/expose-action-id.ts +1 -3
  57. package/src/vite/plugins/version-plugin.ts +13 -1
  58. package/src/vite/rango.ts +144 -209
  59. package/src/vite/router-discovery.ts +0 -8
  60. package/src/vite/utils/banner.ts +3 -3
  61. package/dist/__internal.d.ts +0 -83
  62. package/dist/__internal.d.ts.map +0 -1
  63. package/dist/__internal.js +0 -19
  64. package/dist/__internal.js.map +0 -1
  65. package/dist/__mocks__/version.d.ts +0 -7
  66. package/dist/__mocks__/version.d.ts.map +0 -1
  67. package/dist/__mocks__/version.js +0 -7
  68. package/dist/__mocks__/version.js.map +0 -1
  69. package/dist/__tests__/client-href.test.d.ts +0 -2
  70. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  71. package/dist/__tests__/client-href.test.js +0 -74
  72. package/dist/__tests__/client-href.test.js.map +0 -1
  73. package/dist/__tests__/component-utils.test.d.ts +0 -2
  74. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  75. package/dist/__tests__/component-utils.test.js +0 -51
  76. package/dist/__tests__/component-utils.test.js.map +0 -1
  77. package/dist/__tests__/event-controller.test.d.ts +0 -2
  78. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  79. package/dist/__tests__/event-controller.test.js +0 -538
  80. package/dist/__tests__/event-controller.test.js.map +0 -1
  81. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  82. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  83. package/dist/__tests__/helpers/route-tree.js +0 -374
  84. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  85. package/dist/__tests__/match-result.test.d.ts +0 -2
  86. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  87. package/dist/__tests__/match-result.test.js +0 -154
  88. package/dist/__tests__/match-result.test.js.map +0 -1
  89. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  90. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  91. package/dist/__tests__/navigation-store.test.js +0 -440
  92. package/dist/__tests__/navigation-store.test.js.map +0 -1
  93. package/dist/__tests__/partial-update.test.d.ts +0 -2
  94. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  95. package/dist/__tests__/partial-update.test.js +0 -1009
  96. package/dist/__tests__/partial-update.test.js.map +0 -1
  97. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  98. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  99. package/dist/__tests__/reverse-types.test.js +0 -656
  100. package/dist/__tests__/reverse-types.test.js.map +0 -1
  101. package/dist/__tests__/route-definition.test.d.ts +0 -2
  102. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  103. package/dist/__tests__/route-definition.test.js +0 -55
  104. package/dist/__tests__/route-definition.test.js.map +0 -1
  105. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  106. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  107. package/dist/__tests__/router-helpers.test.js +0 -377
  108. package/dist/__tests__/router-helpers.test.js.map +0 -1
  109. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  110. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  111. package/dist/__tests__/router-integration-2.test.js +0 -426
  112. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  113. package/dist/__tests__/router-integration.test.d.ts +0 -2
  114. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  115. package/dist/__tests__/router-integration.test.js +0 -1051
  116. package/dist/__tests__/router-integration.test.js.map +0 -1
  117. package/dist/__tests__/search-params.test.d.ts +0 -5
  118. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  119. package/dist/__tests__/search-params.test.js +0 -306
  120. package/dist/__tests__/search-params.test.js.map +0 -1
  121. package/dist/__tests__/segment-system.test.d.ts +0 -2
  122. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  123. package/dist/__tests__/segment-system.test.js +0 -627
  124. package/dist/__tests__/segment-system.test.js.map +0 -1
  125. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  126. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  127. package/dist/__tests__/static-handler-types.test.js +0 -63
  128. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  129. package/dist/__tests__/urls.test.d.ts +0 -2
  130. package/dist/__tests__/urls.test.d.ts.map +0 -1
  131. package/dist/__tests__/urls.test.js +0 -421
  132. package/dist/__tests__/urls.test.js.map +0 -1
  133. package/dist/__tests__/use-mount.test.d.ts +0 -2
  134. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  135. package/dist/__tests__/use-mount.test.js +0 -35
  136. package/dist/__tests__/use-mount.test.js.map +0 -1
  137. package/dist/bin/rango.d.ts +0 -2
  138. package/dist/bin/rango.d.ts.map +0 -1
  139. package/dist/bin/rango.js.map +0 -1
  140. package/dist/browser/event-controller.d.ts +0 -191
  141. package/dist/browser/event-controller.d.ts.map +0 -1
  142. package/dist/browser/event-controller.js +0 -559
  143. package/dist/browser/event-controller.js.map +0 -1
  144. package/dist/browser/index.d.ts +0 -2
  145. package/dist/browser/index.d.ts.map +0 -1
  146. package/dist/browser/index.js +0 -14
  147. package/dist/browser/index.js.map +0 -1
  148. package/dist/browser/link-interceptor.d.ts +0 -38
  149. package/dist/browser/link-interceptor.d.ts.map +0 -1
  150. package/dist/browser/link-interceptor.js +0 -99
  151. package/dist/browser/link-interceptor.js.map +0 -1
  152. package/dist/browser/logging.d.ts +0 -10
  153. package/dist/browser/logging.d.ts.map +0 -1
  154. package/dist/browser/logging.js +0 -29
  155. package/dist/browser/logging.js.map +0 -1
  156. package/dist/browser/lru-cache.d.ts +0 -17
  157. package/dist/browser/lru-cache.d.ts.map +0 -1
  158. package/dist/browser/lru-cache.js +0 -50
  159. package/dist/browser/lru-cache.js.map +0 -1
  160. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  161. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  162. package/dist/browser/merge-segment-loaders.js +0 -102
  163. package/dist/browser/merge-segment-loaders.js.map +0 -1
  164. package/dist/browser/navigation-bridge.d.ts +0 -102
  165. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  166. package/dist/browser/navigation-bridge.js +0 -708
  167. package/dist/browser/navigation-bridge.js.map +0 -1
  168. package/dist/browser/navigation-client.d.ts +0 -25
  169. package/dist/browser/navigation-client.d.ts.map +0 -1
  170. package/dist/browser/navigation-client.js +0 -157
  171. package/dist/browser/navigation-client.js.map +0 -1
  172. package/dist/browser/navigation-store.d.ts +0 -101
  173. package/dist/browser/navigation-store.d.ts.map +0 -1
  174. package/dist/browser/navigation-store.js +0 -625
  175. package/dist/browser/navigation-store.js.map +0 -1
  176. package/dist/browser/partial-update.d.ts +0 -75
  177. package/dist/browser/partial-update.d.ts.map +0 -1
  178. package/dist/browser/partial-update.js +0 -426
  179. package/dist/browser/partial-update.js.map +0 -1
  180. package/dist/browser/react/Link.d.ts +0 -86
  181. package/dist/browser/react/Link.d.ts.map +0 -1
  182. package/dist/browser/react/Link.js +0 -128
  183. package/dist/browser/react/Link.js.map +0 -1
  184. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  185. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  186. package/dist/browser/react/NavigationProvider.js +0 -216
  187. package/dist/browser/react/NavigationProvider.js.map +0 -1
  188. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  189. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  190. package/dist/browser/react/ScrollRestoration.js +0 -57
  191. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  192. package/dist/browser/react/context.d.ts +0 -46
  193. package/dist/browser/react/context.d.ts.map +0 -1
  194. package/dist/browser/react/context.js +0 -10
  195. package/dist/browser/react/context.js.map +0 -1
  196. package/dist/browser/react/index.d.ts +0 -11
  197. package/dist/browser/react/index.d.ts.map +0 -1
  198. package/dist/browser/react/index.js +0 -22
  199. package/dist/browser/react/index.js.map +0 -1
  200. package/dist/browser/react/location-state-shared.d.ts +0 -63
  201. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  202. package/dist/browser/react/location-state-shared.js +0 -81
  203. package/dist/browser/react/location-state-shared.js.map +0 -1
  204. package/dist/browser/react/location-state.d.ts +0 -23
  205. package/dist/browser/react/location-state.d.ts.map +0 -1
  206. package/dist/browser/react/location-state.js +0 -29
  207. package/dist/browser/react/location-state.js.map +0 -1
  208. package/dist/browser/react/mount-context.d.ts +0 -24
  209. package/dist/browser/react/mount-context.d.ts.map +0 -1
  210. package/dist/browser/react/mount-context.js +0 -24
  211. package/dist/browser/react/mount-context.js.map +0 -1
  212. package/dist/browser/react/use-action.d.ts +0 -64
  213. package/dist/browser/react/use-action.d.ts.map +0 -1
  214. package/dist/browser/react/use-action.js +0 -134
  215. package/dist/browser/react/use-action.js.map +0 -1
  216. package/dist/browser/react/use-client-cache.d.ts +0 -41
  217. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  218. package/dist/browser/react/use-client-cache.js +0 -39
  219. package/dist/browser/react/use-client-cache.js.map +0 -1
  220. package/dist/browser/react/use-handle.d.ts +0 -31
  221. package/dist/browser/react/use-handle.d.ts.map +0 -1
  222. package/dist/browser/react/use-handle.js +0 -144
  223. package/dist/browser/react/use-handle.js.map +0 -1
  224. package/dist/browser/react/use-href.d.ts +0 -33
  225. package/dist/browser/react/use-href.d.ts.map +0 -1
  226. package/dist/browser/react/use-href.js +0 -39
  227. package/dist/browser/react/use-href.js.map +0 -1
  228. package/dist/browser/react/use-link-status.d.ts +0 -37
  229. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  230. package/dist/browser/react/use-link-status.js +0 -99
  231. package/dist/browser/react/use-link-status.js.map +0 -1
  232. package/dist/browser/react/use-mount.d.ts +0 -25
  233. package/dist/browser/react/use-mount.d.ts.map +0 -1
  234. package/dist/browser/react/use-mount.js +0 -30
  235. package/dist/browser/react/use-mount.js.map +0 -1
  236. package/dist/browser/react/use-navigation.d.ts +0 -27
  237. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  238. package/dist/browser/react/use-navigation.js +0 -87
  239. package/dist/browser/react/use-navigation.js.map +0 -1
  240. package/dist/browser/react/use-segments.d.ts +0 -38
  241. package/dist/browser/react/use-segments.d.ts.map +0 -1
  242. package/dist/browser/react/use-segments.js +0 -130
  243. package/dist/browser/react/use-segments.js.map +0 -1
  244. package/dist/browser/request-controller.d.ts +0 -26
  245. package/dist/browser/request-controller.d.ts.map +0 -1
  246. package/dist/browser/request-controller.js +0 -147
  247. package/dist/browser/request-controller.js.map +0 -1
  248. package/dist/browser/rsc-router.d.ts +0 -129
  249. package/dist/browser/rsc-router.d.ts.map +0 -1
  250. package/dist/browser/rsc-router.js +0 -195
  251. package/dist/browser/rsc-router.js.map +0 -1
  252. package/dist/browser/scroll-restoration.d.ts +0 -93
  253. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  254. package/dist/browser/scroll-restoration.js +0 -321
  255. package/dist/browser/scroll-restoration.js.map +0 -1
  256. package/dist/browser/segment-structure-assert.d.ts +0 -17
  257. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  258. package/dist/browser/segment-structure-assert.js +0 -59
  259. package/dist/browser/segment-structure-assert.js.map +0 -1
  260. package/dist/browser/server-action-bridge.d.ts +0 -26
  261. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  262. package/dist/browser/server-action-bridge.js +0 -668
  263. package/dist/browser/server-action-bridge.js.map +0 -1
  264. package/dist/browser/shallow.d.ts +0 -12
  265. package/dist/browser/shallow.d.ts.map +0 -1
  266. package/dist/browser/shallow.js +0 -34
  267. package/dist/browser/shallow.js.map +0 -1
  268. package/dist/browser/types.d.ts +0 -369
  269. package/dist/browser/types.d.ts.map +0 -1
  270. package/dist/browser/types.js +0 -2
  271. package/dist/browser/types.js.map +0 -1
  272. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  273. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  274. package/dist/build/__tests__/generate-cli.test.js +0 -237
  275. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  276. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  277. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  278. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  279. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  280. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  281. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  282. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  283. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  284. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  285. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  286. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  287. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  288. package/dist/build/generate-manifest.d.ts +0 -81
  289. package/dist/build/generate-manifest.d.ts.map +0 -1
  290. package/dist/build/generate-manifest.js +0 -276
  291. package/dist/build/generate-manifest.js.map +0 -1
  292. package/dist/build/generate-route-types.d.ts +0 -115
  293. package/dist/build/generate-route-types.d.ts.map +0 -1
  294. package/dist/build/generate-route-types.js +0 -740
  295. package/dist/build/generate-route-types.js.map +0 -1
  296. package/dist/build/index.d.ts +0 -21
  297. package/dist/build/index.d.ts.map +0 -1
  298. package/dist/build/index.js +0 -21
  299. package/dist/build/index.js.map +0 -1
  300. package/dist/build/route-trie.d.ts +0 -71
  301. package/dist/build/route-trie.d.ts.map +0 -1
  302. package/dist/build/route-trie.js +0 -175
  303. package/dist/build/route-trie.js.map +0 -1
  304. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  305. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  306. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  307. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  308. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  309. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  310. package/dist/cache/__tests__/document-cache.test.js +0 -345
  311. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  312. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  313. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  314. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  315. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  316. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  317. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  318. package/dist/cache/__tests__/memory-store.test.js +0 -367
  319. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  320. package/dist/cache/cache-scope.d.ts +0 -102
  321. package/dist/cache/cache-scope.d.ts.map +0 -1
  322. package/dist/cache/cache-scope.js +0 -440
  323. package/dist/cache/cache-scope.js.map +0 -1
  324. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  325. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  326. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  327. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  328. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  329. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  330. package/dist/cache/cf/cf-cache-store.js +0 -242
  331. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  332. package/dist/cache/cf/index.d.ts +0 -14
  333. package/dist/cache/cf/index.d.ts.map +0 -1
  334. package/dist/cache/cf/index.js +0 -17
  335. package/dist/cache/cf/index.js.map +0 -1
  336. package/dist/cache/document-cache.d.ts +0 -64
  337. package/dist/cache/document-cache.d.ts.map +0 -1
  338. package/dist/cache/document-cache.js +0 -228
  339. package/dist/cache/document-cache.js.map +0 -1
  340. package/dist/cache/index.d.ts +0 -19
  341. package/dist/cache/index.d.ts.map +0 -1
  342. package/dist/cache/index.js +0 -21
  343. package/dist/cache/index.js.map +0 -1
  344. package/dist/cache/memory-segment-store.d.ts +0 -110
  345. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  346. package/dist/cache/memory-segment-store.js +0 -117
  347. package/dist/cache/memory-segment-store.js.map +0 -1
  348. package/dist/cache/memory-store.d.ts +0 -41
  349. package/dist/cache/memory-store.d.ts.map +0 -1
  350. package/dist/cache/memory-store.js +0 -191
  351. package/dist/cache/memory-store.js.map +0 -1
  352. package/dist/cache/types.d.ts +0 -317
  353. package/dist/cache/types.d.ts.map +0 -1
  354. package/dist/cache/types.js +0 -12
  355. package/dist/cache/types.js.map +0 -1
  356. package/dist/client.d.ts +0 -248
  357. package/dist/client.d.ts.map +0 -1
  358. package/dist/client.js +0 -367
  359. package/dist/client.js.map +0 -1
  360. package/dist/client.rsc.d.ts +0 -26
  361. package/dist/client.rsc.d.ts.map +0 -1
  362. package/dist/client.rsc.js +0 -46
  363. package/dist/client.rsc.js.map +0 -1
  364. package/dist/component-utils.d.ts +0 -36
  365. package/dist/component-utils.d.ts.map +0 -1
  366. package/dist/component-utils.js +0 -61
  367. package/dist/component-utils.js.map +0 -1
  368. package/dist/components/DefaultDocument.d.ts +0 -13
  369. package/dist/components/DefaultDocument.d.ts.map +0 -1
  370. package/dist/components/DefaultDocument.js +0 -15
  371. package/dist/components/DefaultDocument.js.map +0 -1
  372. package/dist/debug.d.ts +0 -58
  373. package/dist/debug.d.ts.map +0 -1
  374. package/dist/debug.js +0 -157
  375. package/dist/debug.js.map +0 -1
  376. package/dist/default-error-boundary.d.ts +0 -11
  377. package/dist/default-error-boundary.d.ts.map +0 -1
  378. package/dist/default-error-boundary.js +0 -45
  379. package/dist/default-error-boundary.js.map +0 -1
  380. package/dist/deps/browser.d.ts +0 -2
  381. package/dist/deps/browser.d.ts.map +0 -1
  382. package/dist/deps/browser.js +0 -3
  383. package/dist/deps/browser.js.map +0 -1
  384. package/dist/deps/html-stream-client.d.ts +0 -2
  385. package/dist/deps/html-stream-client.d.ts.map +0 -1
  386. package/dist/deps/html-stream-client.js +0 -3
  387. package/dist/deps/html-stream-client.js.map +0 -1
  388. package/dist/deps/html-stream-server.d.ts +0 -2
  389. package/dist/deps/html-stream-server.d.ts.map +0 -1
  390. package/dist/deps/html-stream-server.js +0 -3
  391. package/dist/deps/html-stream-server.js.map +0 -1
  392. package/dist/deps/rsc.d.ts +0 -2
  393. package/dist/deps/rsc.d.ts.map +0 -1
  394. package/dist/deps/rsc.js +0 -4
  395. package/dist/deps/rsc.js.map +0 -1
  396. package/dist/deps/ssr.d.ts +0 -2
  397. package/dist/deps/ssr.d.ts.map +0 -1
  398. package/dist/deps/ssr.js +0 -3
  399. package/dist/deps/ssr.js.map +0 -1
  400. package/dist/errors.d.ts +0 -174
  401. package/dist/errors.d.ts.map +0 -1
  402. package/dist/errors.js +0 -241
  403. package/dist/errors.js.map +0 -1
  404. package/dist/handle.d.ts +0 -78
  405. package/dist/handle.d.ts.map +0 -1
  406. package/dist/handle.js +0 -82
  407. package/dist/handle.js.map +0 -1
  408. package/dist/handles/MetaTags.d.ts +0 -14
  409. package/dist/handles/MetaTags.d.ts.map +0 -1
  410. package/dist/handles/MetaTags.js +0 -136
  411. package/dist/handles/MetaTags.js.map +0 -1
  412. package/dist/handles/index.d.ts +0 -6
  413. package/dist/handles/index.d.ts.map +0 -1
  414. package/dist/handles/index.js +0 -6
  415. package/dist/handles/index.js.map +0 -1
  416. package/dist/handles/meta.d.ts +0 -39
  417. package/dist/handles/meta.d.ts.map +0 -1
  418. package/dist/handles/meta.js +0 -202
  419. package/dist/handles/meta.js.map +0 -1
  420. package/dist/host/__tests__/errors.test.d.ts +0 -2
  421. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  422. package/dist/host/__tests__/errors.test.js +0 -76
  423. package/dist/host/__tests__/errors.test.js.map +0 -1
  424. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  425. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  426. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  427. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  428. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  429. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  430. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  431. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  432. package/dist/host/__tests__/router.test.d.ts +0 -2
  433. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  434. package/dist/host/__tests__/router.test.js +0 -241
  435. package/dist/host/__tests__/router.test.js.map +0 -1
  436. package/dist/host/__tests__/testing.test.d.ts +0 -2
  437. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  438. package/dist/host/__tests__/testing.test.js +0 -64
  439. package/dist/host/__tests__/testing.test.js.map +0 -1
  440. package/dist/host/__tests__/utils.test.d.ts +0 -2
  441. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  442. package/dist/host/__tests__/utils.test.js +0 -29
  443. package/dist/host/__tests__/utils.test.js.map +0 -1
  444. package/dist/host/cookie-handler.d.ts +0 -34
  445. package/dist/host/cookie-handler.d.ts.map +0 -1
  446. package/dist/host/cookie-handler.js +0 -124
  447. package/dist/host/cookie-handler.js.map +0 -1
  448. package/dist/host/errors.d.ts +0 -56
  449. package/dist/host/errors.d.ts.map +0 -1
  450. package/dist/host/errors.js +0 -79
  451. package/dist/host/errors.js.map +0 -1
  452. package/dist/host/index.d.ts +0 -29
  453. package/dist/host/index.d.ts.map +0 -1
  454. package/dist/host/index.js +0 -32
  455. package/dist/host/index.js.map +0 -1
  456. package/dist/host/pattern-matcher.d.ts +0 -36
  457. package/dist/host/pattern-matcher.d.ts.map +0 -1
  458. package/dist/host/pattern-matcher.js +0 -172
  459. package/dist/host/pattern-matcher.js.map +0 -1
  460. package/dist/host/router.d.ts +0 -26
  461. package/dist/host/router.d.ts.map +0 -1
  462. package/dist/host/router.js +0 -218
  463. package/dist/host/router.js.map +0 -1
  464. package/dist/host/testing.d.ts +0 -36
  465. package/dist/host/testing.d.ts.map +0 -1
  466. package/dist/host/testing.js +0 -55
  467. package/dist/host/testing.js.map +0 -1
  468. package/dist/host/types.d.ts +0 -115
  469. package/dist/host/types.d.ts.map +0 -1
  470. package/dist/host/types.js +0 -7
  471. package/dist/host/types.js.map +0 -1
  472. package/dist/host/utils.d.ts +0 -21
  473. package/dist/host/utils.d.ts.map +0 -1
  474. package/dist/host/utils.js +0 -23
  475. package/dist/host/utils.js.map +0 -1
  476. package/dist/href-client.d.ts +0 -131
  477. package/dist/href-client.d.ts.map +0 -1
  478. package/dist/href-client.js +0 -64
  479. package/dist/href-client.js.map +0 -1
  480. package/dist/href-context.d.ts +0 -29
  481. package/dist/href-context.d.ts.map +0 -1
  482. package/dist/href-context.js +0 -21
  483. package/dist/href-context.js.map +0 -1
  484. package/dist/index.d.ts +0 -73
  485. package/dist/index.d.ts.map +0 -1
  486. package/dist/index.js +0 -91
  487. package/dist/index.js.map +0 -1
  488. package/dist/index.rsc.d.ts +0 -32
  489. package/dist/index.rsc.d.ts.map +0 -1
  490. package/dist/index.rsc.js +0 -40
  491. package/dist/index.rsc.js.map +0 -1
  492. package/dist/internal-debug.d.ts +0 -2
  493. package/dist/internal-debug.d.ts.map +0 -1
  494. package/dist/internal-debug.js +0 -5
  495. package/dist/internal-debug.js.map +0 -1
  496. package/dist/loader.d.ts +0 -14
  497. package/dist/loader.d.ts.map +0 -1
  498. package/dist/loader.js +0 -20
  499. package/dist/loader.js.map +0 -1
  500. package/dist/loader.rsc.d.ts +0 -19
  501. package/dist/loader.rsc.d.ts.map +0 -1
  502. package/dist/loader.rsc.js +0 -99
  503. package/dist/loader.rsc.js.map +0 -1
  504. package/dist/network-error-thrower.d.ts +0 -17
  505. package/dist/network-error-thrower.d.ts.map +0 -1
  506. package/dist/network-error-thrower.js +0 -14
  507. package/dist/network-error-thrower.js.map +0 -1
  508. package/dist/outlet-context.d.ts +0 -13
  509. package/dist/outlet-context.d.ts.map +0 -1
  510. package/dist/outlet-context.js +0 -3
  511. package/dist/outlet-context.js.map +0 -1
  512. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  513. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  514. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  515. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  516. package/dist/prerender/param-hash.d.ts +0 -16
  517. package/dist/prerender/param-hash.d.ts.map +0 -1
  518. package/dist/prerender/param-hash.js +0 -36
  519. package/dist/prerender/param-hash.js.map +0 -1
  520. package/dist/prerender/store.d.ts +0 -38
  521. package/dist/prerender/store.d.ts.map +0 -1
  522. package/dist/prerender/store.js +0 -61
  523. package/dist/prerender/store.js.map +0 -1
  524. package/dist/prerender.d.ts +0 -66
  525. package/dist/prerender.d.ts.map +0 -1
  526. package/dist/prerender.js +0 -57
  527. package/dist/prerender.js.map +0 -1
  528. package/dist/reverse.d.ts +0 -196
  529. package/dist/reverse.d.ts.map +0 -1
  530. package/dist/reverse.js +0 -78
  531. package/dist/reverse.js.map +0 -1
  532. package/dist/root-error-boundary.d.ts +0 -33
  533. package/dist/root-error-boundary.d.ts.map +0 -1
  534. package/dist/root-error-boundary.js +0 -165
  535. package/dist/root-error-boundary.js.map +0 -1
  536. package/dist/route-content-wrapper.d.ts +0 -46
  537. package/dist/route-content-wrapper.d.ts.map +0 -1
  538. package/dist/route-content-wrapper.js +0 -77
  539. package/dist/route-content-wrapper.js.map +0 -1
  540. package/dist/route-definition.d.ts +0 -421
  541. package/dist/route-definition.d.ts.map +0 -1
  542. package/dist/route-definition.js +0 -868
  543. package/dist/route-definition.js.map +0 -1
  544. package/dist/route-map-builder.d.ts +0 -155
  545. package/dist/route-map-builder.d.ts.map +0 -1
  546. package/dist/route-map-builder.js +0 -237
  547. package/dist/route-map-builder.js.map +0 -1
  548. package/dist/route-types.d.ts +0 -165
  549. package/dist/route-types.d.ts.map +0 -1
  550. package/dist/route-types.js +0 -7
  551. package/dist/route-types.js.map +0 -1
  552. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  553. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  554. package/dist/router/__tests__/handler-context.test.js +0 -65
  555. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  556. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  557. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  558. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  559. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  560. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  561. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  562. package/dist/router/__tests__/match-context.test.js +0 -92
  563. package/dist/router/__tests__/match-context.test.js.map +0 -1
  564. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  565. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  566. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  567. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  568. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  569. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  570. package/dist/router/__tests__/match-result.test.js +0 -457
  571. package/dist/router/__tests__/match-result.test.js.map +0 -1
  572. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  573. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  574. package/dist/router/__tests__/on-error.test.js +0 -678
  575. package/dist/router/__tests__/on-error.test.js.map +0 -1
  576. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  577. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  578. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  579. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  580. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  581. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  582. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  583. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  584. package/dist/router/error-handling.d.ts +0 -77
  585. package/dist/router/error-handling.d.ts.map +0 -1
  586. package/dist/router/error-handling.js +0 -202
  587. package/dist/router/error-handling.js.map +0 -1
  588. package/dist/router/handler-context.d.ts +0 -20
  589. package/dist/router/handler-context.d.ts.map +0 -1
  590. package/dist/router/handler-context.js +0 -198
  591. package/dist/router/handler-context.js.map +0 -1
  592. package/dist/router/intercept-resolution.d.ts +0 -66
  593. package/dist/router/intercept-resolution.d.ts.map +0 -1
  594. package/dist/router/intercept-resolution.js +0 -246
  595. package/dist/router/intercept-resolution.js.map +0 -1
  596. package/dist/router/loader-resolution.d.ts +0 -64
  597. package/dist/router/loader-resolution.d.ts.map +0 -1
  598. package/dist/router/loader-resolution.js +0 -284
  599. package/dist/router/loader-resolution.js.map +0 -1
  600. package/dist/router/logging.d.ts +0 -15
  601. package/dist/router/logging.d.ts.map +0 -1
  602. package/dist/router/logging.js +0 -99
  603. package/dist/router/logging.js.map +0 -1
  604. package/dist/router/manifest.d.ts +0 -22
  605. package/dist/router/manifest.d.ts.map +0 -1
  606. package/dist/router/manifest.js +0 -181
  607. package/dist/router/manifest.js.map +0 -1
  608. package/dist/router/match-api.d.ts +0 -35
  609. package/dist/router/match-api.d.ts.map +0 -1
  610. package/dist/router/match-api.js +0 -406
  611. package/dist/router/match-api.js.map +0 -1
  612. package/dist/router/match-context.d.ts +0 -206
  613. package/dist/router/match-context.d.ts.map +0 -1
  614. package/dist/router/match-context.js +0 -17
  615. package/dist/router/match-context.js.map +0 -1
  616. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  617. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  618. package/dist/router/match-middleware/background-revalidation.js +0 -75
  619. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  620. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  621. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  622. package/dist/router/match-middleware/cache-lookup.js +0 -257
  623. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  624. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  625. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  626. package/dist/router/match-middleware/cache-store.js +0 -108
  627. package/dist/router/match-middleware/cache-store.js.map +0 -1
  628. package/dist/router/match-middleware/index.d.ts +0 -81
  629. package/dist/router/match-middleware/index.d.ts.map +0 -1
  630. package/dist/router/match-middleware/index.js +0 -80
  631. package/dist/router/match-middleware/index.js.map +0 -1
  632. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  633. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  634. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  635. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  636. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  637. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  638. package/dist/router/match-middleware/segment-resolution.js +0 -53
  639. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  640. package/dist/router/match-pipelines.d.ts +0 -147
  641. package/dist/router/match-pipelines.d.ts.map +0 -1
  642. package/dist/router/match-pipelines.js +0 -82
  643. package/dist/router/match-pipelines.js.map +0 -1
  644. package/dist/router/match-result.d.ts +0 -126
  645. package/dist/router/match-result.d.ts.map +0 -1
  646. package/dist/router/match-result.js +0 -93
  647. package/dist/router/match-result.js.map +0 -1
  648. package/dist/router/metrics.d.ts +0 -20
  649. package/dist/router/metrics.d.ts.map +0 -1
  650. package/dist/router/metrics.js +0 -47
  651. package/dist/router/metrics.js.map +0 -1
  652. package/dist/router/middleware.d.ts +0 -249
  653. package/dist/router/middleware.d.ts.map +0 -1
  654. package/dist/router/middleware.js +0 -434
  655. package/dist/router/middleware.js.map +0 -1
  656. package/dist/router/middleware.test.d.ts +0 -2
  657. package/dist/router/middleware.test.d.ts.map +0 -1
  658. package/dist/router/middleware.test.js +0 -816
  659. package/dist/router/middleware.test.js.map +0 -1
  660. package/dist/router/pattern-matching.d.ts +0 -149
  661. package/dist/router/pattern-matching.d.ts.map +0 -1
  662. package/dist/router/pattern-matching.js +0 -349
  663. package/dist/router/pattern-matching.js.map +0 -1
  664. package/dist/router/revalidation.d.ts +0 -44
  665. package/dist/router/revalidation.d.ts.map +0 -1
  666. package/dist/router/revalidation.js +0 -147
  667. package/dist/router/revalidation.js.map +0 -1
  668. package/dist/router/router-context.d.ts +0 -135
  669. package/dist/router/router-context.d.ts.map +0 -1
  670. package/dist/router/router-context.js +0 -36
  671. package/dist/router/router-context.js.map +0 -1
  672. package/dist/router/segment-resolution.d.ts +0 -127
  673. package/dist/router/segment-resolution.d.ts.map +0 -1
  674. package/dist/router/segment-resolution.js +0 -919
  675. package/dist/router/segment-resolution.js.map +0 -1
  676. package/dist/router/trie-matching.d.ts +0 -40
  677. package/dist/router/trie-matching.d.ts.map +0 -1
  678. package/dist/router/trie-matching.js +0 -127
  679. package/dist/router/trie-matching.js.map +0 -1
  680. package/dist/router/types.d.ts +0 -136
  681. package/dist/router/types.d.ts.map +0 -1
  682. package/dist/router/types.js +0 -7
  683. package/dist/router/types.js.map +0 -1
  684. package/dist/router.d.ts +0 -753
  685. package/dist/router.d.ts.map +0 -1
  686. package/dist/router.gen.d.ts +0 -6
  687. package/dist/router.gen.d.ts.map +0 -1
  688. package/dist/router.gen.js +0 -6
  689. package/dist/router.gen.js.map +0 -1
  690. package/dist/router.js +0 -1304
  691. package/dist/router.js.map +0 -1
  692. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  693. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  694. package/dist/rsc/__tests__/helpers.test.js +0 -140
  695. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  696. package/dist/rsc/handler.d.ts +0 -45
  697. package/dist/rsc/handler.d.ts.map +0 -1
  698. package/dist/rsc/handler.js +0 -1172
  699. package/dist/rsc/handler.js.map +0 -1
  700. package/dist/rsc/helpers.d.ts +0 -16
  701. package/dist/rsc/helpers.d.ts.map +0 -1
  702. package/dist/rsc/helpers.js +0 -55
  703. package/dist/rsc/helpers.js.map +0 -1
  704. package/dist/rsc/index.d.ts +0 -22
  705. package/dist/rsc/index.d.ts.map +0 -1
  706. package/dist/rsc/index.js +0 -23
  707. package/dist/rsc/index.js.map +0 -1
  708. package/dist/rsc/nonce.d.ts +0 -9
  709. package/dist/rsc/nonce.d.ts.map +0 -1
  710. package/dist/rsc/nonce.js +0 -18
  711. package/dist/rsc/nonce.js.map +0 -1
  712. package/dist/rsc/types.d.ts +0 -206
  713. package/dist/rsc/types.d.ts.map +0 -1
  714. package/dist/rsc/types.js +0 -8
  715. package/dist/rsc/types.js.map +0 -1
  716. package/dist/search-params.d.ts +0 -103
  717. package/dist/search-params.d.ts.map +0 -1
  718. package/dist/search-params.js +0 -74
  719. package/dist/search-params.js.map +0 -1
  720. package/dist/segment-system.d.ts +0 -75
  721. package/dist/segment-system.d.ts.map +0 -1
  722. package/dist/segment-system.js +0 -336
  723. package/dist/segment-system.js.map +0 -1
  724. package/dist/server/context.d.ts +0 -245
  725. package/dist/server/context.d.ts.map +0 -1
  726. package/dist/server/context.js +0 -197
  727. package/dist/server/context.js.map +0 -1
  728. package/dist/server/fetchable-loader-store.d.ts +0 -18
  729. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  730. package/dist/server/fetchable-loader-store.js +0 -18
  731. package/dist/server/fetchable-loader-store.js.map +0 -1
  732. package/dist/server/handle-store.d.ts +0 -85
  733. package/dist/server/handle-store.d.ts.map +0 -1
  734. package/dist/server/handle-store.js +0 -142
  735. package/dist/server/handle-store.js.map +0 -1
  736. package/dist/server/loader-registry.d.ts +0 -55
  737. package/dist/server/loader-registry.d.ts.map +0 -1
  738. package/dist/server/loader-registry.js +0 -132
  739. package/dist/server/loader-registry.js.map +0 -1
  740. package/dist/server/request-context.d.ts +0 -226
  741. package/dist/server/request-context.d.ts.map +0 -1
  742. package/dist/server/request-context.js +0 -290
  743. package/dist/server/request-context.js.map +0 -1
  744. package/dist/server/root-layout.d.ts +0 -4
  745. package/dist/server/root-layout.d.ts.map +0 -1
  746. package/dist/server/root-layout.js +0 -5
  747. package/dist/server/root-layout.js.map +0 -1
  748. package/dist/server.d.ts +0 -15
  749. package/dist/server.d.ts.map +0 -1
  750. package/dist/server.js +0 -20
  751. package/dist/server.js.map +0 -1
  752. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  753. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  754. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  755. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  756. package/dist/ssr/index.d.ts +0 -98
  757. package/dist/ssr/index.d.ts.map +0 -1
  758. package/dist/ssr/index.js +0 -158
  759. package/dist/ssr/index.js.map +0 -1
  760. package/dist/static-handler.d.ts +0 -50
  761. package/dist/static-handler.d.ts.map +0 -1
  762. package/dist/static-handler.gen.d.ts +0 -5
  763. package/dist/static-handler.gen.d.ts.map +0 -1
  764. package/dist/static-handler.gen.js +0 -5
  765. package/dist/static-handler.gen.js.map +0 -1
  766. package/dist/static-handler.js +0 -29
  767. package/dist/static-handler.js.map +0 -1
  768. package/dist/theme/ThemeProvider.d.ts +0 -20
  769. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  770. package/dist/theme/ThemeProvider.js +0 -240
  771. package/dist/theme/ThemeProvider.js.map +0 -1
  772. package/dist/theme/ThemeScript.d.ts +0 -48
  773. package/dist/theme/ThemeScript.d.ts.map +0 -1
  774. package/dist/theme/ThemeScript.js +0 -13
  775. package/dist/theme/ThemeScript.js.map +0 -1
  776. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  777. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  778. package/dist/theme/__tests__/theme.test.js +0 -103
  779. package/dist/theme/__tests__/theme.test.js.map +0 -1
  780. package/dist/theme/constants.d.ts +0 -29
  781. package/dist/theme/constants.d.ts.map +0 -1
  782. package/dist/theme/constants.js +0 -48
  783. package/dist/theme/constants.js.map +0 -1
  784. package/dist/theme/index.d.ts +0 -31
  785. package/dist/theme/index.d.ts.map +0 -1
  786. package/dist/theme/index.js +0 -36
  787. package/dist/theme/index.js.map +0 -1
  788. package/dist/theme/theme-context.d.ts +0 -40
  789. package/dist/theme/theme-context.d.ts.map +0 -1
  790. package/dist/theme/theme-context.js +0 -60
  791. package/dist/theme/theme-context.js.map +0 -1
  792. package/dist/theme/theme-script.d.ts +0 -27
  793. package/dist/theme/theme-script.d.ts.map +0 -1
  794. package/dist/theme/theme-script.js +0 -147
  795. package/dist/theme/theme-script.js.map +0 -1
  796. package/dist/theme/types.d.ts +0 -163
  797. package/dist/theme/types.d.ts.map +0 -1
  798. package/dist/theme/types.js +0 -11
  799. package/dist/theme/types.js.map +0 -1
  800. package/dist/theme/use-theme.d.ts +0 -12
  801. package/dist/theme/use-theme.d.ts.map +0 -1
  802. package/dist/theme/use-theme.js +0 -40
  803. package/dist/theme/use-theme.js.map +0 -1
  804. package/dist/types.d.ts +0 -1479
  805. package/dist/types.d.ts.map +0 -1
  806. package/dist/types.js +0 -10
  807. package/dist/types.js.map +0 -1
  808. package/dist/urls.d.ts +0 -441
  809. package/dist/urls.d.ts.map +0 -1
  810. package/dist/urls.gen.d.ts +0 -8
  811. package/dist/urls.gen.d.ts.map +0 -1
  812. package/dist/urls.gen.js +0 -8
  813. package/dist/urls.gen.js.map +0 -1
  814. package/dist/urls.js +0 -443
  815. package/dist/urls.js.map +0 -1
  816. package/dist/use-loader.d.ts +0 -127
  817. package/dist/use-loader.d.ts.map +0 -1
  818. package/dist/use-loader.js +0 -237
  819. package/dist/use-loader.js.map +0 -1
  820. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  821. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  822. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  823. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  824. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  825. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  826. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  827. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  828. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  829. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  830. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  831. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  832. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  833. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  834. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  835. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  836. package/dist/vite/ast-handler-extract.d.ts +0 -49
  837. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  838. package/dist/vite/ast-handler-extract.js +0 -249
  839. package/dist/vite/ast-handler-extract.js.map +0 -1
  840. package/dist/vite/expose-action-id.d.ts +0 -19
  841. package/dist/vite/expose-action-id.d.ts.map +0 -1
  842. package/dist/vite/expose-action-id.js +0 -250
  843. package/dist/vite/expose-action-id.js.map +0 -1
  844. package/dist/vite/expose-id-utils.d.ts +0 -69
  845. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  846. package/dist/vite/expose-id-utils.js +0 -289
  847. package/dist/vite/expose-id-utils.js.map +0 -1
  848. package/dist/vite/expose-internal-ids.d.ts +0 -22
  849. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  850. package/dist/vite/expose-internal-ids.js +0 -886
  851. package/dist/vite/expose-internal-ids.js.map +0 -1
  852. package/dist/vite/index.d.ts +0 -149
  853. package/dist/vite/index.d.ts.map +0 -1
  854. package/dist/vite/index.js.map +0 -1
  855. package/dist/vite/index.named-routes.gen.ts +0 -103
  856. package/dist/vite/package-resolution.d.ts +0 -43
  857. package/dist/vite/package-resolution.d.ts.map +0 -1
  858. package/dist/vite/package-resolution.js +0 -112
  859. package/dist/vite/package-resolution.js.map +0 -1
  860. package/dist/vite/virtual-entries.d.ts +0 -25
  861. package/dist/vite/virtual-entries.d.ts.map +0 -1
  862. package/dist/vite/virtual-entries.js +0 -110
  863. package/dist/vite/virtual-entries.js.map +0 -1
@@ -5,12 +5,22 @@
5
5
  * Hover prefetches bypass this queue — they fire directly for immediate response
6
6
  * to user intent.
7
7
  *
8
- * All queued/executing prefetches share a single AbortController so they can
9
- * be cancelled in bulk when a navigation starts.
8
+ * Draining is deferred to the next animation frame so prefetch network activity
9
+ * never blocks paint. This applies to both the initial batch and subsequent
10
+ * batches — every drain cycle yields to the browser first.
11
+ *
12
+ * When a navigation starts, queued prefetches are cancelled but executing ones
13
+ * are left running. Navigation can reuse their in-flight responses via the
14
+ * prefetch cache's inflight promise map, avoiding duplicate requests.
10
15
  */
11
16
 
12
17
  const MAX_CONCURRENT = 2;
13
18
 
19
+ const deferToNextPaint: (fn: () => void) => void =
20
+ typeof requestAnimationFrame === "function"
21
+ ? requestAnimationFrame
22
+ : (fn) => setTimeout(fn, 0);
23
+
14
24
  let active = 0;
15
25
  const queue: Array<{
16
26
  key: string;
@@ -19,6 +29,7 @@ const queue: Array<{
19
29
  const queued = new Set<string>();
20
30
  const executing = new Set<string>();
21
31
  let abortController: AbortController | null = null;
32
+ let drainScheduled = false;
22
33
 
23
34
  function startExecution(
24
35
  key: string,
@@ -34,6 +45,21 @@ function startExecution(
34
45
  if (executing.delete(key)) {
35
46
  active--;
36
47
  }
48
+ scheduleDrain();
49
+ });
50
+ }
51
+
52
+ /**
53
+ * Schedule a drain on the next animation frame.
54
+ * Coalesces multiple drain requests into a single rAF callback so
55
+ * batch completion doesn't schedule redundant frames.
56
+ */
57
+ function scheduleDrain(): void {
58
+ if (drainScheduled) return;
59
+ if (active >= MAX_CONCURRENT || queue.length === 0) return;
60
+ drainScheduled = true;
61
+ deferToNextPaint(() => {
62
+ drainScheduled = false;
37
63
  drain();
38
64
  });
39
65
  }
@@ -48,8 +74,8 @@ function drain(): void {
48
74
 
49
75
  /**
50
76
  * Enqueue a prefetch for concurrency-limited execution.
51
- * If below the concurrency limit, executes immediately.
52
- * Otherwise queues for later execution.
77
+ * Execution is always deferred to the next animation frame to avoid
78
+ * blocking paint, even when below the concurrency limit.
53
79
  * Deduplicates by key — items already queued or executing are skipped.
54
80
  *
55
81
  * The executor receives an AbortSignal that is aborted when
@@ -61,20 +87,33 @@ export function enqueuePrefetch(
61
87
  ): void {
62
88
  if (queued.has(key) || executing.has(key)) return;
63
89
 
64
- if (active < MAX_CONCURRENT) {
65
- startExecution(key, execute);
66
- } else {
67
- queued.add(key);
68
- queue.push({ key, execute });
69
- }
90
+ queued.add(key);
91
+ queue.push({ key, execute });
92
+ scheduleDrain();
70
93
  }
71
94
 
72
95
  /**
73
- * Cancel all in-flight and queued prefetches.
74
- * Called when a navigation starts — speculative prefetches should not
75
- * compete with navigation fetches for connection slots.
96
+ * Cancel queued prefetches. Executing prefetches are left running so
97
+ * navigation can reuse their in-flight responses (checked via
98
+ * consumeInflightPrefetch in the prefetch cache). With MAX_CONCURRENT=2
99
+ * and priority: "low", in-flight prefetches don't meaningfully compete
100
+ * with navigation fetches under HTTP/2 multiplexing.
101
+ *
102
+ * Called when a navigation starts via the NavigationProvider's
103
+ * event controller subscription.
76
104
  */
77
105
  export function cancelAllPrefetches(): void {
106
+ queue.length = 0;
107
+ queued.clear();
108
+ drainScheduled = false;
109
+ }
110
+
111
+ /**
112
+ * Hard-cancel everything including in-flight prefetches.
113
+ * Used by clearPrefetchCache (server action invalidation) where
114
+ * in-flight responses would be stale.
115
+ */
116
+ export function abortAllPrefetches(): void {
78
117
  abortController?.abort();
79
118
  abortController = null;
80
119
 
@@ -85,4 +124,5 @@ export function cancelAllPrefetches(): void {
85
124
  // so active settles at 0 without underflow.
86
125
  executing.clear();
87
126
  active = 0;
127
+ drainScheduled = false;
88
128
  }
@@ -279,7 +279,15 @@ export const Link: ForwardRefExoticComponent<
279
279
  );
280
280
 
281
281
  const handleMouseEnter = useCallback(() => {
282
- if (resolvedStrategy === "hover" && !isExternal && ctx?.store) {
282
+ if (
283
+ (resolvedStrategy === "hover" || resolvedStrategy === "viewport") &&
284
+ !isExternal &&
285
+ ctx?.store
286
+ ) {
287
+ // For "hover", this is the primary prefetch trigger.
288
+ // For "viewport", this upgrades/prioritizes a potentially queued
289
+ // prefetch — prefetchDirect bypasses the queue, and hasPrefetch
290
+ // deduplicates if the viewport prefetch already completed.
283
291
  const segmentState = ctx.store.getSegmentState();
284
292
  prefetchDirect(to, segmentState.currentSegmentIds, ctx.version);
285
293
  }
@@ -327,9 +327,9 @@ export function NavigationProvider({
327
327
  const unsubscribe = store.onUpdate((update) => {
328
328
  // Capture scroll intent — it will be applied in useLayoutEffect
329
329
  // after React commits this state update to the DOM.
330
- if (update.scroll) {
331
- pendingScrollRef.current = update.scroll;
332
- }
330
+ // Always assign (even undefined) to clear stale scroll from prior navigations,
331
+ // so server actions or error updates don't accidentally replay old scroll.
332
+ pendingScrollRef.current = update.scroll;
333
333
 
334
334
  setPayload({
335
335
  root: update.root,
@@ -263,71 +263,123 @@ export async function initBrowserApp(
263
263
  // Build initial tree with rootLayout
264
264
  const initialTree = renderSegments(initialPayload.metadata!.segments);
265
265
 
266
- // Setup HMR
266
+ // Setup HMR with debounce — burst saves (format-on-save, rapid edits)
267
+ // fire many rsc:update events in quick succession. Without debouncing,
268
+ // each event triggers a fetchPartial() which on slow routes can pile up
269
+ // and overwhelm the worker (cross-request promise issues, 500s).
267
270
  if (import.meta.hot) {
268
- import.meta.hot.on("rsc:update", async () => {
269
- console.log("[RSCRouter] HMR: Server update, refetching RSC");
270
-
271
- const handle = eventController.startNavigation(window.location.href, {
272
- replace: true,
273
- });
274
- const streamingToken = handle.startStreaming();
275
-
276
- const interceptSourceUrl = store.getInterceptSourceUrl();
277
-
278
- try {
279
- const { payload, streamComplete } = await client.fetchPartial({
280
- targetUrl: window.location.href,
281
- segmentIds: [],
282
- previousUrl: store.getSegmentState().currentUrl,
283
- interceptSourceUrl: interceptSourceUrl || undefined,
284
- hmr: true,
285
- });
271
+ let hmrTimer: ReturnType<typeof setTimeout> | null = null;
272
+ let hmrAbort: AbortController | null = null;
286
273
 
287
- if (payload.metadata?.isPartial) {
288
- const segments = payload.metadata.segments || [];
289
- const matched = payload.metadata.matched || [];
274
+ import.meta.hot.on("rsc:update", () => {
275
+ // Cancel any pending debounce timer
276
+ if (hmrTimer !== null) {
277
+ clearTimeout(hmrTimer);
278
+ }
290
279
 
291
- // Derive intercept state from the returned payload, not the
292
- // pre-fetch store snapshot. If the HMR edit removed intercept
293
- // behavior, the response won't contain intercept segments.
294
- const responseIsIntercept = segments.some(isInterceptSegment);
280
+ // Abort any in-flight HMR fetch so it doesn't race with the next one
281
+ if (hmrAbort) {
282
+ hmrAbort.abort();
283
+ hmrAbort = null;
284
+ }
295
285
 
296
- // Sync store intercept state with what the server returned
297
- if (!responseIsIntercept && interceptSourceUrl) {
298
- store.setInterceptSourceUrl(null);
299
- }
286
+ // Debounce: wait 200ms of quiet before fetching
287
+ hmrTimer = setTimeout(async () => {
288
+ hmrTimer = null;
289
+
290
+ // Don't interrupt an active user navigation — startNavigation()
291
+ // would abort it and refetch the old URL (window.location.href
292
+ // hasn't updated yet). The user's navigation will pick up the
293
+ // new server code when it completes. isNavigating covers the
294
+ // full lifecycle (fetching + streaming, before commit) without
295
+ // blocking on server actions.
296
+ if (eventController.getState().isNavigating) {
297
+ console.log("[RSCRouter] HMR: Skipping — navigation in progress");
298
+ return;
299
+ }
300
300
 
301
- store.setSegmentIds(matched);
302
- store.setCurrentUrl(window.location.href);
301
+ console.log("[RSCRouter] HMR: Server update, refetching RSC");
303
302
 
304
- const historyKey = generateHistoryKey(window.location.href, {
305
- intercept: responseIsIntercept,
306
- });
307
- store.setHistoryKey(historyKey);
308
- const currentHandleData = eventController.getHandleState().data;
309
- store.cacheSegmentsForHistory(
310
- historyKey,
311
- segments,
312
- currentHandleData,
313
- );
314
-
315
- const { main, intercept } = splitInterceptSegments(segments);
316
- store.emitUpdate({
317
- root: renderSegments(main, {
318
- interceptSegments: intercept.length > 0 ? intercept : undefined,
319
- }),
320
- metadata: payload.metadata,
303
+ const abort = new AbortController();
304
+ hmrAbort = abort;
305
+
306
+ const handle = eventController.startNavigation(window.location.href, {
307
+ replace: true,
308
+ });
309
+ const streamingToken = handle.startStreaming();
310
+
311
+ const interceptSourceUrl = store.getInterceptSourceUrl();
312
+
313
+ try {
314
+ const { payload, streamComplete } = await client.fetchPartial({
315
+ targetUrl: window.location.href,
316
+ segmentIds: [],
317
+ previousUrl: store.getSegmentState().currentUrl,
318
+ interceptSourceUrl: interceptSourceUrl || undefined,
319
+ hmr: true,
320
+ signal: abort.signal,
321
321
  });
322
- }
323
322
 
324
- await streamComplete;
325
- handle.complete(new URL(window.location.href));
326
- console.log("[RSCRouter] HMR: RSC stream complete");
327
- } finally {
328
- streamingToken.end();
329
- handle[Symbol.dispose]();
330
- }
323
+ if (abort.signal.aborted) return;
324
+
325
+ // If the server returned a non-RSC response (404, 500 without
326
+ // error boundary), the payload won't have valid metadata.
327
+ // Reload to recover rather than leaving the page stale.
328
+ if (!payload.metadata) {
329
+ throw new Error("HMR refetch returned invalid payload");
330
+ }
331
+
332
+ if (payload.metadata?.isPartial) {
333
+ const segments = payload.metadata.segments || [];
334
+ const matched = payload.metadata.matched || [];
335
+
336
+ // Derive intercept state from the returned payload, not the
337
+ // pre-fetch store snapshot. If the HMR edit removed intercept
338
+ // behavior, the response won't contain intercept segments.
339
+ const responseIsIntercept = segments.some(isInterceptSegment);
340
+
341
+ // Sync store intercept state with what the server returned
342
+ if (!responseIsIntercept && interceptSourceUrl) {
343
+ store.setInterceptSourceUrl(null);
344
+ }
345
+
346
+ store.setSegmentIds(matched);
347
+ store.setCurrentUrl(window.location.href);
348
+
349
+ const historyKey = generateHistoryKey(window.location.href, {
350
+ intercept: responseIsIntercept,
351
+ });
352
+ store.setHistoryKey(historyKey);
353
+ const currentHandleData = eventController.getHandleState().data;
354
+ store.cacheSegmentsForHistory(
355
+ historyKey,
356
+ segments,
357
+ currentHandleData,
358
+ );
359
+
360
+ const { main, intercept } = splitInterceptSegments(segments);
361
+ store.emitUpdate({
362
+ root: renderSegments(main, {
363
+ interceptSegments: intercept.length > 0 ? intercept : undefined,
364
+ }),
365
+ metadata: payload.metadata,
366
+ });
367
+ }
368
+
369
+ await streamComplete;
370
+ handle.complete(new URL(window.location.href));
371
+ console.log("[RSCRouter] HMR: RSC stream complete");
372
+ } catch (err) {
373
+ if (abort.signal.aborted) return;
374
+ console.warn("[RSCRouter] HMR: Refetch failed, reloading page", err);
375
+ window.location.reload();
376
+ return;
377
+ } finally {
378
+ if (hmrAbort === abort) hmrAbort = null;
379
+ streamingToken.end();
380
+ handle[Symbol.dispose]();
381
+ }
382
+ }, 200);
331
383
  });
332
384
  }
333
385
 
@@ -10,6 +10,15 @@
10
10
 
11
11
  import { debugLog } from "./logging.js";
12
12
 
13
+ /**
14
+ * Defers a callback to the next animation frame.
15
+ * Falls back to setTimeout(0) in environments without requestAnimationFrame.
16
+ */
17
+ const deferToNextPaint: (fn: () => void) => void =
18
+ typeof requestAnimationFrame === "function"
19
+ ? requestAnimationFrame
20
+ : (fn) => setTimeout(fn, 0);
21
+
13
22
  const SCROLL_STORAGE_KEY = "rsc-router-scroll-positions";
14
23
 
15
24
  /**
@@ -288,11 +297,7 @@ export function restoreScrollPosition(options?: {
288
297
  // Not streaming — scroll after React commits and browser paints.
289
298
  // startTransition defers the DOM commit, so scrolling synchronously
290
299
  // would be overwritten when React replaces the content.
291
- const defer =
292
- typeof requestAnimationFrame === "function"
293
- ? requestAnimationFrame
294
- : (fn: () => void) => setTimeout(fn, 0);
295
- defer(() => {
300
+ deferToNextPaint(() => {
296
301
  window.scrollTo(0, savedY);
297
302
  debugLog("[Scroll] Restored position:", savedY, "for key:", key);
298
303
  });
@@ -372,11 +377,7 @@ export function handleNavigationEnd(options: {
372
377
 
373
378
  // Defer hash and scroll-to-top to after React paints the new content,
374
379
  // so the user doesn't see the current page jump before the new route appears.
375
- const defer =
376
- typeof requestAnimationFrame === "function"
377
- ? requestAnimationFrame
378
- : (fn: () => void) => setTimeout(fn, 0);
379
- defer(() => {
380
+ deferToNextPaint(() => {
380
381
  // Try hash scrolling first
381
382
  if (scrollToHash()) {
382
383
  return;
@@ -160,8 +160,13 @@ export function reconcileSegments(input: ReconcileInput): ReconcileResult {
160
160
 
161
161
  // For non-action actors: cached segments the server decided not to re-render.
162
162
  // - Preserve loading=false (suppressed boundary) to maintain tree structure
163
- // - Clear truthy loading (active skeleton) to prevent suspense on cached content
163
+ // - Preserve parallel segment loading so renderSegments can reconstruct
164
+ // parallel-owned loader markers from the cached slot metadata
165
+ // - Clear other truthy loading values to prevent suspense on cached content
164
166
  if (actor !== "action") {
167
+ if (fromCache.type === "parallel" && fromCache.loading !== undefined) {
168
+ return fromCache;
169
+ }
165
170
  if (fromCache.loading !== undefined && fromCache.loading !== false) {
166
171
  return { ...fromCache, loading: undefined };
167
172
  }
@@ -45,7 +45,9 @@ function isRoutableSourceFile(name: string): boolean {
45
45
  name.endsWith(".tsx") ||
46
46
  name.endsWith(".js") ||
47
47
  name.endsWith(".jsx")) &&
48
- !name.includes(".gen.")
48
+ !name.includes(".gen.") &&
49
+ !name.includes(".test.") &&
50
+ !name.includes(".spec.")
49
51
  );
50
52
  }
51
53
 
@@ -70,7 +72,15 @@ function findRouterFilesRecursive(
70
72
  for (const entry of entries) {
71
73
  const fullPath = join(dir, entry.name);
72
74
  if (entry.isDirectory()) {
73
- if (entry.name === "node_modules" || entry.name.startsWith(".")) continue;
75
+ if (
76
+ entry.name === "node_modules" ||
77
+ entry.name === "dist" ||
78
+ entry.name === "coverage" ||
79
+ entry.name === "__tests__" ||
80
+ entry.name === "__mocks__" ||
81
+ entry.name.startsWith(".")
82
+ )
83
+ continue;
74
84
  childDirs.push(fullPath);
75
85
  continue;
76
86
  }
@@ -214,11 +214,21 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
214
214
  bgStopCapture = c.stop;
215
215
  }
216
216
 
217
- // Stamp tainted args and RequestContext so request-scoped
218
- // reads (cookies, headers) and side effects (ctx.set, etc.)
219
- // throw inside background revalidation, same as the miss path.
220
- // Uses ref-counted stamp/unstamp so overlapping executions
221
- // sharing the same ctx don't clear each other's guards.
217
+ // Stamp tainted ARGS only — not requestCtx. The args stamp guards
218
+ // direct ctx method calls (ctx.set, ctx.header, ctx.onResponse, etc.)
219
+ // which is sufficient for correctness.
220
+ //
221
+ // We intentionally skip stamping requestCtx here because:
222
+ // 1. runBackground starts the async task synchronously (before the
223
+ // first await), so stampCacheExec would pollute the shared
224
+ // requestCtx while the foreground pipeline is still running.
225
+ // This causes assertNotInsideCacheExec to fire when cache-store
226
+ // later calls requestCtx.onResponse().
227
+ // 2. requestCtx methods are closure-bound to the original ctx, so
228
+ // neither Object.create() nor a proxy can isolate the stamp.
229
+ // 3. The foreground miss path already stamps requestCtx and catches
230
+ // cookies()/headers() misuse on first execution. The background
231
+ // re-runs the same function with the same request.
222
232
  const bgTaintedArgs: unknown[] = [];
223
233
  for (const arg of args) {
224
234
  if (isTainted(arg)) {
@@ -226,9 +236,6 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
226
236
  bgTaintedArgs.push(arg);
227
237
  }
228
238
  }
229
- if (requestCtx) {
230
- stampCacheExec(requestCtx as object);
231
- }
232
239
 
233
240
  try {
234
241
  const freshResult = await fn.apply(this, args);
@@ -249,9 +256,6 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
249
256
  for (const arg of bgTaintedArgs) {
250
257
  unstampCacheExec(arg as object);
251
258
  }
252
- if (requestCtx) {
253
- unstampCacheExec(requestCtx as object);
254
- }
255
259
  // Restore original handle store
256
260
  if (originalHandleStore && requestCtx) {
257
261
  requestCtx._handleStore = originalHandleStore;
@@ -73,7 +73,7 @@ function getDefaultRouteCacheKey(
73
73
  isIntercept?: boolean,
74
74
  ): string {
75
75
  const ctx = getRequestContext();
76
- const isPartial = ctx?.url.searchParams.has("_rsc_partial") ?? false;
76
+ const isPartial = ctx?.originalUrl?.searchParams.has("_rsc_partial") ?? false;
77
77
  const searchParams = ctx?.url.searchParams;
78
78
  const host = ctx?.url.host ?? "localhost";
79
79
 
@@ -326,24 +326,61 @@ export class CacheScope {
326
326
  const key = await this.resolveKey(pathname, params, isIntercept);
327
327
 
328
328
  // Check if this is a partial request (navigation) vs document request
329
- const isPartial = requestCtx.url.searchParams.has("_rsc_partial");
329
+ const isPartial = requestCtx.originalUrl.searchParams.has("_rsc_partial");
330
+
331
+ if (INTERNAL_RANGO_DEBUG) {
332
+ debugCacheLog(
333
+ `[CacheScope] cacheRoute: scheduling waitUntil for ${key} (${nonLoaderSegments.length} segments, isPartial=${isPartial})`,
334
+ );
335
+ }
330
336
 
331
337
  requestCtx.waitUntil(async () => {
338
+ if (INTERNAL_RANGO_DEBUG) {
339
+ debugCacheLog(
340
+ `[CacheScope] waitUntil: awaiting handleStore.settled for ${key}`,
341
+ );
342
+ }
343
+
332
344
  await handleStore.settled;
333
345
 
334
- // For document requests: only cache if ALL segments have components (complete render)
335
- // For partial requests: null components are expected (client already has them)
346
+ if (INTERNAL_RANGO_DEBUG) {
347
+ debugCacheLog(`[CacheScope] waitUntil: handleStore settled for ${key}`);
348
+ }
349
+
350
+ // For document requests: only cache if layout segments have components
351
+ // (complete render). Parallel and route segments may legitimately have
352
+ // null components — UI-less @meta parallels return null, and void route
353
+ // handlers produce null when the UI lives in parallel slots/layouts.
354
+ // Partial requests always allow null components (client already has them).
336
355
  if (!isPartial) {
337
- const hasAllComponents = nonLoaderSegments.every(
338
- (s) => s.component !== null,
356
+ const hasIncompleteLayouts = nonLoaderSegments.some(
357
+ (s) => s.component === null && s.type === "layout",
339
358
  );
340
- if (!hasAllComponents) return;
359
+ if (hasIncompleteLayouts) {
360
+ const nullSegments = nonLoaderSegments
361
+ .filter((s) => s.component === null && s.type === "layout")
362
+ .map((s) => s.id);
363
+ const error = new Error(
364
+ `[CacheScope] Cache write skipped: layout segments have null components ` +
365
+ `(${nullSegments.join(", ")}). This indicates an incomplete render — ` +
366
+ `layout handlers must return JSX for document requests to be cacheable.`,
367
+ );
368
+ error.name = "CacheScopeInvariantError";
369
+ console.error(error.message);
370
+ return;
371
+ }
341
372
  }
342
373
 
343
374
  // Collect handle data for non-loader segments only
344
375
  const handles = captureHandles(nonLoaderSegments, handleStore);
345
376
 
346
377
  try {
378
+ if (INTERNAL_RANGO_DEBUG) {
379
+ debugCacheLog(
380
+ `[CacheScope] waitUntil: serializing ${nonLoaderSegments.length} segments for ${key}`,
381
+ );
382
+ }
383
+
347
384
  // Serialize non-loader segments only
348
385
  const serializedSegments = await serializeSegments(nonLoaderSegments);
349
386
 
@@ -353,6 +390,10 @@ export class CacheScope {
353
390
  expiresAt: Date.now() + ttl * 1000,
354
391
  };
355
392
 
393
+ if (INTERNAL_RANGO_DEBUG) {
394
+ debugCacheLog(`[CacheScope] waitUntil: calling store.set for ${key}`);
395
+ }
396
+
356
397
  await store.set(key, data, ttl, swr);
357
398
 
358
399
  if (INTERNAL_RANGO_DEBUG) {