@rangojs/router 0.0.0-experimental.e16b7c00 → 0.0.0-experimental.e9c0b2f2

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 (1155) hide show
  1. package/AGENTS.md +8 -0
  2. package/README.md +64 -6
  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 +195 -52
  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/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  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/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  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/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +1165 -310
  799. package/dist/vite/index.js.bak +5448 -0
  800. package/dist/vite/index.js.map +1 -0
  801. package/dist/vite/index.named-routes.gen.ts +103 -0
  802. package/dist/vite/package-resolution.d.ts +43 -0
  803. package/dist/vite/package-resolution.d.ts.map +1 -0
  804. package/dist/vite/package-resolution.js +112 -0
  805. package/dist/vite/package-resolution.js.map +1 -0
  806. package/dist/vite/virtual-entries.d.ts +25 -0
  807. package/dist/vite/virtual-entries.d.ts.map +1 -0
  808. package/dist/vite/virtual-entries.js +110 -0
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +71 -7
  811. package/skills/api-client/SKILL.md +211 -0
  812. package/skills/breadcrumbs/SKILL.md +61 -1
  813. package/skills/bundle-analysis/SKILL.md +2 -2
  814. package/skills/cache-guide/SKILL.md +2 -2
  815. package/skills/caching/SKILL.md +92 -10
  816. package/skills/css/SKILL.md +76 -0
  817. package/skills/debug-manifest/SKILL.md +4 -2
  818. package/skills/document-cache/SKILL.md +2 -2
  819. package/skills/handler-use/SKILL.md +1 -1
  820. package/skills/hooks/SKILL.md +40 -29
  821. package/skills/host-router/SKILL.md +80 -3
  822. package/skills/intercept/SKILL.md +5 -3
  823. package/skills/layout/SKILL.md +11 -6
  824. package/skills/loader/SKILL.md +25 -19
  825. package/skills/middleware/SKILL.md +4 -2
  826. package/skills/migrate-nextjs/SKILL.md +3 -1
  827. package/skills/migrate-react-router/SKILL.md +4 -2
  828. package/skills/mime-routes/SKILL.md +2 -2
  829. package/skills/observability/SKILL.md +61 -4
  830. package/skills/parallel/SKILL.md +9 -4
  831. package/skills/prerender/SKILL.md +31 -10
  832. package/skills/rango/SKILL.md +31 -10
  833. package/skills/response-routes/SKILL.md +63 -45
  834. package/skills/route/SKILL.md +14 -2
  835. package/skills/router-setup/SKILL.md +27 -3
  836. package/skills/scripts/SKILL.md +179 -0
  837. package/skills/server-actions/SKILL.md +25 -1
  838. package/skills/tailwind/SKILL.md +27 -3
  839. package/skills/testing/SKILL.md +129 -0
  840. package/skills/testing/bindings.md +103 -0
  841. package/skills/testing/cache-prerender.md +127 -0
  842. package/skills/testing/client-components.md +124 -0
  843. package/skills/testing/e2e-parity.md +125 -0
  844. package/skills/testing/flight.md +91 -0
  845. package/skills/testing/handles.md +129 -0
  846. package/skills/testing/loader.md +128 -0
  847. package/skills/testing/middleware.md +99 -0
  848. package/skills/testing/render-handler.md +121 -0
  849. package/skills/testing/response-routes.md +95 -0
  850. package/skills/testing/reverse-and-types.md +84 -0
  851. package/skills/testing/server-actions.md +107 -0
  852. package/skills/testing/server-tree.md +128 -0
  853. package/skills/testing/setup.md +123 -0
  854. package/skills/typesafety/SKILL.md +6 -5
  855. package/skills/use-cache/SKILL.md +10 -9
  856. package/skills/vercel/SKILL.md +128 -0
  857. package/src/__augment-tests__/augmented.check.ts +2 -3
  858. package/src/__internal.ts +0 -65
  859. package/src/browser/action-coordinator.ts +1 -1
  860. package/src/browser/action-fence.ts +47 -0
  861. package/src/browser/app-shell.ts +14 -27
  862. package/src/browser/connection-warmup.ts +134 -0
  863. package/src/browser/cookie-name.ts +140 -0
  864. package/src/browser/event-controller.ts +115 -89
  865. package/src/browser/invalidate-client-cache.ts +52 -0
  866. package/src/browser/navigation-bridge.ts +16 -52
  867. package/src/browser/navigation-client.ts +84 -69
  868. package/src/browser/navigation-store-handle.ts +38 -0
  869. package/src/browser/navigation-store.ts +25 -74
  870. package/src/browser/navigation-transaction.ts +0 -32
  871. package/src/browser/partial-update.ts +81 -127
  872. package/src/browser/prefetch/cache.ts +99 -72
  873. package/src/browser/prefetch/fetch.ts +176 -34
  874. package/src/browser/prefetch/queue.ts +6 -3
  875. package/src/browser/rango-state.ts +157 -115
  876. package/src/browser/react/Link.tsx +30 -7
  877. package/src/browser/react/NavigationProvider.tsx +32 -95
  878. package/src/browser/react/ScrollRestoration.tsx +10 -6
  879. package/src/browser/react/filter-segment-order.ts +17 -2
  880. package/src/browser/react/index.ts +0 -51
  881. package/src/browser/react/location-state-shared.ts +14 -15
  882. package/src/browser/react/location-state.ts +0 -1
  883. package/src/browser/react/use-action.ts +6 -15
  884. package/src/browser/react/use-handle.ts +0 -5
  885. package/src/browser/react/use-href.tsx +8 -1
  886. package/src/browser/react/use-link-status.ts +33 -8
  887. package/src/browser/react/use-navigation.ts +10 -5
  888. package/src/browser/react/use-params.ts +0 -2
  889. package/src/browser/react/use-router.ts +6 -4
  890. package/src/browser/react/use-search-params.ts +0 -5
  891. package/src/browser/react/use-segments.ts +0 -13
  892. package/src/browser/response-adapter.ts +41 -4
  893. package/src/browser/rsc-router.tsx +43 -18
  894. package/src/browser/scroll-restoration.ts +8 -3
  895. package/src/browser/server-action-bridge.ts +194 -28
  896. package/src/browser/types.ts +40 -21
  897. package/src/browser/validate-redirect-origin.ts +43 -16
  898. package/src/build/generate-route-types.ts +1 -1
  899. package/src/build/index.ts +8 -4
  900. package/src/build/prefix-tree-utils.ts +123 -0
  901. package/src/build/route-trie.ts +117 -15
  902. package/src/build/route-types/ast-route-extraction.ts +15 -8
  903. package/src/build/route-types/codegen.ts +12 -1
  904. package/src/build/route-types/include-resolution.ts +116 -22
  905. package/src/build/route-types/param-extraction.ts +6 -3
  906. package/src/build/route-types/per-module-writer.ts +15 -2
  907. package/src/build/route-types/router-processing.ts +77 -41
  908. package/src/build/route-types/source-scan.ts +105 -7
  909. package/src/cache/cache-key-utils.ts +29 -13
  910. package/src/cache/cache-policy.ts +42 -62
  911. package/src/cache/cache-runtime.ts +126 -30
  912. package/src/cache/cache-scope.ts +118 -43
  913. package/src/cache/cache-tag.ts +7 -39
  914. package/src/cache/cf/cf-base64.ts +33 -0
  915. package/src/cache/cf/cf-cache-constants.ts +127 -0
  916. package/src/cache/cf/cf-cache-store.ts +1257 -537
  917. package/src/cache/cf/cf-cache-types.ts +349 -0
  918. package/src/cache/cf/cf-kv-utils.ts +46 -0
  919. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  920. package/src/cache/cf/index.ts +6 -19
  921. package/src/cache/document-cache.ts +32 -32
  922. package/src/cache/handle-snapshot.ts +70 -0
  923. package/src/cache/index.ts +20 -24
  924. package/src/cache/memory-segment-store.ts +3 -48
  925. package/src/cache/profile-registry.ts +31 -31
  926. package/src/cache/read-through-swr.ts +41 -11
  927. package/src/cache/segment-codec.ts +9 -17
  928. package/src/cache/tag-invalidation.ts +29 -5
  929. package/src/cache/types.ts +14 -104
  930. package/src/cache/vercel/index.ts +11 -0
  931. package/src/cache/vercel/vercel-cache-store.ts +855 -0
  932. package/src/client.rsc.tsx +42 -22
  933. package/src/client.tsx +31 -58
  934. package/src/cloudflare/index.ts +11 -0
  935. package/src/cloudflare/tracing.ts +109 -0
  936. package/src/component-utils.ts +19 -0
  937. package/src/components/DefaultDocument.tsx +8 -2
  938. package/src/context-var.ts +13 -1
  939. package/src/decode-loader-results.ts +18 -2
  940. package/src/defer.ts +196 -0
  941. package/src/deps/ssr.ts +0 -1
  942. package/src/encode-kv.ts +49 -0
  943. package/src/errors.ts +0 -3
  944. package/src/escape-script.ts +52 -0
  945. package/src/handle.ts +28 -18
  946. package/src/handles/MetaTags.tsx +56 -19
  947. package/src/handles/Scripts.tsx +183 -0
  948. package/src/handles/breadcrumbs.ts +37 -8
  949. package/src/handles/is-thenable.ts +19 -0
  950. package/src/handles/meta.ts +51 -40
  951. package/src/handles/script.ts +244 -0
  952. package/src/host/cookie-handler.ts +9 -60
  953. package/src/host/errors.ts +0 -24
  954. package/src/host/index.ts +6 -0
  955. package/src/host/pattern-matcher.ts +23 -52
  956. package/src/host/router.ts +1 -65
  957. package/src/host/testing.ts +40 -27
  958. package/src/host/types.ts +6 -2
  959. package/src/href-client.ts +7 -12
  960. package/src/index.rsc.ts +75 -8
  961. package/src/index.ts +60 -4
  962. package/src/internal-debug.ts +2 -4
  963. package/src/loader.rsc.ts +19 -9
  964. package/src/loader.ts +12 -4
  965. package/src/network-error-thrower.tsx +1 -6
  966. package/src/outlet-provider.tsx +1 -5
  967. package/src/prerender/param-hash.ts +16 -16
  968. package/src/prerender/store.ts +32 -37
  969. package/src/prerender.ts +58 -3
  970. package/src/redirect-origin.ts +100 -0
  971. package/src/regex-escape.ts +8 -0
  972. package/src/response-utils.ts +25 -0
  973. package/src/root-error-boundary.tsx +1 -19
  974. package/src/route-content-wrapper.tsx +1 -44
  975. package/src/route-definition/dsl-helpers.ts +39 -21
  976. package/src/route-definition/helpers-types.ts +3 -3
  977. package/src/route-definition/redirect.ts +44 -11
  978. package/src/route-definition/resolve-handler-use.ts +6 -0
  979. package/src/route-map-builder.ts +0 -16
  980. package/src/router/basename.ts +14 -0
  981. package/src/router/content-negotiation.ts +58 -23
  982. package/src/router/error-handling.ts +44 -17
  983. package/src/router/find-match.ts +44 -23
  984. package/src/router/handler-context.ts +6 -1
  985. package/src/router/instrument.ts +350 -0
  986. package/src/router/intercept-resolution.ts +35 -2
  987. package/src/router/lazy-includes.ts +7 -44
  988. package/src/router/loader-resolution.ts +139 -73
  989. package/src/router/logging.ts +0 -6
  990. package/src/router/manifest.ts +18 -29
  991. package/src/router/match-api.ts +0 -20
  992. package/src/router/match-context.ts +0 -22
  993. package/src/router/match-handlers.ts +57 -58
  994. package/src/router/match-middleware/background-revalidation.ts +6 -7
  995. package/src/router/match-middleware/cache-lookup.ts +115 -194
  996. package/src/router/match-middleware/cache-store.ts +28 -32
  997. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  998. package/src/router/match-middleware/segment-resolution.ts +0 -22
  999. package/src/router/match-pipelines.ts +1 -42
  1000. package/src/router/match-result.ts +1 -52
  1001. package/src/router/metrics.ts +0 -34
  1002. package/src/router/middleware-types.ts +0 -116
  1003. package/src/router/middleware.ts +175 -90
  1004. package/src/router/navigation-snapshot.ts +0 -51
  1005. package/src/router/params-util.ts +23 -0
  1006. package/src/router/pattern-matching.ts +47 -89
  1007. package/src/router/prefetch-cache-ttl.ts +51 -0
  1008. package/src/router/prerender-match.ts +101 -64
  1009. package/src/router/request-classification.ts +25 -35
  1010. package/src/router/revalidation.ts +75 -81
  1011. package/src/router/route-snapshot.ts +0 -1
  1012. package/src/router/router-context.ts +3 -28
  1013. package/src/router/router-interfaces.ts +38 -7
  1014. package/src/router/router-options.ts +111 -4
  1015. package/src/router/segment-resolution/fresh.ts +66 -78
  1016. package/src/router/segment-resolution/helpers.ts +86 -6
  1017. package/src/router/segment-resolution/loader-cache.ts +57 -23
  1018. package/src/router/segment-resolution/revalidation.ts +212 -304
  1019. package/src/router/segment-resolution/static-store.ts +19 -5
  1020. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1021. package/src/router/segment-resolution.ts +5 -1
  1022. package/src/router/segment-wrappers.ts +6 -5
  1023. package/src/router/state-cookie-name.ts +33 -0
  1024. package/src/router/telemetry-otel.ts +161 -199
  1025. package/src/router/telemetry.ts +96 -19
  1026. package/src/router/timeout.ts +0 -20
  1027. package/src/router/tracing.ts +206 -0
  1028. package/src/router/trie-matching.ts +163 -64
  1029. package/src/router/types.ts +1 -63
  1030. package/src/router/url-params.ts +0 -5
  1031. package/src/router.ts +87 -37
  1032. package/src/rsc/handler-context.ts +1 -0
  1033. package/src/rsc/handler.ts +232 -153
  1034. package/src/rsc/helpers.ts +97 -4
  1035. package/src/rsc/index.ts +1 -4
  1036. package/src/rsc/json-route-result.ts +38 -0
  1037. package/src/rsc/loader-fetch.ts +114 -38
  1038. package/src/rsc/manifest-init.ts +28 -41
  1039. package/src/rsc/origin-guard.ts +11 -15
  1040. package/src/rsc/progressive-enhancement.ts +59 -9
  1041. package/src/rsc/redirect-guard.ts +99 -0
  1042. package/src/rsc/response-cache-serve.ts +238 -0
  1043. package/src/rsc/response-error.ts +79 -12
  1044. package/src/rsc/response-route-handler.ts +57 -147
  1045. package/src/rsc/rsc-rendering.ts +64 -24
  1046. package/src/rsc/runtime-warnings.ts +14 -0
  1047. package/src/rsc/server-action.ts +244 -81
  1048. package/src/rsc/types.ts +15 -3
  1049. package/src/runtime-env.ts +18 -0
  1050. package/src/search-params.ts +31 -26
  1051. package/src/segment-loader-promise.ts +31 -4
  1052. package/src/segment-system.tsx +89 -89
  1053. package/src/server/context.ts +32 -0
  1054. package/src/server/cookie-parse.ts +32 -0
  1055. package/src/server/cookie-store.ts +52 -1
  1056. package/src/server/handle-store.ts +21 -38
  1057. package/src/server/loader-registry.ts +21 -42
  1058. package/src/server/request-context.ts +189 -131
  1059. package/src/ssr/index.tsx +19 -18
  1060. package/src/static-handler.ts +10 -13
  1061. package/src/testing/cache-status.ts +162 -0
  1062. package/src/testing/collect-handle.ts +40 -0
  1063. package/src/testing/dispatch.ts +701 -0
  1064. package/src/testing/dom.entry.ts +22 -0
  1065. package/src/testing/e2e/fixture.ts +188 -0
  1066. package/src/testing/e2e/index.ts +128 -0
  1067. package/src/testing/e2e/matchers.ts +35 -0
  1068. package/src/testing/e2e/page-helpers.ts +272 -0
  1069. package/src/testing/e2e/parity.ts +387 -0
  1070. package/src/testing/e2e/server.ts +195 -0
  1071. package/src/testing/flight-matchers.ts +97 -0
  1072. package/src/testing/flight-normalize.ts +11 -0
  1073. package/src/testing/flight-runtime.d.ts +57 -0
  1074. package/src/testing/flight-tree.ts +682 -0
  1075. package/src/testing/flight.entry.ts +52 -0
  1076. package/src/testing/flight.ts +257 -0
  1077. package/src/testing/generated-routes.ts +183 -0
  1078. package/src/testing/index.ts +99 -0
  1079. package/src/testing/internal/context.ts +371 -0
  1080. package/src/testing/internal/flight-client-globals.ts +30 -0
  1081. package/src/testing/internal/seed-vars.ts +54 -0
  1082. package/src/testing/render-handler.ts +343 -0
  1083. package/src/testing/render-route.tsx +581 -0
  1084. package/src/testing/run-loader.ts +385 -0
  1085. package/src/testing/run-middleware.ts +205 -0
  1086. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1087. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1088. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1089. package/src/testing/vitest-stubs/version.ts +5 -0
  1090. package/src/testing/vitest.ts +305 -0
  1091. package/src/theme/ThemeProvider.tsx +20 -58
  1092. package/src/theme/ThemeScript.tsx +7 -9
  1093. package/src/theme/constants.ts +52 -13
  1094. package/src/theme/index.ts +0 -7
  1095. package/src/theme/theme-context.ts +1 -5
  1096. package/src/theme/theme-script.ts +22 -21
  1097. package/src/theme/use-theme.ts +0 -3
  1098. package/src/types/boundaries.ts +0 -35
  1099. package/src/types/cache-types.ts +3 -3
  1100. package/src/types/error-types.ts +25 -89
  1101. package/src/types/global-namespace.ts +15 -15
  1102. package/src/types/handler-context.ts +44 -14
  1103. package/src/types/index.ts +0 -10
  1104. package/src/types/loader-types.ts +6 -3
  1105. package/src/types/request-scope.ts +8 -22
  1106. package/src/types/route-config.ts +6 -50
  1107. package/src/types/route-entry.ts +0 -6
  1108. package/src/types/segments.ts +0 -13
  1109. package/src/urls/include-helper.ts +0 -4
  1110. package/src/urls/index.ts +1 -8
  1111. package/src/urls/path-helper-types.ts +8 -2
  1112. package/src/urls/path-helper.ts +0 -54
  1113. package/src/urls/type-extraction.ts +33 -24
  1114. package/src/urls/urls-function.ts +0 -13
  1115. package/src/use-loader.tsx +0 -186
  1116. package/src/vercel/index.ts +11 -0
  1117. package/src/vercel/tracing.ts +88 -0
  1118. package/src/vite/discovery/bundle-postprocess.ts +2 -1
  1119. package/src/vite/discovery/discover-routers.ts +33 -42
  1120. package/src/vite/discovery/prerender-collection.ts +33 -46
  1121. package/src/vite/discovery/state.ts +12 -1
  1122. package/src/vite/discovery/virtual-module-codegen.ts +1 -11
  1123. package/src/vite/index.ts +2 -0
  1124. package/src/vite/plugin-types.ts +143 -10
  1125. package/src/vite/plugins/cjs-to-esm.ts +8 -12
  1126. package/src/vite/plugins/client-ref-dedup.ts +0 -11
  1127. package/src/vite/plugins/client-ref-hashing.ts +0 -10
  1128. package/src/vite/plugins/cloudflare-protocol-stub.ts +0 -20
  1129. package/src/vite/plugins/expose-action-id.ts +2 -73
  1130. package/src/vite/plugins/expose-id-utils.ts +85 -56
  1131. package/src/vite/plugins/expose-ids/export-analysis.ts +30 -43
  1132. package/src/vite/plugins/expose-ids/handler-transform.ts +5 -31
  1133. package/src/vite/plugins/expose-ids/loader-transform.ts +12 -20
  1134. package/src/vite/plugins/expose-ids/router-transform.ts +98 -26
  1135. package/src/vite/plugins/expose-internal-ids.ts +10 -1
  1136. package/src/vite/plugins/performance-tracks.ts +0 -3
  1137. package/src/vite/plugins/refresh-cmd.ts +1 -1
  1138. package/src/vite/plugins/use-cache-transform.ts +21 -46
  1139. package/src/vite/plugins/vercel-output.ts +295 -0
  1140. package/src/vite/plugins/version-injector.ts +0 -20
  1141. package/src/vite/plugins/version-plugin.ts +6 -66
  1142. package/src/vite/plugins/virtual-entries.ts +70 -17
  1143. package/src/vite/rango.ts +135 -134
  1144. package/src/vite/router-discovery.ts +21 -8
  1145. package/src/vite/utils/ast-handler-extract.ts +11 -20
  1146. package/src/vite/utils/bundle-analysis.ts +6 -13
  1147. package/src/vite/utils/client-chunks.ts +0 -6
  1148. package/src/vite/utils/directive-prologue.ts +40 -0
  1149. package/src/vite/utils/forward-user-plugins.ts +0 -22
  1150. package/src/vite/utils/manifest-utils.ts +4 -75
  1151. package/src/vite/utils/package-resolution.ts +1 -73
  1152. package/src/vite/utils/prerender-utils.ts +54 -40
  1153. package/src/vite/utils/shared-utils.ts +8 -37
  1154. package/src/browser/shallow.ts +0 -40
  1155. package/src/router/middleware-cookies.ts +0 -55
