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

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 (1249) 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 +4279 -1209
  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 +251 -24
  816. package/skills/caching/SKILL.md +338 -13
  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 +225 -10
  851. package/skills/ppr/SKILL.md +622 -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 +172 -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 -616
  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 +257 -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 +202 -105
  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 +205 -121
  909. package/src/browser/prefetch/cache.ts +247 -72
  910. package/src/browser/prefetch/fetch.ts +359 -42
  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 +186 -27
  934. package/src/browser/scroll-restoration.ts +44 -27
  935. package/src/browser/segment-reconciler.ts +44 -7
  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 +454 -97
  959. package/src/cache/cache-scope.ts +233 -101
  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 +2206 -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 +144 -49
  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/taint.ts +55 -0
  978. package/src/cache/types.ts +194 -99
  979. package/src/cache/vercel/index.ts +11 -0
  980. package/src/cache/vercel/vercel-cache-store.ts +1132 -0
  981. package/src/client.rsc.tsx +41 -21
  982. package/src/client.tsx +116 -290
  983. package/src/cloudflare/index.ts +11 -0
  984. package/src/cloudflare/tracing.ts +108 -0
  985. package/src/component-utils.ts +19 -0
  986. package/src/components/DefaultDocument.tsx +8 -2
  987. package/src/context-var.ts +84 -2
  988. package/src/debug.ts +2 -2
  989. package/src/decode-loader-results.ts +52 -0
  990. package/src/defer.ts +185 -0
  991. package/src/deps/ssr.ts +0 -1
  992. package/src/encode-kv.ts +49 -0
  993. package/src/errors.ts +30 -4
  994. package/src/escape-script.ts +52 -0
  995. package/src/handle.ts +104 -34
  996. package/src/handles/MetaTags.tsx +24 -53
  997. package/src/handles/Scripts.tsx +183 -0
  998. package/src/handles/breadcrumbs.ts +35 -8
  999. package/src/handles/deferred-resolution.ts +127 -0
  1000. package/src/handles/is-thenable.ts +18 -0
  1001. package/src/handles/meta.ts +14 -40
  1002. package/src/handles/script.ts +244 -0
  1003. package/src/host/cookie-handler.ts +9 -60
  1004. package/src/host/errors.ts +13 -22
  1005. package/src/host/index.ts +9 -2
  1006. package/src/host/pattern-matcher.ts +23 -52
  1007. package/src/host/router.ts +107 -99
  1008. package/src/host/testing.ts +40 -27
  1009. package/src/host/types.ts +37 -4
  1010. package/src/host/utils.ts +1 -1
  1011. package/src/href-client.ts +137 -22
  1012. package/src/index.rsc.ts +100 -13
  1013. package/src/index.ts +143 -19
  1014. package/src/internal-debug.ts +11 -10
  1015. package/src/loader-store.ts +500 -0
  1016. package/src/loader.rsc.ts +20 -13
  1017. package/src/loader.ts +12 -11
  1018. package/src/missing-id-error.ts +68 -0
  1019. package/src/outlet-context.ts +1 -1
  1020. package/src/outlet-provider.tsx +1 -5
  1021. package/src/prerender/param-hash.ts +16 -16
  1022. package/src/prerender/store.ts +37 -41
  1023. package/src/prerender.ts +215 -86
  1024. package/src/redirect-origin.ts +114 -0
  1025. package/src/regex-escape.ts +8 -0
  1026. package/src/render-error-thrower.tsx +20 -0
  1027. package/src/response-utils.ts +62 -0
  1028. package/src/reverse.ts +65 -15
  1029. package/src/root-error-boundary.tsx +1 -19
  1030. package/src/route-content-wrapper.tsx +19 -77
  1031. package/src/route-definition/dsl-helpers.ts +485 -303
  1032. package/src/route-definition/helper-factories.ts +28 -140
  1033. package/src/route-definition/helpers-types.ts +153 -77
  1034. package/src/route-definition/index.ts +4 -2
  1035. package/src/route-definition/redirect.ts +51 -10
  1036. package/src/route-definition/resolve-handler-use.ts +160 -0
  1037. package/src/route-definition/use-item-types.ts +29 -0
  1038. package/src/route-map-builder.ts +41 -20
  1039. package/src/route-types.ts +37 -46
  1040. package/src/router/basename.ts +14 -0
  1041. package/src/router/content-negotiation.ts +164 -17
  1042. package/src/router/error-handling.ts +45 -18
  1043. package/src/router/find-match.ts +129 -30
  1044. package/src/router/handler-context.ts +83 -39
  1045. package/src/router/instrument.ts +355 -0
  1046. package/src/router/intercept-resolution.ts +48 -24
  1047. package/src/router/lazy-includes.ts +87 -63
  1048. package/src/router/loader-resolution.ts +286 -56
  1049. package/src/router/logging.ts +1 -7
  1050. package/src/router/manifest.ts +102 -55
  1051. package/src/router/match-api.ts +178 -218
  1052. package/src/router/match-context.ts +0 -22
  1053. package/src/router/match-handlers.ts +211 -165
  1054. package/src/router/match-middleware/background-revalidation.ts +66 -22
  1055. package/src/router/match-middleware/cache-lookup.ts +214 -263
  1056. package/src/router/match-middleware/cache-store.ts +105 -50
  1057. package/src/router/match-middleware/intercept-resolution.ts +8 -28
  1058. package/src/router/match-middleware/segment-resolution.ts +51 -18
  1059. package/src/router/match-pipelines.ts +1 -42
  1060. package/src/router/match-result.ts +128 -44
  1061. package/src/router/metrics.ts +5 -34
  1062. package/src/router/middleware-types.ts +13 -142
  1063. package/src/router/middleware.ts +300 -177
  1064. package/src/router/navigation-snapshot.ts +133 -0
  1065. package/src/router/params-util.ts +23 -0
  1066. package/src/router/parse-pattern.ts +115 -0
  1067. package/src/router/pattern-matching.ts +181 -150
  1068. package/src/router/prefetch-cache-ttl.ts +51 -0
  1069. package/src/router/prefetch-limits.ts +37 -0
  1070. package/src/router/prerender-match.ts +203 -58
  1071. package/src/router/preview-match.ts +35 -103
  1072. package/src/router/request-classification.ts +291 -0
  1073. package/src/router/revalidation.ts +123 -73
  1074. package/src/router/route-snapshot.ts +256 -0
  1075. package/src/router/router-context.ts +6 -28
  1076. package/src/router/router-interfaces.ts +146 -35
  1077. package/src/router/router-options.ts +202 -15
  1078. package/src/router/router-registry.ts +2 -5
  1079. package/src/router/segment-resolution/fresh.ts +301 -78
  1080. package/src/router/segment-resolution/helpers.ts +115 -30
  1081. package/src/router/segment-resolution/loader-cache.ts +156 -39
  1082. package/src/router/segment-resolution/loader-mask.ts +60 -0
  1083. package/src/router/segment-resolution/loader-snapshot.ts +259 -0
  1084. package/src/router/segment-resolution/mask-nested.ts +83 -0
  1085. package/src/router/segment-resolution/revalidation.ts +473 -384
  1086. package/src/router/segment-resolution/static-store.ts +19 -5
  1087. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1088. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  1089. package/src/router/segment-resolution.ts +5 -1
  1090. package/src/router/segment-wrappers.ts +6 -5
  1091. package/src/router/state-cookie-name.ts +33 -0
  1092. package/src/router/substitute-pattern-params.ts +75 -0
  1093. package/src/router/telemetry-otel.ts +160 -200
  1094. package/src/router/telemetry.ts +105 -20
  1095. package/src/router/timeout.ts +0 -20
  1096. package/src/router/tracing.ts +215 -0
  1097. package/src/router/trie-matching.ts +171 -59
  1098. package/src/router/types.ts +10 -63
  1099. package/src/router/url-params.ts +57 -0
  1100. package/src/router.ts +206 -71
  1101. package/src/rsc/full-payload.ts +70 -0
  1102. package/src/rsc/handler-context.ts +3 -2
  1103. package/src/rsc/handler.ts +682 -508
  1104. package/src/rsc/helpers.ts +168 -46
  1105. package/src/rsc/index.ts +2 -5
  1106. package/src/rsc/json-route-result.ts +38 -0
  1107. package/src/rsc/loader-fetch.ts +127 -31
  1108. package/src/rsc/manifest-init.ts +33 -42
  1109. package/src/rsc/nonce.ts +10 -1
  1110. package/src/rsc/origin-guard.ts +39 -25
  1111. package/src/rsc/progressive-enhancement.ts +138 -15
  1112. package/src/rsc/redirect-guard.ts +100 -0
  1113. package/src/rsc/response-cache-serve.ts +238 -0
  1114. package/src/rsc/response-error.ts +79 -12
  1115. package/src/rsc/response-route-handler.ts +99 -189
  1116. package/src/rsc/rsc-rendering.ts +498 -73
  1117. package/src/rsc/runtime-warnings.ts +23 -10
  1118. package/src/rsc/server-action.ts +287 -113
  1119. package/src/rsc/shell-capture.ts +1190 -0
  1120. package/src/rsc/shell-serve.ts +181 -0
  1121. package/src/rsc/ssr-setup.ts +18 -2
  1122. package/src/rsc/transition-gate.ts +89 -0
  1123. package/src/rsc/types.ts +62 -6
  1124. package/src/runtime-env.ts +18 -0
  1125. package/src/search-params.ts +35 -30
  1126. package/src/segment-content-promise.ts +67 -0
  1127. package/src/segment-loader-promise.ts +167 -0
  1128. package/src/segment-system.tsx +418 -131
  1129. package/src/serialize.ts +243 -0
  1130. package/src/server/context.ts +367 -61
  1131. package/src/server/cookie-parse.ts +32 -0
  1132. package/src/server/cookie-store.ts +152 -5
  1133. package/src/server/handle-store.ts +40 -38
  1134. package/src/server/loader-registry.ts +38 -46
  1135. package/src/server/request-context.ts +550 -171
  1136. package/src/ssr/index.tsx +467 -174
  1137. package/src/ssr/inject-rsc-eager.ts +167 -0
  1138. package/src/ssr/ssr-root.tsx +228 -0
  1139. package/src/static-handler.ts +27 -18
  1140. package/src/testing/cache-status.ts +162 -0
  1141. package/src/testing/collect-handle.ts +46 -0
  1142. package/src/testing/dispatch.ts +813 -0
  1143. package/src/testing/dom.entry.ts +22 -0
  1144. package/src/testing/e2e/fixture.ts +188 -0
  1145. package/src/testing/e2e/index.ts +128 -0
  1146. package/src/testing/e2e/matchers.ts +35 -0
  1147. package/src/testing/e2e/page-helpers.ts +272 -0
  1148. package/src/testing/e2e/parity.ts +387 -0
  1149. package/src/testing/e2e/server.ts +195 -0
  1150. package/src/testing/flight-matchers.ts +97 -0
  1151. package/src/testing/flight-normalize.ts +11 -0
  1152. package/src/testing/flight-runtime.d.ts +57 -0
  1153. package/src/testing/flight-tree.ts +682 -0
  1154. package/src/testing/flight.entry.ts +52 -0
  1155. package/src/testing/flight.ts +257 -0
  1156. package/src/testing/generated-routes.ts +199 -0
  1157. package/src/testing/index.ts +105 -0
  1158. package/src/testing/internal/context.ts +371 -0
  1159. package/src/testing/internal/flight-client-globals.ts +30 -0
  1160. package/src/testing/internal/seed-vars.ts +54 -0
  1161. package/src/testing/render-handler.ts +357 -0
  1162. package/src/testing/render-route.tsx +584 -0
  1163. package/src/testing/run-loader.ts +385 -0
  1164. package/src/testing/run-middleware.ts +205 -0
  1165. package/src/testing/run-transition-when.ts +164 -0
  1166. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1167. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1168. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1169. package/src/testing/vitest-stubs/version.ts +5 -0
  1170. package/src/testing/vitest.ts +305 -0
  1171. package/src/theme/ThemeProvider.tsx +56 -84
  1172. package/src/theme/ThemeScript.tsx +7 -9
  1173. package/src/theme/constants.ts +52 -13
  1174. package/src/theme/index.ts +0 -7
  1175. package/src/theme/theme-context.ts +1 -5
  1176. package/src/theme/theme-script.ts +22 -21
  1177. package/src/theme/use-theme.ts +0 -3
  1178. package/src/types/boundaries.ts +0 -35
  1179. package/src/types/cache-types.ts +17 -8
  1180. package/src/types/error-types.ts +30 -90
  1181. package/src/types/global-namespace.ts +54 -41
  1182. package/src/types/handler-context.ts +234 -82
  1183. package/src/types/index.ts +3 -10
  1184. package/src/types/loader-types.ts +44 -15
  1185. package/src/types/request-scope.ts +112 -0
  1186. package/src/types/route-config.ts +20 -52
  1187. package/src/types/route-entry.ts +12 -7
  1188. package/src/types/segments.ts +137 -14
  1189. package/src/urls/include-helper.ts +40 -75
  1190. package/src/urls/include-provider.ts +71 -0
  1191. package/src/urls/index.ts +2 -11
  1192. package/src/urls/path-helper-types.ts +102 -23
  1193. package/src/urls/path-helper.ts +62 -111
  1194. package/src/urls/pattern-types.ts +84 -19
  1195. package/src/urls/response-types.ts +25 -22
  1196. package/src/urls/type-extraction.ts +98 -154
  1197. package/src/urls/urls-function.ts +1 -19
  1198. package/src/use-loader.tsx +346 -89
  1199. package/src/vercel/index.ts +11 -0
  1200. package/src/vercel/tracing.ts +88 -0
  1201. package/src/vite/debug.ts +185 -0
  1202. package/src/vite/discovery/bundle-postprocess.ts +36 -38
  1203. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1204. package/src/vite/discovery/discover-routers.ts +130 -85
  1205. package/src/vite/discovery/discovery-errors.ts +255 -0
  1206. package/src/vite/discovery/gate-state.ts +171 -0
  1207. package/src/vite/discovery/prerender-collection.ts +214 -132
  1208. package/src/vite/discovery/route-types-writer.ts +40 -84
  1209. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1210. package/src/vite/discovery/state.ts +57 -4
  1211. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1212. package/src/vite/index.ts +15 -0
  1213. package/src/vite/inject-client-debug.ts +88 -0
  1214. package/src/vite/plugin-types.ts +261 -6
  1215. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1216. package/src/vite/plugins/client-ref-dedup.ts +16 -11
  1217. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1218. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1219. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1220. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1221. package/src/vite/plugins/expose-action-id.ts +48 -95
  1222. package/src/vite/plugins/expose-id-utils.ts +96 -51
  1223. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1224. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  1225. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1226. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1227. package/src/vite/plugins/expose-internal-ids.ts +553 -317
  1228. package/src/vite/plugins/performance-tracks.ts +89 -0
  1229. package/src/vite/plugins/refresh-cmd.ts +89 -27
  1230. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1231. package/src/vite/plugins/vercel-output.ts +384 -0
  1232. package/src/vite/plugins/version-injector.ts +40 -29
  1233. package/src/vite/plugins/version-plugin.ts +37 -40
  1234. package/src/vite/plugins/virtual-entries.ts +138 -27
  1235. package/src/vite/rango.ts +247 -132
  1236. package/src/vite/router-discovery.ts +1091 -159
  1237. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1238. package/src/vite/utils/banner.ts +4 -4
  1239. package/src/vite/utils/bundle-analysis.ts +10 -15
  1240. package/src/vite/utils/client-chunks.ts +184 -0
  1241. package/src/vite/utils/directive-prologue.ts +40 -0
  1242. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1243. package/src/vite/utils/manifest-utils.ts +4 -59
  1244. package/src/vite/utils/package-resolution.ts +20 -52
  1245. package/src/vite/utils/prerender-utils.ts +98 -38
  1246. package/src/vite/utils/shared-utils.ts +144 -44
  1247. package/src/browser/action-response-classifier.ts +0 -99
  1248. package/src/browser/shallow.ts +0 -40
  1249. package/src/router/middleware-cookies.ts +0 -55
