@rangojs/router 0.0.0-experimental.1b930379 → 0.0.0-experimental.1db96a9e

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