@@ -1,5 +1,5 @@
1
1
  import { tryTrieMatch } from "./trie-matching.js";
2
- import { getRouteTrie, getRouterTrie } from "../route-map-builder.js";
2
+ import { getRouterTrie } from "../route-map-builder.js";
3
3
  import {
4
4
  findMatch as findRouteMatch,
5
5
  isLazyEvaluationNeeded,
@@ -8,6 +8,16 @@ import {
8
8
  import type { MetricsStore } from "../server/context";
9
9
  import type { RouteEntry } from "../types";
10
10
 
11
+ // The single-entry cache is module-lifetime, keyed only on pathname, so the same
12
+ // result object is handed to every same-pathname request. ctx.params aliases
13
+ // this object, so handlers mutating it would corrupt the cache for later requests.
14
+ // Clone params; entry/flags are read-only and shared safely.
15
+ function cloneMatchResult<TEnv>(
16
+ r: RouteMatchResult<TEnv> | null,
17
+ ): RouteMatchResult<TEnv> | null {
18
+ return r ? { ...r, params: { ...r.params } } : null;
19
+ }
20
+
11
21
  export interface FindMatchDeps<TEnv = any> {
12
22
  routesEntries: RouteEntry<TEnv>[];
13
23
  evaluateLazyEntry: (entry: RouteEntry<TEnv>) => void;
@@ -27,20 +37,14 @@ export function createFindMatch<TEnv = any>(
27
37
  let lastFindMatchPathname: string | null = null;
28
38
  let lastFindMatchResult: RouteMatchResult<TEnv> | null = null;
29
39
 
30
- // Wrapper for findMatch that uses routesEntries
31
- // Handles lazy evaluation by evaluating lazy entries on first match.
32
- // Phase 1: try O(path_length) trie match.
33
- // Phase 2: fall back to regex iteration.
34
40
  return function findMatch(
35
41
  pathname: string,
36
42
  ms?: MetricsStore,
37
43
  ): RouteMatchResult<TEnv> | null {
38
- // Return cached result if same pathname (avoids double-match per request)
39
44
  if (lastFindMatchPathname === pathname) {
40
- return lastFindMatchResult;
45
+ return cloneMatchResult(lastFindMatchResult);
41
46
  }
42
47
 
43
- // Helper to push sub-metrics
44
48
  const pushMetric = ms
45
49
  ? (label: string, start: number) => {
46
50
  ms.metrics.push({
@@ -51,17 +55,15 @@ export function createFindMatch<TEnv = any>(
51
55
  }
52
56
  : undefined;
53
57
 
54
- // Phase 1: Try trie match (O(path_length))
55
- // Only use the per-router trie. The global trie merges routes from ALL
56
- // routers and must not be used — in multi-router setups (host routing)
57
- // overlapping paths like "/" would match the wrong app's route.
58
58
  const routeTrie = getRouterTrie(deps.routerId);
59
+ let trieMatched = false;
59
60
  if (routeTrie) {
60
61
  const trieStart = performance.now();
61
62
  const trieResult = tryTrieMatch(routeTrie, pathname);
62
63
  pushMetric?.("match:trie", trieStart);
63
64
 
64
65
  if (trieResult) {
66
+ trieMatched = true;
65
67
  // Find the RouteEntry that contains this route.
66
68
  // Multiple entries can share the same staticPrefix (e.g., several
67
69
  // include("/", patterns) calls all produce staticPrefix=""). Evaluate
@@ -83,12 +85,8 @@ export function createFindMatch<TEnv = any>(
83
85
  }
84
86
  }
85
87
 
86
- // If no entry had the route in its routes map, use the first matching
87
- // entry as fallback (handles main entry with inline routes not yet
88
- // reflected in its routes object).
89
88
  if (!entry) entry = fallbackEntry;
90
89
 
91
- // If entry not found (nested include not yet discovered), evaluate parent
92
90
  if (!entry) {
93
91
  const parent = deps.routesEntries.find(
94
92
  (e) =>
@@ -112,9 +110,7 @@ export function createFindMatch<TEnv = any>(
112
110
  entry,
113
111
  routeKey: trieResult.routeKey,
114
112
  params: trieResult.params,
115
- optionalParams: new Set(trieResult.optionalParams || []),
116
113
  redirectTo: trieResult.redirectTo,
117
- ancestry: trieResult.ancestry,
118
114
  ...(trieResult.pr ? { pr: true } : {}),
119
115
  ...(trieResult.pt ? { pt: true } : {}),
120
116
  ...(trieResult.responseType
@@ -125,17 +121,14 @@ export function createFindMatch<TEnv = any>(
125
121
  : {}),
126
122
  ...(trieResult.rscFirst ? { rscFirst: true } : {}),
127
123
  };
128
- return lastFindMatchResult;
124
+ return cloneMatchResult(lastFindMatchResult);
129
125
  }
130
126
  }
131
127
  }
132
128
 
133
- // Phase 2: Fall back to existing matching (regex iteration)
134
129
  const regexStart = performance.now();
135
130
  let result = findRouteMatch(pathname, deps.routesEntries);
136
131
 
137
- // If we hit a lazy entry that needs evaluation, evaluate and retry.
138
- // Cap iterations to prevent infinite loops from pathological nesting.
139
132
  const MAX_LAZY_ITERATIONS = 100;
140
133
  let iterations = 0;
141
134
  while (isLazyEvaluationNeeded(result)) {
@@ -153,8 +146,36 @@ export function createFindMatch<TEnv = any>(
153
146
  }
154
147
  pushMetric?.("match:regex-fallback", regexStart);
155
148
 
149
+ // The trie is the single source of truth and is built before findMatch in
150
+ // both dev (handler rebuild) and production (ensureRouterManifest). If the
151
+ // trie was present yet the regex fallback resolved a real match, the trie
152
+ // has a gap (e.g. a route shape it cannot represent) and dev/prod could
153
+ // diverge if the trie were ever absent. Surface it in dev; folded out in
154
+ // production builds.
155
+ //
156
+ // Suppress when the trie DID match (`trieMatched`): that path falls through
157
+ // to the regex fallback only on the first request to a not-yet-spliced lazy
158
+ // entry (e.g. a 2+-level nested include whose deeper parent has not been
159
+ // evaluated). The trie knew the route; runtime lazy discovery simply lagged.
160
+ // That is the supported lazy-include flow, not a trie gap, so warning on it
161
+ // is a false positive (it manufactures bug reports and erodes the signal).
162
+ if (
163
+ process.env.NODE_ENV !== "production" &&
164
+ routeTrie &&
165
+ !trieMatched &&
166
+ result &&
167
+ !isLazyEvaluationNeeded(result)
168
+ ) {
169
+ console.warn(
170
+ `[@rangojs/router] Route "${pathname}" resolved via the regex fallback ` +
171
+ `even though the route trie was present. The trie should be the single ` +
172
+ `matching source of truth; this indicates a trie gap. Please report this ` +
173
+ `with your route configuration.`,
174
+ );
175
+ }
176
+
156
177
  lastFindMatchPathname = pathname;
157
178
  lastFindMatchResult = result;
158
- return result;
179
+ return cloneMatchResult(result);
159
180
  };
160
181
  }
@@ -21,6 +21,11 @@ import { PRERENDER_PASSTHROUGH } from "../prerender.js";
21
21
  import { substitutePatternParams } from "./substitute-pattern-params.js";
22
22
  import { fireAndForgetWaitUntil } from "../types/request-scope.js";
23
23
 
24
+ // Mutating Headers methods guarded so they throw inside "use cache" / cache()
25
+ // scope. Module-level constant (read-only, .has() lookups) so it is allocated
26
+ // once at module load instead of per createHandlerContext (per-request) call.
27
+ const MUTATING_HEADERS_METHODS = new Set(["set", "append", "delete"]);
28
+
24
29
  /**
25
30
  * Strip internal _rsc* query params from a URL.
26
31
  * Returns a new URL with only user-facing params.
@@ -212,7 +217,7 @@ export function createHandlerContext<TEnv>(
212
217
  // Guard mutating Headers methods so they throw inside "use cache" or cache() scope.
213
218
  // Uses lazy `ctx` reference (assigned below) — only the specific handler ctx
214
219
  // is stamped by cache-runtime, not the shared request context.
215
- const MUTATING_HEADERS_METHODS = new Set(["set", "append", "delete"]);
220
+ // MUTATING_HEADERS_METHODS is hoisted to module scope (constant, read-only).
216
221
  let ctx: InternalHandlerContext<any, TEnv>;
217
222
  const guardedHeaders = new Proxy(stubResponse.headers, {
218
223
  get(target, prop, receiver) {
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Phase + event instrumentation — the single internal API for observing router
3
+ * work.
4
+ *
5
+ * The router exposes the same work on three surfaces, and the rule is: each
6
+ * surface has exactly one owner here, so they cannot drift.
7
+ *
8
+ * - observePhase(): a span of work. Co-emits the `debugPerformance` perf
9
+ * metric (metrics store -> [RSC Perf] timeline + Server-Timing) AND the
10
+ * platform span (tracing runner -> Cloudflare custom spans / OTel). From one
11
+ * wrap site, so the span set is always a subset of the perf phases and the
12
+ * two can't disagree. Phases that meter their own perf metric with a finer
13
+ * decomposition (request, middleware) pass `metric: false` and get the span
14
+ * only — still co-located, still one owner per surface.
15
+ * - observeEvent(): a discrete fact (TelemetrySink): cache decisions,
16
+ * revalidation decisions, handler errors, timeouts, origin rejections.
17
+ * Event-shaped, not phase-shaped — derived from the same call sites but a
18
+ * separate surface from spans.
19
+ *
20
+ * Why phases, not events, are the parent abstraction: Cloudflare's span API is
21
+ * callback-bound (enterSpan wraps the actual work), so the callback boundary is
22
+ * the source of truth — async-context nesting (a loader's KV/D1/fetch spans
23
+ * landing under rango.loader) cannot be faithfully reconstructed from
24
+ * after-the-fact start/end events. Spans drive; events are emitted alongside.
25
+ *
26
+ * Phase identity lives in the PHASES registry below, so the raw `rango.*` span
27
+ * names, perf-metric labels, and span attributes have a single definition each.
28
+ *
29
+ * When neither perf surface nor tracing is active on the request, observePhase
30
+ * is a direct call — no wrapper, no timestamp, no allocation.
31
+ */
32
+
33
+ import { _getRequestContext } from "../server/request-context.js";
34
+ import { isAutoGeneratedRouteName } from "../route-name.js";
35
+ import { getRouterContext } from "./router-context.js";
36
+ import { resolveSink, safeEmit, type TelemetryEvent } from "./telemetry.js";
37
+ import { appendMetric } from "./metrics.js";
38
+ import { type MetricsStore } from "../server/context.js";
39
+ import {
40
+ NOOP_TRACE_SPAN,
41
+ traceSpan,
42
+ runThenSettle,
43
+ type TracePhase,
44
+ type TraceSpan,
45
+ } from "./tracing.js";
46
+
47
+ /**
48
+ * Perf-metric boundary for a phase, or `false` for span-only. `false` means the
49
+ * caller records its own perf metric with a finer decomposition than a single
50
+ * wrap (request: a grand total incl. pre-context bootstrap; middleware: pre/post
51
+ * own-time), so observePhase opens the span but records no metric of its own.
52
+ */
53
+ export type PhaseMetric =
54
+ | { label: string | (() => string); depth?: number }
55
+ | false;
56
+
57
+ /** Describes one observable phase across the perf and span surfaces. */
58
+ export interface PhaseSpec {
59
+ /** Perf timeline label + Server-Timing name, or false for span-only. */
60
+ metric: PhaseMetric;
61
+ /** Span phase gate (per-phase toggle in the tracing config). */
62
+ tracePhase: TracePhase;
63
+ /** Span name (rango.*). */
64
+ spanName: string;
65
+ /** Span attributes set automatically when the span opens. */
66
+ attributes?: Record<string, string | number | boolean>;
67
+ /**
68
+ * Span attributes resolved AFTER the wrapped work runs (so they can read state
69
+ * that only exists once the work is underway, e.g. the matched route name).
70
+ * Applied for streaming phases once fn has constructed its value. Return
71
+ * undefined to add nothing.
72
+ */
73
+ lazyAttributes?: () => Record<string, string | number | boolean> | undefined;
74
+ }
75
+
76
+ /**
77
+ * The matched route name for the current request, or undefined when there is no
78
+ * named route (unmatched / auto-generated). Shared by the render phase's metric
79
+ * label and its rango.route span attribute so the two can't disagree.
80
+ */
81
+ function currentRouteName(): string | undefined {
82
+ const routeName = _getRequestContext()?._routeName;
83
+ return routeName && !isAutoGeneratedRouteName(routeName)
84
+ ? routeName
85
+ : undefined;
86
+ }
87
+
88
+ /**
89
+ * The router's observable phases. One definition per phase keeps the `rango.*`
90
+ * span names, perf-metric labels, and identifying attributes from spreading
91
+ * across call sites.
92
+ */
93
+ export const PHASES = {
94
+ /** Whole request pipeline. Span only — handler:total is metered directly. */
95
+ request: {
96
+ metric: false,
97
+ tracePhase: "request",
98
+ spanName: "rango.request",
99
+ } as PhaseSpec,
100
+
101
+ /** One middleware (incl. its downstream onion). Span only — the perf metric
102
+ * is the middleware's exclusive pre/post own-time, recorded directly.
103
+ * `metricLabel` is that metric's label (e.g. "middleware:auth@*"); it doubles
104
+ * as the rango.middleware_name span attribute. */
105
+ middleware: (metricLabel: string): PhaseSpec => ({
106
+ metric: false,
107
+ tracePhase: "middleware",
108
+ spanName: "rango.middleware",
109
+ attributes: { "rango.middleware_name": metricLabel },
110
+ }),
111
+
112
+ /** The server-action execution (decode args + run the action body), before
113
+ * the revalidation render. The metric label carries the action id (the
114
+ * _rsc_action / action $$id) so the perf timeline shows WHICH action ran, not
115
+ * just "an action"; the span also gets it as rango.action_id. */
116
+ action: (id: string): PhaseSpec => ({
117
+ metric: { label: `action:${id}` },
118
+ tracePhase: "action",
119
+ spanName: "rango.action",
120
+ attributes: { "rango.action_id": id },
121
+ }),
122
+
123
+ /**
124
+ * One loader execution. `depth` is the perf-timeline indentation: 2 (default)
125
+ * for render-time loaders that nest under the render phase; 1 for a standalone
126
+ * fetchable `_rsc_loader` request, which has no render parent.
127
+ */
128
+ loader: (id: string, depth: number = 2): PhaseSpec => ({
129
+ metric: { label: `loader:${id}`, depth },
130
+ tracePhase: "loader",
131
+ spanName: "rango.loader",
132
+ attributes: { "rango.loader_id": id },
133
+ }),
134
+
135
+ /** One segment route/layout handler execution (the component/handler that
136
+ * produces a segment). Span only — the perf metric (handler:<id>) is owned by
137
+ * the legacy track() at the same call site, so observePhase here adds the
138
+ * rango.handler span without double-recording. `id` is the HANDLER id (the
139
+ * entry.id used in the handler:<id> perf row), carried as rango.handler_id —
140
+ * NOT the emitted segment's id (shortCode), which differs; the *_id naming
141
+ * mirrors rango.loader_id / rango.action_id. */
142
+ handler: (id: string): PhaseSpec => ({
143
+ metric: false,
144
+ tracePhase: "handler",
145
+ spanName: "rango.handler",
146
+ attributes: { "rango.handler_id": id },
147
+ }),
148
+
149
+ /** Whole render phase: match + serialize + SSR. The metric label is resolved
150
+ * lazily at record time (after match has set the route name) so the perf
151
+ * timeline shows WHICH route rendered: `render:total:<routeName>`, falling back
152
+ * to `render:total` when there is no named route (unmatched / auto-generated). */
153
+ render: {
154
+ metric: {
155
+ label: () => {
156
+ const routeName = currentRouteName();
157
+ return routeName ? `render:total:${routeName}` : "render:total";
158
+ },
159
+ },
160
+ tracePhase: "render",
161
+ spanName: "rango.render",
162
+ // Tag the render span with the matched route so the Cloudflare/OTel waterfall
163
+ // shows WHICH route rendered (rango.render + rango.route=index), resolved
164
+ // after match has run. Kept an attribute (not baked into the span name) so the
165
+ // span name stays low-cardinality and aggregatable across routes.
166
+ lazyAttributes: () => {
167
+ const routeName = currentRouteName();
168
+ return routeName ? { "rango.route": routeName } : undefined;
169
+ },
170
+ } as PhaseSpec,
171
+
172
+ /** SSR HTML render from the RSC stream. Colon-delimited like the other ssr:*
173
+ * setup metrics (ssr:module-load / ssr:stream-mode). */
174
+ ssr: {
175
+ metric: { label: "ssr:render-html" },
176
+ tracePhase: "ssr",
177
+ spanName: "rango.ssr",
178
+ } as PhaseSpec,
179
+ } as const;
180
+
181
+ /** Apply a phase spec's static attributes to a span (the no-op span ignores them). */
182
+ function applyAttributes(
183
+ span: TraceSpan,
184
+ attributes: Record<string, string | number | boolean>,
185
+ ): void {
186
+ for (const key in attributes) span.setAttribute(key, attributes[key]);
187
+ }
188
+
189
+ /**
190
+ * Record a phase's perf metric for the interval [start, now]. The label may be
191
+ * lazy (resolved here, e.g. render:total needs the route name that match sets
192
+ * partway through the wrapped work).
193
+ */
194
+ function recordPhaseMetric(
195
+ store: MetricsStore,
196
+ metric: Exclude<PhaseMetric, false>,
197
+ start: number,
198
+ ): void {
199
+ const label =
200
+ typeof metric.label === "function" ? metric.label() : metric.label;
201
+ appendMetric(store, label, start, performance.now() - start, metric.depth);
202
+ }
203
+
204
+ /**
205
+ * Instrument one unit of work: open its span AND (unless `metric: false`) record
206
+ * its perf metric, from a single wrap site. fn is invoked exactly once with the
207
+ * span (a no-op span when tracing is off); its return value is returned
208
+ * unchanged and thrown errors / rejected promises propagate unchanged. When fn
209
+ * returns a promise both the metric duration and the span end when it settles.
210
+ *
211
+ * This is the ONLY phase primitive: every phase (request/middleware/action/
212
+ * loader/handler/render/ssr) is construction-bound — the span and metric settle
213
+ * when fn's own work completes (for the streaming phases, when the RSC/HTML
214
+ * stream is constructed, NOT when the body drains). Instrumentation is strictly
215
+ * best-effort: it never wraps or buffers the response and adds no work on the
216
+ * streaming path, so it cannot regress response latency or streaming. A loader
217
+ * that resolves while the body streams therefore keeps a rango.loader span that
218
+ * may extend past its render parent — overlapping spans are valid; the loader
219
+ * really did take that long.
220
+ *
221
+ * Reads the metrics store + tracing off the RequestContext ALS, which is active
222
+ * for the WHOLE request — contrast observeEvent, which reads the RouterContext
223
+ * ALS (entered later, during match).
224
+ */
225
+ export function observePhase<T>(
226
+ spec: PhaseSpec,
227
+ fn: (span: TraceSpan) => T,
228
+ ): T {
229
+ const reqCtx = _getRequestContext();
230
+ const store = reqCtx?._metricsStore;
231
+ const tracing = reqCtx?._tracing;
232
+
233
+ // Neither surface active: direct call, zero overhead.
234
+ if (!store && !tracing) return fn(NOOP_TRACE_SPAN);
235
+
236
+ // Attributes only land on a real span. Build the attribute/lazy wrapper only
237
+ // when this phase's span is actually enabled (not toggled off via `spans`), and
238
+ // short-circuit inside when the runner hands back the no-op span (tracing
239
+ // configured but off at runtime — e.g. no executionContext.tracing). That keeps
240
+ // the "configured but effectively off" path free of per-call attribute loops
241
+ // and lazy `.then()` allocations. `lazyAttributes` resolve AFTER fn runs (e.g.
242
+ // rango.route, known post-match) and apply on BOTH success and failure so an
243
+ // errored phase span is still tagged.
244
+ const attributes = spec.attributes;
245
+ const lazy = spec.lazyAttributes;
246
+ const spanEnabled =
247
+ tracing !== undefined && tracing.phases[spec.tracePhase] !== false;
248
+ const wrapped: (span: TraceSpan) => T =
249
+ (attributes || lazy) && spanEnabled
250
+ ? (span) => {
251
+ if (span === NOOP_TRACE_SPAN) return fn(span);
252
+ if (attributes) applyAttributes(span, attributes);
253
+ // A SYNCHRONOUS throw from fn skips applyLate — fine by design: the only
254
+ // lazyAttributes phase (render) is always async, so any internal throw
255
+ // surfaces as a rejection that the onReject branch below DOES tag. If a
256
+ // sync lazyAttributes phase is ever added, wrap this in try/catch.
257
+ const out = fn(span);
258
+ if (!lazy) return out;
259
+ const applyLate = () => {
260
+ const late = lazy();
261
+ if (late) applyAttributes(span, late);
262
+ };
263
+ if (out instanceof Promise) {
264
+ return out.then(
265
+ (value) => {
266
+ applyLate();
267
+ return value;
268
+ },
269
+ (error) => {
270
+ applyLate();
271
+ throw error;
272
+ },
273
+ ) as T;
274
+ }
275
+ applyLate();
276
+ return out;
277
+ }
278
+ : fn;
279
+
280
+ const runSpan = (): T =>
281
+ traceSpan(tracing, spec.tracePhase, spec.spanName, wrapped);
282
+
283
+ // Span-only — no perf metric to record (metric:false, or perf surface off).
284
+ const metric = spec.metric;
285
+ if (!store || metric === false) return runSpan();
286
+
287
+ // Record the phase duration on EVERY termination — success or failure — so a
288
+ // failed loader/render still shows its timing in the perf report (parity with
289
+ // the old track().finally() path it replaced).
290
+ const start = performance.now();
291
+ return runThenSettle(runSpan, () => recordPhaseMetric(store, metric, start));
292
+ }
293
+
294
+ /**
295
+ * Open a rango.handler span around one segment route/layout handler call. The
296
+ * segment-resolution hot path runs this PER SEGMENT, so it gates on the SPAN
297
+ * surface alone and calls the handler directly otherwise — building neither the
298
+ * PhaseSpec (PHASES.handler allocates) nor the wrapper closure on the off path.
299
+ * The handler:<id> perf metric is owned by the track() at the call site, so the
300
+ * span is the only surface this adds (metric:false); a debugPerformance-only
301
+ * request (no tracing) or a disabled handler phase (spans:{handler:false}) has
302
+ * nothing to record here and short-circuits.
303
+ */
304
+ export function observeHandler<C, R>(
305
+ id: string,
306
+ handler: (ctx: C) => R,
307
+ ctx: C,
308
+ ): R {
309
+ const tracing = _getRequestContext()?._tracing;
310
+ if (!tracing || tracing.phases.handler === false) return handler(ctx);
311
+ return observePhase(PHASES.handler(id), () => handler(ctx));
312
+ }
313
+
314
+ /**
315
+ * Emit one discrete telemetry event (the event-shaped counterpart to
316
+ * observePhase). Resolves the sink from the active router context and stamps the
317
+ * request id when the event omits it. No-op (and total — never throws) when no
318
+ * sink is configured.
319
+ *
320
+ * This is the canonical emitter for SYNCHRONOUS facts that fire inside the
321
+ * request's ALS scope (handler errors, timeouts, origin rejections, revalidation
322
+ * decisions). A few emitters deliberately stay on the lower-level
323
+ * resolveSink + safeEmit because observeEvent's lazy, per-call
324
+ * getRouterContext() read does not fit them — keep this the complete list:
325
+ * - router.ts wrapLoaderPromise (loader.start/end/error) and
326
+ * segment-resolution/streamed-handler-telemetry.ts (streamed handler.error)
327
+ * capture the sink + request id EAGERLY and emit from a fire-and-forget
328
+ * continuation that runs after the ALS scope may have unwound.
329
+ * - router/match-handlers.ts resolves the sink ONCE for the hot match-pipeline
330
+ * loop (request.start/end/error, cache.decision, ...).
331
+ * - segment-resolution/helpers.ts emits via a caller-provided report.telemetry
332
+ * sink rather than the ALS router context.
333
+ */
334
+ export function observeEvent(event: TelemetryEvent): void {
335
+ // getRouterContext() either throws (real impl, outside a router context — e.g.
336
+ // the build-time prerender path) or returns null/undefined (e.g. mocked).
337
+ // Either way there is no sink to emit to, so swallow and return.
338
+ let routerCtx: ReturnType<typeof getRouterContext> | null | undefined;
339
+ try {
340
+ routerCtx = getRouterContext();
341
+ } catch {
342
+ return;
343
+ }
344
+ if (!routerCtx?.telemetry) return;
345
+ const stamped =
346
+ event.requestId === undefined && routerCtx.requestId !== undefined
347
+ ? ({ ...event, requestId: routerCtx.requestId } as TelemetryEvent)
348
+ : event;
349
+ safeEmit(resolveSink(routerCtx.telemetry), stamped);
350
+ }
@@ -21,7 +21,11 @@ import { getRequestContext } from "../server/request-context.js";
21
21
  import { executeInterceptMiddleware } from "./middleware.js";
22
22
  import { createReverseFunction } from "./handler-context.js";
23
23
  import { getGlobalRouteMap } from "../route-map-builder.js";
24
- import { handleHandlerResult } from "./segment-resolution.js";
24
+ import {
25
+ handleHandlerResult,
26
+ warnOnStreamedResponse,
27
+ buildLoaderErrorContext,
28
+ } from "./segment-resolution.js";
25
29
  import type { SegmentResolutionDeps } from "./types.js";
26
30
  import { debugLog } from "./logging.js";
27
31
  import { runInsideLoaderScope } from "../server/context.js";
@@ -109,10 +113,25 @@ export async function resolveInterceptEntry<TEnv>(
109
113
  };
110
114
  stale?: boolean;
111
115
  },
116
+ options?: {
117
+ /**
118
+ * Skip the intercept's middleware execution. Set ONLY by the post-response
119
+ * background re-render paths (proactive caching, stale background
120
+ * revalidation), whose sole purpose is to re-render the segment tree to
121
+ * populate the cache. The foreground request already ran the intercept
122
+ * middleware before the response was sent — it validated auth, set cookies,
123
+ * and wrote context vars into the request context's shared `_variables`,
124
+ * which the background render reuses. Re-running middleware here would fire
125
+ * its side effects a SECOND time, and a middleware that short-circuits with
126
+ * a Response would `throw` and silently abort the cache write. Never set on
127
+ * the foreground path.
128
+ */
129
+ skipMiddleware?: boolean;
130
+ },
112
131
  ): Promise<ResolvedSegment[]> {
113
132
  const segments: ResolvedSegment[] = [];
114
133
 
115
- if (interceptEntry.middleware.length > 0) {
134
+ if (!options?.skipMiddleware && interceptEntry.middleware.length > 0) {
116
135
  const requestCtx = getRequestContext();
117
136
  if (!requestCtx?.res) {
118
137
  throw new Error(
@@ -202,6 +221,9 @@ export async function resolveInterceptEntry<TEnv>(
202
221
  parentEntry,
203
222
  segmentId,
204
223
  context.pathname,
224
+ // Report a throwing intercept loader to onError + loader.error telemetry,
225
+ // matching the fresh/revalidation paths.
226
+ buildLoaderErrorContext(context),
205
227
  ),
206
228
  );
207
229
  }
@@ -228,6 +250,12 @@ export async function resolveInterceptEntry<TEnv>(
228
250
  let loaderDataPromise: Promise<any[]> | any[] | undefined;
229
251
 
230
252
  if (interceptEntry.loading && loaderPromises.length > 0) {
253
+ if (handlerResult instanceof Promise) {
254
+ warnOnStreamedResponse(
255
+ handlerResult,
256
+ `intercept ${interceptEntry.slotName}`,
257
+ );
258
+ }
231
259
  component =
232
260
  handlerResult instanceof Promise
233
261
  ? handlerResult
@@ -369,6 +397,11 @@ export async function resolveInterceptLoadersOnly<TEnv>(
369
397
  parentEntry,
370
398
  segmentId,
371
399
  context.pathname,
400
+ // Report a throwing intercept loader to onError + loader.error telemetry,
401
+ // matching the fresh/revalidation paths. resolveInterceptLoadersOnly is
402
+ // only called on the cache-hit partial-update path (handleCacheHitIntercept),
403
+ // so flag isPartial:true exactly like revalidation.ts's partial path.
404
+ { ...buildLoaderErrorContext(context), isPartial: true },
372
405
  ),
373
406
  );
374
407
  }