@@ -0,0 +1,153 @@
1
+ # Params and Search Types
2
+
3
+ ## Typed Search Params
4
+
5
+ Add a `search` schema to `path()` options for type-safe query parameters:
6
+
7
+ ```typescript
8
+ // Route definition with search schema
9
+ path("/search", SearchPage, {
10
+ name: "search",
11
+ search: { q: "string", page: "number?", sort: "string?" },
12
+ });
13
+ ```
14
+
15
+ ### Handler with typed search params
16
+
17
+ `Handler<"name">` automatically resolves route params and search params from the
18
+ global `GeneratedRouteMap` (the gen file). No explicit route map import needed:
19
+
20
+ ```typescript
21
+ // pages/search.tsx
22
+ import type { Handler } from "@rangojs/router";
23
+
24
+ export const SearchPage: Handler<"search"> = (ctx) => {
25
+ // ctx.search is typed: { q: string; page?: number; sort?: string }
26
+ const { q, page, sort } = ctx.search;
27
+ return <SearchResults q={q} page={page} sort={sort} />;
28
+ };
29
+ ```
30
+
31
+ This avoids circular references because `Handler` defaults to `GeneratedRouteMap`
32
+ (from `router.named-routes.gen.ts`) instead of `RegisteredRoutes` (which depends on `router.tsx`).
33
+
34
+ You can also pass an explicit route map for per-module isolation (opt-in,
35
+ after running `npx rango generate`). With a local map, the route name is
36
+ **dot-prefixed** so params and search resolve from `routes`, not the global map:
37
+
38
+ ```typescript
39
+ import type { Handler } from "@rangojs/router";
40
+ import type { routes } from "./urls.gen.js";
41
+
42
+ export const SearchPage: Handler<".search", routes> = (ctx) => { ... };
43
+ ```
44
+
45
+ Note the difference: `Handler<"search">` (no dot) resolves against the global
46
+ `GeneratedRouteMap`; `Handler<".search", routes>` resolves against the local
47
+ `routes` map. Mixing them — `Handler<"search", routes>` — silently ignores
48
+ `routes` for param/search inference and only uses it for local `ctx.reverse(".x")`.
49
+
50
+ Supported types: `"string"`, `"number"`, `"boolean"`, with `?` suffix for optional.
51
+ Values are automatically coerced from query string (e.g., `"2"` becomes `2` for numbers).
52
+ Routes without a `search` schema keep the standard `URLSearchParams` behavior.
53
+
54
+ ### RouteSearchParams and RouteParams utility types
55
+
56
+ Extract typed params by route name for use in component props, return types, or anywhere:
57
+
58
+ ```typescript
59
+ import type { RouteSearchParams, RouteParams } from "@rangojs/router";
60
+
61
+ // RouteSearchParams<"name"> resolves the search schema to a typed object
62
+ type SP = RouteSearchParams<"search">;
63
+ // { q: string | undefined; page?: number; sort?: string }
64
+
65
+ // RouteParams<"name"> resolves URL params from the route pattern
66
+ type P = RouteParams<"blogPost">;
67
+ // { slug: string }
68
+
69
+ // Optional URL params (`:slug?`) resolve to `string | undefined`
70
+ // because absent segments are omitted from `ctx.params` at runtime.
71
+ type C = RouteParams<"checkout">;
72
+ // { step?: string }
73
+ // → ctx.params.step is `string | undefined`; use `?? "default"` to coalesce.
74
+
75
+ // Use in component props
76
+ interface SearchResultsProps {
77
+ params: RouteSearchParams<"search">;
78
+ }
79
+ ```
80
+
81
+ Both default to the global route map (`RegisteredRoutes` or `GeneratedRouteMap`).
82
+ Pass an explicit route map as the second type argument when needed:
83
+
84
+ ```typescript
85
+ import type { routes } from "./urls.gen.js";
86
+
87
+ type SP = RouteSearchParams<"search", routes>;
88
+ type P = RouteParams<"blogPost", routes>;
89
+ ```
90
+
91
+ ### Generated route types
92
+
93
+ In the generated `router.named-routes.gen.ts`, routes with search schemas
94
+ use `{ path, search }` objects:
95
+
96
+ ```typescript
97
+ // router.named-routes.gen.ts (auto-generated)
98
+ export const NamedRoutes = {
99
+ "search.index": {
100
+ path: "/search",
101
+ search: { q: "string", page: "number?", sort: "string?" },
102
+ },
103
+ "home.index": "/", // No search schema -> plain string
104
+ } as const;
105
+ ```
106
+
107
+ You never open a `.gen.ts` by hand. Treat the generated types as call-site
108
+ honesty checks, not modules to read:
109
+
110
+ - **Do not import `router.named-routes.gen.ts` directly**, and don't reach for
111
+ `Rango.GeneratedRouteMap`. It is the whole-app manifest, auto-wired
112
+ globally — `Handler<"name">` and `ctx.reverse("name")` already see it.
113
+ - **Per-module `*.gen.ts` imports are fine** — they are the opt-in local-route
114
+ pattern for `useReverse(routes)` and explicit local handler typing
115
+ (`Handler<".name", routes>`). See `/links`.
116
+
117
+ If a type error points at a generated map instead of your call site, that's a
118
+ smell — fix the call site (or regenerate), never edit the generated file.
119
+
120
+ ## Loader Type Safety
121
+
122
+ Loaders have typed return values:
123
+
124
+ ```typescript
125
+ // loaders/product.ts
126
+ export const ProductLoader = createLoader(async (ctx) => {
127
+ return {
128
+ id: ctx.params.slug,
129
+ name: "Widget",
130
+ price: 99,
131
+ };
132
+ });
133
+
134
+ // In server component - type is inferred
135
+ import { useLoader } from "@rangojs/router/client";
136
+
137
+ async function ProductPage() {
138
+ const product = await useLoader(ProductLoader);
139
+ // product: { id: string; name: string; price: number }
140
+ return <h1>{product.name}</h1>;
141
+ }
142
+
143
+ // In client component - same type
144
+ "use client";
145
+ import { useLoader } from "@rangojs/router/client";
146
+
147
+ function ProductPrice() {
148
+ const { data } = useLoader(ProductLoader);
149
+ // data: { id: string; name: string; price: number }
150
+ const product = data;
151
+ return <span>${product.price}</span>;
152
+ }
153
+ ```
@@ -0,0 +1,209 @@
1
+ # Route Types
2
+
3
+ ## Route Definition with Type-Safe Names
4
+
5
+ ```typescript
6
+ // urls.tsx
7
+ import { urls } from "@rangojs/router";
8
+
9
+ export const urlpatterns = urls(({ path, layout }) => [
10
+ path("/", HomePage, { name: "home" }),
11
+ path("/products", ProductsPage, { name: "products" }),
12
+ path("/product/:slug", ProductPage, { name: "product" }),
13
+ path("/cart", CartPage, { name: "cart" }),
14
+ path("/checkout/:step?", CheckoutPage, { name: "checkout" }),
15
+ ]);
16
+
17
+ // Route names are inferred from the { name } option
18
+ ```
19
+
20
+ ## Type-Safe href()
21
+
22
+ ### Server: ctx.reverse with route names
23
+
24
+ In route handlers, `ctx.reverse()` uses two namespaces:
25
+
26
+ - **`.name`** — local route, resolved within the current `include()` scope
27
+ - **`name`** — global route, from the named-routes definition
28
+
29
+ ```typescript
30
+ import type { Handler } from "@rangojs/router";
31
+
32
+ export const ProductHandler: Handler<"shop.product"> = (ctx) => {
33
+ ctx.reverse(".cart"); // Local: /shop/cart
34
+ ctx.reverse(".product", { slug: "widget" }); // Local: /shop/product/widget
35
+ ctx.reverse("blog.post", { slug: "1" }); // Global: /blog/1
36
+ };
37
+ ```
38
+
39
+ For type-safe local names, generate a route types file with `npx rango generate urls/shop.tsx`
40
+ and pass it as the second generic to `Handler` or `Prerender`:
41
+
42
+ ```typescript
43
+ import type { Handler } from "@rangojs/router";
44
+ import type { routes } from "./shop.gen.js";
45
+
46
+ export const ProductHandler: Handler<"shop.product", routes> = (ctx) => {
47
+ ctx.reverse(".cart"); // Type-safe local name
48
+ ctx.reverse(".product", { slug: "widget" }); // Type-safe local with params
49
+ ctx.reverse("blog.post", { slug: "hi" }); // Type-safe global name
50
+ };
51
+ ```
52
+
53
+ ### Client: href + useHref
54
+
55
+ On the client, `href()` validates paths against registered route patterns at compile time:
56
+
57
+ ```typescript
58
+ "use client";
59
+ import { href, useHref, Link } from "@rangojs/router/client";
60
+
61
+ // href() validates absolute paths via PatternToPath types
62
+ href("/about"); // Valid path
63
+ href("/blog/hello"); // Matches /blog/:slug
64
+
65
+ // useHref() auto-prefixes with include() mount
66
+ function ShopNav() {
67
+ const href = useHref();
68
+ return <Link to={href("/cart")}>Cart</Link>; // "/shop/cart"
69
+ }
70
+ ```
71
+
72
+ `href()` and the `Rango.Path` type read from `RegisteredRoutes` when you augment
73
+ it, otherwise from the auto-generated `GeneratedRouteMap` — so `rango generate`
74
+ alone type-checks `href()` paths with no manual augmentation. The augmentation
75
+ below is only needed for **`Rango.PathResponse`** (response-payload inference), which
76
+ `GeneratedRouteMap` cannot provide:
77
+
78
+ ```typescript
79
+ declare global {
80
+ namespace Rango {
81
+ interface RegisteredRoutes extends typeof router.routeMap {}
82
+ }
83
+ }
84
+ ```
85
+
86
+ For wrapper helpers, type the path parameter as `Rango.Path`. It is ambient (no
87
+ import) and shares `href()`'s compile-time path checking, so a wrapper stays in
88
+ sync with your routes automatically:
89
+
90
+ ```typescript
91
+ import { href } from "@rangojs/router/client";
92
+
93
+ export const appHref = (path: Rango.Path): string => href(path);
94
+ ```
95
+
96
+ For response-route payloads, `Rango.PathResponse<T>` is the ambient lookup. It
97
+ accepts a route _pattern_ **or** a concrete path, so it also serves as the return
98
+ type of a typed `fetch` wrapper. It only resolves once `RegisteredRoutes` carries
99
+ response metadata:
100
+
101
+ ```typescript
102
+ import { href } from "@rangojs/router/client";
103
+
104
+ type Product = Rango.PathResponse<"/api/products/:id">; // by pattern
105
+ type Same = Rango.PathResponse<"/api/products/42">; // by concrete path
106
+
107
+ // Response inferred from the concrete path passed in:
108
+ async function get<T extends Rango.Path>(
109
+ path: T,
110
+ ): Promise<Rango.PathResponse<T>> {
111
+ return fetch(href(path)).then((r) => r.json());
112
+ }
113
+ const product = await get("/api/products/42"); // Product (bare value)
114
+ ```
115
+
116
+ Pattern keys (`/:id`) match exactly; a concrete path under a _nested_ dynamic
117
+ route can match several patterns and union their responses.
118
+
119
+ `Rango.PathResponse` describes the JSON **wire** shape, not the handler's raw
120
+ return. A `path.json()` handler returning `{ createdAt: Date }` resolves here to
121
+ `{ createdAt: string }` (bare value), matching what `r.json()` yields. This
122
+ is applied via the ambient `Rango.JsonSerialize<T>` transform (`Date -> string`,
123
+ honors `toJSON()`, drops functions/`undefined`, `bigint -> never`). A separate
124
+ `Rango.FlightSerialize<T>` models the higher-fidelity RSC Flight boundary
125
+ (loaders / RSC props, where `Date` is preserved) — do **not** use it for
126
+ `path.json()`.
127
+
128
+ ### Overriding serialization globally
129
+
130
+ For your own types, the zero-config way to control the JSON wire shape is a
131
+ `toJSON()` method — `Rango.JsonSerialize` honors it, and it matches the runtime
132
+ exactly (`JSON.stringify` calls `toJSON()`):
133
+
134
+ ```typescript
135
+ class Money {
136
+ constructor(private cents: number) {}
137
+ toJSON(): number {
138
+ return this.cents;
139
+ }
140
+ }
141
+ // Rango.JsonSerialize<Money> is number; Rango.PathResponse reflects it.
142
+ ```
143
+
144
+ To override a transform for types you **don't** own (or for the Flight boundary,
145
+ which has no `toJSON()`), augment its override slot. Because `Rango.JsonSerialize`
146
+ / `Rango.FlightSerialize` are type _aliases_ (TS can't merge those), you provide a
147
+ single member that is your **complete** transform, delegating to the built-in for
148
+ the cases you don't change:
149
+
150
+ ```typescript
151
+ declare global {
152
+ namespace Rango {
153
+ interface JsonSerializeOverride<T> {
154
+ app: T extends Decimal ? string : Rango.JsonSerializeBuiltin<T>;
155
+ }
156
+ interface FlightSerializeOverride<T> {
157
+ app: T extends Money ? number : Rango.FlightSerializeBuiltin<T>;
158
+ }
159
+ }
160
+ }
161
+ // Rango.JsonSerialize<Decimal> -> string; Rango.FlightSerialize<Money> -> number;
162
+ // everything else stays on the built-in, recursively (nested fields too).
163
+ ```
164
+
165
+ Rules: provide **exactly one** member (the slot is read as
166
+ `Override<T>[keyof Override<T>]`, so multiple members union and conflict).
167
+ Overrides win over `toJSON()` and apply at every nesting level. Caveat for JSON:
168
+ the `path.json()` runtime is plain `JSON.stringify`, which only honors `toJSON()`,
169
+ so a `JsonSerializeOverride` that disagrees with what the runtime emits will lie —
170
+ prefer `toJSON()` for your own types and use the slot only for types you can't
171
+ modify.
172
+
173
+ See `/links` for full URL generation guide.
174
+
175
+ ## Stable identity: `path#export`
176
+
177
+ Loaders, handles, cached functions (`functionId`), and server actions
178
+ (`actionId`) all share one identity scheme: `{modulePath}#{exportName}`,
179
+ injected at build by the `exposeInternalIds` and `exposeActionId` Vite plugins.
180
+ This is also the identity React server actions carry across the Flight boundary,
181
+ which is why a `revalidate()` predicate sees an action as a `path#export` string:
182
+
183
+ ```typescript
184
+ revalidate(
185
+ ({ actionId }) => actionId === "src/actions/cart.ts#addToCart" || undefined,
186
+ );
187
+ ```
188
+
189
+ `actionId` is the only stable reference React exposes across the Flight boundary,
190
+ so it stays as the floor and escape hatch. The hand-written-string surface
191
+ (`actionId?.includes("cart.ts#")`) is brittle: a renamed action or moved file
192
+ silently stops matching with no compile error. Prefer **`ctx.isAction()`** in a
193
+ revalidate predicate — it resolves the action's id from an imported reference, so
194
+ a rename is a type error in one place instead of silent drift:
195
+
196
+ ```ts
197
+ import { addToCart, removeFromCart } from "./actions/cart";
198
+ import * as CartActions from "./actions/cart";
199
+
200
+ revalidate((ctx) => ctx.isAction(addToCart) || undefined); // one action
201
+ revalidate((ctx) => ctx.isAction(addToCart, removeFromCart) || undefined); // several
202
+ revalidate((ctx) => ctx.isAction(CartActions) || undefined); // any action in the module
203
+ ```
204
+
205
+ `ctx.isAction()` (only available on the revalidate predicate's context) returns a
206
+ raw boolean — combine with `|| undefined` for the "revalidate on match, else
207
+ defer" intent. It resolves the reference the same way the router derives
208
+ `actionId` (`$id` in production, `$$id` in dev), so matching
209
+ works in both modes. `actionId` stays available for advanced cases.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: use-cache
3
- description: Function-level caching with "use cache" directive for RSC data functions and components
3
+ description: Function-level caching with the "use cache" directive for RSC data functions and components in @rangojs/router. Use when a single function or component should memoize its own output, not a whole route/segment subtree or HTTP response.
4
4
  argument-hint: [profile-name]
5
5
  ---
6
6
 
@@ -10,6 +10,12 @@ Function-level caching for async server functions and RSC components. Caches
10
10
  return values with TTL + stale-while-revalidate. Complementary to the route-level
11
11
  `cache()` DSL and build-time `Static()`/`Prerender()`.
12
12
 
13
+ ## Not this skill if…
14
+
15
+ - You want to cache a whole route or a rendered subtree of segments — that is
16
+ the segment-level `cache()` DSL: see `/caching`.
17
+ - You are unsure which cache layer you need — start at `/cache-guide`.
18
+
13
19
  ## Basic Usage
14
20
 
15
21
  ### File-level (all exports cached with default profile)
@@ -52,8 +58,9 @@ export async function ProductCard({ id }: { id: string }) {
52
58
 
53
59
  ## Named Cache Profiles
54
60
 
55
- Define profiles in createRouter. Profile names map to `"use cache: <name>"` and
56
- `cache('<name>')` in the DSL.
61
+ Define profiles in createRouter. Profile names map to `"use cache: <name>"` in
62
+ the directive. The DSL `cache()` does not accept a string profile name; use an
63
+ options object (`cache({ ttl: 60 })`) or the `"use cache: <name>"` directive.
57
64
 
58
65
  ```typescript
59
66
  createRouter({
@@ -62,13 +69,27 @@ createRouter({
62
69
  short: { ttl: 60, swr: 120 },
63
70
  long: { ttl: 3600, swr: 7200 },
64
71
  products: { ttl: 300, swr: 600, tags: ["products"] },
72
+ // Opt-in: a stale entry re-executes in the foreground during a server
73
+ // action's revalidation render (fresh action response), instead of SWR.
74
+ cms: { ttl: 300, swr: 600, foregroundOnAction: true },
65
75
  },
66
76
  });
67
77
  ```
68
78
 
69
79
  - `"use cache"` (no name) resolves to `default`.
70
80
  - `"use cache: short"` resolves to the `short` profile.
71
- - Unknown profile names throw at build/boot time.
81
+ - `foregroundOnAction: true` (default false): a stale entry serves stale +
82
+ revalidates in the background on a plain navigation (SWR), but re-executes in
83
+ the FOREGROUND during a server action's revalidation render so the action
84
+ response reflects a fresh value (only the store write is deferred). Use it for
85
+ mutation-related cached data; incidental TTL staleness on an ordinary action
86
+ stays SWR so the action is not turned into a synchronous cache-refresh barrier.
87
+ For strong read-your-own-writes after a mutation, prefer `updateTag()` (a hard
88
+ purge, so the action's own re-render is a fresh foreground miss).
89
+ - Unknown profile names throw at runtime, on the first invocation of the cached
90
+ function (the Vite transform does not validate names at build/boot). The error
91
+ is actionable -- it names the missing profile and shows the `createRouter({
92
+ cacheProfiles: { ... } })` entry to add.
72
93
 
73
94
  ## Cache Key
74
95
 
@@ -77,18 +98,33 @@ use-cache:{functionId}:{serializedArgs}
77
98
  ```
78
99
 
79
100
  - `functionId` -- stable ID from Vite transform (module path + export name).
80
- - `serializedArgs` -- non-tainted arguments serialized via RSC `encodeReply()`.
101
+ - `serializedArgs` -- key-generating arguments serialized via RSC `encodeReply()`.
102
+
103
+ When there are no key-generating arguments, the key has no trailing colon -- it is
104
+ just `use-cache:{functionId}`.
81
105
 
82
106
  Different functions always produce different cache keys, even for the same route.
83
107
  This is important for intercepted routes -- the path handler and intercept handler
84
108
  each have their own `functionId` and therefore their own cache entries.
85
109
 
110
+ ### Route context is folded into the key
111
+
112
+ The tainted `ctx` object is excluded from arg serialization (see below), but
113
+ route-identifying fields read off it are extracted into `serializedArgs`:
114
+ `url.host`, route name (`_routeName`), `pathname`, `params`, response type
115
+ (`_responseType`), and the user-facing sorted search params (internal `_rsc*`/`__`
116
+ params excluded). The same cached function called with `ctx` on different routes,
117
+ param combinations, hosts, response types, or query variants therefore produces
118
+ distinct cache entries -- not one shared entry.
119
+
86
120
  ## Tainted Arguments (ctx, env, req)
87
121
 
88
122
  Request-scoped objects are branded with `Symbol.for('rango:nocache')` at creation.
89
123
  When detected:
90
124
 
91
125
  1. **Excluded from cache key** -- request-scoped, not meaningful for keying.
126
+ (The route-identifying fields read off `ctx` are still folded in -- see
127
+ "Route context is folded into the key" above.)
92
128
  2. **Handle data captured on miss** -- side effects via `ctx.use(Handle)` are recorded.
93
129
  3. **Handle data replayed on hit** -- restored into the current request's HandleStore.
94
130
 
@@ -117,17 +153,28 @@ const locale = cookies().get("locale")?.value ?? "en";
117
153
  const data = await getCachedData(locale); // locale is now in the cache key
118
154
  ```
119
155
 
156
+ The guard does not reach into LOADER bodies consumed inside the cached
157
+ function (`await ctx.use(loader)`): loaders always run fresh, so their reads
158
+ are exempt — but the CONSUMED VALUE is captured into the shared cache entry
159
+ like any other computed data. Same rule across `cache()` and the PPR shell:
160
+ handler/cached-scope consumption = baked copy, client-side `useLoader` = live
161
+ (the consumption-lane rule, `/rango` → Invariants).
162
+
120
163
  ### Side-Effect Guards
121
164
 
122
165
  These ctx methods **throw** inside a `"use cache"` function because their effects
123
166
  are lost on cache hit (the function body is skipped):
124
167
 
125
- - `ctx.set()` / `ctx.get()` for passing values to children
168
+ - `ctx.set()` for passing values to children
126
169
  - `ctx.header()`
127
170
  - `ctx.setTheme()`
128
171
  - `ctx.setLocationState()`
129
172
  - `ctx.onResponse()`
130
173
 
174
+ `ctx.get()` is **not** exec-guarded inside `"use cache"` -- it is a read, so it is
175
+ safe. (It only throws when reading a non-cacheable variable inside the separate
176
+ route-level `cache()` DSL boundary.)
177
+
131
178
  The error message recommends two alternatives:
132
179
 
133
180
  1. Extract the data fetch into a separate cached function and call ctx methods outside it.
@@ -304,18 +351,30 @@ export async function getProducts() {
304
351
  ## Backing Store
305
352
 
306
353
  Writes to the same `SegmentCacheStore` as `cache()` DSL, `Static()`, and `Prerender()`.
307
- One store, one configuration, one invalidation API. Tag-based invalidation
308
- (`revalidateTag`) works across all mechanisms.
354
+ One store, one configuration.
355
+
356
+ Cache entries (and `cacheProfiles`) can be tagged via `cache({ tags })` or runtime
357
+ `cacheTag(...tags)`. `cacheTag` has two forms: inside a `"use cache"` function it
358
+ tags that entry; called during a request render outside `"use cache"` it tags the
359
+ request's document/shell artifact (rides `_requestTags`) instead of throwing. The
360
+ built-in
361
+ `MemorySegmentCacheStore` and `CFCacheStore` index by tag. Invalidate on demand
362
+ with `updateTag(...tags)` (awaitable, read-your-own-writes; for server actions) or
363
+ `revalidateTag(...tags)` (background, non-blocking; for route handlers/webhooks).
364
+ Both hard-purge; the difference is awaitability, not stale-serving. For
365
+ `CFCacheStore`, distributed invalidation needs a `kv` namespace (markers live in
366
+ that same namespace). The separate `revalidate()` export is the client-update axis
367
+ (which segments re-render on a navigation or action), not a cache bust.
309
368
 
310
369
  ## Interaction with Other Caching
311
370
 
312
- | Mechanism | Granularity | When | Use case |
313
- | ------------------ | ------------------ | ---------- | ----------------------------------------------- |
314
- | `"use cache"` | Function/component | Runtime | Cache individual data fetches or components |
315
- | `cache()` DSL | Route segment | Runtime | Cache entire route subtrees with children |
316
- | `cache('profile')` | Route segment | Runtime | Same as cache() with a named profile |
317
- | `Static()` | Route segment | Build-time | Render once, never re-render |
318
- | `Prerender()` | Route segment | Build-time | Pre-render known params, optional live fallback |
371
+ | Mechanism | Granularity | When | Use case |
372
+ | -------------------- | ------------------ | ---------- | ----------------------------------------------- |
373
+ | `"use cache"` | Function/component | Runtime | Cache individual data fetches or components |
374
+ | `cache()` DSL | Route segment | Runtime | Cache entire route subtrees with children |
375
+ | `cache({ ttl })` DSL | Route segment | Runtime | Cache a route subtree with explicit options |
376
+ | `Static()` | Route segment | Build-time | Render once, never re-render |
377
+ | `Prerender()` | Route segment | Build-time | Pre-render known params, optional live fallback |
319
378
 
320
379
  ## Dev Mode
321
380
 
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: vercel
3
+ description: Deploy a Rango app to Vercel Functions (Build Output API v3). Use when deploying a Rango app to Vercel, or asking how the router works with Vercel Functions and the Build Output API.
4
+ argument-hint:
5
+ ---
6
+
7
+ # Vercel deployment
8
+
9
+ The `vercel` preset builds like the `node` preset (Vercel runs Node Functions, not Workers): rango owns the RSC entry, folds `process.env.NODE_ENV` for the SSR/RSC build, and after `vite build` assembles a `.vercel/output` directory (Build Output API v3) from `dist/` — a single streaming Node Function plus the static client assets.
10
+
11
+ ## Setup
12
+
13
+ ```bash
14
+ npm install @vercel/functions
15
+ ```
16
+
17
+ ```typescript
18
+ // vite.config.ts
19
+ import { defineConfig } from "vite";
20
+ import react from "@vitejs/plugin-react";
21
+ import { rango } from "@rangojs/router/vite";
22
+
23
+ export default defineConfig({
24
+ plugins: [react(), rango({ preset: "vercel" })],
25
+ });
26
+ ```
27
+
28
+ `@vercel/functions` is required: it backs the generated function launcher (`waitUntil`) and `VercelCacheStore`. The build fails with a clear error if it is missing.
29
+
30
+ `vite build` produces `.vercel/output`; deploy with the Vercel CLI (`vercel deploy --prebuilt`) or via Git integration.
31
+
32
+ ## Function configuration
33
+
34
+ Per-function knobs go under `vercel` and are written into `.vc-config.json`:
35
+
36
+ ```typescript
37
+ rango({
38
+ preset: "vercel",
39
+ vercel: {
40
+ runtime: "nodejs22.x", // default
41
+ maxDuration: 30, // seconds, default
42
+ memory: 1024, // MB (platform default when omitted)
43
+ regions: ["fra1"], // pin regions (platform default when omitted)
44
+ functionName: "index", // the <name>.func dir + config.json route
45
+ },
46
+ });
47
+ ```
48
+
49
+ ## Runtime Cache
50
+
51
+ `VercelCacheStore` wraps the Vercel Runtime Cache. Locally (no `process.env.VERCEL`) fall back to an in-memory store so dev/preview work without the platform:
52
+
53
+ ```typescript
54
+ import {
55
+ MemorySegmentCacheStore,
56
+ VercelCacheStore,
57
+ } from "@rangojs/router/cache";
58
+ import { getCache, waitUntil } from "@vercel/functions";
59
+
60
+ const defaults = { ttl: 60, swr: 300 };
61
+ const memoryStore = new MemorySegmentCacheStore({ defaults });
62
+
63
+ function resolveCache() {
64
+ if (process.env.VERCEL) {
65
+ return {
66
+ store: new VercelCacheStore({
67
+ cache: getCache({ namespace: process.env.VERCEL_DEPLOYMENT_ID }),
68
+ waitUntil,
69
+ defaults,
70
+ }),
71
+ };
72
+ }
73
+ return { store: memoryStore };
74
+ }
75
+
76
+ export const router = createRouter({ cache: resolveCache }).routes(/* ... */);
77
+ ```
78
+
79
+ The cache factory receives `(env, ctx)`; on Vercel `env` is `process.env` and `ctx` is `{ waitUntil }`.
80
+
81
+ ## Host routers (multi-app)
82
+
83
+ A multi-app host router deploys as a **single function** running `hostRouter.match()` for every request (mirrors the Cloudflare single-worker model). Two requirements:
84
+
85
+ 1. The host module exports the `HostRouter` **instance** (default export, or a named `hostRouter`/`router` export) — not a Cloudflare-style `{ fetch }` object, because rango owns the entry and calls `match()` for you.
86
+ 2. Point at the host entry (a host app has several `createRouter()` sub-apps, so auto-discovery can't pick one). rango auto-detects a lone `createHostRouter()` file; set `hostRouter` to be explicit:
87
+
88
+ ```typescript
89
+ rango({ preset: "vercel", hostRouter: "./src/worker.rsc.tsx" });
90
+ ```
91
+
92
+ ```typescript
93
+ // src/worker.rsc.tsx
94
+ import { createHostRouter } from "@rangojs/router/host";
95
+
96
+ export const hostRouter = createHostRouter();
97
+ hostRouter.host(["admin.*"]).lazy(() => import("./apps/admin/handler.js"));
98
+ hostRouter.host(["."]).lazy(() => import("./apps/site/handler.js"));
99
+
100
+ export default hostRouter; // the instance
101
+ ```
102
+
103
+ `{ env, ctx }` is threaded unchanged from the function to each matched sub-app's handler and its `cache(env, ctx)` factory. See the `host-router` skill for sub-app structure and routing patterns.
104
+
105
+ ## Tracing (custom spans)
106
+
107
+ Vercel exposes tracing through OpenTelemetry. `createVercelTracing()` (from `@rangojs/router/vercel`) emits the router's `rango.*` phase spans onto the global OTel tracer that `@vercel/otel`'s `registerOTel()` installs:
108
+
109
+ ```typescript
110
+ // instrumentation.ts — install the provider, then export the tracing config so
111
+ // importing this module is what runs registerOTel(). A Rango/Vite app does NOT
112
+ // auto-load `instrumentation.ts` like Next.js does, so a standalone
113
+ // registerOTel() that nothing imports is a silent no-op.
114
+ import { registerOTel } from "@vercel/otel";
115
+ import { createVercelTracing } from "@rangojs/router/vercel";
116
+ registerOTel({ serviceName: "my-app" });
117
+ export const tracing = createVercelTracing();
118
+
119
+ // router.tsx — importing `tracing` runs instrumentation.ts (and registerOTel)
120
+ import { tracing } from "./instrumentation.js";
121
+ export const router = createRouter({ tracing }).routes(/* ... */);
122
+ ```
123
+
124
+ `createVercelTracing(opts?)` takes `{ enabled, spans, tracerName, tracer }` — same phase set as `createCloudflareTracing` (`rango.request/middleware/action/loader/render/ssr`). Caveats: Node-runtime only (Vercel custom spans are unsupported on Edge); `registerOTel()` must run before the first request; `@vercel/otel` is what unlocks Vercel Session Tracing + Trace Drains. The deploy bundles `@vercel/otel` and its `@opentelemetry/*` peers into the function (no `node_modules` at runtime), so they must be installed. See `examples/vercel-basic` for a worked hybrid setup and the `observability` skill for the cross-platform tracing model.
125
+
126
+ ## Local validation without deploying
127
+
128
+ `vite preview` serves the static client assets only. To preview the RSC **function**, serve the assembled `.vercel/output` behind filesystem-then-function routing — `examples/vercel-basic/scripts/preview.mjs` does this (and `pnpm preview:vercel` runs it). For a faithful deploy test (isolated filesystem, ESM, self-contained bundle), `examples/vercel-basic/scripts/smoke.mjs` serves it from a temp dir outside the repo. Both share `scripts/serve-vercel-output.mjs`.