@rangojs/router 0.0.0-experimental.21 → 0.0.0-experimental.21efdd86

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 (961) hide show
  1. package/AGENTS.md +4 -0
  2. package/README.md +122 -30
  3. package/dist/bin/rango.js +138 -50
  4. package/dist/vite/index.js +602 -309
  5. package/package.json +16 -15
  6. package/skills/breadcrumbs/SKILL.md +250 -0
  7. package/skills/cache-guide/SKILL.md +32 -0
  8. package/skills/caching/SKILL.md +49 -8
  9. package/skills/document-cache/SKILL.md +2 -2
  10. package/skills/hooks/SKILL.md +33 -31
  11. package/skills/host-router/SKILL.md +218 -0
  12. package/skills/links/SKILL.md +3 -1
  13. package/skills/loader/SKILL.md +72 -22
  14. package/skills/middleware/SKILL.md +2 -0
  15. package/skills/parallel/SKILL.md +126 -0
  16. package/skills/prerender/SKILL.md +112 -70
  17. package/skills/rango/SKILL.md +0 -1
  18. package/skills/route/SKILL.md +34 -4
  19. package/skills/router-setup/SKILL.md +95 -5
  20. package/skills/typesafety/SKILL.md +35 -23
  21. package/src/__internal.ts +92 -0
  22. package/src/browser/app-version.ts +14 -0
  23. package/src/browser/event-controller.ts +5 -0
  24. package/src/browser/link-interceptor.ts +4 -0
  25. package/src/browser/navigation-bridge.ts +104 -14
  26. package/src/browser/navigation-client.ts +126 -44
  27. package/src/browser/navigation-store.ts +43 -8
  28. package/src/browser/navigation-transaction.ts +11 -9
  29. package/src/browser/partial-update.ts +80 -15
  30. package/src/browser/prefetch/cache.ts +166 -27
  31. package/src/browser/prefetch/fetch.ts +52 -39
  32. package/src/browser/prefetch/policy.ts +6 -0
  33. package/src/browser/prefetch/queue.ts +92 -20
  34. package/src/browser/prefetch/resource-ready.ts +77 -0
  35. package/src/browser/react/Link.tsx +70 -14
  36. package/src/browser/react/NavigationProvider.tsx +40 -4
  37. package/src/browser/react/context.ts +7 -2
  38. package/src/browser/react/use-handle.ts +9 -58
  39. package/src/browser/react/use-router.ts +21 -8
  40. package/src/browser/rsc-router.tsx +143 -60
  41. package/src/browser/scroll-restoration.ts +41 -42
  42. package/src/browser/segment-reconciler.ts +6 -1
  43. package/src/browser/server-action-bridge.ts +8 -6
  44. package/src/browser/types.ts +60 -5
  45. package/src/build/generate-manifest.ts +6 -6
  46. package/src/build/generate-route-types.ts +3 -0
  47. package/src/build/route-trie.ts +19 -3
  48. package/src/build/route-types/include-resolution.ts +8 -1
  49. package/src/build/route-types/router-processing.ts +223 -74
  50. package/src/build/route-types/scan-filter.ts +8 -1
  51. package/src/cache/cache-runtime.ts +15 -11
  52. package/src/cache/cache-scope.ts +48 -7
  53. package/src/cache/cf/cf-cache-store.ts +453 -11
  54. package/src/cache/cf/index.ts +5 -1
  55. package/src/cache/document-cache.ts +17 -7
  56. package/src/cache/index.ts +1 -0
  57. package/src/cache/taint.ts +55 -0
  58. package/src/client.rsc.tsx +2 -1
  59. package/src/client.tsx +3 -102
  60. package/src/context-var.ts +72 -2
  61. package/src/debug.ts +2 -2
  62. package/src/handle.ts +40 -0
  63. package/src/handles/breadcrumbs.ts +66 -0
  64. package/src/handles/index.ts +1 -0
  65. package/src/host/index.ts +0 -3
  66. package/src/index.rsc.ts +6 -36
  67. package/src/index.ts +40 -66
  68. package/src/prerender/store.ts +5 -4
  69. package/src/prerender.ts +138 -77
  70. package/src/reverse.ts +22 -1
  71. package/src/route-definition/dsl-helpers.ts +73 -25
  72. package/src/route-definition/helpers-types.ts +10 -6
  73. package/src/route-definition/index.ts +3 -3
  74. package/src/route-definition/redirect.ts +11 -3
  75. package/src/route-definition/resolve-handler-use.ts +149 -0
  76. package/src/route-map-builder.ts +7 -1
  77. package/src/route-types.ts +11 -0
  78. package/src/router/content-negotiation.ts +100 -1
  79. package/src/router/find-match.ts +4 -2
  80. package/src/router/handler-context.ts +108 -25
  81. package/src/router/intercept-resolution.ts +11 -4
  82. package/src/router/lazy-includes.ts +4 -1
  83. package/src/router/loader-resolution.ts +123 -11
  84. package/src/router/logging.ts +5 -2
  85. package/src/router/manifest.ts +9 -3
  86. package/src/router/match-api.ts +125 -190
  87. package/src/router/match-middleware/background-revalidation.ts +30 -2
  88. package/src/router/match-middleware/cache-lookup.ts +88 -16
  89. package/src/router/match-middleware/cache-store.ts +53 -10
  90. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  91. package/src/router/match-middleware/segment-resolution.ts +61 -5
  92. package/src/router/match-result.ts +22 -15
  93. package/src/router/metrics.ts +238 -13
  94. package/src/router/middleware-types.ts +53 -12
  95. package/src/router/middleware.ts +172 -85
  96. package/src/router/navigation-snapshot.ts +182 -0
  97. package/src/router/pattern-matching.ts +20 -5
  98. package/src/router/prerender-match.ts +114 -10
  99. package/src/router/preview-match.ts +30 -102
  100. package/src/router/request-classification.ts +310 -0
  101. package/src/router/revalidation.ts +27 -7
  102. package/src/router/route-snapshot.ts +245 -0
  103. package/src/router/router-context.ts +6 -1
  104. package/src/router/router-interfaces.ts +50 -5
  105. package/src/router/router-options.ts +50 -19
  106. package/src/router/segment-resolution/fresh.ts +210 -19
  107. package/src/router/segment-resolution/helpers.ts +30 -25
  108. package/src/router/segment-resolution/loader-cache.ts +1 -0
  109. package/src/router/segment-resolution/revalidation.ts +448 -301
  110. package/src/router/segment-wrappers.ts +2 -0
  111. package/src/router/trie-matching.ts +20 -2
  112. package/src/router/types.ts +1 -0
  113. package/src/router.ts +88 -15
  114. package/src/rsc/handler.ts +546 -359
  115. package/src/rsc/index.ts +0 -20
  116. package/src/rsc/manifest-init.ts +5 -1
  117. package/src/rsc/progressive-enhancement.ts +25 -8
  118. package/src/rsc/rsc-rendering.ts +35 -43
  119. package/src/rsc/server-action.ts +16 -10
  120. package/src/rsc/ssr-setup.ts +128 -0
  121. package/src/rsc/types.ts +10 -1
  122. package/src/search-params.ts +16 -13
  123. package/src/segment-system.tsx +140 -4
  124. package/src/server/context.ts +148 -16
  125. package/src/server/loader-registry.ts +9 -8
  126. package/src/server/request-context.ts +186 -29
  127. package/src/server.ts +6 -0
  128. package/src/ssr/index.tsx +4 -0
  129. package/src/static-handler.ts +18 -6
  130. package/src/theme/index.ts +4 -13
  131. package/src/types/cache-types.ts +4 -4
  132. package/src/types/handler-context.ts +149 -49
  133. package/src/types/loader-types.ts +36 -9
  134. package/src/types/route-config.ts +17 -8
  135. package/src/types/route-entry.ts +8 -1
  136. package/src/types/segments.ts +2 -5
  137. package/src/urls/path-helper-types.ts +9 -2
  138. package/src/urls/path-helper.ts +48 -13
  139. package/src/urls/pattern-types.ts +12 -0
  140. package/src/urls/response-types.ts +16 -6
  141. package/src/use-loader.tsx +73 -4
  142. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  143. package/src/vite/discovery/discover-routers.ts +7 -4
  144. package/src/vite/discovery/prerender-collection.ts +14 -1
  145. package/src/vite/discovery/state.ts +13 -6
  146. package/src/vite/index.ts +8 -3
  147. package/src/vite/plugin-types.ts +51 -79
  148. package/src/vite/plugins/expose-action-id.ts +1 -3
  149. package/src/vite/plugins/performance-tracks.ts +88 -0
  150. package/src/vite/plugins/refresh-cmd.ts +127 -0
  151. package/src/vite/plugins/version-plugin.ts +13 -1
  152. package/src/vite/rango.ts +163 -211
  153. package/src/vite/router-discovery.ts +178 -45
  154. package/src/vite/utils/banner.ts +3 -3
  155. package/src/vite/utils/prerender-utils.ts +18 -0
  156. package/src/vite/utils/shared-utils.ts +3 -2
  157. package/dist/__internal.d.ts +0 -83
  158. package/dist/__internal.d.ts.map +0 -1
  159. package/dist/__internal.js +0 -19
  160. package/dist/__internal.js.map +0 -1
  161. package/dist/__mocks__/version.d.ts +0 -7
  162. package/dist/__mocks__/version.d.ts.map +0 -1
  163. package/dist/__mocks__/version.js +0 -7
  164. package/dist/__mocks__/version.js.map +0 -1
  165. package/dist/__tests__/client-href.test.d.ts +0 -2
  166. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  167. package/dist/__tests__/client-href.test.js +0 -74
  168. package/dist/__tests__/client-href.test.js.map +0 -1
  169. package/dist/__tests__/component-utils.test.d.ts +0 -2
  170. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  171. package/dist/__tests__/component-utils.test.js +0 -51
  172. package/dist/__tests__/component-utils.test.js.map +0 -1
  173. package/dist/__tests__/event-controller.test.d.ts +0 -2
  174. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  175. package/dist/__tests__/event-controller.test.js +0 -538
  176. package/dist/__tests__/event-controller.test.js.map +0 -1
  177. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  178. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  179. package/dist/__tests__/helpers/route-tree.js +0 -374
  180. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  181. package/dist/__tests__/match-result.test.d.ts +0 -2
  182. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  183. package/dist/__tests__/match-result.test.js +0 -154
  184. package/dist/__tests__/match-result.test.js.map +0 -1
  185. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  186. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  187. package/dist/__tests__/navigation-store.test.js +0 -440
  188. package/dist/__tests__/navigation-store.test.js.map +0 -1
  189. package/dist/__tests__/partial-update.test.d.ts +0 -2
  190. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  191. package/dist/__tests__/partial-update.test.js +0 -1009
  192. package/dist/__tests__/partial-update.test.js.map +0 -1
  193. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  194. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  195. package/dist/__tests__/reverse-types.test.js +0 -656
  196. package/dist/__tests__/reverse-types.test.js.map +0 -1
  197. package/dist/__tests__/route-definition.test.d.ts +0 -2
  198. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  199. package/dist/__tests__/route-definition.test.js +0 -55
  200. package/dist/__tests__/route-definition.test.js.map +0 -1
  201. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  202. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  203. package/dist/__tests__/router-helpers.test.js +0 -377
  204. package/dist/__tests__/router-helpers.test.js.map +0 -1
  205. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  206. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  207. package/dist/__tests__/router-integration-2.test.js +0 -426
  208. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  209. package/dist/__tests__/router-integration.test.d.ts +0 -2
  210. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  211. package/dist/__tests__/router-integration.test.js +0 -1051
  212. package/dist/__tests__/router-integration.test.js.map +0 -1
  213. package/dist/__tests__/search-params.test.d.ts +0 -5
  214. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  215. package/dist/__tests__/search-params.test.js +0 -306
  216. package/dist/__tests__/search-params.test.js.map +0 -1
  217. package/dist/__tests__/segment-system.test.d.ts +0 -2
  218. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  219. package/dist/__tests__/segment-system.test.js +0 -627
  220. package/dist/__tests__/segment-system.test.js.map +0 -1
  221. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  222. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  223. package/dist/__tests__/static-handler-types.test.js +0 -63
  224. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  225. package/dist/__tests__/urls.test.d.ts +0 -2
  226. package/dist/__tests__/urls.test.d.ts.map +0 -1
  227. package/dist/__tests__/urls.test.js +0 -421
  228. package/dist/__tests__/urls.test.js.map +0 -1
  229. package/dist/__tests__/use-mount.test.d.ts +0 -2
  230. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  231. package/dist/__tests__/use-mount.test.js +0 -35
  232. package/dist/__tests__/use-mount.test.js.map +0 -1
  233. package/dist/bin/rango.d.ts +0 -2
  234. package/dist/bin/rango.d.ts.map +0 -1
  235. package/dist/bin/rango.js.map +0 -1
  236. package/dist/browser/event-controller.d.ts +0 -191
  237. package/dist/browser/event-controller.d.ts.map +0 -1
  238. package/dist/browser/event-controller.js +0 -559
  239. package/dist/browser/event-controller.js.map +0 -1
  240. package/dist/browser/index.d.ts +0 -2
  241. package/dist/browser/index.d.ts.map +0 -1
  242. package/dist/browser/index.js +0 -14
  243. package/dist/browser/index.js.map +0 -1
  244. package/dist/browser/link-interceptor.d.ts +0 -38
  245. package/dist/browser/link-interceptor.d.ts.map +0 -1
  246. package/dist/browser/link-interceptor.js +0 -99
  247. package/dist/browser/link-interceptor.js.map +0 -1
  248. package/dist/browser/logging.d.ts +0 -10
  249. package/dist/browser/logging.d.ts.map +0 -1
  250. package/dist/browser/logging.js +0 -29
  251. package/dist/browser/logging.js.map +0 -1
  252. package/dist/browser/lru-cache.d.ts +0 -17
  253. package/dist/browser/lru-cache.d.ts.map +0 -1
  254. package/dist/browser/lru-cache.js +0 -50
  255. package/dist/browser/lru-cache.js.map +0 -1
  256. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  257. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  258. package/dist/browser/merge-segment-loaders.js +0 -102
  259. package/dist/browser/merge-segment-loaders.js.map +0 -1
  260. package/dist/browser/navigation-bridge.d.ts +0 -102
  261. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  262. package/dist/browser/navigation-bridge.js +0 -708
  263. package/dist/browser/navigation-bridge.js.map +0 -1
  264. package/dist/browser/navigation-client.d.ts +0 -25
  265. package/dist/browser/navigation-client.d.ts.map +0 -1
  266. package/dist/browser/navigation-client.js +0 -157
  267. package/dist/browser/navigation-client.js.map +0 -1
  268. package/dist/browser/navigation-store.d.ts +0 -101
  269. package/dist/browser/navigation-store.d.ts.map +0 -1
  270. package/dist/browser/navigation-store.js +0 -625
  271. package/dist/browser/navigation-store.js.map +0 -1
  272. package/dist/browser/partial-update.d.ts +0 -75
  273. package/dist/browser/partial-update.d.ts.map +0 -1
  274. package/dist/browser/partial-update.js +0 -426
  275. package/dist/browser/partial-update.js.map +0 -1
  276. package/dist/browser/react/Link.d.ts +0 -86
  277. package/dist/browser/react/Link.d.ts.map +0 -1
  278. package/dist/browser/react/Link.js +0 -128
  279. package/dist/browser/react/Link.js.map +0 -1
  280. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  281. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  282. package/dist/browser/react/NavigationProvider.js +0 -216
  283. package/dist/browser/react/NavigationProvider.js.map +0 -1
  284. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  285. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  286. package/dist/browser/react/ScrollRestoration.js +0 -57
  287. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  288. package/dist/browser/react/context.d.ts +0 -46
  289. package/dist/browser/react/context.d.ts.map +0 -1
  290. package/dist/browser/react/context.js +0 -10
  291. package/dist/browser/react/context.js.map +0 -1
  292. package/dist/browser/react/index.d.ts +0 -11
  293. package/dist/browser/react/index.d.ts.map +0 -1
  294. package/dist/browser/react/index.js +0 -22
  295. package/dist/browser/react/index.js.map +0 -1
  296. package/dist/browser/react/location-state-shared.d.ts +0 -63
  297. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  298. package/dist/browser/react/location-state-shared.js +0 -81
  299. package/dist/browser/react/location-state-shared.js.map +0 -1
  300. package/dist/browser/react/location-state.d.ts +0 -23
  301. package/dist/browser/react/location-state.d.ts.map +0 -1
  302. package/dist/browser/react/location-state.js +0 -29
  303. package/dist/browser/react/location-state.js.map +0 -1
  304. package/dist/browser/react/mount-context.d.ts +0 -24
  305. package/dist/browser/react/mount-context.d.ts.map +0 -1
  306. package/dist/browser/react/mount-context.js +0 -24
  307. package/dist/browser/react/mount-context.js.map +0 -1
  308. package/dist/browser/react/use-action.d.ts +0 -64
  309. package/dist/browser/react/use-action.d.ts.map +0 -1
  310. package/dist/browser/react/use-action.js +0 -134
  311. package/dist/browser/react/use-action.js.map +0 -1
  312. package/dist/browser/react/use-client-cache.d.ts +0 -41
  313. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  314. package/dist/browser/react/use-client-cache.js +0 -39
  315. package/dist/browser/react/use-client-cache.js.map +0 -1
  316. package/dist/browser/react/use-handle.d.ts +0 -31
  317. package/dist/browser/react/use-handle.d.ts.map +0 -1
  318. package/dist/browser/react/use-handle.js +0 -144
  319. package/dist/browser/react/use-handle.js.map +0 -1
  320. package/dist/browser/react/use-href.d.ts +0 -33
  321. package/dist/browser/react/use-href.d.ts.map +0 -1
  322. package/dist/browser/react/use-href.js +0 -39
  323. package/dist/browser/react/use-href.js.map +0 -1
  324. package/dist/browser/react/use-link-status.d.ts +0 -37
  325. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  326. package/dist/browser/react/use-link-status.js +0 -99
  327. package/dist/browser/react/use-link-status.js.map +0 -1
  328. package/dist/browser/react/use-mount.d.ts +0 -25
  329. package/dist/browser/react/use-mount.d.ts.map +0 -1
  330. package/dist/browser/react/use-mount.js +0 -30
  331. package/dist/browser/react/use-mount.js.map +0 -1
  332. package/dist/browser/react/use-navigation.d.ts +0 -27
  333. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  334. package/dist/browser/react/use-navigation.js +0 -87
  335. package/dist/browser/react/use-navigation.js.map +0 -1
  336. package/dist/browser/react/use-segments.d.ts +0 -38
  337. package/dist/browser/react/use-segments.d.ts.map +0 -1
  338. package/dist/browser/react/use-segments.js +0 -130
  339. package/dist/browser/react/use-segments.js.map +0 -1
  340. package/dist/browser/request-controller.d.ts +0 -26
  341. package/dist/browser/request-controller.d.ts.map +0 -1
  342. package/dist/browser/request-controller.js +0 -147
  343. package/dist/browser/request-controller.js.map +0 -1
  344. package/dist/browser/rsc-router.d.ts +0 -129
  345. package/dist/browser/rsc-router.d.ts.map +0 -1
  346. package/dist/browser/rsc-router.js +0 -195
  347. package/dist/browser/rsc-router.js.map +0 -1
  348. package/dist/browser/scroll-restoration.d.ts +0 -93
  349. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  350. package/dist/browser/scroll-restoration.js +0 -321
  351. package/dist/browser/scroll-restoration.js.map +0 -1
  352. package/dist/browser/segment-structure-assert.d.ts +0 -17
  353. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  354. package/dist/browser/segment-structure-assert.js +0 -59
  355. package/dist/browser/segment-structure-assert.js.map +0 -1
  356. package/dist/browser/server-action-bridge.d.ts +0 -26
  357. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  358. package/dist/browser/server-action-bridge.js +0 -668
  359. package/dist/browser/server-action-bridge.js.map +0 -1
  360. package/dist/browser/shallow.d.ts +0 -12
  361. package/dist/browser/shallow.d.ts.map +0 -1
  362. package/dist/browser/shallow.js +0 -34
  363. package/dist/browser/shallow.js.map +0 -1
  364. package/dist/browser/types.d.ts +0 -369
  365. package/dist/browser/types.d.ts.map +0 -1
  366. package/dist/browser/types.js +0 -2
  367. package/dist/browser/types.js.map +0 -1
  368. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  369. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  370. package/dist/build/__tests__/generate-cli.test.js +0 -237
  371. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  372. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  373. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  374. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  375. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  376. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  377. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  378. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  379. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  380. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  381. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  382. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  383. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  384. package/dist/build/generate-manifest.d.ts +0 -81
  385. package/dist/build/generate-manifest.d.ts.map +0 -1
  386. package/dist/build/generate-manifest.js +0 -276
  387. package/dist/build/generate-manifest.js.map +0 -1
  388. package/dist/build/generate-route-types.d.ts +0 -115
  389. package/dist/build/generate-route-types.d.ts.map +0 -1
  390. package/dist/build/generate-route-types.js +0 -740
  391. package/dist/build/generate-route-types.js.map +0 -1
  392. package/dist/build/index.d.ts +0 -21
  393. package/dist/build/index.d.ts.map +0 -1
  394. package/dist/build/index.js +0 -21
  395. package/dist/build/index.js.map +0 -1
  396. package/dist/build/route-trie.d.ts +0 -71
  397. package/dist/build/route-trie.d.ts.map +0 -1
  398. package/dist/build/route-trie.js +0 -175
  399. package/dist/build/route-trie.js.map +0 -1
  400. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  401. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  402. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  403. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  404. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  405. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  406. package/dist/cache/__tests__/document-cache.test.js +0 -345
  407. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  408. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  409. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  410. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  411. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  412. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  413. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  414. package/dist/cache/__tests__/memory-store.test.js +0 -367
  415. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  416. package/dist/cache/cache-scope.d.ts +0 -102
  417. package/dist/cache/cache-scope.d.ts.map +0 -1
  418. package/dist/cache/cache-scope.js +0 -440
  419. package/dist/cache/cache-scope.js.map +0 -1
  420. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  421. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  422. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  423. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  424. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  425. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  426. package/dist/cache/cf/cf-cache-store.js +0 -242
  427. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  428. package/dist/cache/cf/index.d.ts +0 -14
  429. package/dist/cache/cf/index.d.ts.map +0 -1
  430. package/dist/cache/cf/index.js +0 -17
  431. package/dist/cache/cf/index.js.map +0 -1
  432. package/dist/cache/document-cache.d.ts +0 -64
  433. package/dist/cache/document-cache.d.ts.map +0 -1
  434. package/dist/cache/document-cache.js +0 -228
  435. package/dist/cache/document-cache.js.map +0 -1
  436. package/dist/cache/index.d.ts +0 -19
  437. package/dist/cache/index.d.ts.map +0 -1
  438. package/dist/cache/index.js +0 -21
  439. package/dist/cache/index.js.map +0 -1
  440. package/dist/cache/memory-segment-store.d.ts +0 -110
  441. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  442. package/dist/cache/memory-segment-store.js +0 -117
  443. package/dist/cache/memory-segment-store.js.map +0 -1
  444. package/dist/cache/memory-store.d.ts +0 -41
  445. package/dist/cache/memory-store.d.ts.map +0 -1
  446. package/dist/cache/memory-store.js +0 -191
  447. package/dist/cache/memory-store.js.map +0 -1
  448. package/dist/cache/types.d.ts +0 -317
  449. package/dist/cache/types.d.ts.map +0 -1
  450. package/dist/cache/types.js +0 -12
  451. package/dist/cache/types.js.map +0 -1
  452. package/dist/client.d.ts +0 -248
  453. package/dist/client.d.ts.map +0 -1
  454. package/dist/client.js +0 -367
  455. package/dist/client.js.map +0 -1
  456. package/dist/client.rsc.d.ts +0 -26
  457. package/dist/client.rsc.d.ts.map +0 -1
  458. package/dist/client.rsc.js +0 -46
  459. package/dist/client.rsc.js.map +0 -1
  460. package/dist/component-utils.d.ts +0 -36
  461. package/dist/component-utils.d.ts.map +0 -1
  462. package/dist/component-utils.js +0 -61
  463. package/dist/component-utils.js.map +0 -1
  464. package/dist/components/DefaultDocument.d.ts +0 -13
  465. package/dist/components/DefaultDocument.d.ts.map +0 -1
  466. package/dist/components/DefaultDocument.js +0 -15
  467. package/dist/components/DefaultDocument.js.map +0 -1
  468. package/dist/debug.d.ts +0 -58
  469. package/dist/debug.d.ts.map +0 -1
  470. package/dist/debug.js +0 -157
  471. package/dist/debug.js.map +0 -1
  472. package/dist/default-error-boundary.d.ts +0 -11
  473. package/dist/default-error-boundary.d.ts.map +0 -1
  474. package/dist/default-error-boundary.js +0 -45
  475. package/dist/default-error-boundary.js.map +0 -1
  476. package/dist/deps/browser.d.ts +0 -2
  477. package/dist/deps/browser.d.ts.map +0 -1
  478. package/dist/deps/browser.js +0 -3
  479. package/dist/deps/browser.js.map +0 -1
  480. package/dist/deps/html-stream-client.d.ts +0 -2
  481. package/dist/deps/html-stream-client.d.ts.map +0 -1
  482. package/dist/deps/html-stream-client.js +0 -3
  483. package/dist/deps/html-stream-client.js.map +0 -1
  484. package/dist/deps/html-stream-server.d.ts +0 -2
  485. package/dist/deps/html-stream-server.d.ts.map +0 -1
  486. package/dist/deps/html-stream-server.js +0 -3
  487. package/dist/deps/html-stream-server.js.map +0 -1
  488. package/dist/deps/rsc.d.ts +0 -2
  489. package/dist/deps/rsc.d.ts.map +0 -1
  490. package/dist/deps/rsc.js +0 -4
  491. package/dist/deps/rsc.js.map +0 -1
  492. package/dist/deps/ssr.d.ts +0 -2
  493. package/dist/deps/ssr.d.ts.map +0 -1
  494. package/dist/deps/ssr.js +0 -3
  495. package/dist/deps/ssr.js.map +0 -1
  496. package/dist/errors.d.ts +0 -174
  497. package/dist/errors.d.ts.map +0 -1
  498. package/dist/errors.js +0 -241
  499. package/dist/errors.js.map +0 -1
  500. package/dist/handle.d.ts +0 -78
  501. package/dist/handle.d.ts.map +0 -1
  502. package/dist/handle.js +0 -82
  503. package/dist/handle.js.map +0 -1
  504. package/dist/handles/MetaTags.d.ts +0 -14
  505. package/dist/handles/MetaTags.d.ts.map +0 -1
  506. package/dist/handles/MetaTags.js +0 -136
  507. package/dist/handles/MetaTags.js.map +0 -1
  508. package/dist/handles/index.d.ts +0 -6
  509. package/dist/handles/index.d.ts.map +0 -1
  510. package/dist/handles/index.js +0 -6
  511. package/dist/handles/index.js.map +0 -1
  512. package/dist/handles/meta.d.ts +0 -39
  513. package/dist/handles/meta.d.ts.map +0 -1
  514. package/dist/handles/meta.js +0 -202
  515. package/dist/handles/meta.js.map +0 -1
  516. package/dist/host/__tests__/errors.test.d.ts +0 -2
  517. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  518. package/dist/host/__tests__/errors.test.js +0 -76
  519. package/dist/host/__tests__/errors.test.js.map +0 -1
  520. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  521. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  522. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  523. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  524. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  525. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  526. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  527. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  528. package/dist/host/__tests__/router.test.d.ts +0 -2
  529. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  530. package/dist/host/__tests__/router.test.js +0 -241
  531. package/dist/host/__tests__/router.test.js.map +0 -1
  532. package/dist/host/__tests__/testing.test.d.ts +0 -2
  533. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  534. package/dist/host/__tests__/testing.test.js +0 -64
  535. package/dist/host/__tests__/testing.test.js.map +0 -1
  536. package/dist/host/__tests__/utils.test.d.ts +0 -2
  537. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  538. package/dist/host/__tests__/utils.test.js +0 -29
  539. package/dist/host/__tests__/utils.test.js.map +0 -1
  540. package/dist/host/cookie-handler.d.ts +0 -34
  541. package/dist/host/cookie-handler.d.ts.map +0 -1
  542. package/dist/host/cookie-handler.js +0 -124
  543. package/dist/host/cookie-handler.js.map +0 -1
  544. package/dist/host/errors.d.ts +0 -56
  545. package/dist/host/errors.d.ts.map +0 -1
  546. package/dist/host/errors.js +0 -79
  547. package/dist/host/errors.js.map +0 -1
  548. package/dist/host/index.d.ts +0 -29
  549. package/dist/host/index.d.ts.map +0 -1
  550. package/dist/host/index.js +0 -32
  551. package/dist/host/index.js.map +0 -1
  552. package/dist/host/pattern-matcher.d.ts +0 -36
  553. package/dist/host/pattern-matcher.d.ts.map +0 -1
  554. package/dist/host/pattern-matcher.js +0 -172
  555. package/dist/host/pattern-matcher.js.map +0 -1
  556. package/dist/host/router.d.ts +0 -26
  557. package/dist/host/router.d.ts.map +0 -1
  558. package/dist/host/router.js +0 -218
  559. package/dist/host/router.js.map +0 -1
  560. package/dist/host/testing.d.ts +0 -36
  561. package/dist/host/testing.d.ts.map +0 -1
  562. package/dist/host/testing.js +0 -55
  563. package/dist/host/testing.js.map +0 -1
  564. package/dist/host/types.d.ts +0 -115
  565. package/dist/host/types.d.ts.map +0 -1
  566. package/dist/host/types.js +0 -7
  567. package/dist/host/types.js.map +0 -1
  568. package/dist/host/utils.d.ts +0 -21
  569. package/dist/host/utils.d.ts.map +0 -1
  570. package/dist/host/utils.js +0 -23
  571. package/dist/host/utils.js.map +0 -1
  572. package/dist/href-client.d.ts +0 -131
  573. package/dist/href-client.d.ts.map +0 -1
  574. package/dist/href-client.js +0 -64
  575. package/dist/href-client.js.map +0 -1
  576. package/dist/href-context.d.ts +0 -29
  577. package/dist/href-context.d.ts.map +0 -1
  578. package/dist/href-context.js +0 -21
  579. package/dist/href-context.js.map +0 -1
  580. package/dist/index.d.ts +0 -73
  581. package/dist/index.d.ts.map +0 -1
  582. package/dist/index.js +0 -91
  583. package/dist/index.js.map +0 -1
  584. package/dist/index.rsc.d.ts +0 -32
  585. package/dist/index.rsc.d.ts.map +0 -1
  586. package/dist/index.rsc.js +0 -40
  587. package/dist/index.rsc.js.map +0 -1
  588. package/dist/internal-debug.d.ts +0 -2
  589. package/dist/internal-debug.d.ts.map +0 -1
  590. package/dist/internal-debug.js +0 -5
  591. package/dist/internal-debug.js.map +0 -1
  592. package/dist/loader.d.ts +0 -14
  593. package/dist/loader.d.ts.map +0 -1
  594. package/dist/loader.js +0 -20
  595. package/dist/loader.js.map +0 -1
  596. package/dist/loader.rsc.d.ts +0 -19
  597. package/dist/loader.rsc.d.ts.map +0 -1
  598. package/dist/loader.rsc.js +0 -99
  599. package/dist/loader.rsc.js.map +0 -1
  600. package/dist/network-error-thrower.d.ts +0 -17
  601. package/dist/network-error-thrower.d.ts.map +0 -1
  602. package/dist/network-error-thrower.js +0 -14
  603. package/dist/network-error-thrower.js.map +0 -1
  604. package/dist/outlet-context.d.ts +0 -13
  605. package/dist/outlet-context.d.ts.map +0 -1
  606. package/dist/outlet-context.js +0 -3
  607. package/dist/outlet-context.js.map +0 -1
  608. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  609. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  610. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  611. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  612. package/dist/prerender/param-hash.d.ts +0 -16
  613. package/dist/prerender/param-hash.d.ts.map +0 -1
  614. package/dist/prerender/param-hash.js +0 -36
  615. package/dist/prerender/param-hash.js.map +0 -1
  616. package/dist/prerender/store.d.ts +0 -38
  617. package/dist/prerender/store.d.ts.map +0 -1
  618. package/dist/prerender/store.js +0 -61
  619. package/dist/prerender/store.js.map +0 -1
  620. package/dist/prerender.d.ts +0 -66
  621. package/dist/prerender.d.ts.map +0 -1
  622. package/dist/prerender.js +0 -57
  623. package/dist/prerender.js.map +0 -1
  624. package/dist/reverse.d.ts +0 -196
  625. package/dist/reverse.d.ts.map +0 -1
  626. package/dist/reverse.js +0 -78
  627. package/dist/reverse.js.map +0 -1
  628. package/dist/root-error-boundary.d.ts +0 -33
  629. package/dist/root-error-boundary.d.ts.map +0 -1
  630. package/dist/root-error-boundary.js +0 -165
  631. package/dist/root-error-boundary.js.map +0 -1
  632. package/dist/route-content-wrapper.d.ts +0 -46
  633. package/dist/route-content-wrapper.d.ts.map +0 -1
  634. package/dist/route-content-wrapper.js +0 -77
  635. package/dist/route-content-wrapper.js.map +0 -1
  636. package/dist/route-definition.d.ts +0 -421
  637. package/dist/route-definition.d.ts.map +0 -1
  638. package/dist/route-definition.js +0 -868
  639. package/dist/route-definition.js.map +0 -1
  640. package/dist/route-map-builder.d.ts +0 -155
  641. package/dist/route-map-builder.d.ts.map +0 -1
  642. package/dist/route-map-builder.js +0 -237
  643. package/dist/route-map-builder.js.map +0 -1
  644. package/dist/route-types.d.ts +0 -165
  645. package/dist/route-types.d.ts.map +0 -1
  646. package/dist/route-types.js +0 -7
  647. package/dist/route-types.js.map +0 -1
  648. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  649. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  650. package/dist/router/__tests__/handler-context.test.js +0 -65
  651. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  652. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  653. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  654. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  655. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  656. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  657. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  658. package/dist/router/__tests__/match-context.test.js +0 -92
  659. package/dist/router/__tests__/match-context.test.js.map +0 -1
  660. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  661. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  662. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  663. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  664. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  665. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  666. package/dist/router/__tests__/match-result.test.js +0 -457
  667. package/dist/router/__tests__/match-result.test.js.map +0 -1
  668. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  669. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  670. package/dist/router/__tests__/on-error.test.js +0 -678
  671. package/dist/router/__tests__/on-error.test.js.map +0 -1
  672. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  673. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  674. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  675. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  676. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  677. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  678. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  679. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  680. package/dist/router/error-handling.d.ts +0 -77
  681. package/dist/router/error-handling.d.ts.map +0 -1
  682. package/dist/router/error-handling.js +0 -202
  683. package/dist/router/error-handling.js.map +0 -1
  684. package/dist/router/handler-context.d.ts +0 -20
  685. package/dist/router/handler-context.d.ts.map +0 -1
  686. package/dist/router/handler-context.js +0 -198
  687. package/dist/router/handler-context.js.map +0 -1
  688. package/dist/router/intercept-resolution.d.ts +0 -66
  689. package/dist/router/intercept-resolution.d.ts.map +0 -1
  690. package/dist/router/intercept-resolution.js +0 -246
  691. package/dist/router/intercept-resolution.js.map +0 -1
  692. package/dist/router/loader-resolution.d.ts +0 -64
  693. package/dist/router/loader-resolution.d.ts.map +0 -1
  694. package/dist/router/loader-resolution.js +0 -284
  695. package/dist/router/loader-resolution.js.map +0 -1
  696. package/dist/router/logging.d.ts +0 -15
  697. package/dist/router/logging.d.ts.map +0 -1
  698. package/dist/router/logging.js +0 -99
  699. package/dist/router/logging.js.map +0 -1
  700. package/dist/router/manifest.d.ts +0 -22
  701. package/dist/router/manifest.d.ts.map +0 -1
  702. package/dist/router/manifest.js +0 -181
  703. package/dist/router/manifest.js.map +0 -1
  704. package/dist/router/match-api.d.ts +0 -35
  705. package/dist/router/match-api.d.ts.map +0 -1
  706. package/dist/router/match-api.js +0 -406
  707. package/dist/router/match-api.js.map +0 -1
  708. package/dist/router/match-context.d.ts +0 -206
  709. package/dist/router/match-context.d.ts.map +0 -1
  710. package/dist/router/match-context.js +0 -17
  711. package/dist/router/match-context.js.map +0 -1
  712. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  713. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  714. package/dist/router/match-middleware/background-revalidation.js +0 -75
  715. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  716. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  717. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  718. package/dist/router/match-middleware/cache-lookup.js +0 -257
  719. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  720. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  721. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  722. package/dist/router/match-middleware/cache-store.js +0 -108
  723. package/dist/router/match-middleware/cache-store.js.map +0 -1
  724. package/dist/router/match-middleware/index.d.ts +0 -81
  725. package/dist/router/match-middleware/index.d.ts.map +0 -1
  726. package/dist/router/match-middleware/index.js +0 -80
  727. package/dist/router/match-middleware/index.js.map +0 -1
  728. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  729. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  730. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  731. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  732. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  733. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  734. package/dist/router/match-middleware/segment-resolution.js +0 -53
  735. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  736. package/dist/router/match-pipelines.d.ts +0 -147
  737. package/dist/router/match-pipelines.d.ts.map +0 -1
  738. package/dist/router/match-pipelines.js +0 -82
  739. package/dist/router/match-pipelines.js.map +0 -1
  740. package/dist/router/match-result.d.ts +0 -126
  741. package/dist/router/match-result.d.ts.map +0 -1
  742. package/dist/router/match-result.js +0 -93
  743. package/dist/router/match-result.js.map +0 -1
  744. package/dist/router/metrics.d.ts +0 -20
  745. package/dist/router/metrics.d.ts.map +0 -1
  746. package/dist/router/metrics.js +0 -47
  747. package/dist/router/metrics.js.map +0 -1
  748. package/dist/router/middleware.d.ts +0 -249
  749. package/dist/router/middleware.d.ts.map +0 -1
  750. package/dist/router/middleware.js +0 -434
  751. package/dist/router/middleware.js.map +0 -1
  752. package/dist/router/middleware.test.d.ts +0 -2
  753. package/dist/router/middleware.test.d.ts.map +0 -1
  754. package/dist/router/middleware.test.js +0 -816
  755. package/dist/router/middleware.test.js.map +0 -1
  756. package/dist/router/pattern-matching.d.ts +0 -149
  757. package/dist/router/pattern-matching.d.ts.map +0 -1
  758. package/dist/router/pattern-matching.js +0 -349
  759. package/dist/router/pattern-matching.js.map +0 -1
  760. package/dist/router/revalidation.d.ts +0 -44
  761. package/dist/router/revalidation.d.ts.map +0 -1
  762. package/dist/router/revalidation.js +0 -147
  763. package/dist/router/revalidation.js.map +0 -1
  764. package/dist/router/router-context.d.ts +0 -135
  765. package/dist/router/router-context.d.ts.map +0 -1
  766. package/dist/router/router-context.js +0 -36
  767. package/dist/router/router-context.js.map +0 -1
  768. package/dist/router/segment-resolution.d.ts +0 -127
  769. package/dist/router/segment-resolution.d.ts.map +0 -1
  770. package/dist/router/segment-resolution.js +0 -919
  771. package/dist/router/segment-resolution.js.map +0 -1
  772. package/dist/router/trie-matching.d.ts +0 -40
  773. package/dist/router/trie-matching.d.ts.map +0 -1
  774. package/dist/router/trie-matching.js +0 -127
  775. package/dist/router/trie-matching.js.map +0 -1
  776. package/dist/router/types.d.ts +0 -136
  777. package/dist/router/types.d.ts.map +0 -1
  778. package/dist/router/types.js +0 -7
  779. package/dist/router/types.js.map +0 -1
  780. package/dist/router.d.ts +0 -753
  781. package/dist/router.d.ts.map +0 -1
  782. package/dist/router.gen.d.ts +0 -6
  783. package/dist/router.gen.d.ts.map +0 -1
  784. package/dist/router.gen.js +0 -6
  785. package/dist/router.gen.js.map +0 -1
  786. package/dist/router.js +0 -1304
  787. package/dist/router.js.map +0 -1
  788. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  789. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  790. package/dist/rsc/__tests__/helpers.test.js +0 -140
  791. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  792. package/dist/rsc/handler.d.ts +0 -45
  793. package/dist/rsc/handler.d.ts.map +0 -1
  794. package/dist/rsc/handler.js +0 -1172
  795. package/dist/rsc/handler.js.map +0 -1
  796. package/dist/rsc/helpers.d.ts +0 -16
  797. package/dist/rsc/helpers.d.ts.map +0 -1
  798. package/dist/rsc/helpers.js +0 -55
  799. package/dist/rsc/helpers.js.map +0 -1
  800. package/dist/rsc/index.d.ts +0 -22
  801. package/dist/rsc/index.d.ts.map +0 -1
  802. package/dist/rsc/index.js +0 -23
  803. package/dist/rsc/index.js.map +0 -1
  804. package/dist/rsc/nonce.d.ts +0 -9
  805. package/dist/rsc/nonce.d.ts.map +0 -1
  806. package/dist/rsc/nonce.js +0 -18
  807. package/dist/rsc/nonce.js.map +0 -1
  808. package/dist/rsc/types.d.ts +0 -206
  809. package/dist/rsc/types.d.ts.map +0 -1
  810. package/dist/rsc/types.js +0 -8
  811. package/dist/rsc/types.js.map +0 -1
  812. package/dist/search-params.d.ts +0 -103
  813. package/dist/search-params.d.ts.map +0 -1
  814. package/dist/search-params.js +0 -74
  815. package/dist/search-params.js.map +0 -1
  816. package/dist/segment-system.d.ts +0 -75
  817. package/dist/segment-system.d.ts.map +0 -1
  818. package/dist/segment-system.js +0 -336
  819. package/dist/segment-system.js.map +0 -1
  820. package/dist/server/context.d.ts +0 -245
  821. package/dist/server/context.d.ts.map +0 -1
  822. package/dist/server/context.js +0 -197
  823. package/dist/server/context.js.map +0 -1
  824. package/dist/server/fetchable-loader-store.d.ts +0 -18
  825. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  826. package/dist/server/fetchable-loader-store.js +0 -18
  827. package/dist/server/fetchable-loader-store.js.map +0 -1
  828. package/dist/server/handle-store.d.ts +0 -85
  829. package/dist/server/handle-store.d.ts.map +0 -1
  830. package/dist/server/handle-store.js +0 -142
  831. package/dist/server/handle-store.js.map +0 -1
  832. package/dist/server/loader-registry.d.ts +0 -55
  833. package/dist/server/loader-registry.d.ts.map +0 -1
  834. package/dist/server/loader-registry.js +0 -132
  835. package/dist/server/loader-registry.js.map +0 -1
  836. package/dist/server/request-context.d.ts +0 -226
  837. package/dist/server/request-context.d.ts.map +0 -1
  838. package/dist/server/request-context.js +0 -290
  839. package/dist/server/request-context.js.map +0 -1
  840. package/dist/server/root-layout.d.ts +0 -4
  841. package/dist/server/root-layout.d.ts.map +0 -1
  842. package/dist/server/root-layout.js +0 -5
  843. package/dist/server/root-layout.js.map +0 -1
  844. package/dist/server.d.ts +0 -15
  845. package/dist/server.d.ts.map +0 -1
  846. package/dist/server.js +0 -20
  847. package/dist/server.js.map +0 -1
  848. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  849. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  850. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  851. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  852. package/dist/ssr/index.d.ts +0 -98
  853. package/dist/ssr/index.d.ts.map +0 -1
  854. package/dist/ssr/index.js +0 -158
  855. package/dist/ssr/index.js.map +0 -1
  856. package/dist/static-handler.d.ts +0 -50
  857. package/dist/static-handler.d.ts.map +0 -1
  858. package/dist/static-handler.gen.d.ts +0 -5
  859. package/dist/static-handler.gen.d.ts.map +0 -1
  860. package/dist/static-handler.gen.js +0 -5
  861. package/dist/static-handler.gen.js.map +0 -1
  862. package/dist/static-handler.js +0 -29
  863. package/dist/static-handler.js.map +0 -1
  864. package/dist/theme/ThemeProvider.d.ts +0 -20
  865. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  866. package/dist/theme/ThemeProvider.js +0 -240
  867. package/dist/theme/ThemeProvider.js.map +0 -1
  868. package/dist/theme/ThemeScript.d.ts +0 -48
  869. package/dist/theme/ThemeScript.d.ts.map +0 -1
  870. package/dist/theme/ThemeScript.js +0 -13
  871. package/dist/theme/ThemeScript.js.map +0 -1
  872. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  873. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  874. package/dist/theme/__tests__/theme.test.js +0 -103
  875. package/dist/theme/__tests__/theme.test.js.map +0 -1
  876. package/dist/theme/constants.d.ts +0 -29
  877. package/dist/theme/constants.d.ts.map +0 -1
  878. package/dist/theme/constants.js +0 -48
  879. package/dist/theme/constants.js.map +0 -1
  880. package/dist/theme/index.d.ts +0 -31
  881. package/dist/theme/index.d.ts.map +0 -1
  882. package/dist/theme/index.js +0 -36
  883. package/dist/theme/index.js.map +0 -1
  884. package/dist/theme/theme-context.d.ts +0 -40
  885. package/dist/theme/theme-context.d.ts.map +0 -1
  886. package/dist/theme/theme-context.js +0 -60
  887. package/dist/theme/theme-context.js.map +0 -1
  888. package/dist/theme/theme-script.d.ts +0 -27
  889. package/dist/theme/theme-script.d.ts.map +0 -1
  890. package/dist/theme/theme-script.js +0 -147
  891. package/dist/theme/theme-script.js.map +0 -1
  892. package/dist/theme/types.d.ts +0 -163
  893. package/dist/theme/types.d.ts.map +0 -1
  894. package/dist/theme/types.js +0 -11
  895. package/dist/theme/types.js.map +0 -1
  896. package/dist/theme/use-theme.d.ts +0 -12
  897. package/dist/theme/use-theme.d.ts.map +0 -1
  898. package/dist/theme/use-theme.js +0 -40
  899. package/dist/theme/use-theme.js.map +0 -1
  900. package/dist/types.d.ts +0 -1479
  901. package/dist/types.d.ts.map +0 -1
  902. package/dist/types.js +0 -10
  903. package/dist/types.js.map +0 -1
  904. package/dist/urls.d.ts +0 -441
  905. package/dist/urls.d.ts.map +0 -1
  906. package/dist/urls.gen.d.ts +0 -8
  907. package/dist/urls.gen.d.ts.map +0 -1
  908. package/dist/urls.gen.js +0 -8
  909. package/dist/urls.gen.js.map +0 -1
  910. package/dist/urls.js +0 -443
  911. package/dist/urls.js.map +0 -1
  912. package/dist/use-loader.d.ts +0 -127
  913. package/dist/use-loader.d.ts.map +0 -1
  914. package/dist/use-loader.js +0 -237
  915. package/dist/use-loader.js.map +0 -1
  916. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  917. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  918. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  919. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  920. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  921. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  922. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  923. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  924. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  925. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  926. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  927. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  928. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  929. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  930. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  931. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  932. package/dist/vite/ast-handler-extract.d.ts +0 -49
  933. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  934. package/dist/vite/ast-handler-extract.js +0 -249
  935. package/dist/vite/ast-handler-extract.js.map +0 -1
  936. package/dist/vite/expose-action-id.d.ts +0 -19
  937. package/dist/vite/expose-action-id.d.ts.map +0 -1
  938. package/dist/vite/expose-action-id.js +0 -250
  939. package/dist/vite/expose-action-id.js.map +0 -1
  940. package/dist/vite/expose-id-utils.d.ts +0 -69
  941. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  942. package/dist/vite/expose-id-utils.js +0 -289
  943. package/dist/vite/expose-id-utils.js.map +0 -1
  944. package/dist/vite/expose-internal-ids.d.ts +0 -22
  945. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  946. package/dist/vite/expose-internal-ids.js +0 -886
  947. package/dist/vite/expose-internal-ids.js.map +0 -1
  948. package/dist/vite/index.d.ts +0 -149
  949. package/dist/vite/index.d.ts.map +0 -1
  950. package/dist/vite/index.js.map +0 -1
  951. package/dist/vite/index.named-routes.gen.ts +0 -103
  952. package/dist/vite/package-resolution.d.ts +0 -43
  953. package/dist/vite/package-resolution.d.ts.map +0 -1
  954. package/dist/vite/package-resolution.js +0 -112
  955. package/dist/vite/package-resolution.js.map +0 -1
  956. package/dist/vite/virtual-entries.d.ts +0 -25
  957. package/dist/vite/virtual-entries.d.ts.map +0 -1
  958. package/dist/vite/virtual-entries.js +0 -110
  959. package/dist/vite/virtual-entries.js.map +0 -1
  960. package/skills/testing/SKILL.md +0 -226
  961. package/src/route-definition/route-function.ts +0 -119
