@rangojs/router 0.0.0-experimental.ae6e7825 → 0.0.0-experimental.bf2846be

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 (908) hide show
  1. package/README.md +76 -18
  2. package/dist/bin/rango.js +130 -47
  3. package/dist/vite/index.js +688 -433
  4. package/package.json +1 -1
  5. package/skills/links/SKILL.md +3 -1
  6. package/skills/middleware/SKILL.md +2 -0
  7. package/skills/prerender/SKILL.md +110 -68
  8. package/skills/router-setup/SKILL.md +35 -0
  9. package/src/__internal.ts +1 -1
  10. package/src/browser/app-version.ts +14 -0
  11. package/src/browser/navigation-bridge.ts +16 -3
  12. package/src/browser/navigation-client.ts +98 -69
  13. package/src/browser/navigation-store.ts +43 -8
  14. package/src/browser/partial-update.ts +32 -5
  15. package/src/browser/prefetch/cache.ts +16 -6
  16. package/src/browser/prefetch/fetch.ts +35 -6
  17. package/src/browser/react/Link.tsx +67 -8
  18. package/src/browser/react/NavigationProvider.tsx +8 -1
  19. package/src/browser/react/context.ts +7 -2
  20. package/src/browser/react/use-handle.ts +9 -58
  21. package/src/browser/react/use-router.ts +21 -8
  22. package/src/browser/rsc-router.tsx +28 -22
  23. package/src/browser/scroll-restoration.ts +10 -8
  24. package/src/browser/segment-reconciler.ts +26 -0
  25. package/src/browser/server-action-bridge.ts +8 -18
  26. package/src/browser/types.ts +21 -15
  27. package/src/build/generate-manifest.ts +6 -6
  28. package/src/build/generate-route-types.ts +3 -0
  29. package/src/build/route-types/include-resolution.ts +8 -1
  30. package/src/build/route-types/router-processing.ts +211 -72
  31. package/src/build/route-types/scan-filter.ts +8 -1
  32. package/src/client.tsx +2 -56
  33. package/src/deps/browser.ts +0 -1
  34. package/src/handle.ts +40 -0
  35. package/src/index.rsc.ts +3 -1
  36. package/src/index.ts +12 -0
  37. package/src/prerender/store.ts +5 -4
  38. package/src/prerender.ts +138 -77
  39. package/src/reverse.ts +22 -1
  40. package/src/route-definition/dsl-helpers.ts +42 -19
  41. package/src/route-definition/helpers-types.ts +4 -1
  42. package/src/route-definition/index.ts +3 -0
  43. package/src/route-definition/redirect.ts +9 -1
  44. package/src/route-definition/resolve-handler-use.ts +149 -0
  45. package/src/route-types.ts +11 -0
  46. package/src/router/content-negotiation.ts +100 -1
  47. package/src/router/handler-context.ts +48 -15
  48. package/src/router/intercept-resolution.ts +9 -4
  49. package/src/router/loader-resolution.ts +150 -21
  50. package/src/router/match-api.ts +124 -189
  51. package/src/router/match-middleware/cache-lookup.ts +26 -7
  52. package/src/router/match-middleware/segment-resolution.ts +53 -0
  53. package/src/router/match-result.ts +82 -4
  54. package/src/router/middleware-types.ts +0 -6
  55. package/src/router/middleware.ts +0 -3
  56. package/src/router/navigation-snapshot.ts +182 -0
  57. package/src/router/prerender-match.ts +110 -10
  58. package/src/router/preview-match.ts +30 -102
  59. package/src/router/request-classification.ts +310 -0
  60. package/src/router/route-snapshot.ts +245 -0
  61. package/src/router/router-interfaces.ts +36 -4
  62. package/src/router/router-options.ts +37 -11
  63. package/src/router/segment-resolution/fresh.ts +70 -5
  64. package/src/router/segment-resolution/revalidation.ts +87 -9
  65. package/src/router.ts +53 -5
  66. package/src/rsc/handler.ts +472 -398
  67. package/src/rsc/loader-fetch.ts +18 -3
  68. package/src/rsc/manifest-init.ts +5 -1
  69. package/src/rsc/progressive-enhancement.ts +12 -3
  70. package/src/rsc/rsc-rendering.ts +8 -3
  71. package/src/rsc/server-action.ts +8 -2
  72. package/src/rsc/ssr-setup.ts +2 -2
  73. package/src/rsc/types.ts +6 -7
  74. package/src/server/context.ts +39 -2
  75. package/src/server/handle-store.ts +19 -0
  76. package/src/server/loader-registry.ts +9 -8
  77. package/src/server/request-context.ts +131 -16
  78. package/src/ssr/index.tsx +4 -13
  79. package/src/static-handler.ts +18 -6
  80. package/src/types/cache-types.ts +4 -4
  81. package/src/types/handler-context.ts +17 -11
  82. package/src/types/loader-types.ts +32 -5
  83. package/src/types/route-entry.ts +1 -1
  84. package/src/types/segments.ts +1 -0
  85. package/src/urls/path-helper-types.ts +9 -2
  86. package/src/urls/path-helper.ts +47 -12
  87. package/src/urls/pattern-types.ts +12 -0
  88. package/src/urls/response-types.ts +16 -6
  89. package/src/use-loader.tsx +77 -5
  90. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  91. package/src/vite/discovery/discover-routers.ts +5 -1
  92. package/src/vite/discovery/prerender-collection.ts +128 -74
  93. package/src/vite/discovery/state.ts +13 -4
  94. package/src/vite/index.ts +4 -0
  95. package/src/vite/plugin-types.ts +60 -5
  96. package/src/vite/plugins/expose-id-utils.ts +12 -0
  97. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  98. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  99. package/src/vite/plugins/performance-tracks.ts +57 -280
  100. package/src/vite/plugins/refresh-cmd.ts +88 -26
  101. package/src/vite/rango.ts +17 -11
  102. package/src/vite/router-discovery.ts +178 -37
  103. package/src/vite/utils/prerender-utils.ts +18 -0
  104. package/src/vite/utils/shared-utils.ts +3 -2
  105. package/dist/__internal.d.ts +0 -83
  106. package/dist/__internal.d.ts.map +0 -1
  107. package/dist/__internal.js +0 -19
  108. package/dist/__internal.js.map +0 -1
  109. package/dist/__mocks__/version.d.ts +0 -7
  110. package/dist/__mocks__/version.d.ts.map +0 -1
  111. package/dist/__mocks__/version.js +0 -7
  112. package/dist/__mocks__/version.js.map +0 -1
  113. package/dist/__tests__/client-href.test.d.ts +0 -2
  114. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  115. package/dist/__tests__/client-href.test.js +0 -74
  116. package/dist/__tests__/client-href.test.js.map +0 -1
  117. package/dist/__tests__/component-utils.test.d.ts +0 -2
  118. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  119. package/dist/__tests__/component-utils.test.js +0 -51
  120. package/dist/__tests__/component-utils.test.js.map +0 -1
  121. package/dist/__tests__/event-controller.test.d.ts +0 -2
  122. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  123. package/dist/__tests__/event-controller.test.js +0 -538
  124. package/dist/__tests__/event-controller.test.js.map +0 -1
  125. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  126. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  127. package/dist/__tests__/helpers/route-tree.js +0 -374
  128. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  129. package/dist/__tests__/match-result.test.d.ts +0 -2
  130. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  131. package/dist/__tests__/match-result.test.js +0 -154
  132. package/dist/__tests__/match-result.test.js.map +0 -1
  133. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  134. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  135. package/dist/__tests__/navigation-store.test.js +0 -440
  136. package/dist/__tests__/navigation-store.test.js.map +0 -1
  137. package/dist/__tests__/partial-update.test.d.ts +0 -2
  138. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  139. package/dist/__tests__/partial-update.test.js +0 -1009
  140. package/dist/__tests__/partial-update.test.js.map +0 -1
  141. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  142. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  143. package/dist/__tests__/reverse-types.test.js +0 -656
  144. package/dist/__tests__/reverse-types.test.js.map +0 -1
  145. package/dist/__tests__/route-definition.test.d.ts +0 -2
  146. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  147. package/dist/__tests__/route-definition.test.js +0 -55
  148. package/dist/__tests__/route-definition.test.js.map +0 -1
  149. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  150. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  151. package/dist/__tests__/router-helpers.test.js +0 -377
  152. package/dist/__tests__/router-helpers.test.js.map +0 -1
  153. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  154. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  155. package/dist/__tests__/router-integration-2.test.js +0 -426
  156. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  157. package/dist/__tests__/router-integration.test.d.ts +0 -2
  158. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  159. package/dist/__tests__/router-integration.test.js +0 -1051
  160. package/dist/__tests__/router-integration.test.js.map +0 -1
  161. package/dist/__tests__/search-params.test.d.ts +0 -5
  162. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  163. package/dist/__tests__/search-params.test.js +0 -306
  164. package/dist/__tests__/search-params.test.js.map +0 -1
  165. package/dist/__tests__/segment-system.test.d.ts +0 -2
  166. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  167. package/dist/__tests__/segment-system.test.js +0 -627
  168. package/dist/__tests__/segment-system.test.js.map +0 -1
  169. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  170. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  171. package/dist/__tests__/static-handler-types.test.js +0 -63
  172. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  173. package/dist/__tests__/urls.test.d.ts +0 -2
  174. package/dist/__tests__/urls.test.d.ts.map +0 -1
  175. package/dist/__tests__/urls.test.js +0 -421
  176. package/dist/__tests__/urls.test.js.map +0 -1
  177. package/dist/__tests__/use-mount.test.d.ts +0 -2
  178. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  179. package/dist/__tests__/use-mount.test.js +0 -35
  180. package/dist/__tests__/use-mount.test.js.map +0 -1
  181. package/dist/bin/rango.d.ts +0 -2
  182. package/dist/bin/rango.d.ts.map +0 -1
  183. package/dist/bin/rango.js.map +0 -1
  184. package/dist/browser/event-controller.d.ts +0 -191
  185. package/dist/browser/event-controller.d.ts.map +0 -1
  186. package/dist/browser/event-controller.js +0 -559
  187. package/dist/browser/event-controller.js.map +0 -1
  188. package/dist/browser/index.d.ts +0 -2
  189. package/dist/browser/index.d.ts.map +0 -1
  190. package/dist/browser/index.js +0 -14
  191. package/dist/browser/index.js.map +0 -1
  192. package/dist/browser/link-interceptor.d.ts +0 -38
  193. package/dist/browser/link-interceptor.d.ts.map +0 -1
  194. package/dist/browser/link-interceptor.js +0 -99
  195. package/dist/browser/link-interceptor.js.map +0 -1
  196. package/dist/browser/logging.d.ts +0 -10
  197. package/dist/browser/logging.d.ts.map +0 -1
  198. package/dist/browser/logging.js +0 -29
  199. package/dist/browser/logging.js.map +0 -1
  200. package/dist/browser/lru-cache.d.ts +0 -17
  201. package/dist/browser/lru-cache.d.ts.map +0 -1
  202. package/dist/browser/lru-cache.js +0 -50
  203. package/dist/browser/lru-cache.js.map +0 -1
  204. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  205. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  206. package/dist/browser/merge-segment-loaders.js +0 -102
  207. package/dist/browser/merge-segment-loaders.js.map +0 -1
  208. package/dist/browser/navigation-bridge.d.ts +0 -102
  209. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  210. package/dist/browser/navigation-bridge.js +0 -708
  211. package/dist/browser/navigation-bridge.js.map +0 -1
  212. package/dist/browser/navigation-client.d.ts +0 -25
  213. package/dist/browser/navigation-client.d.ts.map +0 -1
  214. package/dist/browser/navigation-client.js +0 -157
  215. package/dist/browser/navigation-client.js.map +0 -1
  216. package/dist/browser/navigation-store.d.ts +0 -101
  217. package/dist/browser/navigation-store.d.ts.map +0 -1
  218. package/dist/browser/navigation-store.js +0 -625
  219. package/dist/browser/navigation-store.js.map +0 -1
  220. package/dist/browser/partial-update.d.ts +0 -75
  221. package/dist/browser/partial-update.d.ts.map +0 -1
  222. package/dist/browser/partial-update.js +0 -426
  223. package/dist/browser/partial-update.js.map +0 -1
  224. package/dist/browser/react/Link.d.ts +0 -86
  225. package/dist/browser/react/Link.d.ts.map +0 -1
  226. package/dist/browser/react/Link.js +0 -128
  227. package/dist/browser/react/Link.js.map +0 -1
  228. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  229. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  230. package/dist/browser/react/NavigationProvider.js +0 -216
  231. package/dist/browser/react/NavigationProvider.js.map +0 -1
  232. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  233. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  234. package/dist/browser/react/ScrollRestoration.js +0 -57
  235. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  236. package/dist/browser/react/context.d.ts +0 -46
  237. package/dist/browser/react/context.d.ts.map +0 -1
  238. package/dist/browser/react/context.js +0 -10
  239. package/dist/browser/react/context.js.map +0 -1
  240. package/dist/browser/react/index.d.ts +0 -11
  241. package/dist/browser/react/index.d.ts.map +0 -1
  242. package/dist/browser/react/index.js +0 -22
  243. package/dist/browser/react/index.js.map +0 -1
  244. package/dist/browser/react/location-state-shared.d.ts +0 -63
  245. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  246. package/dist/browser/react/location-state-shared.js +0 -81
  247. package/dist/browser/react/location-state-shared.js.map +0 -1
  248. package/dist/browser/react/location-state.d.ts +0 -23
  249. package/dist/browser/react/location-state.d.ts.map +0 -1
  250. package/dist/browser/react/location-state.js +0 -29
  251. package/dist/browser/react/location-state.js.map +0 -1
  252. package/dist/browser/react/mount-context.d.ts +0 -24
  253. package/dist/browser/react/mount-context.d.ts.map +0 -1
  254. package/dist/browser/react/mount-context.js +0 -24
  255. package/dist/browser/react/mount-context.js.map +0 -1
  256. package/dist/browser/react/use-action.d.ts +0 -64
  257. package/dist/browser/react/use-action.d.ts.map +0 -1
  258. package/dist/browser/react/use-action.js +0 -134
  259. package/dist/browser/react/use-action.js.map +0 -1
  260. package/dist/browser/react/use-client-cache.d.ts +0 -41
  261. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  262. package/dist/browser/react/use-client-cache.js +0 -39
  263. package/dist/browser/react/use-client-cache.js.map +0 -1
  264. package/dist/browser/react/use-handle.d.ts +0 -31
  265. package/dist/browser/react/use-handle.d.ts.map +0 -1
  266. package/dist/browser/react/use-handle.js +0 -144
  267. package/dist/browser/react/use-handle.js.map +0 -1
  268. package/dist/browser/react/use-href.d.ts +0 -33
  269. package/dist/browser/react/use-href.d.ts.map +0 -1
  270. package/dist/browser/react/use-href.js +0 -39
  271. package/dist/browser/react/use-href.js.map +0 -1
  272. package/dist/browser/react/use-link-status.d.ts +0 -37
  273. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  274. package/dist/browser/react/use-link-status.js +0 -99
  275. package/dist/browser/react/use-link-status.js.map +0 -1
  276. package/dist/browser/react/use-mount.d.ts +0 -25
  277. package/dist/browser/react/use-mount.d.ts.map +0 -1
  278. package/dist/browser/react/use-mount.js +0 -30
  279. package/dist/browser/react/use-mount.js.map +0 -1
  280. package/dist/browser/react/use-navigation.d.ts +0 -27
  281. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  282. package/dist/browser/react/use-navigation.js +0 -87
  283. package/dist/browser/react/use-navigation.js.map +0 -1
  284. package/dist/browser/react/use-segments.d.ts +0 -38
  285. package/dist/browser/react/use-segments.d.ts.map +0 -1
  286. package/dist/browser/react/use-segments.js +0 -130
  287. package/dist/browser/react/use-segments.js.map +0 -1
  288. package/dist/browser/request-controller.d.ts +0 -26
  289. package/dist/browser/request-controller.d.ts.map +0 -1
  290. package/dist/browser/request-controller.js +0 -147
  291. package/dist/browser/request-controller.js.map +0 -1
  292. package/dist/browser/rsc-router.d.ts +0 -129
  293. package/dist/browser/rsc-router.d.ts.map +0 -1
  294. package/dist/browser/rsc-router.js +0 -195
  295. package/dist/browser/rsc-router.js.map +0 -1
  296. package/dist/browser/scroll-restoration.d.ts +0 -93
  297. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  298. package/dist/browser/scroll-restoration.js +0 -321
  299. package/dist/browser/scroll-restoration.js.map +0 -1
  300. package/dist/browser/segment-structure-assert.d.ts +0 -17
  301. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  302. package/dist/browser/segment-structure-assert.js +0 -59
  303. package/dist/browser/segment-structure-assert.js.map +0 -1
  304. package/dist/browser/server-action-bridge.d.ts +0 -26
  305. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  306. package/dist/browser/server-action-bridge.js +0 -668
  307. package/dist/browser/server-action-bridge.js.map +0 -1
  308. package/dist/browser/shallow.d.ts +0 -12
  309. package/dist/browser/shallow.d.ts.map +0 -1
  310. package/dist/browser/shallow.js +0 -34
  311. package/dist/browser/shallow.js.map +0 -1
  312. package/dist/browser/types.d.ts +0 -369
  313. package/dist/browser/types.d.ts.map +0 -1
  314. package/dist/browser/types.js +0 -2
  315. package/dist/browser/types.js.map +0 -1
  316. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  317. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  318. package/dist/build/__tests__/generate-cli.test.js +0 -237
  319. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  320. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  321. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  322. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  323. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  324. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  325. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  326. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  327. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  328. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  329. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  330. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  331. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  332. package/dist/build/generate-manifest.d.ts +0 -81
  333. package/dist/build/generate-manifest.d.ts.map +0 -1
  334. package/dist/build/generate-manifest.js +0 -276
  335. package/dist/build/generate-manifest.js.map +0 -1
  336. package/dist/build/generate-route-types.d.ts +0 -115
  337. package/dist/build/generate-route-types.d.ts.map +0 -1
  338. package/dist/build/generate-route-types.js +0 -740
  339. package/dist/build/generate-route-types.js.map +0 -1
  340. package/dist/build/index.d.ts +0 -21
  341. package/dist/build/index.d.ts.map +0 -1
  342. package/dist/build/index.js +0 -21
  343. package/dist/build/index.js.map +0 -1
  344. package/dist/build/route-trie.d.ts +0 -71
  345. package/dist/build/route-trie.d.ts.map +0 -1
  346. package/dist/build/route-trie.js +0 -175
  347. package/dist/build/route-trie.js.map +0 -1
  348. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  349. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  350. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  351. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  352. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  353. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  354. package/dist/cache/__tests__/document-cache.test.js +0 -345
  355. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  356. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  357. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  358. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  359. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  360. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  361. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  362. package/dist/cache/__tests__/memory-store.test.js +0 -367
  363. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  364. package/dist/cache/cache-scope.d.ts +0 -102
  365. package/dist/cache/cache-scope.d.ts.map +0 -1
  366. package/dist/cache/cache-scope.js +0 -440
  367. package/dist/cache/cache-scope.js.map +0 -1
  368. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  369. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  370. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  371. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  372. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  373. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  374. package/dist/cache/cf/cf-cache-store.js +0 -242
  375. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  376. package/dist/cache/cf/index.d.ts +0 -14
  377. package/dist/cache/cf/index.d.ts.map +0 -1
  378. package/dist/cache/cf/index.js +0 -17
  379. package/dist/cache/cf/index.js.map +0 -1
  380. package/dist/cache/document-cache.d.ts +0 -64
  381. package/dist/cache/document-cache.d.ts.map +0 -1
  382. package/dist/cache/document-cache.js +0 -228
  383. package/dist/cache/document-cache.js.map +0 -1
  384. package/dist/cache/index.d.ts +0 -19
  385. package/dist/cache/index.d.ts.map +0 -1
  386. package/dist/cache/index.js +0 -21
  387. package/dist/cache/index.js.map +0 -1
  388. package/dist/cache/memory-segment-store.d.ts +0 -110
  389. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  390. package/dist/cache/memory-segment-store.js +0 -117
  391. package/dist/cache/memory-segment-store.js.map +0 -1
  392. package/dist/cache/memory-store.d.ts +0 -41
  393. package/dist/cache/memory-store.d.ts.map +0 -1
  394. package/dist/cache/memory-store.js +0 -191
  395. package/dist/cache/memory-store.js.map +0 -1
  396. package/dist/cache/types.d.ts +0 -317
  397. package/dist/cache/types.d.ts.map +0 -1
  398. package/dist/cache/types.js +0 -12
  399. package/dist/cache/types.js.map +0 -1
  400. package/dist/client.d.ts +0 -248
  401. package/dist/client.d.ts.map +0 -1
  402. package/dist/client.js +0 -367
  403. package/dist/client.js.map +0 -1
  404. package/dist/client.rsc.d.ts +0 -26
  405. package/dist/client.rsc.d.ts.map +0 -1
  406. package/dist/client.rsc.js +0 -46
  407. package/dist/client.rsc.js.map +0 -1
  408. package/dist/component-utils.d.ts +0 -36
  409. package/dist/component-utils.d.ts.map +0 -1
  410. package/dist/component-utils.js +0 -61
  411. package/dist/component-utils.js.map +0 -1
  412. package/dist/components/DefaultDocument.d.ts +0 -13
  413. package/dist/components/DefaultDocument.d.ts.map +0 -1
  414. package/dist/components/DefaultDocument.js +0 -15
  415. package/dist/components/DefaultDocument.js.map +0 -1
  416. package/dist/debug.d.ts +0 -58
  417. package/dist/debug.d.ts.map +0 -1
  418. package/dist/debug.js +0 -157
  419. package/dist/debug.js.map +0 -1
  420. package/dist/default-error-boundary.d.ts +0 -11
  421. package/dist/default-error-boundary.d.ts.map +0 -1
  422. package/dist/default-error-boundary.js +0 -45
  423. package/dist/default-error-boundary.js.map +0 -1
  424. package/dist/deps/browser.d.ts +0 -2
  425. package/dist/deps/browser.d.ts.map +0 -1
  426. package/dist/deps/browser.js +0 -3
  427. package/dist/deps/browser.js.map +0 -1
  428. package/dist/deps/html-stream-client.d.ts +0 -2
  429. package/dist/deps/html-stream-client.d.ts.map +0 -1
  430. package/dist/deps/html-stream-client.js +0 -3
  431. package/dist/deps/html-stream-client.js.map +0 -1
  432. package/dist/deps/html-stream-server.d.ts +0 -2
  433. package/dist/deps/html-stream-server.d.ts.map +0 -1
  434. package/dist/deps/html-stream-server.js +0 -3
  435. package/dist/deps/html-stream-server.js.map +0 -1
  436. package/dist/deps/rsc.d.ts +0 -2
  437. package/dist/deps/rsc.d.ts.map +0 -1
  438. package/dist/deps/rsc.js +0 -4
  439. package/dist/deps/rsc.js.map +0 -1
  440. package/dist/deps/ssr.d.ts +0 -2
  441. package/dist/deps/ssr.d.ts.map +0 -1
  442. package/dist/deps/ssr.js +0 -3
  443. package/dist/deps/ssr.js.map +0 -1
  444. package/dist/errors.d.ts +0 -174
  445. package/dist/errors.d.ts.map +0 -1
  446. package/dist/errors.js +0 -241
  447. package/dist/errors.js.map +0 -1
  448. package/dist/handle.d.ts +0 -78
  449. package/dist/handle.d.ts.map +0 -1
  450. package/dist/handle.js +0 -82
  451. package/dist/handle.js.map +0 -1
  452. package/dist/handles/MetaTags.d.ts +0 -14
  453. package/dist/handles/MetaTags.d.ts.map +0 -1
  454. package/dist/handles/MetaTags.js +0 -136
  455. package/dist/handles/MetaTags.js.map +0 -1
  456. package/dist/handles/index.d.ts +0 -6
  457. package/dist/handles/index.d.ts.map +0 -1
  458. package/dist/handles/index.js +0 -6
  459. package/dist/handles/index.js.map +0 -1
  460. package/dist/handles/meta.d.ts +0 -39
  461. package/dist/handles/meta.d.ts.map +0 -1
  462. package/dist/handles/meta.js +0 -202
  463. package/dist/handles/meta.js.map +0 -1
  464. package/dist/host/__tests__/errors.test.d.ts +0 -2
  465. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  466. package/dist/host/__tests__/errors.test.js +0 -76
  467. package/dist/host/__tests__/errors.test.js.map +0 -1
  468. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  469. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  470. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  471. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  472. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  473. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  474. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  475. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  476. package/dist/host/__tests__/router.test.d.ts +0 -2
  477. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  478. package/dist/host/__tests__/router.test.js +0 -241
  479. package/dist/host/__tests__/router.test.js.map +0 -1
  480. package/dist/host/__tests__/testing.test.d.ts +0 -2
  481. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  482. package/dist/host/__tests__/testing.test.js +0 -64
  483. package/dist/host/__tests__/testing.test.js.map +0 -1
  484. package/dist/host/__tests__/utils.test.d.ts +0 -2
  485. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  486. package/dist/host/__tests__/utils.test.js +0 -29
  487. package/dist/host/__tests__/utils.test.js.map +0 -1
  488. package/dist/host/cookie-handler.d.ts +0 -34
  489. package/dist/host/cookie-handler.d.ts.map +0 -1
  490. package/dist/host/cookie-handler.js +0 -124
  491. package/dist/host/cookie-handler.js.map +0 -1
  492. package/dist/host/errors.d.ts +0 -56
  493. package/dist/host/errors.d.ts.map +0 -1
  494. package/dist/host/errors.js +0 -79
  495. package/dist/host/errors.js.map +0 -1
  496. package/dist/host/index.d.ts +0 -29
  497. package/dist/host/index.d.ts.map +0 -1
  498. package/dist/host/index.js +0 -32
  499. package/dist/host/index.js.map +0 -1
  500. package/dist/host/pattern-matcher.d.ts +0 -36
  501. package/dist/host/pattern-matcher.d.ts.map +0 -1
  502. package/dist/host/pattern-matcher.js +0 -172
  503. package/dist/host/pattern-matcher.js.map +0 -1
  504. package/dist/host/router.d.ts +0 -26
  505. package/dist/host/router.d.ts.map +0 -1
  506. package/dist/host/router.js +0 -218
  507. package/dist/host/router.js.map +0 -1
  508. package/dist/host/testing.d.ts +0 -36
  509. package/dist/host/testing.d.ts.map +0 -1
  510. package/dist/host/testing.js +0 -55
  511. package/dist/host/testing.js.map +0 -1
  512. package/dist/host/types.d.ts +0 -115
  513. package/dist/host/types.d.ts.map +0 -1
  514. package/dist/host/types.js +0 -7
  515. package/dist/host/types.js.map +0 -1
  516. package/dist/host/utils.d.ts +0 -21
  517. package/dist/host/utils.d.ts.map +0 -1
  518. package/dist/host/utils.js +0 -23
  519. package/dist/host/utils.js.map +0 -1
  520. package/dist/href-client.d.ts +0 -131
  521. package/dist/href-client.d.ts.map +0 -1
  522. package/dist/href-client.js +0 -64
  523. package/dist/href-client.js.map +0 -1
  524. package/dist/href-context.d.ts +0 -29
  525. package/dist/href-context.d.ts.map +0 -1
  526. package/dist/href-context.js +0 -21
  527. package/dist/href-context.js.map +0 -1
  528. package/dist/index.d.ts +0 -73
  529. package/dist/index.d.ts.map +0 -1
  530. package/dist/index.js +0 -91
  531. package/dist/index.js.map +0 -1
  532. package/dist/index.rsc.d.ts +0 -32
  533. package/dist/index.rsc.d.ts.map +0 -1
  534. package/dist/index.rsc.js +0 -40
  535. package/dist/index.rsc.js.map +0 -1
  536. package/dist/internal-debug.d.ts +0 -2
  537. package/dist/internal-debug.d.ts.map +0 -1
  538. package/dist/internal-debug.js +0 -5
  539. package/dist/internal-debug.js.map +0 -1
  540. package/dist/loader.d.ts +0 -14
  541. package/dist/loader.d.ts.map +0 -1
  542. package/dist/loader.js +0 -20
  543. package/dist/loader.js.map +0 -1
  544. package/dist/loader.rsc.d.ts +0 -19
  545. package/dist/loader.rsc.d.ts.map +0 -1
  546. package/dist/loader.rsc.js +0 -99
  547. package/dist/loader.rsc.js.map +0 -1
  548. package/dist/network-error-thrower.d.ts +0 -17
  549. package/dist/network-error-thrower.d.ts.map +0 -1
  550. package/dist/network-error-thrower.js +0 -14
  551. package/dist/network-error-thrower.js.map +0 -1
  552. package/dist/outlet-context.d.ts +0 -13
  553. package/dist/outlet-context.d.ts.map +0 -1
  554. package/dist/outlet-context.js +0 -3
  555. package/dist/outlet-context.js.map +0 -1
  556. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  557. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  558. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  559. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  560. package/dist/prerender/param-hash.d.ts +0 -16
  561. package/dist/prerender/param-hash.d.ts.map +0 -1
  562. package/dist/prerender/param-hash.js +0 -36
  563. package/dist/prerender/param-hash.js.map +0 -1
  564. package/dist/prerender/store.d.ts +0 -38
  565. package/dist/prerender/store.d.ts.map +0 -1
  566. package/dist/prerender/store.js +0 -61
  567. package/dist/prerender/store.js.map +0 -1
  568. package/dist/prerender.d.ts +0 -66
  569. package/dist/prerender.d.ts.map +0 -1
  570. package/dist/prerender.js +0 -57
  571. package/dist/prerender.js.map +0 -1
  572. package/dist/reverse.d.ts +0 -196
  573. package/dist/reverse.d.ts.map +0 -1
  574. package/dist/reverse.js +0 -78
  575. package/dist/reverse.js.map +0 -1
  576. package/dist/root-error-boundary.d.ts +0 -33
  577. package/dist/root-error-boundary.d.ts.map +0 -1
  578. package/dist/root-error-boundary.js +0 -165
  579. package/dist/root-error-boundary.js.map +0 -1
  580. package/dist/route-content-wrapper.d.ts +0 -46
  581. package/dist/route-content-wrapper.d.ts.map +0 -1
  582. package/dist/route-content-wrapper.js +0 -77
  583. package/dist/route-content-wrapper.js.map +0 -1
  584. package/dist/route-definition.d.ts +0 -421
  585. package/dist/route-definition.d.ts.map +0 -1
  586. package/dist/route-definition.js +0 -868
  587. package/dist/route-definition.js.map +0 -1
  588. package/dist/route-map-builder.d.ts +0 -155
  589. package/dist/route-map-builder.d.ts.map +0 -1
  590. package/dist/route-map-builder.js +0 -237
  591. package/dist/route-map-builder.js.map +0 -1
  592. package/dist/route-types.d.ts +0 -165
  593. package/dist/route-types.d.ts.map +0 -1
  594. package/dist/route-types.js +0 -7
  595. package/dist/route-types.js.map +0 -1
  596. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  597. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  598. package/dist/router/__tests__/handler-context.test.js +0 -65
  599. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  600. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  601. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  602. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  603. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  604. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  605. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  606. package/dist/router/__tests__/match-context.test.js +0 -92
  607. package/dist/router/__tests__/match-context.test.js.map +0 -1
  608. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  609. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  610. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  611. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  612. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  613. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  614. package/dist/router/__tests__/match-result.test.js +0 -457
  615. package/dist/router/__tests__/match-result.test.js.map +0 -1
  616. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  617. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  618. package/dist/router/__tests__/on-error.test.js +0 -678
  619. package/dist/router/__tests__/on-error.test.js.map +0 -1
  620. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  621. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  622. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  623. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  624. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  625. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  626. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  627. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  628. package/dist/router/error-handling.d.ts +0 -77
  629. package/dist/router/error-handling.d.ts.map +0 -1
  630. package/dist/router/error-handling.js +0 -202
  631. package/dist/router/error-handling.js.map +0 -1
  632. package/dist/router/handler-context.d.ts +0 -20
  633. package/dist/router/handler-context.d.ts.map +0 -1
  634. package/dist/router/handler-context.js +0 -198
  635. package/dist/router/handler-context.js.map +0 -1
  636. package/dist/router/intercept-resolution.d.ts +0 -66
  637. package/dist/router/intercept-resolution.d.ts.map +0 -1
  638. package/dist/router/intercept-resolution.js +0 -246
  639. package/dist/router/intercept-resolution.js.map +0 -1
  640. package/dist/router/loader-resolution.d.ts +0 -64
  641. package/dist/router/loader-resolution.d.ts.map +0 -1
  642. package/dist/router/loader-resolution.js +0 -284
  643. package/dist/router/loader-resolution.js.map +0 -1
  644. package/dist/router/logging.d.ts +0 -15
  645. package/dist/router/logging.d.ts.map +0 -1
  646. package/dist/router/logging.js +0 -99
  647. package/dist/router/logging.js.map +0 -1
  648. package/dist/router/manifest.d.ts +0 -22
  649. package/dist/router/manifest.d.ts.map +0 -1
  650. package/dist/router/manifest.js +0 -181
  651. package/dist/router/manifest.js.map +0 -1
  652. package/dist/router/match-api.d.ts +0 -35
  653. package/dist/router/match-api.d.ts.map +0 -1
  654. package/dist/router/match-api.js +0 -406
  655. package/dist/router/match-api.js.map +0 -1
  656. package/dist/router/match-context.d.ts +0 -206
  657. package/dist/router/match-context.d.ts.map +0 -1
  658. package/dist/router/match-context.js +0 -17
  659. package/dist/router/match-context.js.map +0 -1
  660. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  661. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  662. package/dist/router/match-middleware/background-revalidation.js +0 -75
  663. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  664. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  665. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  666. package/dist/router/match-middleware/cache-lookup.js +0 -257
  667. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  668. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  669. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  670. package/dist/router/match-middleware/cache-store.js +0 -108
  671. package/dist/router/match-middleware/cache-store.js.map +0 -1
  672. package/dist/router/match-middleware/index.d.ts +0 -81
  673. package/dist/router/match-middleware/index.d.ts.map +0 -1
  674. package/dist/router/match-middleware/index.js +0 -80
  675. package/dist/router/match-middleware/index.js.map +0 -1
  676. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  677. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  678. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  679. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  680. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  681. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  682. package/dist/router/match-middleware/segment-resolution.js +0 -53
  683. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  684. package/dist/router/match-pipelines.d.ts +0 -147
  685. package/dist/router/match-pipelines.d.ts.map +0 -1
  686. package/dist/router/match-pipelines.js +0 -82
  687. package/dist/router/match-pipelines.js.map +0 -1
  688. package/dist/router/match-result.d.ts +0 -126
  689. package/dist/router/match-result.d.ts.map +0 -1
  690. package/dist/router/match-result.js +0 -93
  691. package/dist/router/match-result.js.map +0 -1
  692. package/dist/router/metrics.d.ts +0 -20
  693. package/dist/router/metrics.d.ts.map +0 -1
  694. package/dist/router/metrics.js +0 -47
  695. package/dist/router/metrics.js.map +0 -1
  696. package/dist/router/middleware.d.ts +0 -249
  697. package/dist/router/middleware.d.ts.map +0 -1
  698. package/dist/router/middleware.js +0 -434
  699. package/dist/router/middleware.js.map +0 -1
  700. package/dist/router/middleware.test.d.ts +0 -2
  701. package/dist/router/middleware.test.d.ts.map +0 -1
  702. package/dist/router/middleware.test.js +0 -816
  703. package/dist/router/middleware.test.js.map +0 -1
  704. package/dist/router/pattern-matching.d.ts +0 -149
  705. package/dist/router/pattern-matching.d.ts.map +0 -1
  706. package/dist/router/pattern-matching.js +0 -349
  707. package/dist/router/pattern-matching.js.map +0 -1
  708. package/dist/router/revalidation.d.ts +0 -44
  709. package/dist/router/revalidation.d.ts.map +0 -1
  710. package/dist/router/revalidation.js +0 -147
  711. package/dist/router/revalidation.js.map +0 -1
  712. package/dist/router/router-context.d.ts +0 -135
  713. package/dist/router/router-context.d.ts.map +0 -1
  714. package/dist/router/router-context.js +0 -36
  715. package/dist/router/router-context.js.map +0 -1
  716. package/dist/router/segment-resolution.d.ts +0 -127
  717. package/dist/router/segment-resolution.d.ts.map +0 -1
  718. package/dist/router/segment-resolution.js +0 -919
  719. package/dist/router/segment-resolution.js.map +0 -1
  720. package/dist/router/trie-matching.d.ts +0 -40
  721. package/dist/router/trie-matching.d.ts.map +0 -1
  722. package/dist/router/trie-matching.js +0 -127
  723. package/dist/router/trie-matching.js.map +0 -1
  724. package/dist/router/types.d.ts +0 -136
  725. package/dist/router/types.d.ts.map +0 -1
  726. package/dist/router/types.js +0 -7
  727. package/dist/router/types.js.map +0 -1
  728. package/dist/router.d.ts +0 -753
  729. package/dist/router.d.ts.map +0 -1
  730. package/dist/router.gen.d.ts +0 -6
  731. package/dist/router.gen.d.ts.map +0 -1
  732. package/dist/router.gen.js +0 -6
  733. package/dist/router.gen.js.map +0 -1
  734. package/dist/router.js +0 -1304
  735. package/dist/router.js.map +0 -1
  736. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  737. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  738. package/dist/rsc/__tests__/helpers.test.js +0 -140
  739. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  740. package/dist/rsc/handler.d.ts +0 -45
  741. package/dist/rsc/handler.d.ts.map +0 -1
  742. package/dist/rsc/handler.js +0 -1172
  743. package/dist/rsc/handler.js.map +0 -1
  744. package/dist/rsc/helpers.d.ts +0 -16
  745. package/dist/rsc/helpers.d.ts.map +0 -1
  746. package/dist/rsc/helpers.js +0 -55
  747. package/dist/rsc/helpers.js.map +0 -1
  748. package/dist/rsc/index.d.ts +0 -22
  749. package/dist/rsc/index.d.ts.map +0 -1
  750. package/dist/rsc/index.js +0 -23
  751. package/dist/rsc/index.js.map +0 -1
  752. package/dist/rsc/nonce.d.ts +0 -9
  753. package/dist/rsc/nonce.d.ts.map +0 -1
  754. package/dist/rsc/nonce.js +0 -18
  755. package/dist/rsc/nonce.js.map +0 -1
  756. package/dist/rsc/types.d.ts +0 -206
  757. package/dist/rsc/types.d.ts.map +0 -1
  758. package/dist/rsc/types.js +0 -8
  759. package/dist/rsc/types.js.map +0 -1
  760. package/dist/search-params.d.ts +0 -103
  761. package/dist/search-params.d.ts.map +0 -1
  762. package/dist/search-params.js +0 -74
  763. package/dist/search-params.js.map +0 -1
  764. package/dist/segment-system.d.ts +0 -75
  765. package/dist/segment-system.d.ts.map +0 -1
  766. package/dist/segment-system.js +0 -336
  767. package/dist/segment-system.js.map +0 -1
  768. package/dist/server/context.d.ts +0 -245
  769. package/dist/server/context.d.ts.map +0 -1
  770. package/dist/server/context.js +0 -197
  771. package/dist/server/context.js.map +0 -1
  772. package/dist/server/fetchable-loader-store.d.ts +0 -18
  773. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  774. package/dist/server/fetchable-loader-store.js +0 -18
  775. package/dist/server/fetchable-loader-store.js.map +0 -1
  776. package/dist/server/handle-store.d.ts +0 -85
  777. package/dist/server/handle-store.d.ts.map +0 -1
  778. package/dist/server/handle-store.js +0 -142
  779. package/dist/server/handle-store.js.map +0 -1
  780. package/dist/server/loader-registry.d.ts +0 -55
  781. package/dist/server/loader-registry.d.ts.map +0 -1
  782. package/dist/server/loader-registry.js +0 -132
  783. package/dist/server/loader-registry.js.map +0 -1
  784. package/dist/server/request-context.d.ts +0 -226
  785. package/dist/server/request-context.d.ts.map +0 -1
  786. package/dist/server/request-context.js +0 -290
  787. package/dist/server/request-context.js.map +0 -1
  788. package/dist/server/root-layout.d.ts +0 -4
  789. package/dist/server/root-layout.d.ts.map +0 -1
  790. package/dist/server/root-layout.js +0 -5
  791. package/dist/server/root-layout.js.map +0 -1
  792. package/dist/server.d.ts +0 -15
  793. package/dist/server.d.ts.map +0 -1
  794. package/dist/server.js +0 -20
  795. package/dist/server.js.map +0 -1
  796. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  797. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  798. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  799. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  800. package/dist/ssr/index.d.ts +0 -98
  801. package/dist/ssr/index.d.ts.map +0 -1
  802. package/dist/ssr/index.js +0 -158
  803. package/dist/ssr/index.js.map +0 -1
  804. package/dist/static-handler.d.ts +0 -50
  805. package/dist/static-handler.d.ts.map +0 -1
  806. package/dist/static-handler.gen.d.ts +0 -5
  807. package/dist/static-handler.gen.d.ts.map +0 -1
  808. package/dist/static-handler.gen.js +0 -5
  809. package/dist/static-handler.gen.js.map +0 -1
  810. package/dist/static-handler.js +0 -29
  811. package/dist/static-handler.js.map +0 -1
  812. package/dist/theme/ThemeProvider.d.ts +0 -20
  813. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  814. package/dist/theme/ThemeProvider.js +0 -240
  815. package/dist/theme/ThemeProvider.js.map +0 -1
  816. package/dist/theme/ThemeScript.d.ts +0 -48
  817. package/dist/theme/ThemeScript.d.ts.map +0 -1
  818. package/dist/theme/ThemeScript.js +0 -13
  819. package/dist/theme/ThemeScript.js.map +0 -1
  820. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  821. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  822. package/dist/theme/__tests__/theme.test.js +0 -103
  823. package/dist/theme/__tests__/theme.test.js.map +0 -1
  824. package/dist/theme/constants.d.ts +0 -29
  825. package/dist/theme/constants.d.ts.map +0 -1
  826. package/dist/theme/constants.js +0 -48
  827. package/dist/theme/constants.js.map +0 -1
  828. package/dist/theme/index.d.ts +0 -31
  829. package/dist/theme/index.d.ts.map +0 -1
  830. package/dist/theme/index.js +0 -36
  831. package/dist/theme/index.js.map +0 -1
  832. package/dist/theme/theme-context.d.ts +0 -40
  833. package/dist/theme/theme-context.d.ts.map +0 -1
  834. package/dist/theme/theme-context.js +0 -60
  835. package/dist/theme/theme-context.js.map +0 -1
  836. package/dist/theme/theme-script.d.ts +0 -27
  837. package/dist/theme/theme-script.d.ts.map +0 -1
  838. package/dist/theme/theme-script.js +0 -147
  839. package/dist/theme/theme-script.js.map +0 -1
  840. package/dist/theme/types.d.ts +0 -163
  841. package/dist/theme/types.d.ts.map +0 -1
  842. package/dist/theme/types.js +0 -11
  843. package/dist/theme/types.js.map +0 -1
  844. package/dist/theme/use-theme.d.ts +0 -12
  845. package/dist/theme/use-theme.d.ts.map +0 -1
  846. package/dist/theme/use-theme.js +0 -40
  847. package/dist/theme/use-theme.js.map +0 -1
  848. package/dist/types.d.ts +0 -1479
  849. package/dist/types.d.ts.map +0 -1
  850. package/dist/types.js +0 -10
  851. package/dist/types.js.map +0 -1
  852. package/dist/urls.d.ts +0 -441
  853. package/dist/urls.d.ts.map +0 -1
  854. package/dist/urls.gen.d.ts +0 -8
  855. package/dist/urls.gen.d.ts.map +0 -1
  856. package/dist/urls.gen.js +0 -8
  857. package/dist/urls.gen.js.map +0 -1
  858. package/dist/urls.js +0 -443
  859. package/dist/urls.js.map +0 -1
  860. package/dist/use-loader.d.ts +0 -127
  861. package/dist/use-loader.d.ts.map +0 -1
  862. package/dist/use-loader.js +0 -237
  863. package/dist/use-loader.js.map +0 -1
  864. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  865. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  866. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  867. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  868. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  869. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  870. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  871. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  872. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  873. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  874. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  875. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  876. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  877. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  878. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  879. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  880. package/dist/vite/ast-handler-extract.d.ts +0 -49
  881. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  882. package/dist/vite/ast-handler-extract.js +0 -249
  883. package/dist/vite/ast-handler-extract.js.map +0 -1
  884. package/dist/vite/expose-action-id.d.ts +0 -19
  885. package/dist/vite/expose-action-id.d.ts.map +0 -1
  886. package/dist/vite/expose-action-id.js +0 -250
  887. package/dist/vite/expose-action-id.js.map +0 -1
  888. package/dist/vite/expose-id-utils.d.ts +0 -69
  889. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  890. package/dist/vite/expose-id-utils.js +0 -289
  891. package/dist/vite/expose-id-utils.js.map +0 -1
  892. package/dist/vite/expose-internal-ids.d.ts +0 -22
  893. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  894. package/dist/vite/expose-internal-ids.js +0 -886
  895. package/dist/vite/expose-internal-ids.js.map +0 -1
  896. package/dist/vite/index.d.ts +0 -149
  897. package/dist/vite/index.d.ts.map +0 -1
  898. package/dist/vite/index.js.map +0 -1
  899. package/dist/vite/index.named-routes.gen.ts +0 -103
  900. package/dist/vite/package-resolution.d.ts +0 -43
  901. package/dist/vite/package-resolution.d.ts.map +0 -1
  902. package/dist/vite/package-resolution.js +0 -112
  903. package/dist/vite/package-resolution.js.map +0 -1
  904. package/dist/vite/virtual-entries.d.ts +0 -25
  905. package/dist/vite/virtual-entries.d.ts.map +0 -1
  906. package/dist/vite/virtual-entries.js +0 -110
  907. package/dist/vite/virtual-entries.js.map +0 -1
  908. package/src/browser/debug-channel.ts +0 -112
