@rangojs/router 0.0.0-experimental.7dc955ec → 0.0.0-experimental.7f5e6b80

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 (1246) hide show
  1. package/AGENTS.md +8 -4
  2. package/README.md +303 -741
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +724 -183
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +4267 -1213
  799. package/dist/vite/index.js.bak +5448 -0
  800. package/dist/vite/index.js.map +1 -0
  801. package/dist/vite/index.named-routes.gen.ts +103 -0
  802. package/dist/vite/package-resolution.d.ts +43 -0
  803. package/dist/vite/package-resolution.d.ts.map +1 -0
  804. package/dist/vite/package-resolution.js +112 -0
  805. package/dist/vite/package-resolution.js.map +1 -0
  806. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  807. package/dist/vite/virtual-entries.d.ts +25 -0
  808. package/dist/vite/virtual-entries.d.ts.map +1 -0
  809. package/dist/vite/virtual-entries.js +110 -0
  810. package/dist/vite/virtual-entries.js.map +1 -0
  811. package/package.json +86 -15
  812. package/skills/api-client/SKILL.md +211 -0
  813. package/skills/breadcrumbs/SKILL.md +85 -6
  814. package/skills/bundle-analysis/SKILL.md +159 -0
  815. package/skills/cache-guide/SKILL.md +228 -33
  816. package/skills/caching/SKILL.md +336 -19
  817. package/skills/catalog.json +271 -0
  818. package/skills/comparison/SKILL.md +50 -0
  819. package/skills/comparison/agents/openai.yaml +4 -0
  820. package/skills/comparison/references/framework-comparison.md +837 -0
  821. package/skills/composability/SKILL.md +110 -4
  822. package/skills/css/SKILL.md +76 -0
  823. package/skills/debug-manifest/SKILL.md +5 -3
  824. package/skills/defer-hydration/SKILL.md +235 -0
  825. package/skills/document-cache/SKILL.md +87 -56
  826. package/skills/fonts/SKILL.md +1 -1
  827. package/skills/handler-use/SKILL.md +364 -0
  828. package/skills/hooks/SKILL.md +73 -691
  829. package/skills/hooks/data.md +273 -0
  830. package/skills/hooks/handle-and-actions.md +103 -0
  831. package/skills/hooks/navigation.md +110 -0
  832. package/skills/hooks/outlets.md +41 -0
  833. package/skills/hooks/state.md +228 -0
  834. package/skills/hooks/urls.md +135 -0
  835. package/skills/host-router/SKILL.md +129 -27
  836. package/skills/i18n/SKILL.md +276 -0
  837. package/skills/intercept/SKILL.md +94 -18
  838. package/skills/layout/SKILL.md +62 -19
  839. package/skills/links/SKILL.md +249 -17
  840. package/skills/loader/SKILL.md +302 -54
  841. package/skills/middleware/SKILL.md +59 -16
  842. package/skills/migrate-nextjs/SKILL.md +745 -0
  843. package/skills/migrate-react-router/SKILL.md +153 -0
  844. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  845. package/skills/migrate-react-router/component-migration.md +196 -0
  846. package/skills/migrate-react-router/data-and-actions.md +225 -0
  847. package/skills/migrate-react-router/route-mapping.md +271 -0
  848. package/skills/mime-routes/SKILL.md +29 -2
  849. package/skills/observability/SKILL.md +202 -0
  850. package/skills/parallel/SKILL.md +99 -10
  851. package/skills/ppr/SKILL.md +616 -0
  852. package/skills/prerender/SKILL.md +178 -124
  853. package/skills/rango/SKILL.md +318 -24
  854. package/skills/react-compiler/SKILL.md +168 -0
  855. package/skills/response-routes/SKILL.md +138 -49
  856. package/skills/route/SKILL.md +141 -9
  857. package/skills/router-setup/SKILL.md +131 -11
  858. package/skills/scripts/SKILL.md +179 -0
  859. package/skills/server-actions/SKILL.md +776 -0
  860. package/skills/shell-manifest/SKILL.md +185 -0
  861. package/skills/streams-and-websockets/SKILL.md +283 -0
  862. package/skills/tailwind/SKILL.md +28 -4
  863. package/skills/testing/SKILL.md +130 -0
  864. package/skills/testing/bindings.md +103 -0
  865. package/skills/testing/cache-prerender.md +127 -0
  866. package/skills/testing/client-components.md +124 -0
  867. package/skills/testing/e2e-parity.md +125 -0
  868. package/skills/testing/flight.md +91 -0
  869. package/skills/testing/handles.md +131 -0
  870. package/skills/testing/loader.md +128 -0
  871. package/skills/testing/middleware.md +99 -0
  872. package/skills/testing/render-handler.md +122 -0
  873. package/skills/testing/response-routes.md +95 -0
  874. package/skills/testing/reverse-and-types.md +85 -0
  875. package/skills/testing/server-actions.md +107 -0
  876. package/skills/testing/server-tree.md +128 -0
  877. package/skills/testing/setup.md +123 -0
  878. package/skills/theme/SKILL.md +1 -1
  879. package/skills/typesafety/SKILL.md +45 -626
  880. package/skills/typesafety/env-and-bindings.md +254 -0
  881. package/skills/typesafety/generated-files-and-cli.md +335 -0
  882. package/skills/typesafety/params-and-search.md +153 -0
  883. package/skills/typesafety/route-types.md +209 -0
  884. package/skills/use-cache/SKILL.md +74 -15
  885. package/skills/vercel/SKILL.md +128 -0
  886. package/skills/view-transitions/SKILL.md +337 -0
  887. package/src/__augment-tests__/augment.ts +81 -0
  888. package/src/__augment-tests__/augmented.check.ts +116 -0
  889. package/src/__internal.ts +1 -66
  890. package/src/browser/action-coordinator.ts +53 -36
  891. package/src/browser/action-fence.ts +47 -0
  892. package/src/browser/app-shell.ts +39 -0
  893. package/src/browser/app-version.ts +14 -0
  894. package/src/browser/connection-warmup.ts +134 -0
  895. package/src/browser/cookie-name.ts +140 -0
  896. package/src/browser/event-controller.ts +252 -158
  897. package/src/browser/history-state.ts +21 -0
  898. package/src/browser/index.ts +3 -3
  899. package/src/browser/invalidate-client-cache.ts +52 -0
  900. package/src/browser/logging.ts +28 -0
  901. package/src/browser/merge-segment-loaders.ts +6 -4
  902. package/src/browser/navigation-bridge.ts +131 -30
  903. package/src/browser/navigation-client.ts +204 -87
  904. package/src/browser/navigation-store-handle.ts +38 -0
  905. package/src/browser/navigation-store.ts +203 -80
  906. package/src/browser/navigation-transaction.ts +9 -59
  907. package/src/browser/network-error-handler.ts +34 -7
  908. package/src/browser/partial-update.ts +198 -125
  909. package/src/browser/prefetch/cache.ts +246 -71
  910. package/src/browser/prefetch/fetch.ts +358 -40
  911. package/src/browser/prefetch/queue.ts +113 -32
  912. package/src/browser/prefetch/resource-ready.ts +77 -0
  913. package/src/browser/rango-state.ts +158 -76
  914. package/src/browser/react/Link.tsx +112 -15
  915. package/src/browser/react/NavigationProvider.tsx +213 -122
  916. package/src/browser/react/ScrollRestoration.tsx +10 -6
  917. package/src/browser/react/context.ts +7 -2
  918. package/src/browser/react/filter-segment-order.ts +66 -7
  919. package/src/browser/react/index.ts +0 -48
  920. package/src/browser/react/location-state-shared.ts +178 -8
  921. package/src/browser/react/location-state.ts +39 -14
  922. package/src/browser/react/use-action.ts +6 -15
  923. package/src/browser/react/use-handle.ts +23 -69
  924. package/src/browser/react/use-href.tsx +8 -1
  925. package/src/browser/react/use-link-status.ts +33 -8
  926. package/src/browser/react/use-navigation.ts +32 -7
  927. package/src/browser/react/use-params.ts +20 -10
  928. package/src/browser/react/use-reverse.ts +106 -0
  929. package/src/browser/react/use-router.ts +46 -11
  930. package/src/browser/react/use-search-params.ts +0 -5
  931. package/src/browser/react/use-segments.ts +11 -21
  932. package/src/browser/response-adapter.ts +99 -8
  933. package/src/browser/rsc-router.tsx +168 -28
  934. package/src/browser/scroll-restoration.ts +44 -27
  935. package/src/browser/segment-reconciler.ts +44 -12
  936. package/src/browser/segment-structure-assert.ts +2 -2
  937. package/src/browser/server-action-bridge.ts +244 -71
  938. package/src/browser/types.ts +127 -12
  939. package/src/browser/validate-redirect-origin.ts +43 -16
  940. package/src/build/collect-fallback-refs.ts +107 -0
  941. package/src/build/generate-manifest.ts +207 -158
  942. package/src/build/generate-route-types.ts +6 -1
  943. package/src/build/index.ts +11 -3
  944. package/src/build/prefix-tree-utils.ts +123 -0
  945. package/src/build/route-trie.ts +198 -41
  946. package/src/build/route-types/ast-route-extraction.ts +15 -8
  947. package/src/build/route-types/codegen.ts +16 -5
  948. package/src/build/route-types/include-resolution.ts +464 -63
  949. package/src/build/route-types/param-extraction.ts +6 -3
  950. package/src/build/route-types/per-module-writer.ts +22 -6
  951. package/src/build/route-types/router-processing.ts +333 -117
  952. package/src/build/route-types/scan-filter.ts +9 -2
  953. package/src/build/route-types/source-scan.ts +216 -0
  954. package/src/build/runtime-discovery.ts +13 -21
  955. package/src/cache/cache-error.ts +104 -0
  956. package/src/cache/cache-key-utils.ts +58 -13
  957. package/src/cache/cache-policy.ts +108 -34
  958. package/src/cache/cache-runtime.ts +421 -58
  959. package/src/cache/cache-scope.ts +187 -96
  960. package/src/cache/cache-tag.ts +149 -0
  961. package/src/cache/cf/cf-base64.ts +33 -0
  962. package/src/cache/cf/cf-cache-constants.ts +127 -0
  963. package/src/cache/cf/cf-cache-store.ts +2202 -372
  964. package/src/cache/cf/cf-cache-types.ts +349 -0
  965. package/src/cache/cf/cf-kv-utils.ts +46 -0
  966. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  967. package/src/cache/cf/index.ts +6 -16
  968. package/src/cache/document-cache.ts +126 -41
  969. package/src/cache/handle-snapshot.ts +70 -0
  970. package/src/cache/index.ts +23 -20
  971. package/src/cache/memory-segment-store.ts +243 -37
  972. package/src/cache/profile-registry.ts +46 -31
  973. package/src/cache/read-through-swr.ts +56 -12
  974. package/src/cache/segment-codec.ts +13 -21
  975. package/src/cache/shell-snapshot.ts +417 -0
  976. package/src/cache/tag-invalidation.ts +230 -0
  977. package/src/cache/types.ts +180 -99
  978. package/src/cache/vercel/index.ts +11 -0
  979. package/src/cache/vercel/vercel-cache-store.ts +1127 -0
  980. package/src/client.rsc.tsx +41 -21
  981. package/src/client.tsx +116 -290
  982. package/src/cloudflare/index.ts +11 -0
  983. package/src/cloudflare/tracing.ts +108 -0
  984. package/src/component-utils.ts +19 -0
  985. package/src/components/DefaultDocument.tsx +8 -2
  986. package/src/context-var.ts +18 -6
  987. package/src/decode-loader-results.ts +52 -0
  988. package/src/defer.ts +185 -0
  989. package/src/deps/ssr.ts +0 -1
  990. package/src/encode-kv.ts +49 -0
  991. package/src/errors.ts +30 -4
  992. package/src/escape-script.ts +52 -0
  993. package/src/handle.ts +104 -34
  994. package/src/handles/MetaTags.tsx +24 -53
  995. package/src/handles/Scripts.tsx +183 -0
  996. package/src/handles/breadcrumbs.ts +35 -8
  997. package/src/handles/deferred-resolution.ts +127 -0
  998. package/src/handles/is-thenable.ts +18 -0
  999. package/src/handles/meta.ts +14 -40
  1000. package/src/handles/script.ts +244 -0
  1001. package/src/host/cookie-handler.ts +9 -60
  1002. package/src/host/errors.ts +13 -22
  1003. package/src/host/index.ts +9 -2
  1004. package/src/host/pattern-matcher.ts +23 -52
  1005. package/src/host/router.ts +107 -99
  1006. package/src/host/testing.ts +40 -27
  1007. package/src/host/types.ts +37 -4
  1008. package/src/host/utils.ts +1 -1
  1009. package/src/href-client.ts +137 -22
  1010. package/src/index.rsc.ts +100 -13
  1011. package/src/index.ts +143 -19
  1012. package/src/internal-debug.ts +11 -10
  1013. package/src/loader-store.ts +500 -0
  1014. package/src/loader.rsc.ts +20 -13
  1015. package/src/loader.ts +12 -11
  1016. package/src/missing-id-error.ts +68 -0
  1017. package/src/outlet-context.ts +1 -1
  1018. package/src/outlet-provider.tsx +1 -5
  1019. package/src/prerender/param-hash.ts +16 -16
  1020. package/src/prerender/store.ts +37 -41
  1021. package/src/prerender.ts +215 -86
  1022. package/src/redirect-origin.ts +114 -0
  1023. package/src/regex-escape.ts +8 -0
  1024. package/src/render-error-thrower.tsx +20 -0
  1025. package/src/response-utils.ts +62 -0
  1026. package/src/reverse.ts +65 -15
  1027. package/src/root-error-boundary.tsx +1 -19
  1028. package/src/route-content-wrapper.tsx +19 -77
  1029. package/src/route-definition/dsl-helpers.ts +461 -304
  1030. package/src/route-definition/helper-factories.ts +28 -140
  1031. package/src/route-definition/helpers-types.ts +153 -77
  1032. package/src/route-definition/index.ts +4 -2
  1033. package/src/route-definition/redirect.ts +51 -10
  1034. package/src/route-definition/resolve-handler-use.ts +160 -0
  1035. package/src/route-definition/use-item-types.ts +29 -0
  1036. package/src/route-map-builder.ts +41 -20
  1037. package/src/route-types.ts +37 -46
  1038. package/src/router/basename.ts +14 -0
  1039. package/src/router/content-negotiation.ts +164 -17
  1040. package/src/router/error-handling.ts +45 -18
  1041. package/src/router/find-match.ts +129 -30
  1042. package/src/router/handler-context.ts +52 -31
  1043. package/src/router/instrument.ts +355 -0
  1044. package/src/router/intercept-resolution.ts +48 -24
  1045. package/src/router/lazy-includes.ts +85 -62
  1046. package/src/router/loader-resolution.ts +286 -56
  1047. package/src/router/logging.ts +0 -6
  1048. package/src/router/manifest.ts +96 -53
  1049. package/src/router/match-api.ts +178 -218
  1050. package/src/router/match-context.ts +0 -22
  1051. package/src/router/match-handlers.ts +211 -165
  1052. package/src/router/match-middleware/background-revalidation.ts +40 -24
  1053. package/src/router/match-middleware/cache-lookup.ts +170 -276
  1054. package/src/router/match-middleware/cache-store.ts +64 -52
  1055. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  1056. package/src/router/match-middleware/segment-resolution.ts +45 -14
  1057. package/src/router/match-pipelines.ts +1 -42
  1058. package/src/router/match-result.ts +113 -45
  1059. package/src/router/metrics.ts +0 -34
  1060. package/src/router/middleware-types.ts +7 -140
  1061. package/src/router/middleware.ts +298 -175
  1062. package/src/router/navigation-snapshot.ts +133 -0
  1063. package/src/router/params-util.ts +23 -0
  1064. package/src/router/parse-pattern.ts +115 -0
  1065. package/src/router/pattern-matching.ts +181 -150
  1066. package/src/router/prefetch-cache-ttl.ts +51 -0
  1067. package/src/router/prefetch-limits.ts +37 -0
  1068. package/src/router/prerender-match.ts +203 -58
  1069. package/src/router/preview-match.ts +35 -103
  1070. package/src/router/request-classification.ts +291 -0
  1071. package/src/router/revalidation.ts +123 -73
  1072. package/src/router/route-snapshot.ts +256 -0
  1073. package/src/router/router-context.ts +6 -29
  1074. package/src/router/router-interfaces.ts +146 -35
  1075. package/src/router/router-options.ts +202 -15
  1076. package/src/router/router-registry.ts +2 -5
  1077. package/src/router/segment-resolution/fresh.ts +196 -97
  1078. package/src/router/segment-resolution/helpers.ts +115 -30
  1079. package/src/router/segment-resolution/loader-cache.ts +139 -39
  1080. package/src/router/segment-resolution/loader-mask.ts +67 -0
  1081. package/src/router/segment-resolution/loader-snapshot.ts +251 -0
  1082. package/src/router/segment-resolution/revalidation.ts +351 -330
  1083. package/src/router/segment-resolution/static-store.ts +19 -5
  1084. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1085. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  1086. package/src/router/segment-resolution.ts +5 -1
  1087. package/src/router/segment-wrappers.ts +6 -5
  1088. package/src/router/state-cookie-name.ts +33 -0
  1089. package/src/router/substitute-pattern-params.ts +75 -0
  1090. package/src/router/telemetry-otel.ts +160 -200
  1091. package/src/router/telemetry.ts +105 -20
  1092. package/src/router/timeout.ts +0 -20
  1093. package/src/router/tracing.ts +215 -0
  1094. package/src/router/trie-matching.ts +171 -59
  1095. package/src/router/types.ts +10 -63
  1096. package/src/router/url-params.ts +57 -0
  1097. package/src/router.ts +205 -70
  1098. package/src/rsc/full-payload.ts +70 -0
  1099. package/src/rsc/handler-context.ts +3 -2
  1100. package/src/rsc/handler.ts +682 -508
  1101. package/src/rsc/helpers.ts +168 -46
  1102. package/src/rsc/index.ts +2 -5
  1103. package/src/rsc/json-route-result.ts +38 -0
  1104. package/src/rsc/loader-fetch.ts +127 -31
  1105. package/src/rsc/manifest-init.ts +33 -42
  1106. package/src/rsc/nonce.ts +10 -1
  1107. package/src/rsc/origin-guard.ts +39 -25
  1108. package/src/rsc/progressive-enhancement.ts +138 -15
  1109. package/src/rsc/redirect-guard.ts +100 -0
  1110. package/src/rsc/response-cache-serve.ts +238 -0
  1111. package/src/rsc/response-error.ts +79 -12
  1112. package/src/rsc/response-route-handler.ts +99 -189
  1113. package/src/rsc/rsc-rendering.ts +461 -73
  1114. package/src/rsc/runtime-warnings.ts +23 -10
  1115. package/src/rsc/server-action.ts +287 -113
  1116. package/src/rsc/shell-capture.ts +1158 -0
  1117. package/src/rsc/shell-serve.ts +150 -0
  1118. package/src/rsc/ssr-setup.ts +18 -2
  1119. package/src/rsc/transition-gate.ts +89 -0
  1120. package/src/rsc/types.ts +62 -6
  1121. package/src/runtime-env.ts +18 -0
  1122. package/src/search-params.ts +35 -30
  1123. package/src/segment-content-promise.ts +67 -0
  1124. package/src/segment-loader-promise.ts +167 -0
  1125. package/src/segment-system.tsx +355 -204
  1126. package/src/serialize.ts +243 -0
  1127. package/src/server/context.ts +269 -52
  1128. package/src/server/cookie-parse.ts +32 -0
  1129. package/src/server/cookie-store.ts +152 -5
  1130. package/src/server/handle-store.ts +40 -38
  1131. package/src/server/loader-registry.ts +38 -46
  1132. package/src/server/request-context.ts +510 -166
  1133. package/src/ssr/index.tsx +467 -175
  1134. package/src/ssr/inject-rsc-eager.ts +167 -0
  1135. package/src/ssr/ssr-root.tsx +228 -0
  1136. package/src/static-handler.ts +27 -18
  1137. package/src/testing/cache-status.ts +162 -0
  1138. package/src/testing/collect-handle.ts +46 -0
  1139. package/src/testing/dispatch.ts +813 -0
  1140. package/src/testing/dom.entry.ts +22 -0
  1141. package/src/testing/e2e/fixture.ts +188 -0
  1142. package/src/testing/e2e/index.ts +128 -0
  1143. package/src/testing/e2e/matchers.ts +35 -0
  1144. package/src/testing/e2e/page-helpers.ts +272 -0
  1145. package/src/testing/e2e/parity.ts +387 -0
  1146. package/src/testing/e2e/server.ts +195 -0
  1147. package/src/testing/flight-matchers.ts +97 -0
  1148. package/src/testing/flight-normalize.ts +11 -0
  1149. package/src/testing/flight-runtime.d.ts +57 -0
  1150. package/src/testing/flight-tree.ts +682 -0
  1151. package/src/testing/flight.entry.ts +52 -0
  1152. package/src/testing/flight.ts +257 -0
  1153. package/src/testing/generated-routes.ts +199 -0
  1154. package/src/testing/index.ts +105 -0
  1155. package/src/testing/internal/context.ts +371 -0
  1156. package/src/testing/internal/flight-client-globals.ts +30 -0
  1157. package/src/testing/internal/seed-vars.ts +54 -0
  1158. package/src/testing/render-handler.ts +357 -0
  1159. package/src/testing/render-route.tsx +584 -0
  1160. package/src/testing/run-loader.ts +385 -0
  1161. package/src/testing/run-middleware.ts +205 -0
  1162. package/src/testing/run-transition-when.ts +164 -0
  1163. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1164. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1165. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1166. package/src/testing/vitest-stubs/version.ts +5 -0
  1167. package/src/testing/vitest.ts +305 -0
  1168. package/src/theme/ThemeProvider.tsx +56 -84
  1169. package/src/theme/ThemeScript.tsx +7 -9
  1170. package/src/theme/constants.ts +52 -13
  1171. package/src/theme/index.ts +0 -7
  1172. package/src/theme/theme-context.ts +1 -5
  1173. package/src/theme/theme-script.ts +22 -21
  1174. package/src/theme/use-theme.ts +0 -3
  1175. package/src/types/boundaries.ts +0 -35
  1176. package/src/types/cache-types.ts +17 -8
  1177. package/src/types/error-types.ts +30 -90
  1178. package/src/types/global-namespace.ts +54 -41
  1179. package/src/types/handler-context.ts +138 -80
  1180. package/src/types/index.ts +3 -10
  1181. package/src/types/loader-types.ts +44 -15
  1182. package/src/types/request-scope.ts +112 -0
  1183. package/src/types/route-config.ts +20 -52
  1184. package/src/types/route-entry.ts +12 -7
  1185. package/src/types/segments.ts +136 -15
  1186. package/src/urls/include-helper.ts +40 -75
  1187. package/src/urls/include-provider.ts +71 -0
  1188. package/src/urls/index.ts +2 -11
  1189. package/src/urls/path-helper-types.ts +102 -23
  1190. package/src/urls/path-helper.ts +62 -111
  1191. package/src/urls/pattern-types.ts +84 -19
  1192. package/src/urls/response-types.ts +25 -22
  1193. package/src/urls/type-extraction.ts +98 -154
  1194. package/src/urls/urls-function.ts +1 -19
  1195. package/src/use-loader.tsx +346 -89
  1196. package/src/vercel/index.ts +11 -0
  1197. package/src/vercel/tracing.ts +88 -0
  1198. package/src/vite/debug.ts +185 -0
  1199. package/src/vite/discovery/bundle-postprocess.ts +36 -38
  1200. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1201. package/src/vite/discovery/discover-routers.ts +130 -85
  1202. package/src/vite/discovery/discovery-errors.ts +255 -0
  1203. package/src/vite/discovery/gate-state.ts +171 -0
  1204. package/src/vite/discovery/prerender-collection.ts +214 -132
  1205. package/src/vite/discovery/route-types-writer.ts +40 -84
  1206. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1207. package/src/vite/discovery/state.ts +57 -4
  1208. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1209. package/src/vite/index.ts +8 -0
  1210. package/src/vite/inject-client-debug.ts +88 -0
  1211. package/src/vite/plugin-types.ts +261 -6
  1212. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1213. package/src/vite/plugins/client-ref-dedup.ts +16 -11
  1214. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1215. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1216. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1217. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1218. package/src/vite/plugins/expose-action-id.ts +48 -95
  1219. package/src/vite/plugins/expose-id-utils.ts +96 -51
  1220. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1221. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  1222. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1223. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1224. package/src/vite/plugins/expose-internal-ids.ts +553 -317
  1225. package/src/vite/plugins/performance-tracks.ts +89 -0
  1226. package/src/vite/plugins/refresh-cmd.ts +89 -27
  1227. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1228. package/src/vite/plugins/vercel-output.ts +384 -0
  1229. package/src/vite/plugins/version-injector.ts +40 -29
  1230. package/src/vite/plugins/version-plugin.ts +37 -40
  1231. package/src/vite/plugins/virtual-entries.ts +138 -27
  1232. package/src/vite/rango.ts +247 -132
  1233. package/src/vite/router-discovery.ts +1091 -159
  1234. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1235. package/src/vite/utils/banner.ts +1 -1
  1236. package/src/vite/utils/bundle-analysis.ts +10 -15
  1237. package/src/vite/utils/client-chunks.ts +184 -0
  1238. package/src/vite/utils/directive-prologue.ts +40 -0
  1239. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1240. package/src/vite/utils/manifest-utils.ts +4 -59
  1241. package/src/vite/utils/package-resolution.ts +20 -52
  1242. package/src/vite/utils/prerender-utils.ts +98 -38
  1243. package/src/vite/utils/shared-utils.ts +144 -44
  1244. package/src/browser/action-response-classifier.ts +0 -99
  1245. package/src/browser/shallow.ts +0 -40
  1246. package/src/router/middleware-cookies.ts +0 -55