@@ -10,7 +10,11 @@ import type { ReactNode } from "react";
10
10
  import { invariant } from "../../errors";
11
11
  import { revalidate } from "../loader-resolution.js";
12
12
  import { evaluateRevalidation } from "../revalidation.js";
13
- import type { EntryData } from "../../server/context";
13
+ import {
14
+ getParallelEntries,
15
+ getParallelSlotEntries,
16
+ type EntryData,
17
+ } from "../../server/context";
14
18
  import type {
15
19
  HandlerContext,
16
20
  InternalHandlerContext,
@@ -37,6 +41,11 @@ import {
37
41
  } from "./helpers.js";
38
42
  import { getRouterContext } from "../router-context.js";
39
43
  import { resolveSink, safeEmit } from "../telemetry.js";
44
+ import {
45
+ track,
46
+ RSCRouterContext,
47
+ runInsideLoaderScope,
48
+ } from "../../server/context.js";
40
49
 
41
50
  // ---------------------------------------------------------------------------
42
51
  // Telemetry helpers
@@ -227,7 +236,9 @@ export async function resolveLoadersWithRevalidation<TEnv>(
227
236
  params: ctx.params,
228
237
  loaderId: loader.$$id,
229
238
  loaderData: deps.wrapLoaderPromise(
230
- resolveLoaderData(loaderEntry, ctx, ctx.pathname),
239
+ runInsideLoaderScope(() =>
240
+ resolveLoaderData(loaderEntry, ctx, ctx.pathname),
241
+ ),
231
242
  entry,
232
243
  segmentId,
233
244
  ctx.pathname,
@@ -257,26 +268,94 @@ export async function resolveLoadersOnlyWithRevalidation<TEnv>(
257
268
  ): Promise<{ segments: ResolvedSegment[]; matchedIds: string[] }> {
258
269
  const allLoaderSegments: ResolvedSegment[] = [];
259
270
  const allMatchedIds: string[] = [];
271
+ const seenIds = new Set<string>();
272
+
273
+ async function collectEntryLoaders(
274
+ entry: EntryData,
275
+ belongsToRoute: boolean,
276
+ shortCodeOverride?: string,
277
+ ): Promise<void> {
278
+ // Skip if all loaders from this entry have already been resolved
279
+ // via a parent (e.g., cache boundary wrapping a layout with shared loaders).
280
+ const loaderEntries = entry.loader ?? [];
281
+ const sc = shortCodeOverride ?? entry.shortCode;
282
+ const allAlreadySeen =
283
+ loaderEntries.length > 0 &&
284
+ loaderEntries.every((le, i) =>
285
+ seenIds.has(`${sc}D${i}.${le.loader.$$id}`),
286
+ );
287
+ if (!allAlreadySeen) {
288
+ const { segments, matchedIds } = await resolveLoadersWithRevalidation(
289
+ entry,
290
+ context,
291
+ belongsToRoute,
292
+ clientSegmentIds,
293
+ prevParams,
294
+ request,
295
+ prevUrl,
296
+ nextUrl,
297
+ routeKey,
298
+ deps,
299
+ actionContext,
300
+ shortCodeOverride,
301
+ stale,
302
+ );
303
+ for (const seg of segments) {
304
+ if (!seenIds.has(seg.id)) {
305
+ seenIds.add(seg.id);
306
+ allLoaderSegments.push(seg);
307
+ }
308
+ }
309
+ allMatchedIds.push(...matchedIds);
310
+ }
311
+
312
+ const seenParallelEntryIds = new Set<string>();
313
+ for (const parallelEntry of getParallelEntries(entry.parallel)) {
314
+ if (seenParallelEntryIds.has(parallelEntry.id)) continue;
315
+ seenParallelEntryIds.add(parallelEntry.id);
316
+ await collectEntryLoaders(parallelEntry, belongsToRoute, entry.shortCode);
317
+ }
318
+
319
+ const childBelongsToRoute = belongsToRoute || entry.type === "route";
320
+ for (const layoutEntry of entry.layout) {
321
+ await collectEntryLoaders(layoutEntry, childBelongsToRoute);
322
+ // Inherit route loaders for orphan layouts with parallels.
323
+ // Resolve directly — do NOT re-enter collectEntryLoaders with the
324
+ // route entry, as that would re-iterate route.layout and loop.
325
+ if (
326
+ entry.type === "route" &&
327
+ entry.loader &&
328
+ entry.loader.length > 0 &&
329
+ Object.keys(layoutEntry.parallel).length > 0
330
+ ) {
331
+ const inherited = await resolveLoadersWithRevalidation(
332
+ entry,
333
+ context,
334
+ childBelongsToRoute,
335
+ clientSegmentIds,
336
+ prevParams,
337
+ request,
338
+ prevUrl,
339
+ nextUrl,
340
+ routeKey,
341
+ deps,
342
+ actionContext,
343
+ layoutEntry.shortCode,
344
+ stale,
345
+ );
346
+ for (const seg of inherited.segments) {
347
+ if (!seenIds.has(seg.id)) {
348
+ seenIds.add(seg.id);
349
+ allLoaderSegments.push(seg);
350
+ }
351
+ }
352
+ allMatchedIds.push(...inherited.matchedIds);
353
+ }
354
+ }
355
+ }
260
356
 
261
357
  for (const entry of entries) {
262
- const belongsToRoute = entry.type === "route";
263
- const { segments, matchedIds } = await resolveLoadersWithRevalidation(
264
- entry,
265
- context,
266
- belongsToRoute,
267
- clientSegmentIds,
268
- prevParams,
269
- request,
270
- prevUrl,
271
- nextUrl,
272
- routeKey,
273
- deps,
274
- actionContext,
275
- undefined, // shortCodeOverride
276
- stale,
277
- );
278
- allLoaderSegments.push(...segments);
279
- allMatchedIds.push(...matchedIds);
358
+ await collectEntryLoaders(entry, entry.type === "route");
280
359
  }
281
360
 
282
361
  return { segments: allLoaderSegments, matchedIds: allMatchedIds };
@@ -300,22 +379,20 @@ export function buildEntryRevalidateMap(
300
379
  map.set(entry.shortCode, { entry, revalidate: entry.revalidate });
301
380
 
302
381
  if (entry.type !== "parallel") {
303
- for (const parallelEntry of entry.parallel) {
304
- if (parallelEntry.type === "parallel") {
305
- const slots = Object.keys(parallelEntry.handler) as `@${string}`[];
306
- for (const slot of slots) {
307
- const parallelId = `${parallelEntry.shortCode}.${slot}`;
308
- map.set(parallelId, {
309
- entry: parallelEntry,
310
- revalidate: parallelEntry.revalidate,
311
- });
312
- }
313
- }
382
+ for (const { slot, entry: parallelEntry } of getParallelSlotEntries(
383
+ entry.parallel,
384
+ )) {
385
+ const parallelParentShortCode = parentShortCode ?? entry.shortCode;
386
+ const parallelId = `${parallelParentShortCode}.${slot}`;
387
+ map.set(parallelId, {
388
+ entry: parallelEntry,
389
+ revalidate: parallelEntry.revalidate,
390
+ });
314
391
  }
315
392
  }
316
393
 
317
394
  for (const layoutEntry of entry.layout) {
318
- processEntry(layoutEntry);
395
+ processEntry(layoutEntry, entry.shortCode);
319
396
  }
320
397
  }
321
398
 
@@ -347,7 +424,10 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
347
424
  const segments: ResolvedSegment[] = [];
348
425
  const matchedIds: string[] = [];
349
426
 
350
- for (const parallelEntry of entry.parallel) {
427
+ const resolvedParallelEntries = new Set<string>();
428
+ for (const { slot, entry: parallelEntry } of getParallelSlotEntries(
429
+ entry.parallel,
430
+ )) {
351
431
  invariant(
352
432
  parallelEntry.type === "parallel",
353
433
  `Expected parallel entry, got: ${parallelEntry.type}`,
@@ -358,141 +438,61 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
358
438
  | ((ctx: HandlerContext<any, TEnv>) => ReactNode | Promise<ReactNode>)
359
439
  | ReactNode
360
440
  >;
441
+ // In production, static handler bodies are evicted and the slot value
442
+ // may be undefined. The static store holds the pre-rendered component.
443
+ // We defer the handler check until after tryStaticSlot.
444
+ const handler = slots[slot];
445
+
446
+ const parallelId = `${entry.shortCode}.${slot}`;
447
+
448
+ const isFullRefetch = clientSegmentIds.size === 0;
449
+ const isNewParent = !clientSegmentIds.has(entry.shortCode);
450
+ if (
451
+ isFullRefetch ||
452
+ clientSegmentIds.has(parallelId) ||
453
+ belongsToRoute ||
454
+ isNewParent
455
+ ) {
456
+ matchedIds.push(parallelId);
457
+ }
361
458
 
362
- for (const [slot, handler] of Object.entries(slots)) {
363
- const parallelId = `${entry.shortCode}.${slot}`;
364
-
365
- const isFullRefetch = clientSegmentIds.size === 0;
366
- // When the parent layout is new (not in client's segment set),
367
- // all its parallel children must be resolved and tracked.
368
- // Without this, navigating to a new layout with parallels
369
- // (e.g., BlogLayout with @sidebar) from a different route
370
- // would silently drop those parallel segments.
371
- const isNewParent = !clientSegmentIds.has(entry.shortCode);
372
- if (
373
- isFullRefetch ||
374
- clientSegmentIds.has(parallelId) ||
375
- belongsToRoute ||
376
- isNewParent
377
- ) {
378
- matchedIds.push(parallelId);
379
- }
380
-
381
- const shouldResolve = await (async () => {
382
- if (isFullRefetch) {
383
- if (isTraceActive()) {
384
- pushRevalidationTraceEntry({
385
- segmentId: parallelId,
386
- segmentType: "parallel",
387
- belongsToRoute,
388
- source: "parallel",
389
- defaultShouldRevalidate: true,
390
- finalShouldRevalidate: true,
391
- reason: "full-refetch",
392
- });
393
- }
394
- return true;
395
- }
396
- if (!clientSegmentIds.has(parallelId)) {
397
- const result = belongsToRoute || isNewParent;
398
- if (isTraceActive()) {
399
- pushRevalidationTraceEntry({
400
- segmentId: parallelId,
401
- segmentType: "parallel",
402
- belongsToRoute,
403
- source: "parallel",
404
- defaultShouldRevalidate: result,
405
- finalShouldRevalidate: result,
406
- reason: result ? "new-segment" : "skip-parent-chain",
407
- });
408
- }
409
- return result;
459
+ const shouldResolve = await (async () => {
460
+ if (isFullRefetch) {
461
+ if (isTraceActive()) {
462
+ pushRevalidationTraceEntry({
463
+ segmentId: parallelId,
464
+ segmentType: "parallel",
465
+ belongsToRoute,
466
+ source: "parallel",
467
+ defaultShouldRevalidate: true,
468
+ finalShouldRevalidate: true,
469
+ reason: "full-refetch",
470
+ });
410
471
  }
411
-
412
- const dummySegment: ResolvedSegment = {
413
- id: parallelId,
414
- namespace: parallelEntry.id,
415
- type: "parallel",
416
- index: 0,
417
- component: null as any,
418
- params,
419
- slot,
420
- belongsToRoute,
421
- parallelName: `${parallelEntry.id}.${slot}`,
422
- ...(parallelEntry.mountPath
423
- ? { mountPath: parallelEntry.mountPath }
424
- : {}),
425
- };
426
-
427
- return await evaluateRevalidation({
428
- segment: dummySegment,
429
- prevParams,
430
- getPrevSegment: null,
431
- request,
432
- prevUrl,
433
- nextUrl,
434
- revalidations: parallelEntry.revalidate.map((fn, i) => ({
435
- name: `revalidate${i}`,
436
- fn,
437
- })),
438
- routeKey,
439
- context,
440
- actionContext,
441
- stale,
442
- traceSource: "parallel",
443
- });
444
- })();
445
- emitRevalidationDecision(
446
- parallelId,
447
- context.pathname,
448
- routeKey,
449
- shouldResolve,
450
- );
451
-
452
- let component: ReactNode | undefined;
453
- if (shouldResolve) {
454
- component = await tryStaticSlot(parallelEntry, slot, parallelId);
472
+ return true;
455
473
  }
456
- if (component === undefined) {
457
- const hasLoadingFallback =
458
- parallelEntry.loading !== undefined &&
459
- parallelEntry.loading !== false;
460
- if (!shouldResolve) {
461
- component = null;
462
- } else if (hasLoadingFallback) {
463
- const result =
464
- typeof handler === "function" ? handler(context) : handler;
465
- if (result instanceof Promise) {
466
- const tracked = deps.trackHandler(result, {
467
- segmentId: parallelId,
468
- segmentType: "parallel",
469
- });
470
- observeStreamedHandler(
471
- tracked,
472
- parallelId,
473
- "parallel",
474
- context.pathname,
475
- routeKey,
476
- params,
477
- );
478
- component = tracked as ReactNode;
479
- } else {
480
- component = result as ReactNode;
481
- }
482
- } else {
483
- component =
484
- typeof handler === "function" ? await handler(context) : handler;
474
+ if (!clientSegmentIds.has(parallelId)) {
475
+ const result = belongsToRoute || isNewParent;
476
+ if (isTraceActive()) {
477
+ pushRevalidationTraceEntry({
478
+ segmentId: parallelId,
479
+ segmentType: "parallel",
480
+ belongsToRoute,
481
+ source: "parallel",
482
+ defaultShouldRevalidate: result,
483
+ finalShouldRevalidate: result,
484
+ reason: result ? "new-segment" : "skip-parent-chain",
485
+ });
485
486
  }
487
+ return result;
486
488
  }
487
489
 
488
- segments.push({
490
+ const dummySegment: ResolvedSegment = {
489
491
  id: parallelId,
490
492
  namespace: parallelEntry.id,
491
493
  type: "parallel",
492
494
  index: 0,
493
- component,
494
- loading: parallelEntry.loading === false ? null : parallelEntry.loading,
495
- transition: parallelEntry.transition,
495
+ component: null as any,
496
496
  params,
497
497
  slot,
498
498
  belongsToRoute,
@@ -500,28 +500,111 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
500
500
  ...(parallelEntry.mountPath
501
501
  ? { mountPath: parallelEntry.mountPath }
502
502
  : {}),
503
- });
504
- }
503
+ };
505
504
 
506
- if (!parallelEntry.loading) {
507
- const loaderResult = await resolveLoadersWithRevalidation(
508
- parallelEntry,
509
- context,
510
- belongsToRoute,
511
- clientSegmentIds,
505
+ return await evaluateRevalidation({
506
+ segment: dummySegment,
512
507
  prevParams,
508
+ getPrevSegment: null,
513
509
  request,
514
510
  prevUrl,
515
511
  nextUrl,
512
+ revalidations: parallelEntry.revalidate.map((fn, i) => ({
513
+ name: `revalidate${i}`,
514
+ fn,
515
+ })),
516
516
  routeKey,
517
- deps,
517
+ context,
518
518
  actionContext,
519
- entry.shortCode,
520
519
  stale,
521
- );
522
- segments.push(...loaderResult.segments);
523
- matchedIds.push(...loaderResult.matchedIds);
520
+ traceSource: "parallel",
521
+ });
522
+ })();
523
+ emitRevalidationDecision(
524
+ parallelId,
525
+ context.pathname,
526
+ routeKey,
527
+ shouldResolve,
528
+ );
529
+
530
+ let component: ReactNode | undefined;
531
+ if (shouldResolve) {
532
+ component = await tryStaticSlot(parallelEntry, slot, parallelId);
533
+ }
534
+ if (component === undefined) {
535
+ const hasLoadingFallback =
536
+ parallelEntry.loading !== undefined && parallelEntry.loading !== false;
537
+ if (!shouldResolve) {
538
+ component = null;
539
+ } else if (handler === undefined) {
540
+ // Handler evicted (production static slot) but static lookup missed.
541
+ // Nothing to render — use null so the client keeps its cached version.
542
+ component = null;
543
+ } else if (hasLoadingFallback) {
544
+ const result =
545
+ typeof handler === "function" ? handler(context) : handler;
546
+ if (result instanceof Promise) {
547
+ const tracked = deps.trackHandler(result, {
548
+ segmentId: parallelId,
549
+ segmentType: "parallel",
550
+ });
551
+ observeStreamedHandler(
552
+ tracked,
553
+ parallelId,
554
+ "parallel",
555
+ context.pathname,
556
+ routeKey,
557
+ params,
558
+ );
559
+ component = tracked as ReactNode;
560
+ } else {
561
+ component = result as ReactNode;
562
+ }
563
+ } else {
564
+ component =
565
+ typeof handler === "function" ? await handler(context) : handler;
566
+ }
524
567
  }
568
+
569
+ segments.push({
570
+ id: parallelId,
571
+ namespace: parallelEntry.id,
572
+ type: "parallel",
573
+ index: 0,
574
+ component,
575
+ loading: parallelEntry.loading === false ? null : parallelEntry.loading,
576
+ transition: parallelEntry.transition,
577
+ params,
578
+ slot,
579
+ belongsToRoute,
580
+ parallelName: `${parallelEntry.id}.${slot}`,
581
+ ...(parallelEntry.mountPath
582
+ ? { mountPath: parallelEntry.mountPath }
583
+ : {}),
584
+ });
585
+
586
+ if (resolvedParallelEntries.has(parallelEntry.id)) {
587
+ continue;
588
+ }
589
+
590
+ const loaderResult = await resolveLoadersWithRevalidation(
591
+ parallelEntry,
592
+ context,
593
+ belongsToRoute,
594
+ clientSegmentIds,
595
+ prevParams,
596
+ request,
597
+ prevUrl,
598
+ nextUrl,
599
+ routeKey,
600
+ deps,
601
+ actionContext,
602
+ entry.shortCode,
603
+ stale,
604
+ );
605
+ segments.push(...loaderResult.segments);
606
+ matchedIds.push(...loaderResult.matchedIds);
607
+ resolvedParallelEntries.add(parallelEntry.id);
525
608
  }
526
609
 
527
610
  return { segments, matchedIds };
@@ -607,6 +690,8 @@ export async function resolveEntryHandlerWithRevalidation<TEnv>(
607
690
  context,
608
691
  actionContext,
609
692
  stale,
693
+ traceSource:
694
+ entry.type === "route" ? "route-handler" : "layout-handler",
610
695
  });
611
696
  emitRevalidationDecision(
612
697
  entry.shortCode,
@@ -621,20 +706,36 @@ export async function resolveEntryHandlerWithRevalidation<TEnv>(
621
706
  return shouldRevalidate;
622
707
  },
623
708
  async () => {
709
+ const doneHandler = track(`handler:${entry.id}`, 2);
624
710
  (context as InternalHandlerContext<any, TEnv>)._currentSegmentId =
625
711
  entry.shortCode;
626
712
  if (entry.type === "layout" || entry.type === "cache") {
627
- return resolveLayoutComponent(entry, context);
713
+ const layoutComponent = await resolveLayoutComponent(entry, context);
714
+ doneHandler();
715
+ return layoutComponent;
628
716
  }
629
717
  const staticComponent = await tryStaticHandler(entry, entry.shortCode);
630
- if (staticComponent !== undefined) return staticComponent;
718
+ if (staticComponent !== undefined) {
719
+ doneHandler();
720
+ return staticComponent;
721
+ }
631
722
  const routeEntry = entry as Extract<EntryData, { type: "route" }>;
723
+ // For Passthrough routes at runtime, use the live handler instead of
724
+ // the build handler. At build time (context.build === true), always
725
+ // use the build handler from routeEntry.handler.
726
+ const handler =
727
+ !context.build && routeEntry.liveHandler
728
+ ? routeEntry.liveHandler
729
+ : routeEntry.handler;
632
730
  if (!routeEntry.loading) {
633
- return handleHandlerResult(await routeEntry.handler(context));
731
+ const result = handleHandlerResult(await handler(context));
732
+ doneHandler();
733
+ return result;
634
734
  }
635
735
  if (!actionContext) {
636
- const result = handleHandlerResult(routeEntry.handler(context));
736
+ const result = handleHandlerResult(handler(context));
637
737
  if (result instanceof Promise) {
738
+ result.finally(doneHandler).catch(() => {});
638
739
  const tracked = deps.trackHandler(result, {
639
740
  segmentId: entry.shortCode,
640
741
  segmentType: entry.type,
@@ -649,24 +750,27 @@ export async function resolveEntryHandlerWithRevalidation<TEnv>(
649
750
  );
650
751
  return { content: tracked };
651
752
  }
753
+ doneHandler();
652
754
  return { content: result };
653
755
  }
654
756
  debugLog("segment.action", "resolving action route with awaited value", {
655
757
  entryId: entry.id,
656
758
  });
759
+ const actionResult = handleHandlerResult(await handler(context));
760
+ doneHandler();
657
761
  return {
658
- content: Promise.resolve(
659
- handleHandlerResult(await routeEntry.handler(context)),
660
- ),
762
+ content: Promise.resolve(actionResult),
661
763
  };
662
764
  },
663
765
  () => null,
664
766
  );
665
767
 
768
+ // Normalize void handlers (undefined) to null so the reconciler's
769
+ // component === null checks work consistently for both void and explicit null.
666
770
  const resolvedComponent =
667
771
  component && typeof component === "object" && "content" in component
668
- ? (component as { content: ReactNode }).content
669
- : component;
772
+ ? ((component as { content: ReactNode }).content ?? null)
773
+ : (component ?? null);
670
774
 
671
775
  const segment: ResolvedSegment = {
672
776
  id: entry.shortCode,
@@ -768,6 +872,7 @@ export async function resolveSegmentWithRevalidation<TEnv>(
768
872
  deps,
769
873
  actionContext,
770
874
  stale,
875
+ entry,
771
876
  );
772
877
  segments.push(...orphanResult.segments);
773
878
  matchedIds.push(...orphanResult.matchedIds);
@@ -879,6 +984,8 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
879
984
  deps: SegmentResolutionDeps<TEnv>,
880
985
  actionContext?: ActionContext,
881
986
  stale?: boolean,
987
+ /** Parent route entry — its loaders are inherited so parallel slots can access them. */
988
+ parentRouteEntry?: EntryData,
882
989
  ): Promise<SegmentRevalidationResult> {
883
990
  invariant(
884
991
  orphan.type === "layout" || orphan.type === "cache",
@@ -906,6 +1013,33 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
906
1013
  segments.push(...loaderResult.segments);
907
1014
  matchedIds.push(...loaderResult.matchedIds);
908
1015
 
1016
+ // Inherit parent route's loaders so parallel slots inside this layout
1017
+ // can access them via useLoader(). See resolveOrphanLayout in fresh.ts.
1018
+ if (
1019
+ parentRouteEntry &&
1020
+ parentRouteEntry.loader &&
1021
+ parentRouteEntry.loader.length > 0 &&
1022
+ Object.keys(orphan.parallel).length > 0
1023
+ ) {
1024
+ const inheritedResult = await resolveLoadersWithRevalidation(
1025
+ parentRouteEntry,
1026
+ context,
1027
+ belongsToRoute,
1028
+ clientSegmentIds,
1029
+ prevParams,
1030
+ request,
1031
+ prevUrl,
1032
+ nextUrl,
1033
+ routeKey,
1034
+ deps,
1035
+ actionContext,
1036
+ orphan.shortCode,
1037
+ stale,
1038
+ );
1039
+ segments.push(...inheritedResult.segments);
1040
+ matchedIds.push(...inheritedResult.matchedIds);
1041
+ }
1042
+
909
1043
  // Handler-first: resolve orphan layout handler before its parallels
910
1044
  // so ctx.set() values are visible to parallel children.
911
1045
  matchedIds.push(orphan.shortCode);
@@ -982,143 +1116,72 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
982
1116
  ...(orphan.mountPath ? { mountPath: orphan.mountPath } : {}),
983
1117
  });
984
1118
 
985
- for (const parallelEntry of orphan.parallel) {
1119
+ const resolvedParallelEntries = new Set<string>();
1120
+ for (const { slot, entry: parallelEntry } of getParallelSlotEntries(
1121
+ orphan.parallel,
1122
+ )) {
986
1123
  invariant(
987
1124
  parallelEntry.type === "parallel",
988
1125
  `Expected parallel entry, got: ${parallelEntry.type}`,
989
1126
  );
990
1127
 
991
- const loaderResult = await resolveLoadersWithRevalidation(
992
- parallelEntry,
993
- context,
994
- belongsToRoute,
995
- clientSegmentIds,
996
- prevParams,
997
- request,
998
- prevUrl,
999
- nextUrl,
1000
- routeKey,
1001
- deps,
1002
- actionContext,
1003
- undefined,
1004
- stale,
1005
- );
1006
- segments.push(...loaderResult.segments);
1007
- matchedIds.push(...loaderResult.matchedIds);
1128
+ if (!resolvedParallelEntries.has(parallelEntry.id)) {
1129
+ const loaderResult = await resolveLoadersWithRevalidation(
1130
+ parallelEntry,
1131
+ context,
1132
+ belongsToRoute,
1133
+ clientSegmentIds,
1134
+ prevParams,
1135
+ request,
1136
+ prevUrl,
1137
+ nextUrl,
1138
+ routeKey,
1139
+ deps,
1140
+ actionContext,
1141
+ undefined,
1142
+ stale,
1143
+ );
1144
+ segments.push(...loaderResult.segments);
1145
+ matchedIds.push(...loaderResult.matchedIds);
1146
+ resolvedParallelEntries.add(parallelEntry.id);
1147
+ }
1008
1148
 
1009
1149
  const slots = parallelEntry.handler as Record<
1010
1150
  `@${string}`,
1011
1151
  | ((ctx: HandlerContext<any, TEnv>) => ReactNode | Promise<ReactNode>)
1012
1152
  | ReactNode
1013
1153
  >;
1154
+ // Handler may be undefined in production after static handler eviction.
1155
+ const handler = slots[slot];
1014
1156
 
1015
- for (const [slot, handler] of Object.entries(slots)) {
1016
- // Use orphan.shortCode (the parent layout) to match the SSR path
1017
- // (resolveParallelEntry receives parentShortCode = orphan.shortCode).
1018
- // Using parallelEntry.shortCode would generate IDs the client doesn't know about.
1019
- const parallelId = `${orphan.shortCode}.${slot}`;
1020
- matchedIds.push(parallelId);
1021
-
1022
- const shouldResolve = await (async () => {
1023
- if (!clientSegmentIds.has(parallelId)) {
1024
- if (isTraceActive()) {
1025
- pushRevalidationTraceEntry({
1026
- segmentId: parallelId,
1027
- segmentType: "parallel",
1028
- belongsToRoute,
1029
- source: "parallel",
1030
- defaultShouldRevalidate: true,
1031
- finalShouldRevalidate: true,
1032
- reason: "new-segment",
1033
- });
1034
- }
1035
- return true;
1036
- }
1037
-
1038
- const dummySegment: ResolvedSegment = {
1039
- id: parallelId,
1040
- namespace: parallelEntry.id,
1041
- type: "parallel",
1042
- index: 0,
1043
- component: null as any,
1044
- params,
1045
- slot,
1046
- belongsToRoute,
1047
- parallelName: `${parallelEntry.id}.${slot}`,
1048
- ...(parallelEntry.mountPath
1049
- ? { mountPath: parallelEntry.mountPath }
1050
- : {}),
1051
- };
1052
-
1053
- return await evaluateRevalidation({
1054
- segment: dummySegment,
1055
- prevParams,
1056
- getPrevSegment: null,
1057
- request,
1058
- prevUrl,
1059
- nextUrl,
1060
- revalidations: parallelEntry.revalidate.map((fn, i) => ({
1061
- name: `revalidate${i}`,
1062
- fn,
1063
- })),
1064
- routeKey,
1065
- context,
1066
- actionContext,
1067
- stale,
1068
- traceSource: "parallel",
1069
- });
1070
- })();
1071
- emitRevalidationDecision(
1072
- parallelId,
1073
- context.pathname,
1074
- routeKey,
1075
- shouldResolve,
1076
- );
1157
+ // Use orphan.shortCode (the parent layout) to match the SSR path
1158
+ // (resolveParallelEntry receives parentShortCode = orphan.shortCode).
1159
+ // Using parallelEntry.shortCode would generate IDs the client doesn't know about.
1160
+ const parallelId = `${orphan.shortCode}.${slot}`;
1161
+ matchedIds.push(parallelId);
1077
1162
 
1078
- let component: ReactNode | undefined;
1079
- if (shouldResolve) {
1080
- component = await tryStaticSlot(parallelEntry, slot, parallelId);
1081
- }
1082
- if (component === undefined) {
1083
- const hasLoadingFallback =
1084
- parallelEntry.loading !== undefined &&
1085
- parallelEntry.loading !== false;
1086
- if (!shouldResolve) {
1087
- component = null;
1088
- } else if (hasLoadingFallback) {
1089
- const result =
1090
- typeof handler === "function" ? handler(context) : handler;
1091
- if (result instanceof Promise) {
1092
- const tracked = deps.trackHandler(result, {
1093
- segmentId: parallelId,
1094
- segmentType: "parallel",
1095
- });
1096
- observeStreamedHandler(
1097
- tracked,
1098
- parallelId,
1099
- "parallel",
1100
- context.pathname,
1101
- routeKey,
1102
- params,
1103
- );
1104
- component = tracked as ReactNode;
1105
- } else {
1106
- component = result as ReactNode;
1107
- }
1108
- } else {
1109
- component =
1110
- typeof handler === "function" ? await handler(context) : handler;
1163
+ const shouldResolve = await (async () => {
1164
+ if (!clientSegmentIds.has(parallelId)) {
1165
+ if (isTraceActive()) {
1166
+ pushRevalidationTraceEntry({
1167
+ segmentId: parallelId,
1168
+ segmentType: "parallel",
1169
+ belongsToRoute,
1170
+ source: "parallel",
1171
+ defaultShouldRevalidate: true,
1172
+ finalShouldRevalidate: true,
1173
+ reason: "new-segment",
1174
+ });
1111
1175
  }
1176
+ return true;
1112
1177
  }
1113
1178
 
1114
- segments.push({
1179
+ const dummySegment: ResolvedSegment = {
1115
1180
  id: parallelId,
1116
1181
  namespace: parallelEntry.id,
1117
1182
  type: "parallel",
1118
1183
  index: 0,
1119
- component,
1120
- loading: parallelEntry.loading === false ? null : parallelEntry.loading,
1121
- transition: parallelEntry.transition,
1184
+ component: null as any,
1122
1185
  params,
1123
1186
  slot,
1124
1187
  belongsToRoute,
@@ -1126,8 +1189,87 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
1126
1189
  ...(parallelEntry.mountPath
1127
1190
  ? { mountPath: parallelEntry.mountPath }
1128
1191
  : {}),
1192
+ };
1193
+
1194
+ return await evaluateRevalidation({
1195
+ segment: dummySegment,
1196
+ prevParams,
1197
+ getPrevSegment: null,
1198
+ request,
1199
+ prevUrl,
1200
+ nextUrl,
1201
+ revalidations: parallelEntry.revalidate.map((fn, i) => ({
1202
+ name: `revalidate${i}`,
1203
+ fn,
1204
+ })),
1205
+ routeKey,
1206
+ context,
1207
+ actionContext,
1208
+ stale,
1209
+ traceSource: "parallel",
1129
1210
  });
1211
+ })();
1212
+ emitRevalidationDecision(
1213
+ parallelId,
1214
+ context.pathname,
1215
+ routeKey,
1216
+ shouldResolve,
1217
+ );
1218
+
1219
+ let component: ReactNode | undefined;
1220
+ if (shouldResolve) {
1221
+ component = await tryStaticSlot(parallelEntry, slot, parallelId);
1222
+ }
1223
+ if (component === undefined) {
1224
+ const hasLoadingFallback =
1225
+ parallelEntry.loading !== undefined && parallelEntry.loading !== false;
1226
+ if (!shouldResolve) {
1227
+ component = null;
1228
+ } else if (handler === undefined) {
1229
+ // Handler evicted (production static slot) but static lookup missed.
1230
+ component = null;
1231
+ } else if (hasLoadingFallback) {
1232
+ const result =
1233
+ typeof handler === "function" ? handler(context) : handler;
1234
+ if (result instanceof Promise) {
1235
+ const tracked = deps.trackHandler(result, {
1236
+ segmentId: parallelId,
1237
+ segmentType: "parallel",
1238
+ });
1239
+ observeStreamedHandler(
1240
+ tracked,
1241
+ parallelId,
1242
+ "parallel",
1243
+ context.pathname,
1244
+ routeKey,
1245
+ params,
1246
+ );
1247
+ component = tracked as ReactNode;
1248
+ } else {
1249
+ component = result as ReactNode;
1250
+ }
1251
+ } else {
1252
+ component =
1253
+ typeof handler === "function" ? await handler(context) : handler;
1254
+ }
1130
1255
  }
1256
+
1257
+ segments.push({
1258
+ id: parallelId,
1259
+ namespace: parallelEntry.id,
1260
+ type: "parallel",
1261
+ index: 0,
1262
+ component,
1263
+ loading: parallelEntry.loading === false ? null : parallelEntry.loading,
1264
+ transition: parallelEntry.transition,
1265
+ params,
1266
+ slot,
1267
+ belongsToRoute,
1268
+ parallelName: `${parallelEntry.id}.${slot}`,
1269
+ ...(parallelEntry.mountPath
1270
+ ? { mountPath: parallelEntry.mountPath }
1271
+ : {}),
1272
+ });
1131
1273
  }
1132
1274
 
1133
1275
  return { segments, matchedIds };
@@ -1152,6 +1294,7 @@ export async function resolveAllSegmentsWithRevalidation<TEnv>(
1152
1294
  localRouteName: string,
1153
1295
  pathname: string,
1154
1296
  deps: SegmentResolutionDeps<TEnv>,
1297
+ stale?: boolean,
1155
1298
  ): Promise<{ segments: ResolvedSegment[]; matchedIds: string[] }> {
1156
1299
  const allSegments: ResolvedSegment[] = [];
1157
1300
  const matchedIds: string[] = [];
@@ -1178,6 +1321,11 @@ export async function resolveAllSegmentsWithRevalidation<TEnv>(
1178
1321
  }
1179
1322
 
1180
1323
  const nonParallelEntry = entry as Exclude<EntryData, { type: "parallel" }>;
1324
+ if (entry.type === "cache") {
1325
+ const store = RSCRouterContext.getStore();
1326
+ if (store) store.insideCacheScope = true;
1327
+ }
1328
+ const doneEntry = track(`segment:${entry.id}`, 1);
1181
1329
  const resolved = await resolveWithErrorBoundary(
1182
1330
  nonParallelEntry,
1183
1331
  params,
@@ -1195,15 +1343,14 @@ export async function resolveAllSegmentsWithRevalidation<TEnv>(
1195
1343
  loaderPromises,
1196
1344
  deps,
1197
1345
  actionContext,
1198
- false,
1346
+ stale,
1199
1347
  ),
1200
1348
  (seg) => ({ segments: [seg], matchedIds: [seg.id] }),
1201
1349
  deps,
1202
- telemetry
1203
- ? { request, url: context.url, routeKey, isPartial: true, telemetry }
1204
- : undefined,
1350
+ { request, url: context.url, routeKey, isPartial: true, telemetry },
1205
1351
  pathname,
1206
1352
  );
1353
+ doneEntry();
1207
1354
 
1208
1355
  // Deduplicate segments and matchedIds by ID, matching resolveAllSegments.
1209
1356
  // include() scopes can produce entries that resolve the same shared