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

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 (902) 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 +5 -1
  81. package/dist/bin/rango.js.map +1 -0
  82. package/dist/browser/event-controller.d.ts +191 -0
  83. package/dist/browser/event-controller.d.ts.map +1 -0
  84. package/dist/browser/event-controller.js +559 -0
  85. package/dist/browser/event-controller.js.map +1 -0
  86. package/dist/browser/index.d.ts +2 -0
  87. package/dist/browser/index.d.ts.map +1 -0
  88. package/dist/browser/index.js +14 -0
  89. package/dist/browser/index.js.map +1 -0
  90. package/dist/browser/link-interceptor.d.ts +38 -0
  91. package/dist/browser/link-interceptor.d.ts.map +1 -0
  92. package/dist/browser/link-interceptor.js +99 -0
  93. package/dist/browser/link-interceptor.js.map +1 -0
  94. package/dist/browser/logging.d.ts +10 -0
  95. package/dist/browser/logging.d.ts.map +1 -0
  96. package/dist/browser/logging.js +29 -0
  97. package/dist/browser/logging.js.map +1 -0
  98. package/dist/browser/lru-cache.d.ts +17 -0
  99. package/dist/browser/lru-cache.d.ts.map +1 -0
  100. package/dist/browser/lru-cache.js +50 -0
  101. package/dist/browser/lru-cache.js.map +1 -0
  102. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  103. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  104. package/dist/browser/merge-segment-loaders.js +102 -0
  105. package/dist/browser/merge-segment-loaders.js.map +1 -0
  106. package/dist/browser/navigation-bridge.d.ts +102 -0
  107. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  108. package/dist/browser/navigation-bridge.js +708 -0
  109. package/dist/browser/navigation-bridge.js.map +1 -0
  110. package/dist/browser/navigation-client.d.ts +25 -0
  111. package/dist/browser/navigation-client.d.ts.map +1 -0
  112. package/dist/browser/navigation-client.js +157 -0
  113. package/dist/browser/navigation-client.js.map +1 -0
  114. package/dist/browser/navigation-store.d.ts +101 -0
  115. package/dist/browser/navigation-store.d.ts.map +1 -0
  116. package/dist/browser/navigation-store.js +625 -0
  117. package/dist/browser/navigation-store.js.map +1 -0
  118. package/dist/browser/partial-update.d.ts +75 -0
  119. package/dist/browser/partial-update.d.ts.map +1 -0
  120. package/dist/browser/partial-update.js +426 -0
  121. package/dist/browser/partial-update.js.map +1 -0
  122. package/dist/browser/react/Link.d.ts +86 -0
  123. package/dist/browser/react/Link.d.ts.map +1 -0
  124. package/dist/browser/react/Link.js +128 -0
  125. package/dist/browser/react/Link.js.map +1 -0
  126. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  127. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  128. package/dist/browser/react/NavigationProvider.js +216 -0
  129. package/dist/browser/react/NavigationProvider.js.map +1 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  132. package/dist/browser/react/ScrollRestoration.js +57 -0
  133. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  134. package/dist/browser/react/context.d.ts +46 -0
  135. package/dist/browser/react/context.d.ts.map +1 -0
  136. package/dist/browser/react/context.js +10 -0
  137. package/dist/browser/react/context.js.map +1 -0
  138. package/dist/browser/react/index.d.ts +11 -0
  139. package/dist/browser/react/index.d.ts.map +1 -0
  140. package/dist/browser/react/index.js +22 -0
  141. package/dist/browser/react/index.js.map +1 -0
  142. package/dist/browser/react/location-state-shared.d.ts +63 -0
  143. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  144. package/dist/browser/react/location-state-shared.js +81 -0
  145. package/dist/browser/react/location-state-shared.js.map +1 -0
  146. package/dist/browser/react/location-state.d.ts +23 -0
  147. package/dist/browser/react/location-state.d.ts.map +1 -0
  148. package/dist/browser/react/location-state.js +29 -0
  149. package/dist/browser/react/location-state.js.map +1 -0
  150. package/dist/browser/react/mount-context.d.ts +24 -0
  151. package/dist/browser/react/mount-context.d.ts.map +1 -0
  152. package/dist/browser/react/mount-context.js +24 -0
  153. package/dist/browser/react/mount-context.js.map +1 -0
  154. package/dist/browser/react/use-action.d.ts +64 -0
  155. package/dist/browser/react/use-action.d.ts.map +1 -0
  156. package/dist/browser/react/use-action.js +134 -0
  157. package/dist/browser/react/use-action.js.map +1 -0
  158. package/dist/browser/react/use-client-cache.d.ts +41 -0
  159. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  160. package/dist/browser/react/use-client-cache.js +39 -0
  161. package/dist/browser/react/use-client-cache.js.map +1 -0
  162. package/dist/browser/react/use-handle.d.ts +31 -0
  163. package/dist/browser/react/use-handle.d.ts.map +1 -0
  164. package/dist/browser/react/use-handle.js +144 -0
  165. package/dist/browser/react/use-handle.js.map +1 -0
  166. package/dist/browser/react/use-href.d.ts +33 -0
  167. package/dist/browser/react/use-href.d.ts.map +1 -0
  168. package/dist/browser/react/use-href.js +39 -0
  169. package/dist/browser/react/use-href.js.map +1 -0
  170. package/dist/browser/react/use-link-status.d.ts +37 -0
  171. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  172. package/dist/browser/react/use-link-status.js +99 -0
  173. package/dist/browser/react/use-link-status.js.map +1 -0
  174. package/dist/browser/react/use-mount.d.ts +25 -0
  175. package/dist/browser/react/use-mount.d.ts.map +1 -0
  176. package/dist/browser/react/use-mount.js +30 -0
  177. package/dist/browser/react/use-mount.js.map +1 -0
  178. package/dist/browser/react/use-navigation.d.ts +27 -0
  179. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  180. package/dist/browser/react/use-navigation.js +87 -0
  181. package/dist/browser/react/use-navigation.js.map +1 -0
  182. package/dist/browser/react/use-segments.d.ts +38 -0
  183. package/dist/browser/react/use-segments.d.ts.map +1 -0
  184. package/dist/browser/react/use-segments.js +130 -0
  185. package/dist/browser/react/use-segments.js.map +1 -0
  186. package/dist/browser/request-controller.d.ts +26 -0
  187. package/dist/browser/request-controller.d.ts.map +1 -0
  188. package/dist/browser/request-controller.js +147 -0
  189. package/dist/browser/request-controller.js.map +1 -0
  190. package/dist/browser/rsc-router.d.ts +129 -0
  191. package/dist/browser/rsc-router.d.ts.map +1 -0
  192. package/dist/browser/rsc-router.js +195 -0
  193. package/dist/browser/rsc-router.js.map +1 -0
  194. package/dist/browser/scroll-restoration.d.ts +93 -0
  195. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  196. package/dist/browser/scroll-restoration.js +321 -0
  197. package/dist/browser/scroll-restoration.js.map +1 -0
  198. package/dist/browser/segment-structure-assert.d.ts +17 -0
  199. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  200. package/dist/browser/segment-structure-assert.js +59 -0
  201. package/dist/browser/segment-structure-assert.js.map +1 -0
  202. package/dist/browser/server-action-bridge.d.ts +26 -0
  203. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  204. package/dist/browser/server-action-bridge.js +668 -0
  205. package/dist/browser/server-action-bridge.js.map +1 -0
  206. package/dist/browser/shallow.d.ts +12 -0
  207. package/dist/browser/shallow.d.ts.map +1 -0
  208. package/dist/browser/shallow.js +34 -0
  209. package/dist/browser/shallow.js.map +1 -0
  210. package/dist/browser/types.d.ts +369 -0
  211. package/dist/browser/types.d.ts.map +1 -0
  212. package/dist/browser/types.js +2 -0
  213. package/dist/browser/types.js.map +1 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  216. package/dist/build/__tests__/generate-cli.test.js +237 -0
  217. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  220. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  221. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  224. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  225. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  230. package/dist/build/generate-manifest.d.ts +81 -0
  231. package/dist/build/generate-manifest.d.ts.map +1 -0
  232. package/dist/build/generate-manifest.js +276 -0
  233. package/dist/build/generate-manifest.js.map +1 -0
  234. package/dist/build/generate-route-types.d.ts +115 -0
  235. package/dist/build/generate-route-types.d.ts.map +1 -0
  236. package/dist/build/generate-route-types.js +740 -0
  237. package/dist/build/generate-route-types.js.map +1 -0
  238. package/dist/build/index.d.ts +21 -0
  239. package/dist/build/index.d.ts.map +1 -0
  240. package/dist/build/index.js +21 -0
  241. package/dist/build/index.js.map +1 -0
  242. package/dist/build/route-trie.d.ts +71 -0
  243. package/dist/build/route-trie.d.ts.map +1 -0
  244. package/dist/build/route-trie.js +175 -0
  245. package/dist/build/route-trie.js.map +1 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  248. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  249. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  252. package/dist/cache/__tests__/document-cache.test.js +345 -0
  253. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  260. package/dist/cache/__tests__/memory-store.test.js +367 -0
  261. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  262. package/dist/cache/cache-scope.d.ts +102 -0
  263. package/dist/cache/cache-scope.d.ts.map +1 -0
  264. package/dist/cache/cache-scope.js +440 -0
  265. package/dist/cache/cache-scope.js.map +1 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  272. package/dist/cache/cf/cf-cache-store.js +242 -0
  273. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  274. package/dist/cache/cf/index.d.ts +14 -0
  275. package/dist/cache/cf/index.d.ts.map +1 -0
  276. package/dist/cache/cf/index.js +17 -0
  277. package/dist/cache/cf/index.js.map +1 -0
  278. package/dist/cache/document-cache.d.ts +64 -0
  279. package/dist/cache/document-cache.d.ts.map +1 -0
  280. package/dist/cache/document-cache.js +228 -0
  281. package/dist/cache/document-cache.js.map +1 -0
  282. package/dist/cache/index.d.ts +19 -0
  283. package/dist/cache/index.d.ts.map +1 -0
  284. package/dist/cache/index.js +21 -0
  285. package/dist/cache/index.js.map +1 -0
  286. package/dist/cache/memory-segment-store.d.ts +110 -0
  287. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  288. package/dist/cache/memory-segment-store.js +117 -0
  289. package/dist/cache/memory-segment-store.js.map +1 -0
  290. package/dist/cache/memory-store.d.ts +41 -0
  291. package/dist/cache/memory-store.d.ts.map +1 -0
  292. package/dist/cache/memory-store.js +191 -0
  293. package/dist/cache/memory-store.js.map +1 -0
  294. package/dist/cache/types.d.ts +317 -0
  295. package/dist/cache/types.d.ts.map +1 -0
  296. package/dist/cache/types.js +12 -0
  297. package/dist/cache/types.js.map +1 -0
  298. package/dist/client.d.ts +248 -0
  299. package/dist/client.d.ts.map +1 -0
  300. package/dist/client.js +367 -0
  301. package/dist/client.js.map +1 -0
  302. package/dist/client.rsc.d.ts +26 -0
  303. package/dist/client.rsc.d.ts.map +1 -0
  304. package/dist/client.rsc.js +46 -0
  305. package/dist/client.rsc.js.map +1 -0
  306. package/dist/component-utils.d.ts +36 -0
  307. package/dist/component-utils.d.ts.map +1 -0
  308. package/dist/component-utils.js +61 -0
  309. package/dist/component-utils.js.map +1 -0
  310. package/dist/components/DefaultDocument.d.ts +13 -0
  311. package/dist/components/DefaultDocument.d.ts.map +1 -0
  312. package/dist/components/DefaultDocument.js +15 -0
  313. package/dist/components/DefaultDocument.js.map +1 -0
  314. package/dist/debug.d.ts +58 -0
  315. package/dist/debug.d.ts.map +1 -0
  316. package/dist/debug.js +157 -0
  317. package/dist/debug.js.map +1 -0
  318. package/dist/default-error-boundary.d.ts +11 -0
  319. package/dist/default-error-boundary.d.ts.map +1 -0
  320. package/dist/default-error-boundary.js +45 -0
  321. package/dist/default-error-boundary.js.map +1 -0
  322. package/dist/deps/browser.d.ts +2 -0
  323. package/dist/deps/browser.d.ts.map +1 -0
  324. package/dist/deps/browser.js +3 -0
  325. package/dist/deps/browser.js.map +1 -0
  326. package/dist/deps/html-stream-client.d.ts +2 -0
  327. package/dist/deps/html-stream-client.d.ts.map +1 -0
  328. package/dist/deps/html-stream-client.js +3 -0
  329. package/dist/deps/html-stream-client.js.map +1 -0
  330. package/dist/deps/html-stream-server.d.ts +2 -0
  331. package/dist/deps/html-stream-server.d.ts.map +1 -0
  332. package/dist/deps/html-stream-server.js +3 -0
  333. package/dist/deps/html-stream-server.js.map +1 -0
  334. package/dist/deps/rsc.d.ts +2 -0
  335. package/dist/deps/rsc.d.ts.map +1 -0
  336. package/dist/deps/rsc.js +4 -0
  337. package/dist/deps/rsc.js.map +1 -0
  338. package/dist/deps/ssr.d.ts +2 -0
  339. package/dist/deps/ssr.d.ts.map +1 -0
  340. package/dist/deps/ssr.js +3 -0
  341. package/dist/deps/ssr.js.map +1 -0
  342. package/dist/errors.d.ts +174 -0
  343. package/dist/errors.d.ts.map +1 -0
  344. package/dist/errors.js +241 -0
  345. package/dist/errors.js.map +1 -0
  346. package/dist/handle.d.ts +78 -0
  347. package/dist/handle.d.ts.map +1 -0
  348. package/dist/handle.js +82 -0
  349. package/dist/handle.js.map +1 -0
  350. package/dist/handles/MetaTags.d.ts +14 -0
  351. package/dist/handles/MetaTags.d.ts.map +1 -0
  352. package/dist/handles/MetaTags.js +136 -0
  353. package/dist/handles/MetaTags.js.map +1 -0
  354. package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  355. package/dist/handles/index.d.ts.map +1 -0
  356. package/dist/handles/index.js +6 -0
  357. package/dist/handles/index.js.map +1 -0
  358. package/dist/handles/meta.d.ts +39 -0
  359. package/dist/handles/meta.d.ts.map +1 -0
  360. package/dist/handles/meta.js +202 -0
  361. package/dist/handles/meta.js.map +1 -0
  362. package/dist/host/__tests__/errors.test.d.ts +2 -0
  363. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  364. package/dist/host/__tests__/errors.test.js +76 -0
  365. package/dist/host/__tests__/errors.test.js.map +1 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  374. package/dist/host/__tests__/router.test.d.ts +2 -0
  375. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  376. package/dist/host/__tests__/router.test.js +241 -0
  377. package/dist/host/__tests__/router.test.js.map +1 -0
  378. package/dist/host/__tests__/testing.test.d.ts +2 -0
  379. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  380. package/dist/host/__tests__/testing.test.js +64 -0
  381. package/dist/host/__tests__/testing.test.js.map +1 -0
  382. package/dist/host/__tests__/utils.test.d.ts +2 -0
  383. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  384. package/dist/host/__tests__/utils.test.js +29 -0
  385. package/dist/host/__tests__/utils.test.js.map +1 -0
  386. package/dist/host/cookie-handler.d.ts +34 -0
  387. package/dist/host/cookie-handler.d.ts.map +1 -0
  388. package/dist/host/cookie-handler.js +124 -0
  389. package/dist/host/cookie-handler.js.map +1 -0
  390. package/dist/host/errors.d.ts +56 -0
  391. package/dist/host/errors.d.ts.map +1 -0
  392. package/dist/host/errors.js +79 -0
  393. package/dist/host/errors.js.map +1 -0
  394. package/dist/host/index.d.ts +29 -0
  395. package/dist/host/index.d.ts.map +1 -0
  396. package/dist/host/index.js +32 -0
  397. package/dist/host/index.js.map +1 -0
  398. package/dist/host/pattern-matcher.d.ts +36 -0
  399. package/dist/host/pattern-matcher.d.ts.map +1 -0
  400. package/dist/host/pattern-matcher.js +172 -0
  401. package/dist/host/pattern-matcher.js.map +1 -0
  402. package/dist/host/router.d.ts +26 -0
  403. package/dist/host/router.d.ts.map +1 -0
  404. package/dist/host/router.js +218 -0
  405. package/dist/host/router.js.map +1 -0
  406. package/dist/host/testing.d.ts +36 -0
  407. package/dist/host/testing.d.ts.map +1 -0
  408. package/dist/host/testing.js +55 -0
  409. package/dist/host/testing.js.map +1 -0
  410. package/dist/host/types.d.ts +115 -0
  411. package/dist/host/types.d.ts.map +1 -0
  412. package/dist/host/types.js +7 -0
  413. package/dist/host/types.js.map +1 -0
  414. package/dist/host/utils.d.ts +21 -0
  415. package/dist/host/utils.d.ts.map +1 -0
  416. package/dist/host/utils.js +23 -0
  417. package/dist/host/utils.js.map +1 -0
  418. package/dist/href-client.d.ts +131 -0
  419. package/dist/href-client.d.ts.map +1 -0
  420. package/dist/href-client.js +64 -0
  421. package/dist/href-client.js.map +1 -0
  422. package/dist/href-context.d.ts +29 -0
  423. package/dist/href-context.d.ts.map +1 -0
  424. package/dist/href-context.js +21 -0
  425. package/dist/href-context.js.map +1 -0
  426. package/dist/index.d.ts +73 -0
  427. package/dist/index.d.ts.map +1 -0
  428. package/dist/index.js +91 -0
  429. package/dist/index.js.map +1 -0
  430. package/dist/index.rsc.d.ts +32 -0
  431. package/dist/index.rsc.d.ts.map +1 -0
  432. package/dist/index.rsc.js +40 -0
  433. package/dist/index.rsc.js.map +1 -0
  434. package/dist/internal-debug.d.ts +2 -0
  435. package/dist/internal-debug.d.ts.map +1 -0
  436. package/dist/internal-debug.js +5 -0
  437. package/dist/internal-debug.js.map +1 -0
  438. package/dist/loader.d.ts +14 -0
  439. package/dist/loader.d.ts.map +1 -0
  440. package/dist/loader.js +20 -0
  441. package/dist/loader.js.map +1 -0
  442. package/dist/loader.rsc.d.ts +19 -0
  443. package/dist/loader.rsc.d.ts.map +1 -0
  444. package/dist/loader.rsc.js +99 -0
  445. package/dist/loader.rsc.js.map +1 -0
  446. package/dist/network-error-thrower.d.ts +17 -0
  447. package/dist/network-error-thrower.d.ts.map +1 -0
  448. package/dist/network-error-thrower.js +14 -0
  449. package/dist/network-error-thrower.js.map +1 -0
  450. package/dist/outlet-context.d.ts +13 -0
  451. package/dist/outlet-context.d.ts.map +1 -0
  452. package/dist/outlet-context.js +3 -0
  453. package/dist/outlet-context.js.map +1 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  456. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  457. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  458. package/dist/prerender/param-hash.d.ts +16 -0
  459. package/dist/prerender/param-hash.d.ts.map +1 -0
  460. package/dist/prerender/param-hash.js +36 -0
  461. package/dist/prerender/param-hash.js.map +1 -0
  462. package/dist/prerender/store.d.ts +38 -0
  463. package/dist/prerender/store.d.ts.map +1 -0
  464. package/dist/prerender/store.js +61 -0
  465. package/dist/prerender/store.js.map +1 -0
  466. package/dist/prerender.d.ts +66 -0
  467. package/dist/prerender.d.ts.map +1 -0
  468. package/dist/prerender.js +57 -0
  469. package/dist/prerender.js.map +1 -0
  470. package/dist/reverse.d.ts +196 -0
  471. package/dist/reverse.d.ts.map +1 -0
  472. package/dist/reverse.js +78 -0
  473. package/dist/reverse.js.map +1 -0
  474. package/dist/root-error-boundary.d.ts +33 -0
  475. package/dist/root-error-boundary.d.ts.map +1 -0
  476. package/dist/root-error-boundary.js +165 -0
  477. package/dist/root-error-boundary.js.map +1 -0
  478. package/dist/route-content-wrapper.d.ts +46 -0
  479. package/dist/route-content-wrapper.d.ts.map +1 -0
  480. package/dist/route-content-wrapper.js +77 -0
  481. package/dist/route-content-wrapper.js.map +1 -0
  482. package/dist/route-definition.d.ts +421 -0
  483. package/dist/route-definition.d.ts.map +1 -0
  484. package/dist/route-definition.js +868 -0
  485. package/dist/route-definition.js.map +1 -0
  486. package/dist/route-map-builder.d.ts +155 -0
  487. package/dist/route-map-builder.d.ts.map +1 -0
  488. package/dist/route-map-builder.js +237 -0
  489. package/dist/route-map-builder.js.map +1 -0
  490. package/dist/route-types.d.ts +165 -0
  491. package/dist/route-types.d.ts.map +1 -0
  492. package/dist/route-types.js +7 -0
  493. package/dist/route-types.js.map +1 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  496. package/dist/router/__tests__/handler-context.test.js +65 -0
  497. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  502. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  503. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  504. package/dist/router/__tests__/match-context.test.js +92 -0
  505. package/dist/router/__tests__/match-context.test.js.map +1 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  508. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  509. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  510. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  511. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  512. package/dist/router/__tests__/match-result.test.js +457 -0
  513. package/dist/router/__tests__/match-result.test.js.map +1 -0
  514. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  515. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  516. package/dist/router/__tests__/on-error.test.js +678 -0
  517. package/dist/router/__tests__/on-error.test.js.map +1 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  520. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  521. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  526. package/dist/router/error-handling.d.ts +77 -0
  527. package/dist/router/error-handling.d.ts.map +1 -0
  528. package/dist/router/error-handling.js +202 -0
  529. package/dist/router/error-handling.js.map +1 -0
  530. package/dist/router/handler-context.d.ts +20 -0
  531. package/dist/router/handler-context.d.ts.map +1 -0
  532. package/dist/router/handler-context.js +198 -0
  533. package/dist/router/handler-context.js.map +1 -0
  534. package/dist/router/intercept-resolution.d.ts +66 -0
  535. package/dist/router/intercept-resolution.d.ts.map +1 -0
  536. package/dist/router/intercept-resolution.js +246 -0
  537. package/dist/router/intercept-resolution.js.map +1 -0
  538. package/dist/router/loader-resolution.d.ts +64 -0
  539. package/dist/router/loader-resolution.d.ts.map +1 -0
  540. package/dist/router/loader-resolution.js +284 -0
  541. package/dist/router/loader-resolution.js.map +1 -0
  542. package/dist/router/logging.d.ts +15 -0
  543. package/dist/router/logging.d.ts.map +1 -0
  544. package/dist/router/logging.js +99 -0
  545. package/dist/router/logging.js.map +1 -0
  546. package/dist/router/manifest.d.ts +22 -0
  547. package/dist/router/manifest.d.ts.map +1 -0
  548. package/dist/router/manifest.js +181 -0
  549. package/dist/router/manifest.js.map +1 -0
  550. package/dist/router/match-api.d.ts +35 -0
  551. package/dist/router/match-api.d.ts.map +1 -0
  552. package/dist/router/match-api.js +406 -0
  553. package/dist/router/match-api.js.map +1 -0
  554. package/dist/router/match-context.d.ts +206 -0
  555. package/dist/router/match-context.d.ts.map +1 -0
  556. package/dist/router/match-context.js +17 -0
  557. package/dist/router/match-context.js.map +1 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  560. package/dist/router/match-middleware/background-revalidation.js +75 -0
  561. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  564. package/dist/router/match-middleware/cache-lookup.js +257 -0
  565. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  566. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  567. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  568. package/dist/router/match-middleware/cache-store.js +108 -0
  569. package/dist/router/match-middleware/cache-store.js.map +1 -0
  570. package/dist/router/match-middleware/index.d.ts +81 -0
  571. package/dist/router/match-middleware/index.d.ts.map +1 -0
  572. package/dist/router/match-middleware/index.js +80 -0
  573. package/dist/router/match-middleware/index.js.map +1 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  576. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  577. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  580. package/dist/router/match-middleware/segment-resolution.js +53 -0
  581. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  582. package/dist/router/match-pipelines.d.ts +147 -0
  583. package/dist/router/match-pipelines.d.ts.map +1 -0
  584. package/dist/router/match-pipelines.js +82 -0
  585. package/dist/router/match-pipelines.js.map +1 -0
  586. package/dist/router/match-result.d.ts +126 -0
  587. package/dist/router/match-result.d.ts.map +1 -0
  588. package/dist/router/match-result.js +93 -0
  589. package/dist/router/match-result.js.map +1 -0
  590. package/dist/router/metrics.d.ts +20 -0
  591. package/dist/router/metrics.d.ts.map +1 -0
  592. package/dist/router/metrics.js +47 -0
  593. package/dist/router/metrics.js.map +1 -0
  594. package/dist/router/middleware.d.ts +249 -0
  595. package/dist/router/middleware.d.ts.map +1 -0
  596. package/dist/router/middleware.js +434 -0
  597. package/dist/router/middleware.js.map +1 -0
  598. package/dist/router/middleware.test.d.ts +2 -0
  599. package/dist/router/middleware.test.d.ts.map +1 -0
  600. package/dist/router/middleware.test.js +816 -0
  601. package/dist/router/middleware.test.js.map +1 -0
  602. package/dist/router/pattern-matching.d.ts +149 -0
  603. package/dist/router/pattern-matching.d.ts.map +1 -0
  604. package/dist/router/pattern-matching.js +349 -0
  605. package/dist/router/pattern-matching.js.map +1 -0
  606. package/dist/router/revalidation.d.ts +44 -0
  607. package/dist/router/revalidation.d.ts.map +1 -0
  608. package/dist/router/revalidation.js +147 -0
  609. package/dist/router/revalidation.js.map +1 -0
  610. package/dist/router/router-context.d.ts +135 -0
  611. package/dist/router/router-context.d.ts.map +1 -0
  612. package/dist/router/router-context.js +36 -0
  613. package/dist/router/router-context.js.map +1 -0
  614. package/dist/router/segment-resolution.d.ts +127 -0
  615. package/dist/router/segment-resolution.d.ts.map +1 -0
  616. package/dist/router/segment-resolution.js +919 -0
  617. package/dist/router/segment-resolution.js.map +1 -0
  618. package/dist/router/trie-matching.d.ts +40 -0
  619. package/dist/router/trie-matching.d.ts.map +1 -0
  620. package/dist/router/trie-matching.js +127 -0
  621. package/dist/router/trie-matching.js.map +1 -0
  622. package/dist/router/types.d.ts +136 -0
  623. package/dist/router/types.d.ts.map +1 -0
  624. package/dist/router/types.js +7 -0
  625. package/dist/router/types.js.map +1 -0
  626. package/dist/router.d.ts +753 -0
  627. package/dist/router.d.ts.map +1 -0
  628. package/dist/router.gen.d.ts +6 -0
  629. package/dist/router.gen.d.ts.map +1 -0
  630. package/dist/router.gen.js +6 -0
  631. package/dist/router.gen.js.map +1 -0
  632. package/dist/router.js +1304 -0
  633. package/dist/router.js.map +1 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  636. package/dist/rsc/__tests__/helpers.test.js +140 -0
  637. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  638. package/dist/rsc/handler.d.ts +45 -0
  639. package/dist/rsc/handler.d.ts.map +1 -0
  640. package/dist/rsc/handler.js +1172 -0
  641. package/dist/rsc/handler.js.map +1 -0
  642. package/dist/rsc/helpers.d.ts +16 -0
  643. package/dist/rsc/helpers.d.ts.map +1 -0
  644. package/dist/rsc/helpers.js +55 -0
  645. package/dist/rsc/helpers.js.map +1 -0
  646. package/dist/rsc/index.d.ts +22 -0
  647. package/dist/rsc/index.d.ts.map +1 -0
  648. package/dist/rsc/index.js +23 -0
  649. package/dist/rsc/index.js.map +1 -0
  650. package/dist/rsc/nonce.d.ts +9 -0
  651. package/dist/rsc/nonce.d.ts.map +1 -0
  652. package/dist/rsc/nonce.js +18 -0
  653. package/dist/rsc/nonce.js.map +1 -0
  654. package/dist/rsc/types.d.ts +206 -0
  655. package/dist/rsc/types.d.ts.map +1 -0
  656. package/dist/rsc/types.js +8 -0
  657. package/dist/rsc/types.js.map +1 -0
  658. package/dist/search-params.d.ts +103 -0
  659. package/dist/search-params.d.ts.map +1 -0
  660. package/dist/search-params.js +74 -0
  661. package/dist/search-params.js.map +1 -0
  662. package/dist/segment-system.d.ts +75 -0
  663. package/dist/segment-system.d.ts.map +1 -0
  664. package/dist/segment-system.js +336 -0
  665. package/dist/segment-system.js.map +1 -0
  666. package/dist/server/context.d.ts +245 -0
  667. package/dist/server/context.d.ts.map +1 -0
  668. package/dist/server/context.js +197 -0
  669. package/dist/server/context.js.map +1 -0
  670. package/dist/server/fetchable-loader-store.d.ts +18 -0
  671. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  672. package/dist/server/fetchable-loader-store.js +18 -0
  673. package/dist/server/fetchable-loader-store.js.map +1 -0
  674. package/dist/server/handle-store.d.ts +85 -0
  675. package/dist/server/handle-store.d.ts.map +1 -0
  676. package/dist/server/handle-store.js +142 -0
  677. package/dist/server/handle-store.js.map +1 -0
  678. package/dist/server/loader-registry.d.ts +55 -0
  679. package/dist/server/loader-registry.d.ts.map +1 -0
  680. package/dist/server/loader-registry.js +132 -0
  681. package/dist/server/loader-registry.js.map +1 -0
  682. package/dist/server/request-context.d.ts +226 -0
  683. package/dist/server/request-context.d.ts.map +1 -0
  684. package/dist/server/request-context.js +290 -0
  685. package/dist/server/request-context.js.map +1 -0
  686. package/dist/server/root-layout.d.ts +4 -0
  687. package/dist/server/root-layout.d.ts.map +1 -0
  688. package/dist/server/root-layout.js +5 -0
  689. package/dist/server/root-layout.js.map +1 -0
  690. package/dist/server.d.ts +15 -0
  691. package/dist/server.d.ts.map +1 -0
  692. package/dist/server.js +20 -0
  693. package/dist/server.js.map +1 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  698. package/dist/ssr/index.d.ts +98 -0
  699. package/dist/ssr/index.d.ts.map +1 -0
  700. package/dist/ssr/index.js +158 -0
  701. package/dist/ssr/index.js.map +1 -0
  702. package/dist/static-handler.d.ts +50 -0
  703. package/dist/static-handler.d.ts.map +1 -0
  704. package/dist/static-handler.gen.d.ts +5 -0
  705. package/dist/static-handler.gen.d.ts.map +1 -0
  706. package/dist/static-handler.gen.js +5 -0
  707. package/dist/static-handler.gen.js.map +1 -0
  708. package/dist/static-handler.js +29 -0
  709. package/dist/static-handler.js.map +1 -0
  710. package/dist/theme/ThemeProvider.d.ts +20 -0
  711. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  712. package/dist/theme/ThemeProvider.js +240 -0
  713. package/dist/theme/ThemeProvider.js.map +1 -0
  714. package/dist/theme/ThemeScript.d.ts +48 -0
  715. package/dist/theme/ThemeScript.d.ts.map +1 -0
  716. package/dist/theme/ThemeScript.js +13 -0
  717. package/dist/theme/ThemeScript.js.map +1 -0
  718. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  719. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  720. package/dist/theme/__tests__/theme.test.js +103 -0
  721. package/dist/theme/__tests__/theme.test.js.map +1 -0
  722. package/dist/theme/constants.d.ts +29 -0
  723. package/dist/theme/constants.d.ts.map +1 -0
  724. package/dist/theme/constants.js +48 -0
  725. package/dist/theme/constants.js.map +1 -0
  726. package/dist/theme/index.d.ts +31 -0
  727. package/dist/theme/index.d.ts.map +1 -0
  728. package/dist/theme/index.js +36 -0
  729. package/dist/theme/index.js.map +1 -0
  730. package/dist/theme/theme-context.d.ts +40 -0
  731. package/dist/theme/theme-context.d.ts.map +1 -0
  732. package/dist/theme/theme-context.js +60 -0
  733. package/dist/theme/theme-context.js.map +1 -0
  734. package/dist/theme/theme-script.d.ts +27 -0
  735. package/dist/theme/theme-script.d.ts.map +1 -0
  736. package/dist/theme/theme-script.js +147 -0
  737. package/dist/theme/theme-script.js.map +1 -0
  738. package/dist/theme/types.d.ts +163 -0
  739. package/dist/theme/types.d.ts.map +1 -0
  740. package/dist/theme/types.js +11 -0
  741. package/dist/theme/types.js.map +1 -0
  742. package/dist/theme/use-theme.d.ts +12 -0
  743. package/dist/theme/use-theme.d.ts.map +1 -0
  744. package/dist/theme/use-theme.js +40 -0
  745. package/dist/theme/use-theme.js.map +1 -0
  746. package/dist/types.d.ts +1479 -0
  747. package/dist/types.d.ts.map +1 -0
  748. package/dist/types.js +10 -0
  749. package/dist/types.js.map +1 -0
  750. package/dist/urls.d.ts +441 -0
  751. package/dist/urls.d.ts.map +1 -0
  752. package/dist/urls.gen.d.ts +8 -0
  753. package/dist/urls.gen.d.ts.map +1 -0
  754. package/dist/urls.gen.js +8 -0
  755. package/dist/urls.gen.js.map +1 -0
  756. package/dist/urls.js +443 -0
  757. package/dist/urls.js.map +1 -0
  758. package/dist/use-loader.d.ts +127 -0
  759. package/dist/use-loader.d.ts.map +1 -0
  760. package/dist/use-loader.js +237 -0
  761. package/dist/use-loader.js.map +1 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  774. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  778. package/dist/vite/ast-handler-extract.d.ts +49 -0
  779. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  780. package/dist/vite/ast-handler-extract.js +249 -0
  781. package/dist/vite/ast-handler-extract.js.map +1 -0
  782. package/dist/vite/expose-action-id.d.ts +19 -0
  783. package/dist/vite/expose-action-id.d.ts.map +1 -0
  784. package/dist/vite/expose-action-id.js +250 -0
  785. package/dist/vite/expose-action-id.js.map +1 -0
  786. package/dist/vite/expose-id-utils.d.ts +69 -0
  787. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  788. package/dist/vite/expose-id-utils.js +289 -0
  789. package/dist/vite/expose-id-utils.js.map +1 -0
  790. package/dist/vite/expose-internal-ids.d.ts +22 -0
  791. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  792. package/dist/vite/expose-internal-ids.js +886 -0
  793. package/dist/vite/expose-internal-ids.js.map +1 -0
  794. package/dist/vite/index.d.ts +149 -0
  795. package/dist/vite/index.d.ts.map +1 -0
  796. package/dist/vite/index.js +361 -65
  797. package/dist/vite/index.js.bak +5448 -0
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/dist/vite/virtual-entries.js +110 -0
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +6 -1
  809. package/skills/breadcrumbs/SKILL.md +60 -0
  810. package/skills/observability/SKILL.md +12 -3
  811. package/skills/prerender/SKILL.md +30 -11
  812. package/skills/router-setup/SKILL.md +11 -3
  813. package/skills/server-actions/SKILL.md +25 -1
  814. package/skills/testing/SKILL.md +17 -17
  815. package/skills/testing/cache-prerender.md +29 -3
  816. package/skills/testing/flight.md +13 -10
  817. package/skills/testing/render-handler.md +3 -0
  818. package/skills/testing/server-tree.md +1 -1
  819. package/skills/testing/setup.md +1 -1
  820. package/src/browser/partial-update.ts +22 -1
  821. package/src/browser/react/use-router.ts +2 -1
  822. package/src/browser/rsc-router.tsx +8 -1
  823. package/src/browser/server-action-bridge.ts +51 -3
  824. package/src/browser/types.ts +23 -4
  825. package/src/browser/validate-redirect-origin.ts +43 -15
  826. package/src/build/index.ts +8 -9
  827. package/src/build/route-trie.ts +43 -11
  828. package/src/build/route-types/codegen.ts +12 -1
  829. package/src/cache/cache-runtime.ts +21 -0
  830. package/src/cache/cache-scope.ts +20 -0
  831. package/src/cache/document-cache.ts +10 -0
  832. package/src/cache/profile-registry.ts +6 -34
  833. package/src/client.rsc.tsx +3 -0
  834. package/src/client.tsx +5 -0
  835. package/src/cloudflare/index.ts +11 -0
  836. package/src/cloudflare/tracing.ts +109 -0
  837. package/src/context-var.ts +12 -0
  838. package/src/defer.ts +196 -0
  839. package/src/handles/breadcrumbs.ts +16 -5
  840. package/src/index.rsc.ts +26 -2
  841. package/src/index.ts +23 -1
  842. package/src/redirect-origin.ts +100 -0
  843. package/src/route-definition/dsl-helpers.ts +19 -0
  844. package/src/route-definition/redirect.ts +32 -8
  845. package/src/route-definition/resolve-handler-use.ts +6 -0
  846. package/src/router/find-match.ts +0 -1
  847. package/src/router/instrument.ts +230 -0
  848. package/src/router/loader-resolution.ts +37 -31
  849. package/src/router/match-middleware/cache-lookup.ts +104 -139
  850. package/src/router/match-middleware/cache-store.ts +12 -0
  851. package/src/router/match-middleware/segment-resolution.ts +0 -1
  852. package/src/router/middleware-types.ts +0 -1
  853. package/src/router/middleware.ts +94 -33
  854. package/src/router/pattern-matching.ts +4 -23
  855. package/src/router/prerender-match.ts +32 -8
  856. package/src/router/revalidation.ts +9 -4
  857. package/src/router/route-snapshot.ts +0 -1
  858. package/src/router/router-context.ts +2 -2
  859. package/src/router/router-interfaces.ts +18 -0
  860. package/src/router/router-options.ts +58 -4
  861. package/src/router/segment-resolution/fresh.ts +15 -18
  862. package/src/router/segment-resolution/helpers.ts +6 -0
  863. package/src/router/segment-resolution/loader-cache.ts +30 -10
  864. package/src/router/segment-resolution/revalidation.ts +194 -261
  865. package/src/router/segment-wrappers.ts +3 -5
  866. package/src/router/telemetry-otel.ts +161 -179
  867. package/src/router/tracing.ts +198 -0
  868. package/src/router/trie-matching.ts +3 -5
  869. package/src/router.ts +13 -9
  870. package/src/rsc/handler-context.ts +1 -0
  871. package/src/rsc/handler.ts +135 -130
  872. package/src/rsc/helpers.ts +56 -3
  873. package/src/rsc/json-route-result.ts +38 -0
  874. package/src/rsc/loader-fetch.ts +7 -1
  875. package/src/rsc/origin-guard.ts +10 -4
  876. package/src/rsc/progressive-enhancement.ts +17 -2
  877. package/src/rsc/redirect-guard.ts +99 -0
  878. package/src/rsc/response-route-handler.ts +23 -18
  879. package/src/rsc/rsc-rendering.ts +38 -14
  880. package/src/rsc/server-action.ts +32 -8
  881. package/src/rsc/types.ts +6 -2
  882. package/src/segment-system.tsx +4 -1
  883. package/src/server/request-context.ts +35 -18
  884. package/src/testing/cache-status.ts +44 -1
  885. package/src/testing/dispatch.ts +43 -6
  886. package/src/testing/e2e/index.ts +1 -0
  887. package/src/testing/flight.ts +48 -2
  888. package/src/testing/index.ts +1 -0
  889. package/src/testing/render-handler.ts +31 -12
  890. package/src/testing/render-route.tsx +75 -13
  891. package/src/types/handler-context.ts +28 -1
  892. package/src/vite/discovery/discover-routers.ts +22 -11
  893. package/src/vite/discovery/prerender-collection.ts +28 -41
  894. package/src/vite/discovery/state.ts +11 -0
  895. package/src/vite/plugin-types.ts +56 -7
  896. package/src/vite/plugins/expose-ids/router-transform.ts +10 -0
  897. package/src/vite/plugins/refresh-cmd.ts +1 -1
  898. package/src/vite/plugins/use-cache-transform.ts +21 -10
  899. package/src/vite/rango.ts +2 -0
  900. package/src/vite/router-discovery.ts +16 -3
  901. package/src/vite/utils/prerender-utils.ts +36 -0
  902. package/src/router/middleware-cookies.ts +0 -42