@@ -257,3 +257,14 @@ export type LoaderUseItem = RevalidateItem | CacheItem;
257
257
  * runtime via .flat(3).
258
258
  */
259
259
  export type UseItems<T> = (T | readonly T[])[];
260
+
261
+ /**
262
+ * Union of all items that handler.use() may return.
263
+ * A handler doesn't know its mount site at definition time, so the type
264
+ * is intentionally broad — validation happens per-mount-site at runtime.
265
+ */
266
+ export type HandlerUseItem =
267
+ | RouteUseItem
268
+ | LayoutUseItem
269
+ | ParallelUseItem
270
+ | InterceptUseItem;
@@ -2,10 +2,18 @@
2
2
  * Content Negotiation Utilities
3
3
  *
4
4
  * Pure functions for HTTP Accept header parsing and response type matching.
5
- * Used by createRouter's previewMatch for content negotiation between
5
+ * Used by previewMatch and classifyRequest for content negotiation between
6
6
  * RSC routes and response routes (JSON, text, image, stream, etc.).
7
7
  */
8
8
 
9
+ import type { EntryData } from "../server/context.js";
10
+ import type { CollectedMiddleware } from "./middleware-types.js";
11
+ import { collectRouteMiddleware } from "./middleware.js";
12
+ import { loadManifest } from "./manifest.js";
13
+ import { traverseBack } from "./pattern-matching.js";
14
+ import type { RouteMatchResult } from "./pattern-matching.js";
15
+ import type { RouteSnapshot } from "./route-snapshot.js";
16
+
9
17
  // Response type -> MIME type used for Accept header matching
