@rangojs/router 0.0.0-experimental.ea6d5eec → 0.0.0-experimental.eb0645d3

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