@@ -12,20 +12,24 @@ 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";
22
+ import { observePhase, PHASES } from "./instrument.js";
17
23
  import { stripInternalParams } from "./handler-context.js";
18
24
  import { isWebSocketUpgradeResponse } from "../response-utils.js";
19
25
 
20
- // Re-export types and cookie utilities consumed through this module's path.
26
+ // Re-export types consumed through this module's path.
21
27
  export type {
22
28
  CookieOptions,
23
- MiddlewareCollectableEntry,
24
29
  MiddlewareContext,
25
30
  MiddlewareEntry,
26
31
  MiddlewareFn,
27
32
  } from "./middleware-types.js";
28
- export { parseCookies, serializeCookie } from "./middleware-cookies.js";
29
33
 
30
34
  const MIDDLEWARE_METRIC_DEPTH = 1;
31
35
  const POST_METRIC_MIN_DURATION_MS = 0.01;
@@ -238,9 +242,13 @@ export function createMiddlewareContext<TEnv>(
238
242
 
239
243
  reverse:
240
244
  reverse ??
241
- ((name: string) => {
245
+ ((
246
+ name: string,
247
+ _params?: Record<string, string>,
248
+ _search?: Record<string, unknown>,
249
+ ) => {
242
250
  throw new Error(
243
- `ctx.reverse() is not available - route map was not provided to middleware context`,
251
+ `ctx.reverse(${JSON.stringify(name)}) is not available: no route map is bound to this middleware context.`,
244
252
  );
245
253
  }),
246
254
 
@@ -293,6 +301,10 @@ function mergeStubHeaders(
293
301
  stubOverridesNonCookie: boolean,
294
302
  ): void {
295
303
  stub.forEach((value, name) => {
304
+ // The reserved external-redirect marker is internal and never a trust
305
+ // signal; never copy a stub value (e.g. a stray ctx.header() call) onto a
306
+ // browser-facing response. The opt-in is the out-of-band brand.
307
+ if (name.toLowerCase() === EXTERNAL_REDIRECT_MARKER) return;
296
308
  if (name.toLowerCase() === "set-cookie") {
297
309
  target.append(name, value);
298
310
  } else if (stubOverridesNonCookie || !target.has(name)) {
@@ -318,12 +330,50 @@ function mergeReqCtxStub(
318
330
  }
319
331
  }
320
332
  reqCtx.res.headers.forEach((value, name) => {
333
+ // Never propagate the reserved external-redirect marker (see mergeStubHeaders).
334
+ if (name.toLowerCase() === EXTERNAL_REDIRECT_MARKER) return;
321
335
  if (name !== "set-cookie" && !target.has(name)) {
322
336
  target.set(name, value);
323
337
  }
324
338
  });
325
339
  }
326
340
 
341
+ // Clone `base` with stub headers merged into a fresh Headers (the clone keeps
342
+ // the body mutable for post-next() modifications). Set-Cookie is always
343
+ // appended; other headers obey stubOverridesNonCookie (see mergeStubHeaders).
344
+ // mergeReqCtx folds in RequestContext stub cookies/headers; the intercept
345
+ // short-circuit path passes false (its reqCtx headers are not merged here),
346
+ // which is the one deliberate divergence between the call sites.
347
+ function mergeResponse(
348
+ base: Response,
349
+ stub: Headers,
350
+ opts: { stubOverridesNonCookie: boolean; mergeReqCtx: boolean },
351
+ ): Response {
352
+ const mergedHeaders = new Headers(base.headers);
353
+ // The reserved external-redirect marker is never a trust signal and must never
354
+ // reach the browser. The guard strips it on 3xx redirects; strip it here too so
355
+ // a forged value cannot ride a non-3xx middleware response (which the 3xx-only
356
+ // guard would not touch) to the client. The opt-in is the out-of-band brand.
357
+ mergedHeaders.delete(EXTERNAL_REDIRECT_MARKER);
358
+ mergeStubHeaders(mergedHeaders, stub, opts.stubOverridesNonCookie);
359
+ if (opts.mergeReqCtx) {
360
+ mergeReqCtxStub(mergedHeaders, _getRequestContext());
361
+ }
362
+ const merged = new Response(base.body, {
363
+ status: base.status,
364
+ statusText: base.statusText,
365
+ headers: mergedHeaders,
366
+ });
367
+ // Transfer the out-of-band external-redirect brand across this rebuild: a
368
+ // middleware short-circuit `return redirect(url, { external: true })` reaches
369
+ // the open-redirect guard only after this merge, and the brand lives on the
370
+ // Response object, not in its headers.
371
+ if (isExternalRedirect(base)) {
372
+ markExternalRedirect(merged);
373
+ }
374
+ return merged;
375
+ }
376
+
327
377
  /**
328
378
  * Execute middleware chain
329
379
  *
@@ -362,20 +412,16 @@ export async function executeMiddleware<TEnv>(
362
412
  // End of chain - call actual RSC handler
363
413
  const response = await finalHandler();
364
414
 
365
- const mergedHeaders = new Headers(response.headers);
366
- mergeStubHeaders(mergedHeaders, stubResponse.headers, true);
367
- mergeReqCtxStub(mergedHeaders, _getRequestContext());
368
-
369
415
  if (isWebSocketUpgradeResponse(response)) {
370
416
  responseHolder.response = response;
371
417
  return response;
372
418
  }
373
419
 
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,
420
+ // Chain ran to completion: stub headers overwrite (stubOverridesNonCookie)
421
+ // and reqCtx stub headers are merged in.
422
+ responseHolder.response = mergeResponse(response, stubResponse.headers, {
423
+ stubOverridesNonCookie: true,
424
+ mergeReqCtx: true,
379
425
  });
380
426
 
381
427
  return responseHolder.response;
@@ -433,9 +479,17 @@ export async function executeMiddleware<TEnv>(
433
479
  return nextPromise;
434
480
  };
435
481
 
482
+ // Wrap the middleware (including its downstream next() chain) in its span
483
+ // via the unified phase API. metric:false — the middleware's perf metric is
484
+ // its exclusive pre/post own-time, recorded directly above and below, finer
485
+ // than a single wrap. Spans nest by async context, so this onions
486
+ // middleware-over-middleware and the core handler underneath. Pass-through
487
+ // when neither surface is active.
436
488
  let result: Response | void;
437
489
  try {
438
- result = await entry.handler(ctx, wrappedNext);
490
+ result = await observePhase(PHASES.middleware(metricLabel), () =>
491
+ entry.handler(ctx, wrappedNext),
492
+ );
439
493
  } catch (error) {
440
494
  // Thrown Response is short-circuit control flow, not an error.
441
495
  // Fall through to the `if (result instanceof Response)` branch below
@@ -474,13 +528,11 @@ export async function executeMiddleware<TEnv>(
474
528
  responseHolder.response = result;
475
529
  return result;
476
530
  }
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,
531
+ // Explicit short-circuit: the returned Response's own headers win
532
+ // (stubOverridesNonCookie=false); reqCtx stub headers still merge in.
533
+ const merged = mergeResponse(result, stubResponse.headers, {
534
+ stubOverridesNonCookie: false,
535
+ mergeReqCtx: true,
484
536
  });
485
537
  responseHolder.response = merged;
486
538
  return merged;
@@ -579,6 +631,7 @@ export async function executeInterceptMiddleware<TEnv>(
579
631
  return stubResponse;
580
632
  }
581
633
 
634
+ const ordinal = index;
582
635
  const middleware = middlewares[index++];
583
636
  const ctx = createMiddlewareContext(
584
637
  request,
@@ -600,9 +653,20 @@ export async function executeInterceptMiddleware<TEnv>(
600
653
  return next();
601
654
  };
602
655
 
656
+ // Span-wrap each intercept middleware as rango.middleware (metric:false —
657
+ // intercept runs inside the render phase already metered by render:total, so
658
+ // it contributes a span but no separate perf metric). Bare MiddlewareFns
659
+ // have no pattern, so the label is scoped to "*" like a pattern-less entry.
660
+ const label = getMiddlewareMetricLabel(
661
+ { handler: middleware, pattern: null } as MiddlewareEntry<TEnv>,
662
+ ordinal,
663
+ );
664
+
603
665
  let result: Response | void;
604
666
  try {
605
- result = await middleware(ctx, guardedNext);
667
+ result = await observePhase(PHASES.middleware(label), () =>
668
+ middleware(ctx, guardedNext),
669
+ );
606
670
  } catch (error) {
607
671
  // Thrown Response is short-circuit control flow, parity with the
608
672
  // explicit-return path below. Real errors propagate.
@@ -635,15 +699,13 @@ export async function executeInterceptMiddleware<TEnv>(
635
699
  });
636
700
 
637
701
  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,
702
+ // Only fill in missing headers the returned Response's explicit headers
703
+ // take precedence (stubOverridesNonCookie=false), matching executeMiddleware.
704
+ // mergeReqCtx=false: the intercept path deliberately does NOT merge reqCtx
705
+ // stub headers here (pinned by intercept-middleware-headers.test.ts).
706
+ return mergeResponse(response, stubResponse.headers, {
707
+ stubOverridesNonCookie: false,
708
+ mergeReqCtx: false,
647
709
  });
648
710
  }
649
711
  return response;
@@ -684,7 +746,6 @@ export async function executeLoaderMiddleware<TEnv>(
684
746
  regex: null,
685
747
  paramNames: [],
686
748
  handler,
687
- mountPrefix: null,
688
749
  } as MiddlewareEntry<TEnv>,
689
750
  params,
690
751
  }));
@@ -74,7 +74,6 @@ export function parsePattern(pattern: string): ParsedSegment[] {
74
74
  export interface CompiledPattern {
75
75
  regex: RegExp;
76
76
  paramNames: string[];
77
- optionalParams: Set<string>;
78
77
  hasTrailingSlash: boolean;
79
78
  /**
80
79
  * Param-name → allowed values for constrained params (e.g. `:lang(en|gb)`).
@@ -142,7 +141,6 @@ export function compilePattern(pattern: string): CompiledPattern {
142
141
 
143
142
  const segments = parsePattern(normalizedPattern);
144
143
  const paramNames: string[] = [];
145
- const optionalParams = new Set<string>();
146
144
  let constraints: Record<string, string[]> | undefined;
147
145
 
148
146
  let regexPattern = "";
@@ -164,7 +162,6 @@ export function compilePattern(pattern: string): CompiledPattern {
164
162
  }
165
163
 
166
164
  if (segment.optional) {
167
- optionalParams.add(segment.value);
168
165
  // Optional: make the whole /segment optional
169
166
  regexPattern += `(?:/${valuePattern}${suffixPattern})?`;
170
167
  } else {
@@ -202,7 +199,6 @@ export function compilePattern(pattern: string): CompiledPattern {
202
199
  return {
203
200
  regex: new RegExp(`^${regexPattern}$`),
204
201
  paramNames,
205
- optionalParams,
206
202
  hasTrailingSlash,
207
203
  ...(constraints ? { constraints } : {}),
208
204
  };
@@ -325,8 +321,8 @@ export function joinPrefix(base: string | undefined, prefix: string): string {
325
321
  *
326
322
  * Note: Optional params that are absent in the path are omitted from the
327
323
  * returned `params` (read as `undefined`), matching the trie matcher and
328
- * the `ExtractParams<"/:locale?/...">` type. Use the pattern definition or
329
- * `optionalParams` to determine which keys are optional.
324
+ * the `ExtractParams<"/:locale?/...">` type. Use the pattern definition to
325
+ * determine which keys are optional.
330
326
  *
331
327
  * Trailing slash handling (priority order):
332
328
  * 1. Per-route `trailingSlash` config from route()
@@ -344,7 +340,6 @@ export interface RouteMatchResult<TEnv = any> {
344
340
  entry: RouteEntry<TEnv>;
345
341
  routeKey: string;
346
342
  params: Record<string, string>;
347
- optionalParams: Set<string>;
348
343
  redirectTo?: string;
349
344
  /** Route has pre-rendered data available (from trie) */
350
345
  pr?: true;
@@ -463,13 +458,8 @@ export function findMatch<TEnv>(
463
458
  fullPattern = entry.prefix + pattern;
464
459
  }
465
460
 
466
- const {
467
- regex,
468
- paramNames,
469
- optionalParams,
470
- hasTrailingSlash,
471
- constraints,
472
- } = getCompiledPattern(fullPattern);
461
+ const { regex, paramNames, hasTrailingSlash, constraints } =
462
+ getCompiledPattern(fullPattern);
473
463
 
474
464
  const trailingSlashMode: TrailingSlashMode | undefined =
475
465
  entry.trailingSlash?.[routeKey];
@@ -506,7 +496,6 @@ export function findMatch<TEnv>(
506
496
  entry,
507
497
  routeKey,
508
498
  params,
509
- optionalParams,
510
499
  redirectTo: pathname + "/",
511
500
  ...prFlag,
512
501
  ...ptFlag,
@@ -516,7 +505,6 @@ export function findMatch<TEnv>(
516
505
  entry,
517
506
  routeKey,
518
507
  params,
519
- optionalParams,
520
508
  redirectTo: pathname.slice(0, -1),
521
509
  ...prFlag,
522
510
  ...ptFlag,
@@ -527,7 +515,6 @@ export function findMatch<TEnv>(
527
515
  entry,
528
516
  routeKey,
529
517
  params,
530
- optionalParams,
531
518
  ...prFlag,
532
519
  ...ptFlag,
533
520
  };
@@ -546,7 +533,6 @@ export function findMatch<TEnv>(
546
533
  entry,
547
534
  routeKey,
548
535
  params,
549
- optionalParams,
550
536
  ...prFlag,
551
537
  ...ptFlag,
552
538
  };
@@ -556,7 +542,6 @@ export function findMatch<TEnv>(
556
542
  entry,
557
543
  routeKey,
558
544
  params,
559
- optionalParams,
560
545
  redirectTo: alternatePathname,
561
546
  ...prFlag,
562
547
  ...ptFlag,
@@ -566,7 +551,6 @@ export function findMatch<TEnv>(
566
551
  entry,
567
552
  routeKey,
568
553
  params,
569
- optionalParams,
570
554
  ...prFlag,
571
555
  ...ptFlag,
572
556
  };
@@ -576,7 +560,6 @@ export function findMatch<TEnv>(
576
560
  entry,
577
561
  routeKey,
578
562
  params,
579
- optionalParams,
580
563
  redirectTo: alternatePathname,
581
564
  ...prFlag,
582
565
  ...ptFlag,
@@ -586,7 +569,6 @@ export function findMatch<TEnv>(
586
569
  entry,
587
570
  routeKey,
588
571
  params,
589
- optionalParams,
590
572
  ...prFlag,
591
573
  ...ptFlag,
592
574
  };
@@ -598,7 +580,6 @@ export function findMatch<TEnv>(
598
580
  entry,
599
581
  routeKey,
600
582
  params,
601
- optionalParams,
602
583
  redirectTo: canonicalPath,
603
584
  ...prFlag,
604
585
  ...ptFlag,
@@ -5,7 +5,7 @@ import {
5
5
  runWithRequestContext,
6
6
  type RequestContext,
7
7
  } from "../server/request-context.js";
8
- import { contextGet, contextSet } from "../context-var.js";
8
+ import { contextGet, contextSet, hasContextVars } from "../context-var.js";
9
9
  import {
10
10
  createPrerenderContext,
11
11
  createStaticContext,
@@ -17,6 +17,7 @@ import { setupBuildUse } from "./loader-resolution.js";
17
17
  import { loadManifest } from "./manifest.js";
18
18
  import { traverseBack } from "./pattern-matching.js";
19
19
  import type { RouterContext } from "./router-context.js";
20
+ import type { ResolveSegmentOptions } from "./segment-resolution.js";
20
21
  import { runWithRouterContext } from "./router-context.js";
21
22
  import type { EntryData, InterceptEntry } from "../server/context";
22
23
  import type {
@@ -40,7 +41,7 @@ export interface PrerenderMatchDeps<TEnv = any> {
40
41
  params: Record<string, string>,
41
42
  context: HandlerContext<any, TEnv>,
42
43
  loaderPromises: Map<string, Promise<any>>,
43
- options?: { skipLoaders?: boolean },
44
+ options?: ResolveSegmentOptions,
44
45
  ) => Promise<ResolvedSegment[]>;
45
46
  }
46
47
 
@@ -159,10 +160,7 @@ export async function matchForPrerender<TEnv = any>(
159
160
  return passthroughResult();
160
161
  }
161
162
  // Preserve vars set by getParams() for the render context
162
- if (
163
- Object.keys(probeBuildVars).length > 0 ||
164
- Object.getOwnPropertySymbols(probeBuildVars).length > 0
165
- ) {
163
+ if (hasContextVars(probeBuildVars)) {
166
164
  devProbeBuildVars = probeBuildVars;
167
165
  }
168
166
  } catch (err: any) {
@@ -260,7 +258,9 @@ export async function matchForPrerender<TEnv = any>(
260
258
  matchedParams,
261
259
  buildCtx,
262
260
  loaderPromises,
263
- { skipLoaders: true },
261
+ // throwOnError: a render failure (or `throw new Skip()`) must reach the
262
+ // build/dev caller, not be baked into a frozen error page (issue #587).
263
+ { skipLoaders: true, throwOnError: true },
264
264
  );
265
265
 
266
266
  // 9. Detect passthrough sentinel: handler returned ctx.passthrough().
@@ -332,6 +332,18 @@ export async function matchForPrerender<TEnv = any>(
332
332
  const interceptResolvedSegments: typeof nonLoaderSegments = [];
333
333
 
334
334
  for (const { intercept, entry: parentEntry } of foundIntercepts) {
335
+ // setupBuildUse keys handle pushes by ctx._currentSegmentId. The main
336
+ // resolveAllSegments pass left it on the route's segment id, so pin it
337
+ // to THIS intercept's slot id before resolving the handler/layout --
338
+ // otherwise the intercept's ctx.use() handle pushes land in the wrong
339
+ // bucket and getDataForSegment(seg.id) below drops them from the baked
340
+ // artifact. Re-pinned per iteration so multiple intercepts targeting
341
+ // the same route each get their own id (mirrors fresh.ts parallel-slot
342
+ // pinning).
343
+ const interceptSegmentId = `${parentEntry.shortCode}.${intercept.slotName}`;
344
+ (buildCtx as InternalHandlerContext<any, TEnv>)._currentSegmentId =
345
+ interceptSegmentId;
346
+
335
347
  // Resolve handler
336
348
  const handlerRaw =
337
349
  typeof intercept.handler === "function"
@@ -358,7 +370,7 @@ export async function matchForPrerender<TEnv = any>(
358
370
  }
359
371
 
360
372
  interceptResolvedSegments.push({
361
- id: `${parentEntry.shortCode}.${intercept.slotName}`,
373
+ id: interceptSegmentId,
362
374
  namespace: `intercept:${intercept.routeName}`,
363
375
  type: "parallel" as const,
364
376
  index: 0,
@@ -489,6 +501,18 @@ export async function renderStaticSegment<TEnv = any>(
489
501
 
490
502
  const raw = await handler(buildCtx);
491
503
 
504
+ // Static handlers must return a ReactNode. A returned Response (e.g. an
505
+ // accidental redirect()) would otherwise be serialized as a corrupt build
506
+ // artifact; fail loudly instead. The fresh/revalidation paths route handler
507
+ // results through handleHandlerResult, which throws Responses; the static
508
+ // build path bypasses that, so guard here.
509
+ if (raw instanceof Response) {
510
+ throw new TypeError(
511
+ `Static handler "${routeName}" returned a Response. Static handlers must return a ReactNode; ` +
512
+ `Responses (redirects, file responses) are not supported during static pre-rendering.`,
513
+ );
514
+ }
515
+
492
516
  const segment: ResolvedSegment = {
493
517
  id: handlerId,
494
518
  namespace: handlerId,
@@ -33,16 +33,21 @@ function resolveActionRefId(ref: unknown): string | undefined {
33
33
  }
34
34
 
35
35
  /**
36
- * Build the `isAction()` helper bound to the current action's id. Matches a
37
- * single imported action reference, several (variadic), or any export of a
38
- * namespace import (`import * as Mod`). Returns `false` when there is no action
39
- * (plain navigation) or nothing matches.
36
+ * Build the `isAction()` helper bound to the current action's id. Called with no
37
+ * arguments it answers "is this request an action at all?" (any action) `true`
38
+ * during action handling, `false` on plain navigation. Called with one or more
39
+ * action references it narrows to those: a single imported action, several
40
+ * (variadic), or any export of a namespace import (`import * as Mod`). Returns
41
+ * `false` when there is no action (plain navigation) or nothing matches.
40
42
  */
41
43
  function makeIsAction(
42
44
  currentActionId: string | undefined,
43
45
  ): (...actions: ActionRef[]) => boolean {
44
46
  return (...actions: ActionRef[]): boolean => {
45
47
  if (!currentActionId) return false;
48
+ // Bare isAction(): an action is in flight (currentActionId is set) and the
49
+ // caller did not narrow to a specific action, so this is "any action".
50
+ if (actions.length === 0) return true;
46
51
  for (const action of actions) {
47
52
  if (typeof action === "function") {
48
53
  if (resolveActionRefId(action) === currentActionId) return true;
@@ -230,7 +230,6 @@ export function createRouteSnapshot<TEnv = any>(
230
230
  entry: {} as any,
231
231
  routeKey: "test",
232
232
  params: {},
233
- optionalParams: new Set(),
234
233
  } as RouteMatchResult<TEnv>,
235
234
  manifestEntry: { type: "route", shortCode: "R0", parent: null } as any,
236
235
  entries: [],
@@ -19,6 +19,7 @@ import type {
19
19
  } from "../types.js";
20
20
  import type { RouteMatchResult } from "./pattern-matching.js";
21
21
  import type { TelemetrySink } from "./telemetry.js";
22
+ import type { ResolveSegmentOptions } from "./segment-resolution.js";
22
23
 
23
24
  /**
24
25
  * Revalidation context passed to segment resolution
@@ -123,7 +124,6 @@ export interface RouterContext<TEnv = any> {
123
124
  request: Request,
124
125
  prevUrl: URL,
125
126
  nextUrl: URL,
126
- loaderPromises: Map<string, Promise<any>>,
127
127
  actionContext: any | undefined,
128
128
  interceptResult: InterceptResult | null,
129
129
  localRouteName: string,
@@ -196,7 +196,7 @@ export interface RouterContext<TEnv = any> {
196
196
  params: Record<string, string>,
197
197
  handlerContext: HandlerContext<any, TEnv>,
198
198
  loaderPromises: Map<string, Promise<any>>,
199
- options?: { skipLoaders?: boolean },
199
+ options?: ResolveSegmentOptions,
200
200
  ) => Promise<ResolvedSegment[]>;
201
201
 
202
202
  resolveAllSegmentsGenerator?: (
@@ -9,10 +9,12 @@ import type { NonceProvider } from "../rsc/types.js";
9
9
  import type { ExecutionContext } from "../server/request-context.js";
10
10
  import type { SerializedSegmentData } from "../cache/types.js";
11
11
  import type { MiddlewareEntry, MiddlewareFn } from "./middleware.js";
12
+ import type { ExtractParams } from "../types/route-config.js";
12
13
  import { RSC_ROUTER_BRAND } from "./router-registry.js";
13
14
  import type { RangoOptions, RootLayoutProps } from "./router-options.js";
14
15
  import type { DefaultVars } from "../types/global-namespace.js";
15
16
  import type { ResolvedTimeouts, OnTimeoutCallback } from "./timeout.js";
17
+ import type { ResolvedTracing } from "./tracing.js";
16
18
 
17
19
  /**
18
20
  * Options passed to router.fetch(), router.match(), and other request entrypoints.
@@ -105,9 +107,14 @@ export interface Rango<
105
107
  * createRouter({ document: RootLayout })
106
108
  * .use(loggerMiddleware) // All routes
107
109
  * .use("/api/*", rateLimiter) // Pattern match
110
+ * .use("/users/:id", (ctx) => {}) // ctx.params.id is typed
108
111
  * .routes(urlpatterns)
109
112
  * ```
110
113
  */
114
+ use<Pattern extends string>(
115
+ pattern: Pattern,
116
+ middleware: MiddlewareFn<TEnv, ExtractParams<Pattern>>,
117
+ ): Rango<TEnv, TRoutes>;
111
118
  use(
112
119
  patternOrMiddleware: string | MiddlewareFn<TEnv>,
113
120
  middleware?: MiddlewareFn<TEnv>,
@@ -225,6 +232,10 @@ export interface RangoInternal<
225
232
  /**
226
233
  * Add global middleware that runs on all routes
227
234
  */
235
+ use<Pattern extends string>(
236
+ pattern: Pattern,
237
+ middleware: MiddlewareFn<TEnv, ExtractParams<Pattern>>,
238
+ ): Rango<TEnv, TRoutes>;
228
239
  use(
229
240
  patternOrMiddleware: string | MiddlewareFn<TEnv>,
230
241
  middleware?: MiddlewareFn<TEnv>,
@@ -310,6 +321,13 @@ export interface RangoInternal<
310
321
  */
311
322
  readonly debugPerformance?: boolean;
312
323
 
324
+ /**
325
+ * Resolved platform phase-span tracing (Cloudflare custom spans or OTel), or
326
+ * undefined when off. Threaded onto the request context and read at each
327
+ * traced phase.
328
+ */
329
+ readonly tracing?: ResolvedTracing;
330
+
313
331
  /**
314
332
  * Whether ?__debug_manifest is allowed in production.
315
333
  * Always enabled in development.
@@ -11,6 +11,7 @@ import type { UrlPatterns } from "../urls.js";
11
11
  import type { UrlBuilder } from "../urls/pattern-types.js";
12
12
  import type { NamedRouteEntry } from "./content-negotiation.js";
13
13
  import type { TelemetrySink } from "./telemetry.js";
14
+ import type { RouterTracingConfig } from "./tracing.js";
14
15
  import type { RouterTimeouts, OnTimeoutCallback } from "./timeout.js";
15
16
 
16
17
  /**
@@ -574,11 +575,14 @@ export interface RangoOptions<TEnv = any> {
574
575
  onTimeout?: OnTimeoutCallback<TEnv>;
575
576
 
576
577
  /**
577
- * Telemetry sink for structured lifecycle events.
578
+ * Telemetry sink for structured, discrete lifecycle EVENTS: request
579
+ * start/end/error, loader start/end/error, handler errors, cache decisions,
580
+ * revalidation decisions, timeouts, origin rejections.
578
581
  *
579
- * When provided, the router emits events for request start/end,
580
- * loader start/end/error, handler errors, cache decisions, and
581
- * revalidation decisions.
582
+ * This is the EVENT surface. Phase-duration SPANS (request/loader/render/ssr
583
+ * timing wired into a tracing backend) come from the separate `tracing`
584
+ * option below — a sink does not emit them, because async-context nesting
585
+ * cannot be faithfully reconstructed from after-the-fact start/end events.
582
586
  *
583
587
  * No-op when not configured (zero overhead).
584
588
  *
@@ -591,6 +595,18 @@ export interface RangoOptions<TEnv = any> {
591
595
  * });
592
596
  * ```
593
597
  *
598
+ * @example OpenTelemetry — pair the event sink with the tracing slot
599
+ * ```typescript
600
+ * import { createOTelTracing, createOTelSink } from "@rangojs/router";
601
+ * import { trace } from "@opentelemetry/api";
602
+ *
603
+ * const tracer = trace.getTracer("my-app");
604
+ * const router = createRouter({
605
+ * tracing: createOTelTracing(tracer), // phase spans
606
+ * telemetry: createOTelSink(tracer), // discrete-fact events
607
+ * });
608
+ * ```
609
+ *
594
610
  * @example Custom sink
595
611
  * ```typescript
596
612
  * const router = createRouter({
@@ -604,6 +620,44 @@ export interface RangoOptions<TEnv = any> {
604
620
  */
605
621
  telemetry?: TelemetrySink;
606
622
 
623
+ /**
624
+ * Span tracing for the router's performance phases (request, middleware, action,
625
+ * loaders, render, ssr). Connects the same phases shown in the
626
+ * `debugPerformance` timeline to the host platform's tracing system. This is
627
+ * the SPAN surface (the `telemetry` option above is the event surface).
628
+ *
629
+ * Two factories produce a config, both for this slot:
630
+ * - `createOTelTracing(tracer)` from `@rangojs/router` — any platform with an
631
+ * OpenTelemetry SDK (including Node). Bridges the phases onto
632
+ * `tracer.startActiveSpan`.
633
+ * - `createCloudflareTracing()` from `@rangojs/router/cloudflare` — Cloudflare
634
+ * Workers native custom spans, alongside the automatic KV/D1/fetch spans.
635
+ *
636
+ * When tracing is unset — or off-platform (no OTel SDK / no Cloudflare tracing
637
+ * destination) — every span call falls through to the work directly, so the
638
+ * request behaves exactly as if tracing were off.
639
+ *
640
+ * @example OpenTelemetry
641
+ * ```typescript
642
+ * import { createOTelTracing } from "@rangojs/router";
643
+ * import { trace } from "@opentelemetry/api";
644
+ *
645
+ * const router = createRouter({
646
+ * tracing: createOTelTracing(trace.getTracer("my-app")),
647
+ * });
648
+ * ```
649
+ *
650
+ * @example Cloudflare
651
+ * ```typescript
652
+ * import { createCloudflareTracing } from "@rangojs/router/cloudflare";
653
+ *
654
+ * const router = createRouter({
655
+ * tracing: createCloudflareTracing({ spans: { ssr: false } }),
656
+ * });
657
+ * ```
658
+ */
659
+ tracing?: RouterTracingConfig;
660
+
607
661
  /**
608
662
  * SSR configuration options.
609
663
  *