package/src/prerender.ts CHANGED
@@ -33,10 +33,13 @@ import type {
33
33
  ExtractParams,
34
34
  } from "./types.js";
35
35
  import type { Handle } from "./handle.js";
36
+ import type { HandlePush } from "./defer.js";
36
37
  import type { ContextVar } from "./context-var.js";
37
38
  import type { ReverseFunction } from "./reverse.js";
38
39
  import type { DefaultReverseRouteMap } from "./types/global-namespace.js";
40
+ import type { UseItems, HandlerUseItem } from "./route-types.js";
39
41
  import { isCachedFunction } from "./cache/taint.js";
42
+ import { isUnderTestRunner } from "./runtime-env.js";
40
43
 
41
44
  // -- Named route resolution types -------------------------------------------
42
45
 
@@ -68,9 +71,9 @@ type BuildReverseFunction = [DefaultReverseRouteMap] extends [
68
71
  * Default route map for Prerender named route resolution.
69
72
  * Uses GeneratedRouteMap (from gen file) to avoid circular dependencies.
70
73
  */
71
- type DefaultPrerenderRouteMap = keyof RSCRouter.GeneratedRouteMap extends never
74
+ type DefaultPrerenderRouteMap = keyof Rango.GeneratedRouteMap extends never
72
75
  ? {}
73
- : RSCRouter.GeneratedRouteMap;
76
+ : Rango.GeneratedRouteMap;
74
77
 
75
78
  /** Extract params from a route map entry (string pattern or { path } object). */
76
79
  type ExtractParamsFromEntry<TEntry> = TEntry extends string
@@ -105,13 +108,6 @@ type ResolvePrerenderParams<
105
108
  // -- Types ------------------------------------------------------------------
106
109
 
107
110
  export interface PrerenderOptions {
108
- /**
109
- * Keep handler in server bundle for live fallback (default: false).
110
- * false: handler replaced with stub, source-only APIs excluded from bundle.
111
- * true: handler stays in bundle, unknown params render live at request time.
112
- */
113
- passthrough?: boolean;
114
-
115
111
  /**
116
112
  * Maximum number of param sets to render in parallel (default: 1).
117
113
  * Only applies to dynamic Prerender handlers with getParams().
@@ -131,8 +127,8 @@ export interface PrerenderOptions {
131
127
 
132
128
  /**
133
129
  * Context passed to Prerender() handlers at build time.
134
- * Has a synthetic URL from getParams, params, and pathname.
135
- * No request, env, headers, cookies.
130
+ * Has a synthetic URL from getParams, params, pathname, and optionally env.
131
+ * No request, headers, cookies.
136
132
  */
137
133
  export interface BuildContext<TParams> {
138
134
  /** Params extracted from the route pattern (populated from getParams). */
@@ -141,6 +137,23 @@ export interface BuildContext<TParams> {
141
137
  /** True during build-time pre-rendering, false during passthrough live render. */
142
138
  build: true;
143
139
 
140
+ /**
141
+ * True when running in Vite dev mode (on-demand prerender), false during
142
+ * production `vite build`. Use this to branch on runtime mode without
143
+ * changing build semantics.
144
+ */
145
+ dev: boolean;
146
+
147
+ /**
148
+ * Build-time environment bindings (KV, D1, etc.) supplied by the Vite plugin.
149
+ * Only available when `buildEnv` is configured in rango() options.
150
+ * Throws with a clear error if not configured.
151
+ *
152
+ * This is NOT the live request env — it is shared across all prerender
153
+ * invocations for the build.
154
+ */
155
+ env: DefaultEnv;
156
+
144
157
  /** Read a variable set by getParams or a parent handler. */
145
158
  get: {
146
159
  <T>(contextVar: ContextVar<T>): T | undefined;
@@ -153,8 +166,14 @@ export interface BuildContext<TParams> {
153
166
  (key: string, value: any): void;
154
167
  };
155
168
 
156
- /** Push handle data (frozen into pre-rendered output at build time). */
157
- use: <T>(handle: Handle<T>) => (data: T) => void;
169
+ /**
170
+ * Push handle data (frozen into pre-rendered output at build time). Returns
171
+ * the full push function, including `.defer()` — a deferred slot resolved by
172
+ * a deep async component during the prerender render is awaited before the
173
+ * artifact is baked (resolve-by-default), so the baked output holds the
174
+ * resolved value.
175
+ */
176
+ use: <T>(handle: Handle<T>) => HandlePush<T>;
158
177
 
159
178
  /** Synthetic URL built from pattern + params (no real request). */
160
179
  url: URL;
@@ -173,8 +192,8 @@ export interface BuildContext<TParams> {
173
192
 
174
193
  /**
175
194
  * Signal that this param set should not produce a local prerender artifact.
176
- * At runtime the handler runs live instead. Only valid on routes declared
177
- * with `{ passthrough: true }`.
195
+ * At runtime the live handler runs instead. Only valid on routes wrapped
196
+ * with `Passthrough()`.
178
197
  */
179
198
  passthrough: () => PrerenderPassthroughResult;
180
199
  }
@@ -187,6 +206,17 @@ export interface StaticBuildContext {
187
206
  /** Always true for Static handlers at build time. */
188
207
  build: true;
189
208
 
209
+ /**
210
+ * True when running in Vite dev mode, false during production build.
211
+ */
212
+ dev: boolean;
213
+
214
+ /**
215
+ * Build-time environment bindings supplied by the Vite plugin.
216
+ * Only available when `buildEnv` is configured in rango() options.
217
+ */
218
+ env: DefaultEnv;
219
+
190
220
  /** Read a variable (available for type consistency with BuildContext). */
191
221
  get: {
192
222
  <T>(contextVar: ContextVar<T>): T | undefined;
@@ -199,8 +229,14 @@ export interface StaticBuildContext {
199
229
  (key: string, value: any): void;
200
230
  };
201
231
 
202
- /** Push handle data (frozen into pre-rendered output at build time). */
203
- use: <T>(handle: Handle<T>) => (data: T) => void;
232
+ /**
233
+ * Push handle data (frozen into pre-rendered output at build time). Returns
234
+ * the full push function, including `.defer()` — a deferred slot resolved by
235
+ * a deep async component during the prerender render is awaited before the
236
+ * artifact is baked (resolve-by-default), so the baked output holds the
237
+ * resolved value.
238
+ */
239
+ use: <T>(handle: Handle<T>) => HandlePush<T>;
204
240
 
205
241
  /** URL generation by route name. */
206
242
  reverse: BuildReverseFunction;
@@ -214,6 +250,17 @@ export interface GetParamsContext {
214
250
  /** Always true during build-time getParams execution. */
215
251
  build: true;
216
252
 
253
+ /**
254
+ * True when running in Vite dev mode, false during production build.
255
+ */
256
+ dev: boolean;
257
+
258
+ /**
259
+ * Build-time environment bindings supplied by the Vite plugin.
260
+ * Only available when `buildEnv` is configured in rango() options.
261
+ */
262
+ env: DefaultEnv;
263
+
217
264
  /** Set a variable that will be available to each handler invocation via ctx.get(). */
218
265
  set: {
219
266
  <T>(contextVar: ContextVar<T>, value: T): void;
@@ -224,23 +271,6 @@ export interface GetParamsContext {
224
271
  reverse: BuildReverseFunction;
225
272
  }
226
273
 
227
- /**
228
- * Context type for passthrough Prerender handlers.
229
- *
230
- * When `passthrough: true`, the handler runs both at build time and at request
231
- * time. The context is a full `HandlerContext` with `build: boolean`:
232
- * - `ctx.build === true`: build-time, env/request/res throw at runtime
233
- * - `ctx.build === false`: live request, full context available
234
- *
235
- * For `passthrough: false` (default), handlers receive `BuildContext` only.
236
- */
237
- export type PrerenderPassthroughContext<
238
- TParams = {},
239
- TEnv = DefaultEnv,
240
- > = HandlerContext<TParams, TEnv> & {
241
- passthrough: () => PrerenderPassthroughResult;
242
- };
243
-
244
274
  export interface PrerenderHandlerDefinition<
245
275
  TParams extends Record<string, any> = any,
246
276
  > {
@@ -253,8 +283,15 @@ export interface PrerenderHandlerDefinition<
253
283
  getParams?: (ctx: GetParamsContext) => Promise<TParams[]> | TParams[];
254
284
  /** Pre-render options. */
255
285
  options?: PrerenderOptions;
286
+ /** Composable default DSL items merged when the handler is mounted. */
287
+ use?: () => UseItems<HandlerUseItem>;
256
288
  }
257
289
 
290
+ // Process-stable fallback id counter (mirrors createHandle / createLoader). Only
291
+ // assigned in a bare unit test where the Vite plugin did not inject an id; never
292
+ // fires in a real build (the plugin always injects).
293
+ let runtimePrerenderIdCounter = 0;
294
+
258
295
  // -- Overloads --------------------------------------------------------------
259
296
  //
260
297
  // T accepts: named route string (global or .local) OR explicit param object.
@@ -263,7 +300,7 @@ export interface PrerenderHandlerDefinition<
263
300
  // Explicit params work as before:
264
301
  // Prerender<{ slug: string }> → params = { slug: string }
265
302
 
266
- // Overload 1: Static handler, no passthrough (build-time only)
303
+ // Overload 1: Static handler (build-time only)
267
304
  export function Prerender<
268
305
  T extends
269
306
  | keyof DefaultPrerenderRouteMap
@@ -273,34 +310,15 @@ export function Prerender<
273
310
  >(
274
311
  handler: (
275
312
  ctx: BuildContext<ResolvePrerenderParams<T, TRouteMap>>,
276
- ) => ReactNode | Promise<ReactNode>,
277
- options?: PrerenderOptions & { passthrough?: false },
278
- __injectedId?: string,
279
- ): PrerenderHandlerDefinition<ResolvePrerenderParams<T, TRouteMap>>;
280
-
281
- // Overload 2: Static handler, passthrough (build + live — full HandlerContext)
282
- export function Prerender<
283
- T extends
284
- | keyof DefaultPrerenderRouteMap
285
- | `.${keyof TRouteMap & string}`
286
- | Record<string, any> = {},
287
- TRouteMap extends {} = DefaultPrerenderRouteMap,
288
- TEnv = DefaultEnv,
289
- >(
290
- handler: (
291
- ctx: PrerenderPassthroughContext<
292
- ResolvePrerenderParams<T, TRouteMap>,
293
- TEnv
294
- >,
295
313
  ) =>
296
314
  | ReactNode
297
315
  | PrerenderPassthroughResult
298
316
  | Promise<ReactNode | PrerenderPassthroughResult>,
299
- options: PrerenderOptions & { passthrough: true },
317
+ options?: PrerenderOptions,
300
318
  __injectedId?: string,
301
319
  ): PrerenderHandlerDefinition<ResolvePrerenderParams<T, TRouteMap>>;
302
320
 
303
- // Overload 3: Dynamic handler, no passthrough (build-time only)
321
+ // Overload 2: Dynamic handler (build-time only)
304
322
  export function Prerender<
305
323
  T extends
306
324
  | keyof DefaultPrerenderRouteMap
@@ -315,35 +333,11 @@ export function Prerender<
315
333
  | ResolvePrerenderParams<T, TRouteMap>[],
316
334
  handler: (
317
335
  ctx: BuildContext<ResolvePrerenderParams<T, TRouteMap>>,
318
- ) => ReactNode | Promise<ReactNode>,
319
- options?: PrerenderOptions & { passthrough?: false },
320
- __injectedId?: string,
321
- ): PrerenderHandlerDefinition<ResolvePrerenderParams<T, TRouteMap>>;
322
-
323
- // Overload 4: Dynamic handler, passthrough (build + live — full HandlerContext)
324
- export function Prerender<
325
- T extends
326
- | keyof DefaultPrerenderRouteMap
327
- | `.${keyof TRouteMap & string}`
328
- | Record<string, any>,
329
- TRouteMap extends {} = DefaultPrerenderRouteMap,
330
- TEnv = DefaultEnv,
331
- >(
332
- getParams: (
333
- ctx: GetParamsContext,
334
- ) =>
335
- | Promise<ResolvePrerenderParams<T, TRouteMap>[]>
336
- | ResolvePrerenderParams<T, TRouteMap>[],
337
- handler: (
338
- ctx: PrerenderPassthroughContext<
339
- ResolvePrerenderParams<T, TRouteMap>,
340
- TEnv
341
- >,
342
336
  ) =>
343
337
  | ReactNode
344
338
  | PrerenderPassthroughResult
345
339
  | Promise<ReactNode | PrerenderPassthroughResult>,
346
- options: PrerenderOptions & { passthrough: true },
340
+ options?: PrerenderOptions,
347
341
  __injectedId?: string,
348
342
  ): PrerenderHandlerDefinition<ResolvePrerenderParams<T, TRouteMap>>;
349
343
 
@@ -401,12 +395,27 @@ export function Prerender<TParams extends Record<string, any>>(
401
395
  );
402
396
  }
403
397
 
404
- if (!id) {
398
+ // Throw unless under a test runner. The plugin always injects $$id for a
399
+ // supported `export const` Prerender on every build, so a missing id means
400
+ // either no plugin (a bare test — fall back below) or an UNSUPPORTED shape the
401
+ // plugin silently skipped (dev OR a real build — fail loud; a synthetic id
402
+ // would degrade to a silent prerender miss). The message is already small (no
403
+ // stack-parsing diagnostic), so it ships as-is. isUnderTestRunner() is
404
+ // runtime-safe — never a bare `process.env` access.
405
+ if (!id && !isUnderTestRunner()) {
405
406
  throw new Error(
406
- "[rsc-router] Prerender: missing $$id. " +
407
- "Ensure the exposeInternalIds Vite plugin is configured.",
407
+ "[rango] Prerender: missing $$id. Use `export const X = Prerender(...)` " +
408
+ "and ensure the exposeInternalIds Vite plugin is configured.",
408
409
  );
409
410
  }
411
+ // Under vitest with no plugin id: assign a process-stable runtime id so a
412
+ // whole-app router with Prerender routes constructs in a bare test (for
413
+ // dispatch / assertGeneratedRoutesMatch). Never reached in a real build (the
414
+ // throw above fires there); prerender storage/lookup keys on routeName +
415
+ // paramHash, never $$id (mirrors createHandle / createLoader).
416
+ if (!id) {
417
+ id = `__rango_runtime_prerender_${runtimePrerenderIdCounter++}`;
418
+ }
410
419
 
411
420
  return {
412
421
  __brand: "prerenderHandler" as const,
@@ -422,7 +431,7 @@ export function Prerender<TParams extends Record<string, any>>(
422
431
  /**
423
432
  * Sentinel returned by `ctx.passthrough()` to signal that a specific param set
424
433
  * should not produce a local prerender artifact. The build skips writing the
425
- * entry; at runtime the handler runs live (requires `{ passthrough: true }`).
434
+ * entry; at runtime the Passthrough live handler runs instead.
426
435
  */
427
436
  export const PRERENDER_PASSTHROUGH: Readonly<{
428
437
  __brand: "prerenderPassthrough";
@@ -446,7 +455,41 @@ export function isPrerenderPassthrough(
446
455
  );
447
456
  }
448
457
 
449
- // -- Type guard -------------------------------------------------------------
458
+ /**
459
+ * Detect whether any resolved segment carries the passthrough sentinel.
460
+ *
461
+ * A build handler signals passthrough by returning `ctx.passthrough()` (the
462
+ * PRERENDER_PASSTHROUGH sentinel), which lands on the segment's `component`.
463
+ * But when the route declares `loading()`, the handler result is deferred
464
+ * upstream (segment-resolution/fresh.ts), so `component` is a thenable resolving
465
+ * to the sentinel rather than the sentinel itself — a synchronous
466
+ * `isPrerenderPassthrough(component)` on the Promise returns false and the build
467
+ * bakes a corrupt artifact instead of deferring. Resolve thenables first.
468
+ *
469
+ * Rejections are swallowed here: a throwing build handler resurfaces during
470
+ * segment serialization, preserving the prior error-handling behavior.
471
+ */
472
+ export async function detectPrerenderPassthrough(
473
+ segments: ReadonlyArray<{ component: unknown }>,
474
+ ): Promise<boolean> {
475
+ for (const seg of segments) {
476
+ let component: unknown = seg.component;
477
+ if (
478
+ component &&
479
+ typeof (component as { then?: unknown }).then === "function"
480
+ ) {
481
+ try {
482
+ component = await component;
483
+ } catch {
484
+ continue;
485
+ }
486
+ }
487
+ if (isPrerenderPassthrough(component)) return true;
488
+ }
489
+ return false;
490
+ }
491
+
492
+ // -- Type guards ------------------------------------------------------------
450
493
 
451
494
  /**
452
495
  * Type guard to check if a value is a PrerenderHandlerDefinition.
@@ -461,3 +504,89 @@ export function isPrerenderHandler(
461
504
  (value as { __brand: unknown }).__brand === "prerenderHandler"
462
505
  );
463
506
  }
507
+
508
+ // -- Passthrough wrapper ----------------------------------------------------
509
+
510
+ /**
511
+ * A prerender route with a live fallback handler for unknown params at runtime.
512
+ *
513
+ * Wraps a `Prerender(...)` definition with a separate handler that runs at
514
+ * request time for params not covered by `getParams()`.
515
+ *
516
+ * - Build time: `prerenderDef` provides getParams + build handler.
517
+ * - Runtime: `liveHandler` runs for unknown params with full HandlerContext.
518
+ *
519
+ * @example
520
+ * ```ts
521
+ * const BlogPrerender = Prerender(
522
+ * async () => [{ slug: "getting-started" }, { slug: "api-reference" }],
523
+ * async (ctx) => <BlogPost slug={ctx.params.slug} />,
524
+ * );
525
+ *
526
+ * // In route definition:
527
+ * path("/blog/:slug", Passthrough(BlogPrerender, async (ctx) => {
528
+ * const post = await ctx.env.DB.get(ctx.params.slug);
529
+ * return <BlogPost slug={ctx.params.slug} post={post} />;
530
+ * }))
531
+ * ```
532
+ */
533
+ export interface PassthroughHandlerDefinition<
534
+ TParams extends Record<string, any> = any,
535
+ TEnv = DefaultEnv,
536
+ > {
537
+ readonly __brand: "passthroughHandler";
538
+ /** The underlying prerender definition (build-time rendering). */
539
+ prerenderDef: PrerenderHandlerDefinition<TParams>;
540
+ /** Live handler for runtime fallback on unknown params. */
541
+ liveHandler: (
542
+ ctx: HandlerContext<TParams, TEnv>,
543
+ ) => ReactNode | Promise<ReactNode> | Response | Promise<Response>;
544
+ /** Composable default DSL items merged when the handler is mounted. */
545
+ use?: () => UseItems<HandlerUseItem>;
546
+ }
547
+
548
+ export function Passthrough<
549
+ TParams extends Record<string, any>,
550
+ TEnv = DefaultEnv,
551
+ >(
552
+ prerenderDef: PrerenderHandlerDefinition<TParams>,
553
+ liveHandler: (
554
+ ctx: HandlerContext<TParams, TEnv>,
555
+ ) => ReactNode | Promise<ReactNode> | Response | Promise<Response>,
556
+ ): PassthroughHandlerDefinition<TParams, TEnv>;
557
+
558
+ // Implementation
559
+ export function Passthrough<
560
+ TParams extends Record<string, any>,
561
+ TEnv = DefaultEnv,
562
+ >(
563
+ prerenderDef: PrerenderHandlerDefinition<TParams>,
564
+ liveHandler: (
565
+ ctx: HandlerContext<TParams, TEnv>,
566
+ ) => ReactNode | Promise<ReactNode> | Response | Promise<Response>,
567
+ ): PassthroughHandlerDefinition<TParams, TEnv> {
568
+ if (!isPrerenderHandler(prerenderDef)) {
569
+ throw new Error(
570
+ "[rango] Passthrough: first argument must be a Prerender() definition.",
571
+ );
572
+ }
573
+ return {
574
+ __brand: "passthroughHandler" as const,
575
+ prerenderDef,
576
+ liveHandler,
577
+ };
578
+ }
579
+
580
+ /**
581
+ * Type guard to check if a value is a PassthroughHandlerDefinition.
582
+ */
583
+ export function isPassthroughHandler(
584
+ value: unknown,
585
+ ): value is PassthroughHandlerDefinition {
586
+ return (
587
+ typeof value === "object" &&
588
+ value !== null &&
589
+ "__brand" in value &&
590
+ (value as { __brand: unknown }).__brand === "passthroughHandler"
591
+ );
592
+ }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Runtime-neutral same-origin redirect rule.
3
+ *
4
+ * Shared by the client redirect guard (`browser/validate-redirect-origin.ts`,
5
+ * which validates redirect targets the client JS is about to navigate to) and
6
+ * the server outgoing-redirect guard (`rsc/redirect-guard.ts`, which validates
7
+ * every browser-followed `Location` header before it leaves the handler). Kept
8
+ * at the `src/` root so both layers import the ONE rule and cannot drift -- a
9
+ * cross-origin target blocked on the JS/fetch path is blocked identically on the
10
+ * no-JS (PE) and full-page document paths.
11
+ */
12
+
13
+ /**
14
+ * Resolve a redirect target against the current origin.
15
+ *
16
+ * Returns the canonical (normalized) same-origin href -- which also collapses
17
+ * protocol-relative (`//evil.com`) and other ambiguous forms -- or `null` when
18
+ * the target resolves to a different origin or is unparseable. Pure: no logging,
19
+ * no side effects.
20
+ */
21
+ export function resolveSameOriginRedirect(
22
+ url: string,
23
+ currentOrigin: string,
24
+ ): string | null {
25
+ try {
26
+ const target = new URL(url, currentOrigin);
27
+ if (target.origin !== currentOrigin) {
28
+ return null;
29
+ }
30
+ return target.href;
31
+ } catch {
32
+ return null;
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Validate an explicit off-origin redirect target (`redirect(url, { external:
38
+ * true })`).
39
+ *
40
+ * `external` opts out of the same-origin rule, but NOT out of scheme safety:
41
+ * only `http:`/`https:` targets are allowed. A redirect ultimately reaches the
42
+ * browser via `window.location.assign()` on the SPA/action client paths, so a
43
+ * forged or mistaken `redirect("javascript:...", { external: true })` would be a
44
+ * scriptable navigation if the scheme were not checked here. Returns the
45
+ * normalized href for an http(s) target (same- or cross-origin), or `null`
46
+ * otherwise. Pure: no logging, no side effects.
47
+ */
48
+ export function resolveExternalRedirect(
49
+ url: string,
50
+ currentOrigin: string,
51
+ ): string | null {
52
+ try {
53
+ const target = new URL(url, currentOrigin);
54
+ if (target.protocol !== "http:" && target.protocol !== "https:") {
55
+ return null;
56
+ }
57
+ return target.href;
58
+ } catch {
59
+ return null;
60
+ }
61
+ }
62
+
63
+ /**
64
+ * The safe same-origin landing for a blocked redirect.
65
+ *
66
+ * Every guard that neutralizes a cross-origin/unsafe redirect target sends the
67
+ * browser here instead: the app's basename root, or `"/"` when unset. Kept
68
+ * beside the resolvers so the "where does a blocked redirect go" answer lives
69
+ * in ONE place -- the server 3xx guard (`rsc/redirect-guard.ts`) and the
70
+ * shell-HIT degradation path (`rsc/rsc-rendering.ts`) must agree, or a blocked
71
+ * redirect lands differently depending on which exit it took.
72
+ */
73
+ export function safeSameOriginLanding(basename: string | undefined): string {
74
+ return basename && basename !== "/" ? basename : "/";
75
+ }
76
+
77
+ /**
78
+ * Out-of-band brand for `redirect(url, { external: true })`.
79
+ *
80
+ * The external opt-in MUST be settable only by app code calling `redirect(...,
81
+ * { external: true })`, never by an attacker. An earlier design carried the
82
+ * opt-in as a wire header (`x-rango-redirect-external`), but a wire header is
83
+ * forgeable: a proxy-style response route that copies an attacker-controlled
84
+ * upstream response's headers would let `302 Location: https://evil` plus that
85
+ * header bypass the same-origin guard without app code ever opting in. So the
86
+ * opt-in is now an out-of-band brand on the Response object itself, tracked in a
87
+ * `WeakSet` that cannot cross the wire. `redirect()` brands the Response; the
88
+ * small set of internal redirect-rebuild paths (middleware `mergeResponse`,
89
+ * `carryOverRedirectHeaders`, the response-route rewrap) transfer the brand onto
90
+ * the rebuilt Response; the guard and the SPA intercept read it. An upstream
91
+ * Response an app proxies is never branded, so its forged header is inert.
92
+ *
93
+ * Fail-closed: if a rebuild path ever drops the brand, the redirect is
94
+ * neutralized to the app root rather than allowed off-host.
95
+ */
96
+ const externalRedirects = new WeakSet<Response>();
97
+
98
+ /** Brand a Response as an explicit `{ external: true }` redirect (out-of-band). */
99
+ export function markExternalRedirect(response: Response): void {
100
+ externalRedirects.add(response);
101
+ }
102
+
103
+ /** Read the out-of-band `{ external: true }` brand off a Response. */
104
+ export function isExternalRedirect(response: Response): boolean {
105
+ return externalRedirects.has(response);
106
+ }
107
+
108
+ /**
109
+ * Reserved internal header name. No longer a trust signal -- the external
110
+ * opt-in is the out-of-band brand above. It is kept only so the redirect-rebuild
111
+ * paths and the guard can defensively strip any value (e.g. one forged by a
112
+ * proxied upstream) and guarantee it never reaches the browser.
113
+ */
114
+ export const EXTERNAL_REDIRECT_MARKER: string = "x-rango-redirect-external";
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Escape a string for literal use inside a RegExp. Single source of truth for
3
+ * the router runtime (matching) and the vite build (transform/scan); a pure,
4
+ * dependency-free leaf so both environments can share it.
5
+ */
6
+ export function escapeRegExp(input: string): string {
7
+ return input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
8
+ }
@@ -0,0 +1,20 @@
1
+ "use client";
2
+
3
+ import type { ReactNode } from "react";
4
+
5
+ interface RenderErrorThrowerProps {
6
+ error: unknown;
7
+ }
8
+
9
+ /**
10
+ * Client component that throws the given error during render, so the nearest
11
+ * error boundary catches it. Errors thrown during render are caught by error
12
+ * boundaries; async errors (rejected promises) are not -- which is why the
13
+ * navigation bridge funnels processing failures through this component instead
14
+ * of letting them surface as uncaught rejections.
15
+ */
16
+ export function RenderErrorThrower({
17
+ error,
18
+ }: RenderErrorThrowerProps): ReactNode {
19
+ throw error;
20
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Runtime-neutral Response shape utilities.
3
+ *
4
+ * Kept at the src/ root so both `router/` and `rsc/` can depend on it
5
+ * without creating a cross-layer import cycle.
6
+ */
7
+
8
+ /**
9
+ * True when a Response represents a WebSocket upgrade handoff and must not
10
+ * be reconstructed or mutated:
11
+ *
12
+ * - Status 101 (Switching Protocols) is outside the standard Response
13
+ * constructor's 200–599 range, so `new Response(body, { status: 101 })`
14
+ * throws RangeError on Node/undici and any spec-compliant runtime.
15
+ * - Cloudflare's workerd attaches a non-standard `webSocket` property on
16
+ * the upgrade Response (e.g. from `acceptWebSocket`/`handleWebSocketUpgrade`
17
+ * or the `agents` library's `routeAgentRequest`). That property is dropped
18
+ * by a `new Response(...)` copy, breaking the upgrade even on workerd
19
+ * where the status range is relaxed.
20
+ *
21
+ * Callers should short-circuit header/body merges for these responses.
22
+ */
23
+ export function isWebSocketUpgradeResponse(response: Response): boolean {
24
+ return (
25
+ response.status === 101 ||
26
+ (response as unknown as { webSocket?: unknown }).webSocket != null
27
+ );
28
+ }
29
+
30
+ /**
31
+ * Append `Accept` to a response's `Vary` header without duplicating it.
32
+ *
33
+ * Content-negotiated responses already carry `Vary: Accept` from the
34
+ * upstream layer (response-route-handler's callHandlerWithVary, or
35
+ * handleRscRendering baking `accept` into its vary list). The negotiated
36
+ * post-append in the handler would otherwise emit `Vary: Accept, Accept`,
37
+ * a redundant token some proxies/CDNs treat as a distinct cache key.
38
+ * Token match is case-insensitive (HTTP field tokens are case-insensitive)
39
+ * and whitespace-tolerant.
40
+ */
41
+ export function appendVaryAccept(response: Response): void {
42
+ const existing = response.headers.get("Vary");
43
+ if (!existing) {
44
+ response.headers.set("Vary", "Accept");
45
+ return;
46
+ }
47
+ const hasAccept = existing
48
+ .split(",")
49
+ .some((token) => token.trim().toLowerCase() === "accept");
50
+ if (!hasAccept) {
51
+ response.headers.append("Vary", "Accept");
52
+ }
53
+ }
54
+
55
+ // Location truthiness (not presence) so an empty `Location: ""` is not a redirect.
56
+ export function isRedirectResponse(response: Response): boolean {
57
+ return (
58
+ response.status >= 300 &&
59
+ response.status < 400 &&
60
+ Boolean(response.headers.get("Location"))
61
+ );
62
+ }