@rangojs/router 0.0.0-experimental.125 → 0.0.0-experimental.126

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 (881) hide show
  1. package/README.md +6 -4
  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.map +1 -0
  81. package/dist/browser/event-controller.d.ts +191 -0
  82. package/dist/browser/event-controller.d.ts.map +1 -0
  83. package/dist/browser/event-controller.js +559 -0
  84. package/dist/browser/event-controller.js.map +1 -0
  85. package/dist/browser/index.d.ts +2 -0
  86. package/dist/browser/index.d.ts.map +1 -0
  87. package/dist/browser/index.js +14 -0
  88. package/dist/browser/index.js.map +1 -0
  89. package/dist/browser/link-interceptor.d.ts +38 -0
  90. package/dist/browser/link-interceptor.d.ts.map +1 -0
  91. package/dist/browser/link-interceptor.js +99 -0
  92. package/dist/browser/link-interceptor.js.map +1 -0
  93. package/dist/browser/logging.d.ts +10 -0
  94. package/dist/browser/logging.d.ts.map +1 -0
  95. package/dist/browser/logging.js +29 -0
  96. package/dist/browser/logging.js.map +1 -0
  97. package/dist/browser/lru-cache.d.ts +17 -0
  98. package/dist/browser/lru-cache.d.ts.map +1 -0
  99. package/dist/browser/lru-cache.js +50 -0
  100. package/dist/browser/lru-cache.js.map +1 -0
  101. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  102. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  103. package/dist/browser/merge-segment-loaders.js +102 -0
  104. package/dist/browser/merge-segment-loaders.js.map +1 -0
  105. package/dist/browser/navigation-bridge.d.ts +102 -0
  106. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  107. package/dist/browser/navigation-bridge.js +708 -0
  108. package/dist/browser/navigation-bridge.js.map +1 -0
  109. package/dist/browser/navigation-client.d.ts +25 -0
  110. package/dist/browser/navigation-client.d.ts.map +1 -0
  111. package/dist/browser/navigation-client.js +157 -0
  112. package/dist/browser/navigation-client.js.map +1 -0
  113. package/dist/browser/navigation-store.d.ts +101 -0
  114. package/dist/browser/navigation-store.d.ts.map +1 -0
  115. package/dist/browser/navigation-store.js +625 -0
  116. package/dist/browser/navigation-store.js.map +1 -0
  117. package/dist/browser/partial-update.d.ts +75 -0
  118. package/dist/browser/partial-update.d.ts.map +1 -0
  119. package/dist/browser/partial-update.js +426 -0
  120. package/dist/browser/partial-update.js.map +1 -0
  121. package/dist/browser/react/Link.d.ts +86 -0
  122. package/dist/browser/react/Link.d.ts.map +1 -0
  123. package/dist/browser/react/Link.js +128 -0
  124. package/dist/browser/react/Link.js.map +1 -0
  125. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  126. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  127. package/dist/browser/react/NavigationProvider.js +216 -0
  128. package/dist/browser/react/NavigationProvider.js.map +1 -0
  129. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.js +57 -0
  132. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  133. package/dist/browser/react/context.d.ts +46 -0
  134. package/dist/browser/react/context.d.ts.map +1 -0
  135. package/dist/browser/react/context.js +10 -0
  136. package/dist/browser/react/context.js.map +1 -0
  137. package/dist/browser/react/index.d.ts +11 -0
  138. package/dist/browser/react/index.d.ts.map +1 -0
  139. package/dist/browser/react/index.js +22 -0
  140. package/dist/browser/react/index.js.map +1 -0
  141. package/dist/browser/react/location-state-shared.d.ts +63 -0
  142. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  143. package/dist/browser/react/location-state-shared.js +81 -0
  144. package/dist/browser/react/location-state-shared.js.map +1 -0
  145. package/dist/browser/react/location-state.d.ts +23 -0
  146. package/dist/browser/react/location-state.d.ts.map +1 -0
  147. package/dist/browser/react/location-state.js +29 -0
  148. package/dist/browser/react/location-state.js.map +1 -0
  149. package/dist/browser/react/mount-context.d.ts +24 -0
  150. package/dist/browser/react/mount-context.d.ts.map +1 -0
  151. package/dist/browser/react/mount-context.js +24 -0
  152. package/dist/browser/react/mount-context.js.map +1 -0
  153. package/dist/browser/react/use-action.d.ts +64 -0
  154. package/dist/browser/react/use-action.d.ts.map +1 -0
  155. package/dist/browser/react/use-action.js +134 -0
  156. package/dist/browser/react/use-action.js.map +1 -0
  157. package/dist/browser/react/use-client-cache.d.ts +41 -0
  158. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  159. package/dist/browser/react/use-client-cache.js +39 -0
  160. package/dist/browser/react/use-client-cache.js.map +1 -0
  161. package/dist/browser/react/use-handle.d.ts +31 -0
  162. package/dist/browser/react/use-handle.d.ts.map +1 -0
  163. package/dist/browser/react/use-handle.js +144 -0
  164. package/dist/browser/react/use-handle.js.map +1 -0
  165. package/dist/browser/react/use-href.d.ts +33 -0
  166. package/dist/browser/react/use-href.d.ts.map +1 -0
  167. package/dist/browser/react/use-href.js +39 -0
  168. package/dist/browser/react/use-href.js.map +1 -0
  169. package/dist/browser/react/use-link-status.d.ts +37 -0
  170. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  171. package/dist/browser/react/use-link-status.js +99 -0
  172. package/dist/browser/react/use-link-status.js.map +1 -0
  173. package/dist/browser/react/use-mount.d.ts +25 -0
  174. package/dist/browser/react/use-mount.d.ts.map +1 -0
  175. package/dist/browser/react/use-mount.js +30 -0
  176. package/dist/browser/react/use-mount.js.map +1 -0
  177. package/dist/browser/react/use-navigation.d.ts +27 -0
  178. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  179. package/dist/browser/react/use-navigation.js +87 -0
  180. package/dist/browser/react/use-navigation.js.map +1 -0
  181. package/dist/browser/react/use-segments.d.ts +38 -0
  182. package/dist/browser/react/use-segments.d.ts.map +1 -0
  183. package/dist/browser/react/use-segments.js +130 -0
  184. package/dist/browser/react/use-segments.js.map +1 -0
  185. package/dist/browser/request-controller.d.ts +26 -0
  186. package/dist/browser/request-controller.d.ts.map +1 -0
  187. package/dist/browser/request-controller.js +147 -0
  188. package/dist/browser/request-controller.js.map +1 -0
  189. package/dist/browser/rsc-router.d.ts +129 -0
  190. package/dist/browser/rsc-router.d.ts.map +1 -0
  191. package/dist/browser/rsc-router.js +195 -0
  192. package/dist/browser/rsc-router.js.map +1 -0
  193. package/dist/browser/scroll-restoration.d.ts +93 -0
  194. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  195. package/dist/browser/scroll-restoration.js +321 -0
  196. package/dist/browser/scroll-restoration.js.map +1 -0
  197. package/dist/browser/segment-structure-assert.d.ts +17 -0
  198. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  199. package/dist/browser/segment-structure-assert.js +59 -0
  200. package/dist/browser/segment-structure-assert.js.map +1 -0
  201. package/dist/browser/server-action-bridge.d.ts +26 -0
  202. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  203. package/dist/browser/server-action-bridge.js +668 -0
  204. package/dist/browser/server-action-bridge.js.map +1 -0
  205. package/dist/browser/shallow.d.ts +12 -0
  206. package/dist/browser/shallow.d.ts.map +1 -0
  207. package/dist/browser/shallow.js +34 -0
  208. package/dist/browser/shallow.js.map +1 -0
  209. package/dist/browser/types.d.ts +369 -0
  210. package/dist/browser/types.d.ts.map +1 -0
  211. package/dist/browser/types.js +2 -0
  212. package/dist/browser/types.js.map +1 -0
  213. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.js +237 -0
  216. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  217. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  220. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  221. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  224. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  225. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  229. package/dist/build/generate-manifest.d.ts +81 -0
  230. package/dist/build/generate-manifest.d.ts.map +1 -0
  231. package/dist/build/generate-manifest.js +276 -0
  232. package/dist/build/generate-manifest.js.map +1 -0
  233. package/dist/build/generate-route-types.d.ts +115 -0
  234. package/dist/build/generate-route-types.d.ts.map +1 -0
  235. package/dist/build/generate-route-types.js +740 -0
  236. package/dist/build/generate-route-types.js.map +1 -0
  237. package/dist/build/index.d.ts +21 -0
  238. package/dist/build/index.d.ts.map +1 -0
  239. package/dist/build/index.js +21 -0
  240. package/dist/build/index.js.map +1 -0
  241. package/dist/build/route-trie.d.ts +71 -0
  242. package/dist/build/route-trie.d.ts.map +1 -0
  243. package/dist/build/route-trie.js +175 -0
  244. package/dist/build/route-trie.js.map +1 -0
  245. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  248. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  249. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.js +345 -0
  252. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  253. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  257. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.js +367 -0
  260. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  261. package/dist/cache/cache-scope.d.ts +102 -0
  262. package/dist/cache/cache-scope.d.ts.map +1 -0
  263. package/dist/cache/cache-scope.js +440 -0
  264. package/dist/cache/cache-scope.js.map +1 -0
  265. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  269. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.js +242 -0
  272. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  273. package/dist/cache/cf/index.d.ts +14 -0
  274. package/dist/cache/cf/index.d.ts.map +1 -0
  275. package/dist/cache/cf/index.js +17 -0
  276. package/dist/cache/cf/index.js.map +1 -0
  277. package/dist/cache/document-cache.d.ts +64 -0
  278. package/dist/cache/document-cache.d.ts.map +1 -0
  279. package/dist/cache/document-cache.js +228 -0
  280. package/dist/cache/document-cache.js.map +1 -0
  281. package/dist/cache/index.d.ts +19 -0
  282. package/dist/cache/index.d.ts.map +1 -0
  283. package/dist/cache/index.js +21 -0
  284. package/dist/cache/index.js.map +1 -0
  285. package/dist/cache/memory-segment-store.d.ts +110 -0
  286. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  287. package/dist/cache/memory-segment-store.js +117 -0
  288. package/dist/cache/memory-segment-store.js.map +1 -0
  289. package/dist/cache/memory-store.d.ts +41 -0
  290. package/dist/cache/memory-store.d.ts.map +1 -0
  291. package/dist/cache/memory-store.js +191 -0
  292. package/dist/cache/memory-store.js.map +1 -0
  293. package/dist/cache/types.d.ts +317 -0
  294. package/dist/cache/types.d.ts.map +1 -0
  295. package/dist/cache/types.js +12 -0
  296. package/dist/cache/types.js.map +1 -0
  297. package/dist/client.d.ts +248 -0
  298. package/dist/client.d.ts.map +1 -0
  299. package/dist/client.js +367 -0
  300. package/dist/client.js.map +1 -0
  301. package/dist/client.rsc.d.ts +26 -0
  302. package/dist/client.rsc.d.ts.map +1 -0
  303. package/dist/client.rsc.js +46 -0
  304. package/dist/client.rsc.js.map +1 -0
  305. package/dist/component-utils.d.ts +36 -0
  306. package/dist/component-utils.d.ts.map +1 -0
  307. package/dist/component-utils.js +61 -0
  308. package/dist/component-utils.js.map +1 -0
  309. package/dist/components/DefaultDocument.d.ts +13 -0
  310. package/dist/components/DefaultDocument.d.ts.map +1 -0
  311. package/dist/components/DefaultDocument.js +15 -0
  312. package/dist/components/DefaultDocument.js.map +1 -0
  313. package/dist/debug.d.ts +58 -0
  314. package/dist/debug.d.ts.map +1 -0
  315. package/dist/debug.js +157 -0
  316. package/dist/debug.js.map +1 -0
  317. package/dist/default-error-boundary.d.ts +11 -0
  318. package/dist/default-error-boundary.d.ts.map +1 -0
  319. package/dist/default-error-boundary.js +45 -0
  320. package/dist/default-error-boundary.js.map +1 -0
  321. package/dist/deps/browser.d.ts +2 -0
  322. package/dist/deps/browser.d.ts.map +1 -0
  323. package/dist/deps/browser.js +3 -0
  324. package/dist/deps/browser.js.map +1 -0
  325. package/dist/deps/html-stream-client.d.ts +2 -0
  326. package/dist/deps/html-stream-client.d.ts.map +1 -0
  327. package/dist/deps/html-stream-client.js +3 -0
  328. package/dist/deps/html-stream-client.js.map +1 -0
  329. package/dist/deps/html-stream-server.d.ts +2 -0
  330. package/dist/deps/html-stream-server.d.ts.map +1 -0
  331. package/dist/deps/html-stream-server.js +3 -0
  332. package/dist/deps/html-stream-server.js.map +1 -0
  333. package/dist/deps/rsc.d.ts +2 -0
  334. package/dist/deps/rsc.d.ts.map +1 -0
  335. package/dist/deps/rsc.js +4 -0
  336. package/dist/deps/rsc.js.map +1 -0
  337. package/dist/deps/ssr.d.ts +2 -0
  338. package/dist/deps/ssr.d.ts.map +1 -0
  339. package/dist/deps/ssr.js +3 -0
  340. package/dist/deps/ssr.js.map +1 -0
  341. package/dist/errors.d.ts +174 -0
  342. package/dist/errors.d.ts.map +1 -0
  343. package/dist/errors.js +241 -0
  344. package/dist/errors.js.map +1 -0
  345. package/dist/handle.d.ts +78 -0
  346. package/dist/handle.d.ts.map +1 -0
  347. package/dist/handle.js +82 -0
  348. package/dist/handle.js.map +1 -0
  349. package/dist/handles/MetaTags.d.ts +14 -0
  350. package/dist/handles/MetaTags.d.ts.map +1 -0
  351. package/dist/handles/MetaTags.js +136 -0
  352. package/dist/handles/MetaTags.js.map +1 -0
  353. package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  354. package/dist/handles/index.d.ts.map +1 -0
  355. package/dist/handles/index.js +6 -0
  356. package/dist/handles/index.js.map +1 -0
  357. package/dist/handles/meta.d.ts +39 -0
  358. package/dist/handles/meta.d.ts.map +1 -0
  359. package/dist/handles/meta.js +202 -0
  360. package/dist/handles/meta.js.map +1 -0
  361. package/dist/host/__tests__/errors.test.d.ts +2 -0
  362. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  363. package/dist/host/__tests__/errors.test.js +76 -0
  364. package/dist/host/__tests__/errors.test.js.map +1 -0
  365. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  369. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  373. package/dist/host/__tests__/router.test.d.ts +2 -0
  374. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  375. package/dist/host/__tests__/router.test.js +241 -0
  376. package/dist/host/__tests__/router.test.js.map +1 -0
  377. package/dist/host/__tests__/testing.test.d.ts +2 -0
  378. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  379. package/dist/host/__tests__/testing.test.js +64 -0
  380. package/dist/host/__tests__/testing.test.js.map +1 -0
  381. package/dist/host/__tests__/utils.test.d.ts +2 -0
  382. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  383. package/dist/host/__tests__/utils.test.js +29 -0
  384. package/dist/host/__tests__/utils.test.js.map +1 -0
  385. package/dist/host/cookie-handler.d.ts +34 -0
  386. package/dist/host/cookie-handler.d.ts.map +1 -0
  387. package/dist/host/cookie-handler.js +124 -0
  388. package/dist/host/cookie-handler.js.map +1 -0
  389. package/dist/host/errors.d.ts +56 -0
  390. package/dist/host/errors.d.ts.map +1 -0
  391. package/dist/host/errors.js +79 -0
  392. package/dist/host/errors.js.map +1 -0
  393. package/dist/host/index.d.ts +29 -0
  394. package/dist/host/index.d.ts.map +1 -0
  395. package/dist/host/index.js +32 -0
  396. package/dist/host/index.js.map +1 -0
  397. package/dist/host/pattern-matcher.d.ts +36 -0
  398. package/dist/host/pattern-matcher.d.ts.map +1 -0
  399. package/dist/host/pattern-matcher.js +172 -0
  400. package/dist/host/pattern-matcher.js.map +1 -0
  401. package/dist/host/router.d.ts +26 -0
  402. package/dist/host/router.d.ts.map +1 -0
  403. package/dist/host/router.js +218 -0
  404. package/dist/host/router.js.map +1 -0
  405. package/dist/host/testing.d.ts +36 -0
  406. package/dist/host/testing.d.ts.map +1 -0
  407. package/dist/host/testing.js +55 -0
  408. package/dist/host/testing.js.map +1 -0
  409. package/dist/host/types.d.ts +115 -0
  410. package/dist/host/types.d.ts.map +1 -0
  411. package/dist/host/types.js +7 -0
  412. package/dist/host/types.js.map +1 -0
  413. package/dist/host/utils.d.ts +21 -0
  414. package/dist/host/utils.d.ts.map +1 -0
  415. package/dist/host/utils.js +23 -0
  416. package/dist/host/utils.js.map +1 -0
  417. package/dist/href-client.d.ts +131 -0
  418. package/dist/href-client.d.ts.map +1 -0
  419. package/dist/href-client.js +64 -0
  420. package/dist/href-client.js.map +1 -0
  421. package/dist/href-context.d.ts +29 -0
  422. package/dist/href-context.d.ts.map +1 -0
  423. package/dist/href-context.js +21 -0
  424. package/dist/href-context.js.map +1 -0
  425. package/dist/index.d.ts +73 -0
  426. package/dist/index.d.ts.map +1 -0
  427. package/dist/index.js +91 -0
  428. package/dist/index.js.map +1 -0
  429. package/dist/index.rsc.d.ts +32 -0
  430. package/dist/index.rsc.d.ts.map +1 -0
  431. package/dist/index.rsc.js +40 -0
  432. package/dist/index.rsc.js.map +1 -0
  433. package/dist/internal-debug.d.ts +2 -0
  434. package/dist/internal-debug.d.ts.map +1 -0
  435. package/dist/internal-debug.js +5 -0
  436. package/dist/internal-debug.js.map +1 -0
  437. package/dist/loader.d.ts +14 -0
  438. package/dist/loader.d.ts.map +1 -0
  439. package/dist/loader.js +20 -0
  440. package/dist/loader.js.map +1 -0
  441. package/dist/loader.rsc.d.ts +19 -0
  442. package/dist/loader.rsc.d.ts.map +1 -0
  443. package/dist/loader.rsc.js +99 -0
  444. package/dist/loader.rsc.js.map +1 -0
  445. package/dist/network-error-thrower.d.ts +17 -0
  446. package/dist/network-error-thrower.d.ts.map +1 -0
  447. package/dist/network-error-thrower.js +14 -0
  448. package/dist/network-error-thrower.js.map +1 -0
  449. package/dist/outlet-context.d.ts +13 -0
  450. package/dist/outlet-context.d.ts.map +1 -0
  451. package/dist/outlet-context.js +3 -0
  452. package/dist/outlet-context.js.map +1 -0
  453. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  456. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  457. package/dist/prerender/param-hash.d.ts +16 -0
  458. package/dist/prerender/param-hash.d.ts.map +1 -0
  459. package/dist/prerender/param-hash.js +36 -0
  460. package/dist/prerender/param-hash.js.map +1 -0
  461. package/dist/prerender/store.d.ts +38 -0
  462. package/dist/prerender/store.d.ts.map +1 -0
  463. package/dist/prerender/store.js +61 -0
  464. package/dist/prerender/store.js.map +1 -0
  465. package/dist/prerender.d.ts +66 -0
  466. package/dist/prerender.d.ts.map +1 -0
  467. package/dist/prerender.js +57 -0
  468. package/dist/prerender.js.map +1 -0
  469. package/dist/reverse.d.ts +196 -0
  470. package/dist/reverse.d.ts.map +1 -0
  471. package/dist/reverse.js +78 -0
  472. package/dist/reverse.js.map +1 -0
  473. package/dist/root-error-boundary.d.ts +33 -0
  474. package/dist/root-error-boundary.d.ts.map +1 -0
  475. package/dist/root-error-boundary.js +165 -0
  476. package/dist/root-error-boundary.js.map +1 -0
  477. package/dist/route-content-wrapper.d.ts +46 -0
  478. package/dist/route-content-wrapper.d.ts.map +1 -0
  479. package/dist/route-content-wrapper.js +77 -0
  480. package/dist/route-content-wrapper.js.map +1 -0
  481. package/dist/route-definition.d.ts +421 -0
  482. package/dist/route-definition.d.ts.map +1 -0
  483. package/dist/route-definition.js +868 -0
  484. package/dist/route-definition.js.map +1 -0
  485. package/dist/route-map-builder.d.ts +155 -0
  486. package/dist/route-map-builder.d.ts.map +1 -0
  487. package/dist/route-map-builder.js +237 -0
  488. package/dist/route-map-builder.js.map +1 -0
  489. package/dist/route-types.d.ts +165 -0
  490. package/dist/route-types.d.ts.map +1 -0
  491. package/dist/route-types.js +7 -0
  492. package/dist/route-types.js.map +1 -0
  493. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.js +65 -0
  496. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  497. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  501. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  502. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  503. package/dist/router/__tests__/match-context.test.js +92 -0
  504. package/dist/router/__tests__/match-context.test.js.map +1 -0
  505. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  508. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  509. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  510. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  511. package/dist/router/__tests__/match-result.test.js +457 -0
  512. package/dist/router/__tests__/match-result.test.js.map +1 -0
  513. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  514. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  515. package/dist/router/__tests__/on-error.test.js +678 -0
  516. package/dist/router/__tests__/on-error.test.js.map +1 -0
  517. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  520. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  521. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  525. package/dist/router/error-handling.d.ts +77 -0
  526. package/dist/router/error-handling.d.ts.map +1 -0
  527. package/dist/router/error-handling.js +202 -0
  528. package/dist/router/error-handling.js.map +1 -0
  529. package/dist/router/handler-context.d.ts +20 -0
  530. package/dist/router/handler-context.d.ts.map +1 -0
  531. package/dist/router/handler-context.js +198 -0
  532. package/dist/router/handler-context.js.map +1 -0
  533. package/dist/router/intercept-resolution.d.ts +66 -0
  534. package/dist/router/intercept-resolution.d.ts.map +1 -0
  535. package/dist/router/intercept-resolution.js +246 -0
  536. package/dist/router/intercept-resolution.js.map +1 -0
  537. package/dist/router/loader-resolution.d.ts +64 -0
  538. package/dist/router/loader-resolution.d.ts.map +1 -0
  539. package/dist/router/loader-resolution.js +284 -0
  540. package/dist/router/loader-resolution.js.map +1 -0
  541. package/dist/router/logging.d.ts +15 -0
  542. package/dist/router/logging.d.ts.map +1 -0
  543. package/dist/router/logging.js +99 -0
  544. package/dist/router/logging.js.map +1 -0
  545. package/dist/router/manifest.d.ts +22 -0
  546. package/dist/router/manifest.d.ts.map +1 -0
  547. package/dist/router/manifest.js +181 -0
  548. package/dist/router/manifest.js.map +1 -0
  549. package/dist/router/match-api.d.ts +35 -0
  550. package/dist/router/match-api.d.ts.map +1 -0
  551. package/dist/router/match-api.js +406 -0
  552. package/dist/router/match-api.js.map +1 -0
  553. package/dist/router/match-context.d.ts +206 -0
  554. package/dist/router/match-context.d.ts.map +1 -0
  555. package/dist/router/match-context.js +17 -0
  556. package/dist/router/match-context.js.map +1 -0
  557. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.js +75 -0
  560. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  561. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.js +257 -0
  564. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  565. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  566. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  567. package/dist/router/match-middleware/cache-store.js +108 -0
  568. package/dist/router/match-middleware/cache-store.js.map +1 -0
  569. package/dist/router/match-middleware/index.d.ts +81 -0
  570. package/dist/router/match-middleware/index.d.ts.map +1 -0
  571. package/dist/router/match-middleware/index.js +80 -0
  572. package/dist/router/match-middleware/index.js.map +1 -0
  573. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  576. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  577. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.js +53 -0
  580. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  581. package/dist/router/match-pipelines.d.ts +147 -0
  582. package/dist/router/match-pipelines.d.ts.map +1 -0
  583. package/dist/router/match-pipelines.js +82 -0
  584. package/dist/router/match-pipelines.js.map +1 -0
  585. package/dist/router/match-result.d.ts +126 -0
  586. package/dist/router/match-result.d.ts.map +1 -0
  587. package/dist/router/match-result.js +93 -0
  588. package/dist/router/match-result.js.map +1 -0
  589. package/dist/router/metrics.d.ts +20 -0
  590. package/dist/router/metrics.d.ts.map +1 -0
  591. package/dist/router/metrics.js +47 -0
  592. package/dist/router/metrics.js.map +1 -0
  593. package/dist/router/middleware.d.ts +249 -0
  594. package/dist/router/middleware.d.ts.map +1 -0
  595. package/dist/router/middleware.js +434 -0
  596. package/dist/router/middleware.js.map +1 -0
  597. package/dist/router/middleware.test.d.ts +2 -0
  598. package/dist/router/middleware.test.d.ts.map +1 -0
  599. package/dist/router/middleware.test.js +816 -0
  600. package/dist/router/middleware.test.js.map +1 -0
  601. package/dist/router/pattern-matching.d.ts +149 -0
  602. package/dist/router/pattern-matching.d.ts.map +1 -0
  603. package/dist/router/pattern-matching.js +349 -0
  604. package/dist/router/pattern-matching.js.map +1 -0
  605. package/dist/router/revalidation.d.ts +44 -0
  606. package/dist/router/revalidation.d.ts.map +1 -0
  607. package/dist/router/revalidation.js +147 -0
  608. package/dist/router/revalidation.js.map +1 -0
  609. package/dist/router/router-context.d.ts +135 -0
  610. package/dist/router/router-context.d.ts.map +1 -0
  611. package/dist/router/router-context.js +36 -0
  612. package/dist/router/router-context.js.map +1 -0
  613. package/dist/router/segment-resolution.d.ts +127 -0
  614. package/dist/router/segment-resolution.d.ts.map +1 -0
  615. package/dist/router/segment-resolution.js +919 -0
  616. package/dist/router/segment-resolution.js.map +1 -0
  617. package/dist/router/trie-matching.d.ts +40 -0
  618. package/dist/router/trie-matching.d.ts.map +1 -0
  619. package/dist/router/trie-matching.js +127 -0
  620. package/dist/router/trie-matching.js.map +1 -0
  621. package/dist/router/types.d.ts +136 -0
  622. package/dist/router/types.d.ts.map +1 -0
  623. package/dist/router/types.js +7 -0
  624. package/dist/router/types.js.map +1 -0
  625. package/dist/router.d.ts +753 -0
  626. package/dist/router.d.ts.map +1 -0
  627. package/dist/router.gen.d.ts +6 -0
  628. package/dist/router.gen.d.ts.map +1 -0
  629. package/dist/router.gen.js +6 -0
  630. package/dist/router.gen.js.map +1 -0
  631. package/dist/router.js +1304 -0
  632. package/dist/router.js.map +1 -0
  633. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.js +140 -0
  636. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  637. package/dist/rsc/handler.d.ts +45 -0
  638. package/dist/rsc/handler.d.ts.map +1 -0
  639. package/dist/rsc/handler.js +1172 -0
  640. package/dist/rsc/handler.js.map +1 -0
  641. package/dist/rsc/helpers.d.ts +16 -0
  642. package/dist/rsc/helpers.d.ts.map +1 -0
  643. package/dist/rsc/helpers.js +55 -0
  644. package/dist/rsc/helpers.js.map +1 -0
  645. package/dist/rsc/index.d.ts +22 -0
  646. package/dist/rsc/index.d.ts.map +1 -0
  647. package/dist/rsc/index.js +23 -0
  648. package/dist/rsc/index.js.map +1 -0
  649. package/dist/rsc/nonce.d.ts +9 -0
  650. package/dist/rsc/nonce.d.ts.map +1 -0
  651. package/dist/rsc/nonce.js +18 -0
  652. package/dist/rsc/nonce.js.map +1 -0
  653. package/dist/rsc/types.d.ts +206 -0
  654. package/dist/rsc/types.d.ts.map +1 -0
  655. package/dist/rsc/types.js +8 -0
  656. package/dist/rsc/types.js.map +1 -0
  657. package/dist/search-params.d.ts +103 -0
  658. package/dist/search-params.d.ts.map +1 -0
  659. package/dist/search-params.js +74 -0
  660. package/dist/search-params.js.map +1 -0
  661. package/dist/segment-system.d.ts +75 -0
  662. package/dist/segment-system.d.ts.map +1 -0
  663. package/dist/segment-system.js +336 -0
  664. package/dist/segment-system.js.map +1 -0
  665. package/dist/server/context.d.ts +245 -0
  666. package/dist/server/context.d.ts.map +1 -0
  667. package/dist/server/context.js +197 -0
  668. package/dist/server/context.js.map +1 -0
  669. package/dist/server/fetchable-loader-store.d.ts +18 -0
  670. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  671. package/dist/server/fetchable-loader-store.js +18 -0
  672. package/dist/server/fetchable-loader-store.js.map +1 -0
  673. package/dist/server/handle-store.d.ts +85 -0
  674. package/dist/server/handle-store.d.ts.map +1 -0
  675. package/dist/server/handle-store.js +142 -0
  676. package/dist/server/handle-store.js.map +1 -0
  677. package/dist/server/loader-registry.d.ts +55 -0
  678. package/dist/server/loader-registry.d.ts.map +1 -0
  679. package/dist/server/loader-registry.js +132 -0
  680. package/dist/server/loader-registry.js.map +1 -0
  681. package/dist/server/request-context.d.ts +226 -0
  682. package/dist/server/request-context.d.ts.map +1 -0
  683. package/dist/server/request-context.js +290 -0
  684. package/dist/server/request-context.js.map +1 -0
  685. package/dist/server/root-layout.d.ts +4 -0
  686. package/dist/server/root-layout.d.ts.map +1 -0
  687. package/dist/server/root-layout.js +5 -0
  688. package/dist/server/root-layout.js.map +1 -0
  689. package/dist/server.d.ts +15 -0
  690. package/dist/server.d.ts.map +1 -0
  691. package/dist/server.js +20 -0
  692. package/dist/server.js.map +1 -0
  693. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  697. package/dist/ssr/index.d.ts +98 -0
  698. package/dist/ssr/index.d.ts.map +1 -0
  699. package/dist/ssr/index.js +158 -0
  700. package/dist/ssr/index.js.map +1 -0
  701. package/dist/static-handler.d.ts +50 -0
  702. package/dist/static-handler.d.ts.map +1 -0
  703. package/dist/static-handler.gen.d.ts +5 -0
  704. package/dist/static-handler.gen.d.ts.map +1 -0
  705. package/dist/static-handler.gen.js +5 -0
  706. package/dist/static-handler.gen.js.map +1 -0
  707. package/dist/static-handler.js +29 -0
  708. package/dist/static-handler.js.map +1 -0
  709. package/dist/theme/ThemeProvider.d.ts +20 -0
  710. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  711. package/dist/theme/ThemeProvider.js +240 -0
  712. package/dist/theme/ThemeProvider.js.map +1 -0
  713. package/dist/theme/ThemeScript.d.ts +48 -0
  714. package/dist/theme/ThemeScript.d.ts.map +1 -0
  715. package/dist/theme/ThemeScript.js +13 -0
  716. package/dist/theme/ThemeScript.js.map +1 -0
  717. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  718. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  719. package/dist/theme/__tests__/theme.test.js +103 -0
  720. package/dist/theme/__tests__/theme.test.js.map +1 -0
  721. package/dist/theme/constants.d.ts +29 -0
  722. package/dist/theme/constants.d.ts.map +1 -0
  723. package/dist/theme/constants.js +48 -0
  724. package/dist/theme/constants.js.map +1 -0
  725. package/dist/theme/index.d.ts +31 -0
  726. package/dist/theme/index.d.ts.map +1 -0
  727. package/dist/theme/index.js +36 -0
  728. package/dist/theme/index.js.map +1 -0
  729. package/dist/theme/theme-context.d.ts +40 -0
  730. package/dist/theme/theme-context.d.ts.map +1 -0
  731. package/dist/theme/theme-context.js +60 -0
  732. package/dist/theme/theme-context.js.map +1 -0
  733. package/dist/theme/theme-script.d.ts +27 -0
  734. package/dist/theme/theme-script.d.ts.map +1 -0
  735. package/dist/theme/theme-script.js +147 -0
  736. package/dist/theme/theme-script.js.map +1 -0
  737. package/dist/theme/types.d.ts +163 -0
  738. package/dist/theme/types.d.ts.map +1 -0
  739. package/dist/theme/types.js +11 -0
  740. package/dist/theme/types.js.map +1 -0
  741. package/dist/theme/use-theme.d.ts +12 -0
  742. package/dist/theme/use-theme.d.ts.map +1 -0
  743. package/dist/theme/use-theme.js +40 -0
  744. package/dist/theme/use-theme.js.map +1 -0
  745. package/dist/types.d.ts +1479 -0
  746. package/dist/types.d.ts.map +1 -0
  747. package/dist/types.js +10 -0
  748. package/dist/types.js.map +1 -0
  749. package/dist/urls.d.ts +441 -0
  750. package/dist/urls.d.ts.map +1 -0
  751. package/dist/urls.gen.d.ts +8 -0
  752. package/dist/urls.gen.d.ts.map +1 -0
  753. package/dist/urls.gen.js +8 -0
  754. package/dist/urls.gen.js.map +1 -0
  755. package/dist/urls.js +443 -0
  756. package/dist/urls.js.map +1 -0
  757. package/dist/use-loader.d.ts +127 -0
  758. package/dist/use-loader.d.ts.map +1 -0
  759. package/dist/use-loader.js +237 -0
  760. package/dist/use-loader.js.map +1 -0
  761. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  765. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  769. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  773. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  774. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  776. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  777. package/dist/vite/ast-handler-extract.d.ts +49 -0
  778. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  779. package/dist/vite/ast-handler-extract.js +249 -0
  780. package/dist/vite/ast-handler-extract.js.map +1 -0
  781. package/dist/vite/expose-action-id.d.ts +19 -0
  782. package/dist/vite/expose-action-id.d.ts.map +1 -0
  783. package/dist/vite/expose-action-id.js +250 -0
  784. package/dist/vite/expose-action-id.js.map +1 -0
  785. package/dist/vite/expose-id-utils.d.ts +69 -0
  786. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  787. package/dist/vite/expose-id-utils.js +289 -0
  788. package/dist/vite/expose-id-utils.js.map +1 -0
  789. package/dist/vite/expose-internal-ids.d.ts +22 -0
  790. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  791. package/dist/vite/expose-internal-ids.js +886 -0
  792. package/dist/vite/expose-internal-ids.js.map +1 -0
  793. package/dist/vite/index.d.ts +149 -0
  794. package/dist/vite/index.d.ts.map +1 -0
  795. package/dist/vite/index.js +307 -26
  796. package/dist/vite/index.js.bak +5448 -0
  797. package/dist/vite/index.js.map +1 -0
  798. package/dist/vite/index.named-routes.gen.ts +103 -0
  799. package/dist/vite/package-resolution.d.ts +43 -0
  800. package/dist/vite/package-resolution.d.ts.map +1 -0
  801. package/dist/vite/package-resolution.js +112 -0
  802. package/dist/vite/package-resolution.js.map +1 -0
  803. package/dist/vite/virtual-entries.d.ts +25 -0
  804. package/dist/vite/virtual-entries.d.ts.map +1 -0
  805. package/dist/vite/virtual-entries.js +110 -0
  806. package/dist/vite/virtual-entries.js.map +1 -0
  807. package/package.json +19 -18
  808. package/skills/breadcrumbs/SKILL.md +60 -0
  809. package/skills/server-actions/SKILL.md +25 -1
  810. package/skills/testing/SKILL.md +17 -17
  811. package/skills/testing/cache-prerender.md +29 -3
  812. package/skills/testing/flight.md +13 -10
  813. package/skills/testing/render-handler.md +3 -0
  814. package/skills/testing/server-tree.md +1 -1
  815. package/skills/testing/setup.md +1 -1
  816. package/src/browser/partial-update.ts +22 -1
  817. package/src/browser/react/use-router.ts +2 -1
  818. package/src/browser/rsc-router.tsx +8 -1
  819. package/src/browser/server-action-bridge.ts +51 -3
  820. package/src/browser/types.ts +23 -4
  821. package/src/browser/validate-redirect-origin.ts +43 -15
  822. package/src/build/index.ts +8 -9
  823. package/src/build/route-trie.ts +43 -11
  824. package/src/cache/cache-runtime.ts +21 -0
  825. package/src/cache/document-cache.ts +10 -0
  826. package/src/cache/profile-registry.ts +6 -34
  827. package/src/client.rsc.tsx +3 -0
  828. package/src/client.tsx +5 -0
  829. package/src/context-var.ts +12 -0
  830. package/src/defer.ts +196 -0
  831. package/src/handles/breadcrumbs.ts +16 -5
  832. package/src/index.rsc.ts +7 -0
  833. package/src/index.ts +7 -0
  834. package/src/redirect-origin.ts +100 -0
  835. package/src/route-definition/redirect.ts +32 -8
  836. package/src/route-definition/resolve-handler-use.ts +6 -0
  837. package/src/router/find-match.ts +0 -1
  838. package/src/router/loader-resolution.ts +22 -21
  839. package/src/router/match-middleware/cache-lookup.ts +95 -125
  840. package/src/router/match-middleware/segment-resolution.ts +0 -1
  841. package/src/router/middleware-types.ts +0 -1
  842. package/src/router/middleware.ts +71 -31
  843. package/src/router/pattern-matching.ts +4 -23
  844. package/src/router/prerender-match.ts +27 -6
  845. package/src/router/revalidation.ts +9 -4
  846. package/src/router/route-snapshot.ts +0 -1
  847. package/src/router/router-context.ts +0 -1
  848. package/src/router/router-interfaces.ts +10 -0
  849. package/src/router/segment-resolution/loader-cache.ts +25 -10
  850. package/src/router/segment-resolution/revalidation.ts +185 -243
  851. package/src/router/segment-wrappers.ts +0 -3
  852. package/src/router/trie-matching.ts +3 -5
  853. package/src/router.ts +4 -9
  854. package/src/rsc/handler-context.ts +1 -0
  855. package/src/rsc/handler.ts +9 -2
  856. package/src/rsc/helpers.ts +56 -3
  857. package/src/rsc/json-route-result.ts +38 -0
  858. package/src/rsc/origin-guard.ts +10 -4
  859. package/src/rsc/progressive-enhancement.ts +8 -0
  860. package/src/rsc/redirect-guard.ts +99 -0
  861. package/src/rsc/response-route-handler.ts +23 -18
  862. package/src/rsc/server-action.ts +4 -1
  863. package/src/rsc/types.ts +6 -2
  864. package/src/server/request-context.ts +22 -13
  865. package/src/testing/cache-status.ts +44 -1
  866. package/src/testing/dispatch.ts +43 -6
  867. package/src/testing/e2e/index.ts +1 -0
  868. package/src/testing/flight.ts +48 -2
  869. package/src/testing/index.ts +1 -0
  870. package/src/testing/render-handler.ts +31 -12
  871. package/src/testing/render-route.tsx +75 -13
  872. package/src/types/handler-context.ts +28 -1
  873. package/src/vite/discovery/discover-routers.ts +22 -11
  874. package/src/vite/discovery/prerender-collection.ts +2 -4
  875. package/src/vite/discovery/state.ts +5 -0
  876. package/src/vite/plugin-types.ts +32 -8
  877. package/src/vite/plugins/refresh-cmd.ts +1 -1
  878. package/src/vite/plugins/use-cache-transform.ts +21 -10
  879. package/src/vite/rango.ts +1 -0
  880. package/src/vite/router-discovery.ts +7 -0
  881. package/src/router/middleware-cookies.ts +0 -42