10
18
  export const RESPONSE_TYPE_MIME: Record<string, string> = {
11
19
  json: "application/json",
@@ -114,3 +122,94 @@ export function pickNegotiateVariant(
114
122
  // No match -- use first candidate as default
115
123
  return candidates[0]!;
116
124
  }
125
+
126
+ /**
127
+ * Result of content negotiation for a route with negotiate variants.
128
+ */
129
+ export interface NegotiationResult {
130
+ /** The winning response type */
131
+ responseType: string;
132
+ /** Handler function for the winning variant */
133
+ handler: Function;
134
+ /** Manifest entry for the winning variant (may differ from primary) */
135
+ manifestEntry: EntryData;
136
+ /** Route middleware for the winning variant */
137
+ routeMiddleware: CollectedMiddleware[];
138
+ /** Always true — negotiation occurred */
139
+ negotiated: true;
140
+ }
141
+
142
+ /**
143
+ * Perform content negotiation for a route with negotiate variants.
144
+ *
145
+ * Returns a NegotiationResult when a response route wins negotiation.
146
+ * Returns null when RSC wins or no negotiation is needed.
147
+ *
148
+ * Shared by previewMatch and classifyRequest to avoid duplicating
149
+ * the candidate-building and variant-loading logic.
150
+ */
151
+ export async function negotiateRoute(
152
+ request: Request,
153
+ pathname: string,
154
+ snapshot: RouteSnapshot,
155
+ ): Promise<NegotiationResult | null> {
156
+ const { matched, manifestEntry, routeMiddleware, responseType } = snapshot;
157
+ if (!matched.negotiateVariants || matched.negotiateVariants.length === 0) {
158
+ return null;
159
+ }
160
+
161
+ const acceptEntries = parseAcceptTypes(request.headers.get("accept") || "");
162
+
163
+ // Build candidate list preserving definition order.
164
+ const variants = matched.negotiateVariants;
165
+ let candidates: Array<{ routeKey: string; responseType: string }>;
166
+ if (responseType) {
167
+ candidates = [...variants, { routeKey: matched.routeKey, responseType }];
168
+ } else {
169
+ const rscCandidate = {
170
+ routeKey: matched.routeKey,
171
+ responseType: RSC_RESPONSE_TYPE,
172
+ };
173
+ candidates = matched.rscFirst
174
+ ? [rscCandidate, ...variants]
175
+ : [...variants, rscCandidate];
176
+ }
177
+
178
+ const variant = pickNegotiateVariant(acceptEntries, candidates);
179
+
180
+ // RSC won negotiation
181
+ if (variant.responseType === RSC_RESPONSE_TYPE) {
182
+ return null;
183
+ }
184
+
185
+ // Primary response-type won — use existing manifest entry and middleware
186
+ if (responseType && variant.routeKey === matched.routeKey) {
187
+ return {
188
+ responseType,
189
+ handler: manifestEntry.handler as Function,
190
+ manifestEntry,
191
+ routeMiddleware,
192
+ negotiated: true,
193
+ };
194
+ }
195
+
196
+ // Different variant won — load its manifest entry
197
+ const negotiateEntry = await loadManifest(
198
+ matched.entry,
199
+ variant.routeKey,
200
+ pathname,
201
+ undefined,
202
+ false,
203
+ );
204
+ const variantMiddleware = collectRouteMiddleware(
205
+ traverseBack(negotiateEntry),
206
+ matched.params,
207
+ );
208
+ return {
209
+ responseType: variant.responseType,
210
+ handler: negotiateEntry.handler as Function,
211
+ manifestEntry: negotiateEntry,
212
+ routeMiddleware: variantMiddleware,
213
+ negotiated: true,
214
+ };
215
+ }
@@ -114,9 +114,9 @@ function createPrerenderPassthroughFn(
114
114
  }
115
115
  if (!isPassthroughRoute) {
116
116
  throw new Error(
117
- "ctx.passthrough() is only available on routes declared with " +
118
- "{ passthrough: true }. Remove the passthrough() call or add " +
119
- "{ passthrough: true } to the Prerender options.",
117
+ "ctx.passthrough() is only available on routes wrapped with " +
118
+ "Passthrough(). Remove the passthrough() call or wrap the " +
119
+ "Prerender definition with Passthrough(prerenderDef, liveHandler).",
120
120
  );
121
121
  }
122
122
  return PRERENDER_PASSTHROUGH;
@@ -166,9 +166,24 @@ export function createReverseFunction(
166
166
  : hrefParams;
167
167
 
168
168
  // Substitute params (strip constraint and optional syntax: :param(a|b)? -> value)
169
+ // Optional params (:param?) are omitted when not provided
169
170
  if (effectiveParams) {
171
+ let hadOmittedOptional = false;
172
+ // First pass: optional params (trailing ?)
170
173
  result = result.replace(
171
- /:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?\??/g,
174
+ /:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?(\?)/g,
175
+ (_, key) => {
176
+ const value = effectiveParams[key];
177
+ if (value === undefined) {
178
+ hadOmittedOptional = true;
179
+ return "";
180
+ }
181
+ return encodeURIComponent(value);
182
+ },
183
+ );
184
+ // Second pass: required params (no trailing ?)
185
+ result = result.replace(
186
+ /:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?(?!\?)/g,
172
187
  (_, key) => {
173
188
  const value = effectiveParams[key];
174
189
  if (value === undefined) {
@@ -177,6 +192,13 @@ export function createReverseFunction(
177
192
  return encodeURIComponent(value);
178
193
  },
179
194
  );
195
+ // Clean up slashes only when an optional param was actually omitted,
196
+ // so intentional trailing-slash patterns like "/blog/" are preserved.
197
+ if (hadOmittedOptional) {
198
+ const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
199
+ result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
200
+ if (hadTrailingSlash && !result.endsWith("/")) result += "/";
201
+ }
180
202
  }
181
203
 
182
204
  // Append search params as query string
@@ -207,7 +229,7 @@ export function createHandlerContext<TEnv>(
207
229
  // Get variables from request context - this is the unified context
208
230
  // shared between middleware and route handlers
209
231
  const requestContext = _getRequestContext();
210
- const variables: any = requestContext?.var ?? {};
232
+ const variables: any = requestContext?._variables ?? {};
211
233
 
212
234
  // If route has a search schema, parse URLSearchParams into typed object
213
235
  const searchSchema = routeName ? getSearchSchema(routeName) : undefined;
@@ -250,6 +272,7 @@ export function createHandlerContext<TEnv>(
250
272
  ctx = {
251
273
  params,
252
274
  build: false,
275
+ dev: false,
253
276
  request,
254
277
  searchParams,
255
278
  search: searchSchema ? resolvedSearchParams : {},
@@ -257,7 +280,7 @@ export function createHandlerContext<TEnv>(
257
280
  url,
258
281
  originalUrl: new URL(request.url),
259
282
  env: bindings,
260
- var: variables,
283
+ _variables: variables,
261
284
  get: ((keyOrVar: any) => {
262
285
  // Read-time guard: non-cacheable var inside cache() → throw.
263
286
  // Works for both ContextVar tokens and string keys.
@@ -320,7 +343,7 @@ export function createHandlerContext<TEnv>(
320
343
  *
321
344
  * Returns an InternalHandlerContext where params, pathname, url, searchParams,
322
345
  * search, reverse, and use(handle) work. Request-time properties
323
- * (request, env, headers, cookies, var, get, set, res) throw with a clear error.
346
+ * (request, env, headers, cookies, get, set, res) throw with a clear error.
324
347
  */
325
348
  export function createPrerenderContext<TEnv>(
326
349
  params: Record<string, string>,
@@ -329,6 +352,8 @@ export function createPrerenderContext<TEnv>(
329
352
  routeName?: string,
330
353
  buildVars?: Record<string, any>,
331
354
  isPassthroughRoute?: boolean,
355
+ buildEnv?: TEnv,
356
+ devMode?: boolean,
332
357
  ): InternalHandlerContext<any, TEnv> {
333
358
  const syntheticUrl = new URL(`http://prerender${pathname}`);
334
359
  const variables = buildVars ?? {};
@@ -343,6 +368,7 @@ export function createPrerenderContext<TEnv>(
343
368
  return {
344
369
  params,
345
370
  build: true,
371
+ dev: devMode ?? false,
346
372
  get request(): Request {
347
373
  return throwUnavailable("request");
348
374
  },
@@ -352,11 +378,13 @@ export function createPrerenderContext<TEnv>(
352
378
  url: syntheticUrl,
353
379
  originalUrl: syntheticUrl,
354
380
  get env(): TEnv {
355
- return throwUnavailable("env");
356
- },
357
- get var(): any {
358
- return throwUnavailable("var");
381
+ if (buildEnv !== undefined) return buildEnv;
382
+ throw new Error(
383
+ "ctx.env is not available during pre-rendering. " +
384
+ "Configure buildEnv in your rango() plugin options to enable build-time env access.",
385
+ );
359
386
  },
387
+ _variables: variables,
360
388
  get: ((keyOrVar: any) => contextGet(variables, keyOrVar)) as any,
361
389
  set: ((keyOrVar: any, value: any) => {
362
390
  contextSet(variables, keyOrVar, value);
@@ -402,6 +430,8 @@ export function createPrerenderContext<TEnv>(
402
430
  export function createStaticContext<TEnv>(
403
431
  routeMap: Record<string, string>,
404
432
  routeName?: string,
433
+ buildEnv?: TEnv,
434
+ devMode?: boolean,
405
435
  ): InternalHandlerContext<any, TEnv> {
406
436
  const variables: Record<string, any> = {};
407
437
 
@@ -417,6 +447,7 @@ export function createStaticContext<TEnv>(
417
447
  return throwUnavailable("params");
418
448
  },
419
449
  build: true,
450
+ dev: devMode ?? false,
420
451
  get request(): Request {
421
452
  return throwUnavailable("request");
422
453
  },
@@ -436,11 +467,13 @@ export function createStaticContext<TEnv>(
436
467
  return throwUnavailable("originalUrl");
437
468
  },
438
469
  get env(): TEnv {
439
- return throwUnavailable("env");
440
- },
441
- get var(): any {
442
- return throwUnavailable("var");
470
+ if (buildEnv !== undefined) return buildEnv;
471
+ throw new Error(
472
+ "ctx.env is not available in Static() handlers. " +
473
+ "Configure buildEnv in your rango() plugin options to enable build-time env access.",
474
+ );
443
475
  },
476
+ _variables: variables,
444
477
  get: ((keyOrVar: any) => contextGet(variables, keyOrVar)) as any,
445
478
  set: ((keyOrVar: any, value: any) => {
446
479
  contextSet(variables, keyOrVar, value);
@@ -11,7 +11,11 @@ import type {
11
11
  InterceptEntry,
12
12
  InterceptSelectorContext,
13
13
  } from "../server/context";
14
- import type { HandlerContext, ResolvedSegment } from "../types";
14
+ import type {
15
+ HandlerContext,
16
+ InternalHandlerContext,
17
+ ResolvedSegment,
18
+ } from "../types";
15
19
  import { evaluateRevalidation } from "./revalidation.js";
16
20
  import { getRequestContext } from "../server/request-context.js";
17
21
  import { executeInterceptMiddleware } from "./middleware.js";
@@ -20,6 +24,7 @@ import { getGlobalRouteMap } from "../route-map-builder.js";
20
24
  import { handleHandlerResult } from "./segment-resolution.js";
21
25
  import type { SegmentResolutionDeps } from "./types.js";
22
26
  import { debugLog } from "./logging.js";
27
+ import { runInsideLoaderScope } from "../server/context.js";
23
28
 
24
29
  /**
25
30
  * Check if an intercept's when conditions are satisfied.
@@ -133,7 +138,7 @@ export async function resolveInterceptEntry<TEnv>(
133
138
  context.request,
134
139
  context.env,
135
140
  params,
136
- context.var as Record<string, any>,
141
+ (context as InternalHandlerContext<any, TEnv>)._variables,
137
142
  requestCtx.res,
138
143
  createReverseFunction(getGlobalRouteMap()),
139
144
  );
@@ -207,7 +212,7 @@ export async function resolveInterceptEntry<TEnv>(
207
212
  loaderIds.push(loader.$$id);
208
213
  loaderPromises.push(
209
214
  deps.wrapLoaderPromise(
210
- context.use(loader),
215
+ runInsideLoaderScope(() => context.use(loader)),
211
216
  parentEntry,
212
217
  segmentId,
213
218
  context.pathname,
@@ -374,7 +379,7 @@ export async function resolveInterceptLoadersOnly<TEnv>(
374
379
  loaderIds.push(loader.$$id);
375
380
  loaderPromises.push(
376
381
  deps.wrapLoaderPromise(
377
- context.use(loader),
382
+ runInsideLoaderScope(() => context.use(loader)),
378
383
  parentEntry,
379
384
  segmentId,
380
385
  context.pathname,
@@ -20,10 +20,11 @@ import type {
20
20
  ErrorInfo,
21
21
  } from "../types";
22
22
  import type { LoaderRevalidationResult, ActionContext } from "./types";
23
- import { isHandle, type Handle } from "../handle.js";
24
- import type { HandleStore } from "../server/handle-store.js";
23
+ import { isHandle, collectHandleData, type Handle } from "../handle.js";
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
28
  import { debugLog } from "./logging.js";
28
29
 
29
30
  /**
@@ -242,6 +243,16 @@ function createLoaderExecutor<TEnv>(
242
243
  pendingLoaders.add(loader.$$id);
243
244
 
244
245
  const currentLoaderId = loader.$$id;
246
+ const variables = (ctx as InternalHandlerContext<any, TEnv>)._variables;
247
+
248
+ // Capture whether this loader is being started from a DSL loader scope
249
+ // (runInsideLoaderScope in fresh.ts). Handler-invoked loaders are NOT
250
+ // inside loader scope. This determines whether rendered() is allowed.
251
+ const isDslLoader = isInsideLoaderScope();
252
+
253
+ let renderedResolved = false;
254
+ let renderedPromise: Promise<void> | null = null;
255
+
245
256
  // Loader functions are always fresh (never cached), so they get an
246
257
  // unguarded get that bypasses non-cacheable read guards. This applies
247
258
  // to ALL loaders — DSL and handler-called — because the loader
@@ -256,16 +267,86 @@ function createLoaderExecutor<TEnv>(
256
267
  pathname: ctx.pathname,
257
268
  url: ctx.url,
258
269
  env: ctx.env,
259
- var: ctx.var,
260
- get: ((keyOrVar: any) => contextGet(ctx.var, keyOrVar)) as typeof ctx.get,
261
- use: <TDep, TDepParams = any>(
262
- dep: LoaderDefinition<TDep, TDepParams>,
263
- ): Promise<TDep> => {
264
- return useLoader(dep, currentLoaderId);
265
- },
270
+ get: ((keyOrVar: any) =>
271
+ contextGet(variables, keyOrVar)) as typeof ctx.get,
272
+ use: ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
273
+ if (isHandle(item)) {
274
+ if (!renderedResolved) {
275
+ throw new Error(
276
+ `ctx.use(handle) in a loader requires "await ctx.rendered()" first. ` +
277
+ `Handle "${item.$$id}" cannot be read until the render tree has settled.`,
278
+ );
279
+ }
280
+ const reqCtx = reqCtxRef ?? _getRequestContext();
281
+ if (!reqCtx) {
282
+ throw new Error(
283
+ `ctx.use(handle) failed: request context not available.`,
284
+ );
285
+ }
286
+ const segmentOrder = reqCtx._renderBarrierSegmentOrder ?? [];
287
+ const snapshot =
288
+ reqCtx._renderBarrierHandleSnapshot ??
289
+ buildHandleSnapshot(reqCtx._handleStore, segmentOrder);
290
+ return collectHandleData(item, snapshot, segmentOrder);
291
+ }
292
+
293
+ // Loader case
294
+ return useLoader(item as LoaderDefinition<any, any>, currentLoaderId);
295
+ }) as LoaderContext["use"],
266
296
  method: "GET",
267
297
  body: undefined,
268
298
  reverse: ctx.reverse as LoaderContext["reverse"],
299
+ rendered: (): Promise<void> => {
300
+ // Guard: only DSL loaders may use rendered()
301
+ if (!isDslLoader) {
302
+ throw new Error(
303
+ `ctx.rendered() is only available in DSL loaders (registered via loader() in urls()). ` +
304
+ `Handler-invoked loaders (ctx.use(Loader) inside a handler) cannot use rendered().`,
305
+ );
306
+ }
307
+
308
+ // Guard: reject streaming trees
309
+ const reqCtx = reqCtxRef ?? _getRequestContext();
310
+ if (reqCtx?._treeHasStreaming) {
311
+ throw new Error(
312
+ `ctx.rendered() is not supported when the matched route tree uses loading(). ` +
313
+ `Streaming handlers may not have settled when rendered() resolves. ` +
314
+ `Remove loading() from the route tree or restructure to avoid rendered().`,
315
+ );
316
+ }
317
+
318
+ if (renderedPromise) return renderedPromise;
319
+
320
+ if (!reqCtx) {
321
+ throw new Error(
322
+ `ctx.rendered() failed: request context not available.`,
323
+ );
324
+ }
325
+
326
+ // Bidirectional deadlock check: if a handler already started
327
+ // awaiting this loader, calling rendered() would deadlock.
328
+ if (reqCtx._handlerLoaderDeps?.has(currentLoaderId)) {
329
+ throw new Error(
330
+ `Deadlock: loader "${currentLoaderId}" called ctx.rendered() but a handler ` +
331
+ `is already awaiting this loader via ctx.use(). The handler blocks ` +
332
+ `segment resolution, which blocks the barrier, which blocks this loader. ` +
333
+ `Move the data dependency to a loader-to-loader pattern instead.`,
334
+ );
335
+ }
336
+
337
+ // Register this loader as waiting for the barrier so that
338
+ // setupLoaderAccess can detect deadlocks when a handler
339
+ // tries to await the same loader via ctx.use().
340
+ if (!reqCtx._renderBarrierWaiters) {
341
+ reqCtx._renderBarrierWaiters = new Set();
342
+ }
343
+ reqCtx._renderBarrierWaiters.add(currentLoaderId);
344
+
345
+ renderedPromise = reqCtx._renderBarrier.then(() => {
346
+ renderedResolved = true;
347
+ });
348
+ return renderedPromise;
349
+ },
269
350
  };
270
351
 
271
352
  const doneLoader = track(`loader:${loader.$$id}`, 2);
@@ -296,15 +377,22 @@ export function setupLoaderAccess<TEnv>(
296
377
  ctx: HandlerContext<any, TEnv>,
297
378
  loaderPromises: Map<string, Promise<any>>,
298
379
  ): void {
299
- // Eagerly capture the HandleStore at setup time (before pipeline async ops).
300
- // In workerd/Cloudflare, dynamic imports and fetch() in the match pipeline
301
- // can disrupt AsyncLocalStorage, causing getRequestContext() to return
302
- // undefined when handlers later call ctx.use(handle). Capturing early
303
- // ensures the store reference survives ALS disruption.
304
- const handleStoreRef = _getRequestContext()?._handleStore;
380
+ // Eagerly capture the request context and HandleStore at setup time
381
+ // (before pipeline async ops). In workerd/Cloudflare, dynamic imports and
382
+ // fetch() in the match pipeline can disrupt AsyncLocalStorage, causing
383
+ // getRequestContext() to return undefined when handlers later call
384
+ // ctx.use(handle). Capturing early ensures references survive ALS disruption.
385
+ const reqCtxRef = _getRequestContext();
386
+ const handleStoreRef = reqCtxRef?._handleStore;
305
387
 
306
388
  const useLoader = createLoaderExecutor(ctx, loaderPromises);
307
389
 
390
+ // Track whether we're inside a handle push callback. Loaders started
391
+ // from push callbacks (e.g. push(async () => ctx.use(Loader))) do NOT
392
+ // block segment resolution, so they must not be registered as handler
393
+ // dependencies for deadlock detection.
394
+ let insideHandlePush = false;
395
+
308
396
  ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
309
397
  if (isHandle(item)) {
310
398
  const handle = item;
@@ -324,16 +412,57 @@ export function setupLoaderAccess<TEnv>(
324
412
  ) => {
325
413
  if (!store) return;
326
414
 
327
- const valueOrPromise =
328
- typeof dataOrFn === "function"
329
- ? (dataOrFn as () => Promise<unknown>)()
330
- : dataOrFn;
415
+ if (typeof dataOrFn === "function") {
416
+ // Mark scope so ctx.use(loader) calls inside the callback
417
+ // are not registered as handler-to-loader deps.
418
+ insideHandlePush = true;
419
+ try {
420
+ const result = (dataOrFn as () => Promise<unknown>)();
421
+ store.push(handle.$$id, segmentId, result);
422
+ } finally {
423
+ insideHandlePush = false;
424
+ }
425
+ return;
426
+ }
331
427
 
332
- store.push(handle.$$id, segmentId, valueOrPromise);
428
+ store.push(handle.$$id, segmentId, dataOrFn);
333
429
  };
334
430
  }
335
431
 
336
- return useLoader(item as LoaderDefinition<any, any>, null);
432
+ // Deadlock guard and handler-to-loader dependency tracking.
433
+ // Skip when inside a DSL loader scope (resolveLoaderData also calls
434
+ // ctx.use() but that's DSL-to-DSL, not handler-to-loader) or when
435
+ // inside a handle push callback (push callbacks don't block segment
436
+ // resolution so they can't cause rendered() deadlocks).
437
+ const loader = item as LoaderDefinition<any, any>;
438
+ if (!isInsideLoaderScope() && !insideHandlePush) {
439
+ const reqCtx = reqCtxRef ?? _getRequestContext();
440
+ if (reqCtx) {
441
+ // Direction 1: handler awaits loader that already called rendered()
442
+ if (
443
+ loaderPromises.has(loader.$$id) &&
444
+ reqCtx._renderBarrierWaiters?.has(loader.$$id)
445
+ ) {
446
+ throw new Error(
447
+ `Deadlock: handler is awaiting loader "${loader.$$id}" which called ctx.rendered(). ` +
448
+ `The loader is waiting for segment resolution, but the handler blocks resolution. ` +
449
+ `Move the data dependency to a loader-to-loader pattern instead.`,
450
+ );
451
+ }
452
+ // Direction 2: track dep so rendered() can detect the deadlock
453
+ // if the loader calls it later. Skip when the barrier has already
454
+ // resolved — no deadlock is possible (rendered() resolves immediately).
455
+ // _renderBarrierSegmentOrder is undefined before resolution, string[]
456
+ // after. This also prevents false positives from handle push callbacks
457
+ // that resume after their first await (post-barrier-resolution).
458
+ if (reqCtx._renderBarrierSegmentOrder === undefined) {
459
+ if (!reqCtx._handlerLoaderDeps) reqCtx._handlerLoaderDeps = new Set();
460
+ reqCtx._handlerLoaderDeps.add(loader.$$id);
461
+ }
462
+ }
463
+ }
464
+
465
+ return useLoader(loader, null);
337
466
  }) as typeof ctx.use;
338
467
  }
339
468