@@ -4,6 +4,7 @@ import {
4
4
  getRequestContext,
5
5
  _getRequestContext,
6
6
  } from "../server/request-context.js";
7
+ import { markExternalRedirect } from "../redirect-origin.js";
7
8
 
8
9
  /**
9
10
  * Create a soft redirect Response for middleware short-circuit
@@ -39,6 +40,11 @@ import {
39
40
  * status: 303,
40
41
  * state: [Flash({ text: "Session expired" })],
41
42
  * });
43
+ *
44
+ * // Off-host redirect (opt out of the same-origin guard). Without
45
+ * // `external: true`, a cross-origin target is blocked and replaced with the
46
+ * // app root, matching the client's open-redirect protection.
47
+ * return redirect('https://accounts.example.com/oauth', { external: true });
42
48
  * ```
43
49
  */
44
50
  export function redirect(url: string, status?: number): Response;
@@ -47,13 +53,18 @@ export function redirect(
47
53
  options: {
48
54
  status?: number;
49
55
  state?: LocationStateEntry | LocationStateEntry[];
56
+ external?: boolean;
50
57
  },
51
58
  ): Response;
52
59
  export function redirect(
53
60
  url: string,
54
61
  statusOrOptions?:
55
62
  | number
56
- | { status?: number; state?: LocationStateEntry | LocationStateEntry[] },
63
+ | {
64
+ status?: number;
65
+ state?: LocationStateEntry | LocationStateEntry[];
66
+ external?: boolean;
67
+ },
57
68
  ): Response {
58
69
  const status =
59
70
  typeof statusOrOptions === "number"
@@ -61,6 +72,8 @@ export function redirect(
61
72
  : (statusOrOptions?.status ?? 302);
62
73
  const state =
63
74
  typeof statusOrOptions === "object" ? statusOrOptions?.state : undefined;
75
+ const external =
76
+ typeof statusOrOptions === "object" ? statusOrOptions?.external : undefined;
64
77
 
65
78
  if (state) {
66
79
  const ctx = requireRequestContext();
@@ -101,11 +114,22 @@ export function redirect(
101
114
  resolvedUrl = url === "/" ? bn : bn + url;
102
115
  }
103
116
 
104
- return new Response(null, {
105
- status,
106
- headers: {
107
- Location: resolvedUrl,
108
- "X-RSC-Redirect": "soft",
109
- },
110
- });
117
+ const headers: Record<string, string> = {
118
+ Location: resolvedUrl,
119
+ "X-RSC-Redirect": "soft",
120
+ };
121
+
122
+ const response = new Response(null, { status, headers });
123
+
124
+ // Mark an explicit off-host redirect with an out-of-band brand so the
125
+ // same-origin guard (rsc/redirect-guard.ts) lets it through. The brand is a
126
+ // WeakSet membership on this Response object -- NOT a wire header -- so the
127
+ // opt-in cannot be forged by an attacker-controlled upstream response a
128
+ // proxy-style response route might copy. The internal redirect-rebuild paths
129
+ // transfer the brand; the guard reads and clears it (see markExternalRedirect).
130
+ if (external) {
131
+ markExternalRedirect(response);
132
+ }
133
+
134
+ return response;
111
135
  }
@@ -139,6 +139,12 @@ export function mergeHandlerUse(
139
139
  mountSite: string,
140
140
  ): (() => any[]) | undefined {
141
141
  if (!handlerUse && !explicitUse) return undefined;
142
+ // Validation asymmetry (intentional, pre-1.0): only handler.use() items are
143
+ // checked against the mount-site allow-list (validateHandlerUseItems below).
144
+ // Explicit use() items pass through unvalidated on both the explicit-only
145
+ // branch here and the merged branch, so a structurally-valid-but-prohibited
146
+ // item (e.g. middleware() inside a parallel slot) is not rejected at this seam.
147
+ // Documented rather than enforced for now; revisit before 1.0 (#569).
142
148
  if (!handlerUse) return explicitUse;
143
149
  if (!explicitUse) {
144
150
  return () => {
@@ -110,7 +110,6 @@ export function createFindMatch<TEnv = any>(
110
110
  entry,
111
111
  routeKey: trieResult.routeKey,
112
112
  params: trieResult.params,
113
- optionalParams: new Set(trieResult.optionalParams || []),
114
113
  redirectTo: trieResult.redirectTo,
115
114
  ...(trieResult.pr ? { pr: true } : {}),
116
115
  ...(trieResult.pt ? { pt: true } : {}),
@@ -20,6 +20,7 @@ import type {
20
20
  ErrorInfo,
21
21
  } from "../types";
22
22
  import { isHandle, collectHandleData, type Handle } from "../handle.js";
23
+ import { withDefer } from "../defer.js";
23
24
  import { buildHandleSnapshot } from "../server/handle-store.js";
24
25
  import { getFetchableLoader } from "../server/fetchable-loader-store.js";
25
26
  import { _getRequestContext } from "../server/request-context.js";
@@ -444,28 +445,28 @@ export function setupLoaderAccess<TEnv>(
444
445
  );
445
446
  }
446
447
 
447
- return (
448
- dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>),
449
- ) => {
450
- if (!store) return;
451
-
452
- if (typeof dataOrFn === "function") {
453
- // Run the callback inside the push-callback scope so ctx.use(loader)
454
- // calls it makes including after its own awaits, for an async
455
- // callback are not registered as handler-to-loader deps and do not
456
- // trip the deadlock guard. A pushed promise value is not tracked by
457
- // handleStore.settled and does not block segment resolution, so it
458
- // cannot form a rendered() deadlock. The ALS scope (not a plain
459
- // boolean) is what survives the callback's awaits.
460
- const result = runInsidePushCallbackScope(() =>
461
- (dataOrFn as () => Promise<unknown>)(),
462
- );
463
- store.push(handle.$$id, segmentId, result);
464
- return;
465
- }
448
+ return withDefer(
449
+ (dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
450
+ if (!store) return;
451
+
452
+ if (typeof dataOrFn === "function") {
453
+ // Run the callback inside the push-callback scope so ctx.use(loader)
454
+ // calls it makes including after its own awaits, for an async
455
+ // callback are not registered as handler-to-loader deps and do not
456
+ // trip the deadlock guard. A pushed promise value is not tracked by
457
+ // handleStore.settled and does not block segment resolution, so it
458
+ // cannot form a rendered() deadlock. The ALS scope (not a plain
459
+ // boolean) is what survives the callback's awaits.
460
+ const result = runInsidePushCallbackScope(() =>
461
+ (dataOrFn as () => Promise<unknown>)(),
462
+ );
463
+ store.push(handle.$$id, segmentId, result);
464
+ return;
465
+ }
466
466
 
467
- store.push(handle.$$id, segmentId, dataOrFn);
468
- };
467
+ store.push(handle.$$id, segmentId, dataOrFn);
468
+ },
469
+ );
469
470
  }
470
471
 
471
472
  // Deadlock guard and handler-to-loader dependency tracking.
@@ -93,7 +93,7 @@
93
93
  */
94
94
  import type { ResolvedSegment } from "../../types.js";
95
95
  import type { MatchContext, MatchPipelineState } from "../match-context.js";
96
- import { getRouterContext } from "../router-context.js";
96
+ import { getRouterContext, type RouterContext } from "../router-context.js";
97
97
  import { resolveSink, safeEmit } from "../telemetry.js";
98
98
  import { pushRevalidationTraceEntry, isTraceActive } from "../logging.js";
99
99
  import { treeHasStreaming } from "./segment-resolution.js";
@@ -150,6 +150,81 @@ async function ensurePrerenderDeps() {
150
150
  * Deserializes segments, replays handle data, yields segments with partial
151
151
  * navigation nullification, and resolves fresh loaders.
152
152
  */
153
+ // Resolve loaders fresh on a cache hit (loaders are NEVER cached) and yield
154
+ // the loader segments, updating state.matchedIds and pushing the loader-resolve
155
+ // + cache-hit metrics. Shared verbatim by the prerender-store path
156
+ // (yieldFromStore) and the runtime cache-hit path (withCacheLookup). The router
157
+ // resolve fns are passed in (captured early by the callers) rather than re-read
158
+ // from getRouterContext() here, because that is ALS-backed and the callers run
159
+ // awaits before reaching this point (workerd can disrupt ALS mid-pipeline).
160
+ async function* resolveFreshLoadersAndYield<TEnv>(
161
+ ctx: MatchContext<TEnv>,
162
+ state: MatchPipelineState,
163
+ pipelineStart: number,
164
+ ms: MatchContext<TEnv>["metricsStore"],
165
+ resolveLoadersOnly: RouterContext<TEnv>["resolveLoadersOnly"],
166
+ resolveLoadersOnlyWithRevalidation: RouterContext<TEnv>["resolveLoadersOnlyWithRevalidation"],
167
+ ): AsyncGenerator<ResolvedSegment> {
168
+ const loaderStart = performance.now();
169
+
170
+ if (ctx.isFullMatch) {
171
+ if (resolveLoadersOnly) {
172
+ const loaderSegments = await ctx.Store.run(() =>
173
+ resolveLoadersOnly(ctx.entries, ctx.handlerContext),
174
+ );
175
+ state.matchedIds = state.cachedMatchedIds!;
176
+ for (const segment of loaderSegments) {
177
+ yield segment;
178
+ }
179
+ } else {
180
+ state.matchedIds = state.cachedMatchedIds!;
181
+ }
182
+ } else {
183
+ if (resolveLoadersOnlyWithRevalidation) {
184
+ const loaderResult = await ctx.Store.run(() =>
185
+ resolveLoadersOnlyWithRevalidation(
186
+ ctx.entries,
187
+ ctx.handlerContext,
188
+ ctx.clientSegmentSet,
189
+ ctx.prevParams,
190
+ ctx.request,
191
+ ctx.prevUrl,
192
+ ctx.url,
193
+ ctx.routeKey,
194
+ ctx.actionContext,
195
+ // Loaders are never cached in the segment cache, so segment staleness
196
+ // must not propagate; browser-sent staleness (ctx.stale) still must.
197
+ ctx.stale || undefined,
198
+ ),
199
+ );
200
+ state.matchedIds = [
201
+ ...state.cachedMatchedIds!,
202
+ ...loaderResult.matchedIds,
203
+ ];
204
+ for (const segment of loaderResult.segments) {
205
+ yield segment;
206
+ }
207
+ } else {
208
+ state.matchedIds = state.cachedMatchedIds!;
209
+ }
210
+ }
211
+
212
+ if (ms) {
213
+ const loaderEnd = performance.now();
214
+ ms.metrics.push({
215
+ label: "pipeline:loader-resolve",
216
+ duration: loaderEnd - loaderStart,
217
+ startTime: loaderStart - ms.requestStart,
218
+ depth: 1,
219
+ });
220
+ ms.metrics.push({
221
+ label: "pipeline:cache-hit",
222
+ duration: loaderEnd - pipelineStart,
223
+ startTime: pipelineStart - ms.requestStart,
224
+ });
225
+ }
226
+ }
227
+
153
228
  async function* yieldFromStore<TEnv>(
154
229
  entry: PrerenderEntry,
155
230
  ctx: MatchContext<TEnv>,
@@ -216,64 +291,15 @@ async function* yieldFromStore<TEnv>(
216
291
  yield segment;
217
292
  }
218
293
 
219
- // Resolve loaders fresh (loaders are never pre-rendered/cached)
220
- const ms = ctx.metricsStore;
221
- const loaderStart = performance.now();
222
-
223
- if (ctx.isFullMatch) {
224
- if (resolveLoadersOnly) {
225
- const loaderSegments = await ctx.Store.run(() =>
226
- resolveLoadersOnly(ctx.entries, ctx.handlerContext),
227
- );
228
- state.matchedIds = state.cachedMatchedIds!;
229
- for (const segment of loaderSegments) {
230
- yield segment;
231
- }
232
- } else {
233
- state.matchedIds = state.cachedMatchedIds!;
234
- }
235
- } else {
236
- if (resolveLoadersOnlyWithRevalidation) {
237
- const loaderResult = await ctx.Store.run(() =>
238
- resolveLoadersOnlyWithRevalidation(
239
- ctx.entries,
240
- ctx.handlerContext,
241
- ctx.clientSegmentSet,
242
- ctx.prevParams,
243
- ctx.request,
244
- ctx.prevUrl,
245
- ctx.url,
246
- ctx.routeKey,
247
- ctx.actionContext,
248
- ctx.stale || undefined,
249
- ),
250
- );
251
- state.matchedIds = [
252
- ...state.cachedMatchedIds!,
253
- ...loaderResult.matchedIds,
254
- ];
255
- for (const segment of loaderResult.segments) {
256
- yield segment;
257
- }
258
- } else {
259
- state.matchedIds = state.cachedMatchedIds!;
260
- }
261
- }
262
-
263
- if (ms) {
264
- const loaderEnd = performance.now();
265
- ms.metrics.push({
266
- label: "pipeline:loader-resolve",
267
- duration: loaderEnd - loaderStart,
268
- startTime: loaderStart - ms.requestStart,
269
- depth: 1,
270
- });
271
- ms.metrics.push({
272
- label: "pipeline:cache-hit",
273
- duration: loaderEnd - pipelineStart,
274
- startTime: pipelineStart - ms.requestStart,
275
- });
276
- }
294
+ // Resolve loaders fresh (loaders are never pre-rendered/cached).
295
+ yield* resolveFreshLoadersAndYield(
296
+ ctx,
297
+ state,
298
+ pipelineStart,
299
+ ctx.metricsStore,
300
+ resolveLoadersOnly,
301
+ resolveLoadersOnlyWithRevalidation,
302
+ );
277
303
  }
278
304
 
279
305
  /**
@@ -550,71 +576,15 @@ export function withCacheLookup<TEnv>(
550
576
  barrierReqCtx._resolveRenderBarrier(cacheResult.segments);
551
577
  }
552
578
 
553
- const Store = ctx.Store;
554
- const loaderStart = performance.now();
555
-
556
- if (ctx.isFullMatch) {
557
- if (resolveLoadersOnly) {
558
- const loaderSegments = await Store.run(() =>
559
- resolveLoadersOnly(ctx.entries, ctx.handlerContext),
560
- );
561
-
562
- state.matchedIds = state.cachedMatchedIds!;
563
-
564
- for (const segment of loaderSegments) {
565
- yield segment;
566
- }
567
- } else {
568
- state.matchedIds = state.cachedMatchedIds!;
569
- }
570
- } else {
571
- if (resolveLoadersOnlyWithRevalidation) {
572
- const loaderResult = await Store.run(() =>
573
- resolveLoadersOnlyWithRevalidation(
574
- ctx.entries,
575
- ctx.handlerContext,
576
- ctx.clientSegmentSet,
577
- ctx.prevParams,
578
- ctx.request,
579
- ctx.prevUrl,
580
- ctx.url,
581
- ctx.routeKey,
582
- ctx.actionContext,
583
- // Loaders are never cached in the segment cache, so segment
584
- // staleness (cacheResult.shouldRevalidate) must not propagate.
585
- // But browser-sent staleness (ctx.stale) — indicating an action
586
- // happened in this or another tab — must still reach loaders.
587
- ctx.stale || undefined,
588
- ),
589
- );
590
-
591
- // Update state with fresh loader matchedIds
592
- state.matchedIds = [
593
- ...state.cachedMatchedIds!,
594
- ...loaderResult.matchedIds,
595
- ];
596
-
597
- // Yield fresh loader segments
598
- for (const segment of loaderResult.segments) {
599
- yield segment;
600
- }
601
- } else {
602
- state.matchedIds = state.cachedMatchedIds!;
603
- }
604
- }
605
- if (ms) {
606
- const loaderEnd = performance.now();
607
- ms.metrics.push({
608
- label: "pipeline:loader-resolve",
609
- duration: loaderEnd - loaderStart,
610
- startTime: loaderStart - ms.requestStart,
611
- depth: 1,
612
- });
613
- ms.metrics.push({
614
- label: "pipeline:cache-hit",
615
- duration: loaderEnd - pipelineStart,
616
- startTime: pipelineStart - ms.requestStart,
617
- });
618
- }
579
+ // Resolve loaders fresh (loaders are never cached). Shared with the
580
+ // prerender-store path via resolveFreshLoadersAndYield.
581
+ yield* resolveFreshLoadersAndYield(
582
+ ctx,
583
+ state,
584
+ pipelineStart,
585
+ ms,
586
+ resolveLoadersOnly,
587
+ resolveLoadersOnlyWithRevalidation,
588
+ );
619
589
  };
620
590
  }
@@ -193,7 +193,6 @@ export function withSegmentResolution<TEnv>(
193
193
  ctx.request,
194
194
  ctx.prevUrl,
195
195
  ctx.url,
196
- ctx.loaderPromises,
197
196
  ctx.actionContext,
198
197
  ctx.interceptResult,
199
198
  ctx.localRouteName,
@@ -76,7 +76,6 @@ export interface MiddlewareEntry<TEnv = any> {
76
76
  regex: RegExp | null;
77
77
  paramNames: string[];
78
78
  handler: MiddlewareFn<TEnv>;
79
- mountPrefix: string | null;
80
79
  }
81
80
 
82
81
  export interface ResponseHolder {
@@ -12,20 +12,23 @@ import type {
12
12
  ResponseHolder,
13
13
  } from "./middleware-types.js";
14
14
  import { _getRequestContext } from "../server/request-context.js";
15
+ import {
16
+ EXTERNAL_REDIRECT_MARKER,
17
+ isExternalRedirect,
18
+ markExternalRedirect,
19
+ } from "../redirect-origin.js";
15
20
  import { isAutoGeneratedRouteName } from "../route-name.js";
16
21
  import { appendMetric, createMetricsStore } from "./metrics.js";
17
22
  import { stripInternalParams } from "./handler-context.js";
18
23
  import { isWebSocketUpgradeResponse } from "../response-utils.js";
19
24
 
20
- // Re-export types and cookie utilities consumed through this module's path.
25
+ // Re-export types consumed through this module's path.
21
26
  export type {
22
27
  CookieOptions,
23
- MiddlewareCollectableEntry,
24
28
  MiddlewareContext,
25
29
  MiddlewareEntry,
26
30
  MiddlewareFn,
27
31
  } from "./middleware-types.js";
28
- export { parseCookies, serializeCookie } from "./middleware-cookies.js";
29
32
 
30
33
  const MIDDLEWARE_METRIC_DEPTH = 1;
31
34
  const POST_METRIC_MIN_DURATION_MS = 0.01;
@@ -238,9 +241,13 @@ export function createMiddlewareContext<TEnv>(
238
241
 
239
242
  reverse:
240
243
  reverse ??
241
- ((name: string) => {
244
+ ((
245
+ name: string,
246
+ _params?: Record<string, string>,
247
+ _search?: Record<string, unknown>,
248
+ ) => {
242
249
  throw new Error(
243
- `ctx.reverse() is not available - route map was not provided to middleware context`,
250
+ `ctx.reverse(${JSON.stringify(name)}) is not available: no route map is bound to this middleware context.`,
244
251
  );
245
252
  }),
246
253
 
@@ -293,6 +300,10 @@ function mergeStubHeaders(
293
300
  stubOverridesNonCookie: boolean,
294
301
  ): void {
295
302
  stub.forEach((value, name) => {
303
+ // The reserved external-redirect marker is internal and never a trust
304
+ // signal; never copy a stub value (e.g. a stray ctx.header() call) onto a
305
+ // browser-facing response. The opt-in is the out-of-band brand.
306
+ if (name.toLowerCase() === EXTERNAL_REDIRECT_MARKER) return;
296
307
  if (name.toLowerCase() === "set-cookie") {
297
308
  target.append(name, value);
298
309
  } else if (stubOverridesNonCookie || !target.has(name)) {
@@ -318,12 +329,50 @@ function mergeReqCtxStub(
318
329
  }
319
330
  }
320
331
  reqCtx.res.headers.forEach((value, name) => {
332
+ // Never propagate the reserved external-redirect marker (see mergeStubHeaders).
333
+ if (name.toLowerCase() === EXTERNAL_REDIRECT_MARKER) return;
321
334
  if (name !== "set-cookie" && !target.has(name)) {
322
335
  target.set(name, value);
323
336
  }
324
337
  });
325
338
  }
326
339
 
340
+ // Clone `base` with stub headers merged into a fresh Headers (the clone keeps
341
+ // the body mutable for post-next() modifications). Set-Cookie is always
342
+ // appended; other headers obey stubOverridesNonCookie (see mergeStubHeaders).
343
+ // mergeReqCtx folds in RequestContext stub cookies/headers; the intercept
344
+ // short-circuit path passes false (its reqCtx headers are not merged here),
345
+ // which is the one deliberate divergence between the call sites.
346
+ function mergeResponse(
347
+ base: Response,
348
+ stub: Headers,
349
+ opts: { stubOverridesNonCookie: boolean; mergeReqCtx: boolean },
350
+ ): Response {
351
+ const mergedHeaders = new Headers(base.headers);
352
+ // The reserved external-redirect marker is never a trust signal and must never
353
+ // reach the browser. The guard strips it on 3xx redirects; strip it here too so
354
+ // a forged value cannot ride a non-3xx middleware response (which the 3xx-only
355
+ // guard would not touch) to the client. The opt-in is the out-of-band brand.
356
+ mergedHeaders.delete(EXTERNAL_REDIRECT_MARKER);
357
+ mergeStubHeaders(mergedHeaders, stub, opts.stubOverridesNonCookie);
358
+ if (opts.mergeReqCtx) {
359
+ mergeReqCtxStub(mergedHeaders, _getRequestContext());
360
+ }
361
+ const merged = new Response(base.body, {
362
+ status: base.status,
363
+ statusText: base.statusText,
364
+ headers: mergedHeaders,
365
+ });
366
+ // Transfer the out-of-band external-redirect brand across this rebuild: a
367
+ // middleware short-circuit `return redirect(url, { external: true })` reaches
368
+ // the open-redirect guard only after this merge, and the brand lives on the
369
+ // Response object, not in its headers.
370
+ if (isExternalRedirect(base)) {
371
+ markExternalRedirect(merged);
372
+ }
373
+ return merged;
374
+ }
375
+
327
376
  /**
328
377
  * Execute middleware chain
329
378
  *
@@ -362,20 +411,16 @@ export async function executeMiddleware<TEnv>(
362
411
  // End of chain - call actual RSC handler
363
412
  const response = await finalHandler();
364
413
 
365
- const mergedHeaders = new Headers(response.headers);
366
- mergeStubHeaders(mergedHeaders, stubResponse.headers, true);
367
- mergeReqCtxStub(mergedHeaders, _getRequestContext());
368
-
369
414
  if (isWebSocketUpgradeResponse(response)) {
370
415
  responseHolder.response = response;
371
416
  return response;
372
417
  }
373
418
 
374
- // Clone response with merged headers (mutable for post-next() modifications)
375
- responseHolder.response = new Response(response.body, {
376
- status: response.status,
377
- statusText: response.statusText,
378
- headers: mergedHeaders,
419
+ // Chain ran to completion: stub headers overwrite (stubOverridesNonCookie)
420
+ // and reqCtx stub headers are merged in.
421
+ responseHolder.response = mergeResponse(response, stubResponse.headers, {
422
+ stubOverridesNonCookie: true,
423
+ mergeReqCtx: true,
379
424
  });
380
425
 
381
426
  return responseHolder.response;
@@ -474,13 +519,11 @@ export async function executeMiddleware<TEnv>(
474
519
  responseHolder.response = result;
475
520
  return result;
476
521
  }
477
- const mergedHeaders = new Headers(result.headers);
478
- mergeStubHeaders(mergedHeaders, stubResponse.headers, false);
479
- mergeReqCtxStub(mergedHeaders, _getRequestContext());
480
- const merged = new Response(result.body, {
481
- status: result.status,
482
- statusText: result.statusText,
483
- headers: mergedHeaders,
522
+ // Explicit short-circuit: the returned Response's own headers win
523
+ // (stubOverridesNonCookie=false); reqCtx stub headers still merge in.
524
+ const merged = mergeResponse(result, stubResponse.headers, {
525
+ stubOverridesNonCookie: false,
526
+ mergeReqCtx: true,
484
527
  });
485
528
  responseHolder.response = merged;
486
529
  return merged;
@@ -635,15 +678,13 @@ export async function executeInterceptMiddleware<TEnv>(
635
678
  });
636
679
 
637
680
  if (hasStubHeaders) {
638
- // Clone and merge headers from stub into early response.
639
- // Only fill in missing headers — the returned Response's explicit
640
- // headers take precedence, matching executeMiddleware behavior.
641
- const mergedHeaders = new Headers(response.headers);
642
- mergeStubHeaders(mergedHeaders, stubResponse.headers, false);
643
- return new Response(response.body, {
644
- status: response.status,
645
- statusText: response.statusText,
646
- headers: mergedHeaders,
681
+ // Only fill in missing headers the returned Response's explicit headers
682
+ // take precedence (stubOverridesNonCookie=false), matching executeMiddleware.
683
+ // mergeReqCtx=false: the intercept path deliberately does NOT merge reqCtx
684
+ // stub headers here (pinned by intercept-middleware-headers.test.ts).
685
+ return mergeResponse(response, stubResponse.headers, {
686
+ stubOverridesNonCookie: false,
687
+ mergeReqCtx: false,
647
688
  });
648
689
  }
649
690
  return response;
@@ -684,7 +725,6 @@ export async function executeLoaderMiddleware<TEnv>(
684
725
  regex: null,
685
726
  paramNames: [],
686
727
  handler,
687
- mountPrefix: null,
688
728
  } as MiddlewareEntry<TEnv>,
689
729
  params,
690
730
  }));