@rangojs/router 0.0.0-experimental.2 → 0.0.0-experimental.20

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 (1118) hide show
  1. package/AGENTS.md +5 -0
  2. package/README.md +850 -4
  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/{src/__mocks__/version.ts → dist/__mocks__/version.js} +1 -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 +1601 -0
  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/dist/browser/react/use-client-cache.js +39 -0
  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/dist/handles/index.d.ts +6 -0
  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/{src/href-context.ts → dist/href-context.d.ts} +7 -11
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +4583 -749
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +18 -17
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +82 -46
  809. package/skills/cache-guide/SKILL.md +262 -0
  810. package/skills/caching/SKILL.md +139 -238
  811. package/skills/composability/SKILL.md +172 -0
  812. package/skills/debug-manifest/SKILL.md +112 -0
  813. package/skills/document-cache/SKILL.md +87 -57
  814. package/skills/fonts/SKILL.md +167 -0
  815. package/skills/hooks/SKILL.md +403 -60
  816. package/skills/intercept/SKILL.md +224 -203
  817. package/skills/layout/SKILL.md +243 -149
  818. package/skills/links/SKILL.md +239 -0
  819. package/skills/loader/SKILL.md +444 -253
  820. package/skills/middleware/SKILL.md +222 -325
  821. package/skills/mime-routes/SKILL.md +128 -0
  822. package/skills/parallel/SKILL.md +220 -170
  823. package/skills/prerender/SKILL.md +643 -0
  824. package/skills/rango/SKILL.md +119 -0
  825. package/skills/response-routes/SKILL.md +411 -0
  826. package/skills/route/SKILL.md +334 -89
  827. package/skills/router-setup/SKILL.md +305 -274
  828. package/skills/tailwind/SKILL.md +129 -0
  829. package/skills/testing/SKILL.md +226 -0
  830. package/skills/theme/SKILL.md +36 -11
  831. package/skills/typesafety/SKILL.md +437 -168
  832. package/skills/use-cache/SKILL.md +324 -0
  833. package/src/__internal.ts +181 -0
  834. package/src/bin/rango.ts +321 -0
  835. package/src/browser/action-coordinator.ts +97 -0
  836. package/src/browser/action-response-classifier.ts +99 -0
  837. package/src/browser/event-controller.ts +87 -64
  838. package/src/browser/history-state.ts +80 -0
  839. package/src/browser/intercept-utils.ts +52 -0
  840. package/src/browser/link-interceptor.ts +20 -4
  841. package/src/browser/logging.ts +55 -0
  842. package/src/browser/merge-segment-loaders.ts +20 -12
  843. package/src/browser/navigation-bridge.ts +217 -549
  844. package/src/browser/navigation-client.ts +74 -46
  845. package/src/browser/navigation-store.ts +33 -50
  846. package/src/browser/navigation-transaction.ts +295 -0
  847. package/src/browser/network-error-handler.ts +61 -0
  848. package/src/browser/partial-update.ts +288 -297
  849. package/src/browser/prefetch/cache.ts +67 -0
  850. package/src/browser/prefetch/fetch.ts +137 -0
  851. package/src/browser/prefetch/observer.ts +65 -0
  852. package/src/browser/prefetch/policy.ts +42 -0
  853. package/src/browser/prefetch/queue.ts +88 -0
  854. package/src/browser/rango-state.ts +112 -0
  855. package/src/browser/react/Link.tsx +173 -73
  856. package/src/browser/react/NavigationProvider.tsx +138 -27
  857. package/src/browser/react/context.ts +6 -0
  858. package/src/browser/react/filter-segment-order.ts +11 -0
  859. package/src/browser/react/index.ts +12 -12
  860. package/src/browser/react/location-state-shared.ts +95 -53
  861. package/src/browser/react/location-state.ts +60 -15
  862. package/src/browser/react/mount-context.ts +37 -0
  863. package/src/browser/react/nonce-context.ts +23 -0
  864. package/src/browser/react/shallow-equal.ts +27 -0
  865. package/src/browser/react/use-action.ts +29 -51
  866. package/src/browser/react/use-client-cache.ts +5 -3
  867. package/src/browser/react/use-handle.ts +49 -65
  868. package/src/browser/react/use-href.tsx +20 -188
  869. package/src/browser/react/use-link-status.ts +6 -5
  870. package/src/browser/react/use-mount.ts +31 -0
  871. package/src/browser/react/use-navigation.ts +27 -78
  872. package/src/browser/react/use-params.ts +65 -0
  873. package/src/browser/react/use-pathname.ts +47 -0
  874. package/src/browser/react/use-router.ts +63 -0
  875. package/src/browser/react/use-search-params.ts +56 -0
  876. package/src/browser/react/use-segments.ts +80 -97
  877. package/src/browser/response-adapter.ts +73 -0
  878. package/src/browser/rsc-router.tsx +104 -34
  879. package/src/browser/scroll-restoration.ts +92 -16
  880. package/src/browser/segment-reconciler.ts +216 -0
  881. package/src/browser/segment-structure-assert.ts +83 -0
  882. package/src/browser/server-action-bridge.ts +504 -584
  883. package/src/browser/shallow.ts +6 -1
  884. package/src/browser/types.ts +107 -57
  885. package/src/browser/validate-redirect-origin.ts +29 -0
  886. package/src/build/generate-manifest.ts +438 -0
  887. package/src/build/generate-route-types.ts +36 -0
  888. package/src/build/index.ts +35 -0
  889. package/src/build/route-trie.ts +249 -0
  890. package/src/build/route-types/ast-helpers.ts +25 -0
  891. package/src/build/route-types/ast-route-extraction.ts +98 -0
  892. package/src/build/route-types/codegen.ts +102 -0
  893. package/src/build/route-types/include-resolution.ts +411 -0
  894. package/src/build/route-types/param-extraction.ts +48 -0
  895. package/src/build/route-types/per-module-writer.ts +128 -0
  896. package/src/build/route-types/router-processing.ts +469 -0
  897. package/src/build/route-types/scan-filter.ts +78 -0
  898. package/src/build/runtime-discovery.ts +231 -0
  899. package/src/cache/background-task.ts +34 -0
  900. package/src/cache/cache-key-utils.ts +44 -0
  901. package/src/cache/cache-policy.ts +125 -0
  902. package/src/cache/cache-runtime.ts +338 -0
  903. package/src/cache/cache-scope.ts +120 -303
  904. package/src/cache/cf/cf-cache-store.ts +119 -7
  905. package/src/cache/cf/index.ts +8 -2
  906. package/src/cache/document-cache.ts +101 -72
  907. package/src/cache/handle-capture.ts +81 -0
  908. package/src/cache/handle-snapshot.ts +41 -0
  909. package/src/cache/index.ts +0 -15
  910. package/src/cache/memory-segment-store.ts +191 -13
  911. package/src/cache/profile-registry.ts +73 -0
  912. package/src/cache/read-through-swr.ts +134 -0
  913. package/src/cache/segment-codec.ts +256 -0
  914. package/src/cache/taint.ts +98 -0
  915. package/src/cache/types.ts +76 -121
  916. package/src/client.rsc.tsx +10 -14
  917. package/src/client.tsx +114 -89
  918. package/src/component-utils.ts +4 -4
  919. package/src/components/DefaultDocument.tsx +6 -2
  920. package/src/context-var.ts +86 -0
  921. package/src/debug.ts +243 -0
  922. package/src/errors.ts +108 -2
  923. package/src/handle.ts +34 -19
  924. package/src/handles/MetaTags.tsx +76 -23
  925. package/src/handles/meta.ts +32 -15
  926. package/src/host/cookie-handler.ts +165 -0
  927. package/src/host/errors.ts +97 -0
  928. package/src/host/index.ts +56 -0
  929. package/src/host/pattern-matcher.ts +214 -0
  930. package/src/host/router.ts +352 -0
  931. package/src/host/testing.ts +79 -0
  932. package/src/host/types.ts +146 -0
  933. package/src/host/utils.ts +25 -0
  934. package/src/href-client.ts +141 -47
  935. package/src/index.rsc.ts +209 -23
  936. package/src/index.ts +256 -32
  937. package/src/internal-debug.ts +11 -0
  938. package/src/loader.rsc.ts +27 -142
  939. package/src/loader.ts +27 -10
  940. package/src/network-error-thrower.tsx +3 -1
  941. package/src/outlet-provider.tsx +45 -0
  942. package/src/prerender/param-hash.ts +37 -0
  943. package/src/prerender/store.ts +144 -0
  944. package/src/prerender.ts +463 -0
  945. package/src/reverse.ts +330 -0
  946. package/src/root-error-boundary.tsx +41 -29
  947. package/src/route-content-wrapper.tsx +9 -11
  948. package/src/route-definition/dsl-helpers.ts +934 -0
  949. package/src/route-definition/helper-factories.ts +200 -0
  950. package/src/route-definition/helpers-types.ts +430 -0
  951. package/src/route-definition/index.ts +55 -0
  952. package/src/route-definition/redirect.ts +93 -0
  953. package/src/route-definition/route-function.ts +119 -0
  954. package/src/route-definition.ts +1 -1371
  955. package/src/route-map-builder.ts +241 -112
  956. package/src/route-name.ts +53 -0
  957. package/src/route-types.ts +70 -9
  958. package/src/router/content-negotiation.ts +116 -0
  959. package/src/router/debug-manifest.ts +72 -0
  960. package/src/router/error-handling.ts +9 -9
  961. package/src/router/find-match.ts +158 -0
  962. package/src/router/handler-context.ts +348 -82
  963. package/src/router/intercept-resolution.ts +395 -0
  964. package/src/router/lazy-includes.ts +234 -0
  965. package/src/router/loader-resolution.ts +215 -121
  966. package/src/router/logging.ts +248 -0
  967. package/src/router/manifest.ts +172 -43
  968. package/src/router/match-api.ts +620 -0
  969. package/src/router/match-context.ts +6 -4
  970. package/src/router/match-handlers.ts +440 -0
  971. package/src/router/match-middleware/background-revalidation.ts +80 -93
  972. package/src/router/match-middleware/cache-lookup.ts +382 -9
  973. package/src/router/match-middleware/cache-store.ts +51 -22
  974. package/src/router/match-middleware/intercept-resolution.ts +55 -17
  975. package/src/router/match-middleware/segment-resolution.ts +24 -6
  976. package/src/router/match-pipelines.ts +10 -45
  977. package/src/router/match-result.ts +34 -20
  978. package/src/router/metrics.ts +3 -3
  979. package/src/router/middleware-cookies.ts +55 -0
  980. package/src/router/middleware-types.ts +179 -0
  981. package/src/router/middleware.ts +239 -328
  982. package/src/router/pattern-matching.ts +302 -26
  983. package/src/router/prerender-match.ts +398 -0
  984. package/src/router/preview-match.ts +170 -0
  985. package/src/router/revalidation.ts +112 -33
  986. package/src/router/router-context.ts +40 -23
  987. package/src/router/router-interfaces.ts +439 -0
  988. package/src/router/router-options.ts +587 -0
  989. package/src/router/router-registry.ts +24 -0
  990. package/src/router/segment-resolution/fresh.ts +552 -0
  991. package/src/router/segment-resolution/helpers.ts +263 -0
  992. package/src/router/segment-resolution/loader-cache.ts +198 -0
  993. package/src/router/segment-resolution/revalidation.ts +1226 -0
  994. package/src/router/segment-resolution/static-store.ts +67 -0
  995. package/src/router/segment-resolution.ts +21 -0
  996. package/src/router/segment-wrappers.ts +289 -0
  997. package/src/router/telemetry-otel.ts +299 -0
  998. package/src/router/telemetry.ts +300 -0
  999. package/src/router/timeout.ts +148 -0
  1000. package/src/router/trie-matching.ts +221 -0
  1001. package/src/router/types.ts +78 -4
  1002. package/src/router.ts +672 -3566
  1003. package/src/rsc/handler-context.ts +45 -0
  1004. package/src/rsc/handler.ts +691 -757
  1005. package/src/rsc/helpers.ts +140 -6
  1006. package/src/rsc/index.ts +5 -5
  1007. package/src/rsc/loader-fetch.ts +209 -0
  1008. package/src/rsc/manifest-init.ts +86 -0
  1009. package/src/rsc/nonce.ts +14 -0
  1010. package/src/rsc/origin-guard.ts +141 -0
  1011. package/src/rsc/progressive-enhancement.ts +366 -0
  1012. package/src/rsc/response-error.ts +37 -0
  1013. package/src/rsc/response-route-handler.ts +347 -0
  1014. package/src/rsc/rsc-rendering.ts +250 -0
  1015. package/src/rsc/runtime-warnings.ts +42 -0
  1016. package/src/rsc/server-action.ts +344 -0
  1017. package/src/rsc/types.ts +38 -14
  1018. package/src/search-params.ts +227 -0
  1019. package/src/segment-system.tsx +59 -61
  1020. package/src/server/context.ts +217 -49
  1021. package/src/server/cookie-store.ts +190 -0
  1022. package/src/server/fetchable-loader-store.ts +37 -0
  1023. package/src/server/handle-store.ts +98 -20
  1024. package/src/server/loader-registry.ts +15 -56
  1025. package/src/server/request-context.ts +406 -65
  1026. package/src/server.ts +32 -133
  1027. package/src/ssr/index.tsx +157 -26
  1028. package/src/static-handler.ts +114 -0
  1029. package/src/theme/ThemeProvider.tsx +21 -15
  1030. package/src/theme/ThemeScript.tsx +5 -5
  1031. package/src/theme/constants.ts +11 -4
  1032. package/src/theme/index.ts +6 -7
  1033. package/src/theme/theme-context.ts +5 -31
  1034. package/src/theme/theme-script.ts +21 -18
  1035. package/src/theme/types.ts +1 -1
  1036. package/src/types/boundaries.ts +158 -0
  1037. package/src/types/cache-types.ts +198 -0
  1038. package/src/types/error-types.ts +192 -0
  1039. package/src/types/global-namespace.ts +100 -0
  1040. package/src/types/handler-context.ts +691 -0
  1041. package/src/types/index.ts +88 -0
  1042. package/src/types/loader-types.ts +183 -0
  1043. package/src/types/route-config.ts +161 -0
  1044. package/src/types/route-entry.ts +102 -0
  1045. package/src/types/segments.ts +153 -0
  1046. package/src/types.ts +1 -1561
  1047. package/src/urls/include-helper.ts +197 -0
  1048. package/src/urls/index.ts +53 -0
  1049. package/src/urls/path-helper-types.ts +339 -0
  1050. package/src/urls/path-helper.ts +329 -0
  1051. package/src/urls/pattern-types.ts +95 -0
  1052. package/src/urls/response-types.ts +106 -0
  1053. package/src/urls/type-extraction.ts +372 -0
  1054. package/src/urls/urls-function.ts +98 -0
  1055. package/src/urls.ts +1 -726
  1056. package/src/use-loader.tsx +85 -77
  1057. package/src/vite/discovery/bundle-postprocess.ts +209 -0
  1058. package/src/vite/discovery/discover-routers.ts +345 -0
  1059. package/src/vite/discovery/prerender-collection.ts +365 -0
  1060. package/src/vite/discovery/route-types-writer.ts +258 -0
  1061. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1062. package/src/vite/discovery/state.ts +113 -0
  1063. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1064. package/src/vite/index.ts +10 -782
  1065. package/src/vite/plugin-types.ts +131 -0
  1066. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1067. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1068. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1069. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -51
  1070. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1071. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1072. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1073. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1074. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1075. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1076. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  1077. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1078. package/src/vite/plugins/version-injector.ts +83 -0
  1079. package/src/vite/plugins/version-plugin.ts +254 -0
  1080. package/src/vite/plugins/virtual-entries.ts +123 -0
  1081. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1082. package/src/vite/rango.ts +510 -0
  1083. package/src/vite/router-discovery.ts +781 -0
  1084. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1085. package/src/vite/utils/banner.ts +36 -0
  1086. package/src/vite/utils/bundle-analysis.ts +137 -0
  1087. package/src/vite/utils/manifest-utils.ts +70 -0
  1088. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1089. package/src/vite/utils/prerender-utils.ts +129 -0
  1090. package/src/vite/utils/shared-utils.ts +169 -0
  1091. package/CLAUDE.md +0 -7
  1092. package/src/__tests__/component-utils.test.ts +0 -76
  1093. package/src/__tests__/route-definition.test.ts +0 -63
  1094. package/src/__tests__/urls.test.tsx +0 -436
  1095. package/src/browser/lru-cache.ts +0 -69
  1096. package/src/browser/request-controller.ts +0 -164
  1097. package/src/cache/__tests__/document-cache.test.ts +0 -522
  1098. package/src/cache/__tests__/memory-segment-store.test.ts +0 -487
  1099. package/src/cache/__tests__/memory-store.test.ts +0 -484
  1100. package/src/cache/cf/__tests__/cf-cache-store.test.ts +0 -428
  1101. package/src/cache/memory-store.ts +0 -253
  1102. package/src/href.ts +0 -177
  1103. package/src/route-utils.ts +0 -89
  1104. package/src/router/__tests__/match-context.test.ts +0 -104
  1105. package/src/router/__tests__/match-pipelines.test.ts +0 -537
  1106. package/src/router/__tests__/match-result.test.ts +0 -566
  1107. package/src/router/__tests__/on-error.test.ts +0 -935
  1108. package/src/router/__tests__/pattern-matching.test.ts +0 -577
  1109. package/src/router/middleware.test.ts +0 -1355
  1110. package/src/rsc/__tests__/helpers.test.ts +0 -175
  1111. package/src/server/__tests__/request-context.test.ts +0 -171
  1112. package/src/ssr/__tests__/ssr-handler.test.tsx +0 -188
  1113. package/src/theme/__tests__/theme.test.ts +0 -120
  1114. package/src/vite/__tests__/expose-loader-id.test.ts +0 -117
  1115. package/src/vite/expose-handle-id.ts +0 -209
  1116. package/src/vite/expose-loader-id.ts +0 -357
  1117. package/src/vite/expose-location-state-id.ts +0 -177
  1118. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: mime-routes
3
+ description: Content negotiation — serve different response types (RSC, JSON, text, XML) from the same URL based on Accept header
4
+ argument-hint: [negotiate|vary|accept]
5
+ ---
6
+
7
+ # Content Negotiation (MIME Routes)
8
+
9
+ Content negotiation lets you register multiple response types on the same URL pattern.
10
+ The router inspects the `Accept` header and dispatches to the matching handler.
11
+ All negotiated responses include `Vary: Accept` for correct CDN/cache behavior.
12
+
13
+ See also: `/response-routes` for the base response route API (path.json, path.text, etc.).
14
+
15
+ ## Defining Negotiated Routes
16
+
17
+ Declare the same URL pattern with both an RSC route and one or more response-type routes.
18
+ Order within the `urls()` array does not matter — the trie merges them at build time.
19
+
20
+ ```typescript
21
+ import { urls } from "@rangojs/router";
22
+
23
+ export const urlpatterns = urls(({ path, layout, include }) => [
24
+ // RSC page + JSON API on the same URL
25
+ path("/products/:id", ProductPage, { name: "product" }),
26
+ path.json(
27
+ "/products/:id",
28
+ (ctx) => {
29
+ return db.getProduct(ctx.params.id);
30
+ },
31
+ { name: "productJson" },
32
+ ),
33
+ ]);
34
+ ```
35
+
36
+ When a browser requests `/products/42` (`Accept: text/html`), the RSC page renders.
37
+ When an API client requests the same URL (`Accept: application/json`), the JSON handler runs.
38
+
39
+ ## Negotiation Rules
40
+
41
+ 1. **Q-value priority** — higher `q` wins (`Accept: application/json;q=0.9, text/html;q=1.0` serves RSC)
42
+ 2. **Client order tiebreaker** — when q-values are equal, the type listed first in Accept wins (matches Express/Hono behavior)
43
+ 3. **Specific MIME match** — the variant whose MIME type appears in Accept wins
44
+ 4. **Wildcard / empty Accept** — `*/*` and missing Accept fall back to route definition order (the first-defined variant wins)
45
+ 5. **All responses** on a negotiated URL get `Vary: Accept` header, including the RSC side
46
+
47
+ RSC participates as a `text/html` candidate alongside response-type variants.
48
+ There is no special short-circuit — RSC follows the same negotiation rules as other types.
49
+
50
+ The MIME mapping used for matching:
51
+
52
+ | Tag | MIME type |
53
+ | -------------------- | ------------------------------------------------------------ |
54
+ | RSC (plain `path()`) | `text/html` (negotiation) / `text/x-component` (wire format) |
55
+ | `json` | `application/json` |
56
+ | `text` | `text/plain` |
57
+ | `xml` | `application/xml` |
58
+ | `html` | `text/html` |
59
+ | `md` | `text/markdown` |
60
+
61
+ RSC routes negotiate as `text/html` but respond with `text/x-component` (the RSC wire format).
62
+ The browser's RSC runtime decodes this transparently — clients requesting `text/html` get
63
+ the RSC page rendered normally.
64
+
65
+ Tags `image`, `stream`, and `any` are pass-through and do not participate in Accept matching.
66
+
67
+ ## Multiple Response Types
68
+
69
+ A single URL can have an RSC route plus multiple response-type variants:
70
+
71
+ ```typescript
72
+ export const urlpatterns = urls(({ path }) => [
73
+ path("/data", DataPage, { name: "data" }),
74
+ path.json("/data", () => ({ format: "json" }), { name: "dataJson" }),
75
+ path.text("/data", () => "plain text", { name: "dataText" }),
76
+ path.xml("/data", () => "<root>xml</root>", { name: "dataXml" }),
77
+ ]);
78
+ ```
79
+
80
+ - `Accept: text/html` — RSC page
81
+ - `Accept: application/json` — JSON handler
82
+ - `Accept: text/plain` — text handler
83
+ - `Accept: application/xml` — XML handler
84
+ - `Accept: */*` — first variant (JSON, since it was registered first)
85
+
86
+ ## Wildcard Routes
87
+
88
+ Content negotiation works with wildcard `/*` patterns:
89
+
90
+ ```typescript
91
+ path("/files/*", FileBrowserPage, { name: "files" }),
92
+ path.json("/files/*", (ctx) => {
93
+ const filePath = ctx.params["*"];
94
+ return { entries: listDir(filePath) };
95
+ }, { name: "filesJson" }),
96
+ ```
97
+
98
+ ## Response-Only Negotiation (No RSC Primary)
99
+
100
+ Two or more response-type routes can share a URL without an RSC route.
101
+ The last registered route becomes the primary; earlier ones become variants:
102
+
103
+ ```typescript
104
+ path.json("/api/data", () => ({ format: "json" }), { name: "dataJson" }),
105
+ path.text("/api/data", () => "plain text version", { name: "dataText" }),
106
+ ```
107
+
108
+ Without an RSC primary, there is no `text/html` candidate — the Accept header
109
+ picks among the response-type candidates directly.
110
+
111
+ ## How It Works
112
+
113
+ 1. **Build time**: `buildRouteTrie()` calls `mergeLeaves()` when multiple routes share a pattern.
114
+ RSC routes become the primary trie leaf; response-type routes are stored in the `nv`
115
+ (negotiate variants) array on the leaf. The `rf` (rsc-first) flag tracks definition order.
116
+ 2. **Runtime**: `previewRoute()` reads `negotiateVariants` from the trie match result.
117
+ It parses the `Accept` header (extracting q-values and order), builds a candidate list
118
+ (RSC as `text/html` + response-type variants), and calls `pickNegotiateVariant()`.
119
+ 3. **Candidate matching**: walks the client's sorted Accept list (by q desc, then order asc),
120
+ matching each entry against candidates. Wildcards (`*/*`, `text/*`) fall back to definition order.
121
+ 4. **Vary header**: both the response-route handler wrapper and the RSC handler wrapper
122
+ append `Vary: Accept` when the `negotiated` flag is set on the preview result.
123
+
124
+ ## Caching Considerations
125
+
126
+ `Vary: Accept` is set automatically on all negotiated responses. This tells CDNs and
127
+ HTTP caches to store separate entries per Accept header value. No additional cache
128
+ configuration is needed for negotiated routes — the framework handles it.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: parallel
3
- description: Define parallel routes for multi-column layouts, sidebars, and modal slots in rsc-router
3
+ description: Define parallel routes for multi-column layouts, sidebars, and modal slots in @rangojs/router
4
4
  argument-hint: [@slot-name]
5
5
  ---
6
6
 
@@ -8,38 +8,41 @@ argument-hint: [@slot-name]
8
8
 
9
9
  Parallel routes render multiple components simultaneously in named slots.
10
10
 
11
+ Canonical semantics reference:
12
+ [docs/execution-model.md](../../docs/internal/execution-model.md)
13
+
11
14
  ## Basic Parallel Routes
12
15
 
13
16
  ```typescript
14
- import { map } from "rsc-router/server";
15
- import { ParallelOutlet } from "rsc-router";
16
-
17
- // Handler definition
18
- export default map<typeof routes>(({ route, layout, parallel }) => [
19
- layout(
20
- () => (
21
- <DashboardLayout>
22
- <aside>
23
- <ParallelOutlet name="@sidebar" />
24
- </aside>
25
- <main>
26
- <Outlet />
27
- </main>
28
- <div className="notifications">
29
- <ParallelOutlet name="@notifications" />
30
- </div>
31
- </DashboardLayout>
32
- ),
33
- () => [
34
- parallel({
35
- "@sidebar": () => <Sidebar />,
36
- "@notifications": () => <NotificationPanel />,
37
- }),
38
-
39
- route("dashboard.index", DashboardIndex),
40
- route("dashboard.analytics", Analytics),
41
- ]
42
- ),
17
+ import { urls } from "@rangojs/router";
18
+ import { Outlet, ParallelOutlet } from "@rangojs/router/client";
19
+
20
+ function DashboardLayout() {
21
+ return (
22
+ <div className="dashboard">
23
+ <aside>
24
+ <ParallelOutlet name="@sidebar" />
25
+ </aside>
26
+ <main>
27
+ <Outlet />
28
+ </main>
29
+ <div className="notifications">
30
+ <ParallelOutlet name="@notifications" />
31
+ </div>
32
+ </div>
33
+ );
34
+ }
35
+
36
+ export const urlpatterns = urls(({ path, layout, parallel }) => [
37
+ layout(<DashboardLayout />, () => [
38
+ parallel({
39
+ "@sidebar": () => <Sidebar />,
40
+ "@notifications": () => <NotificationPanel />,
41
+ }),
42
+
43
+ path("/dashboard", DashboardIndex, { name: "dashboard.index" }),
44
+ path("/dashboard/analytics", Analytics, { name: "dashboard.analytics" }),
45
+ ]),
43
46
  ]);
44
47
  ```
45
48
 
@@ -49,207 +52,254 @@ Access route params and loaders in parallel slots:
49
52
 
50
53
  ```typescript
51
54
  parallel({
52
- "@sidebar": (ctx) => {
53
- const user = ctx.get("user");
54
- return <UserSidebar user={user} />;
55
- },
56
- "@details": async (ctx) => {
57
- const data = await ctx.use(DetailsLoader);
58
- return <DetailsPanel data={data} productId={ctx.params.id} />;
59
- },
55
+ "@sidebar": (ctx) => <Sidebar userId={ctx.params.userId} />,
56
+ "@related": (ctx) => <RelatedProducts slug={ctx.params.slug} />,
60
57
  })
61
58
  ```
62
59
 
63
- ## Parallel Routes with Configuration
60
+ ## Reading Handler Data
64
61
 
65
- Add loaders, loading states, and revalidation to slots:
62
+ Parallels can read `ctx.set()` values from their parent handler or layout
63
+ via `ctx.get()`. The handler always executes before its parallels
64
+ (handler-first).
65
+
66
+ Visibility follows tree structure:
67
+
68
+ - Layout-level parallels see layout data, but not path handler data
69
+ (the path is a separate entry).
70
+ - Parallels inside a path (or its orphan layouts) see both layout and
71
+ path handler data.
72
+
73
+ This applies to full render passes. During partial action revalidation,
74
+ only revalidated segments are recomputed. If a parallel depends on data
75
+ set by an outer handler or layout, revalidate that outer segment too, or
76
+ have the parallel reload/guard the data itself.
77
+
78
+ ```typescript
79
+ path("/dashboard/:id", (ctx) => {
80
+ const user = await getUser(ctx.params.id);
81
+ ctx.set("user", user);
82
+ return <DashboardPage user={user} />;
83
+ }, { name: "dashboard" }, () => [
84
+ layout(DashboardLayout, () => [
85
+ parallel({
86
+ "@sidebar": (ctx) => {
87
+ const user = ctx.get("user");
88
+ return <Sidebar role={user?.role} />;
89
+ },
90
+ }),
91
+ ]),
92
+ ])
93
+ ```
94
+
95
+ ## Parallel Routes with Loaders
96
+
97
+ Add loaders and loading states to parallel routes:
66
98
 
67
99
  ```typescript
68
100
  parallel(
69
101
  {
70
- "@sidebar": async (ctx) => {
71
- const categories = await ctx.use(CategoriesLoader);
72
- return <CategorySidebar categories={categories} />;
73
- },
74
- "@cart": async (ctx) => {
75
- const cart = await ctx.use(CartLoader);
76
- return <CartPreview cart={cart} />;
77
- },
102
+ "@sidebar": () => <CategorySidebar />,
78
103
  },
79
104
  () => [
80
105
  loader(CategoriesLoader),
81
- loader(CartLoader),
82
106
  loading(<SidebarSkeleton />),
83
- revalidate(({ actionId }) => actionId?.includes("cart") ?? false),
107
+ revalidate(() => false), // Never revalidate sidebar
84
108
  ]
85
109
  )
86
110
  ```
87
111
 
88
- ## Independent Slot Revalidation
89
-
90
- Each parallel slot can control its own revalidation:
112
+ ## Multiple Parallel Slots
91
113
 
92
114
  ```typescript
93
- layout(<DashboardLayout />, () => [
94
- // Sidebar only revalidates on sidebar actions
95
- parallel(
96
- { "@sidebar": SidebarComponent },
97
- () => [
98
- revalidate(({ actionId }) => actionId?.includes("sidebar") ?? false),
99
- ]
100
- ),
101
-
102
- // Main content revalidates on route changes
103
- parallel(
104
- { "@main": MainComponent },
105
- () => [
106
- revalidate(({ currentParams, nextParams }) =>
107
- currentParams.id !== nextParams.id
108
- ),
109
- ]
110
- ),
111
-
112
- route("dashboard.index", DashboardIndex),
113
- ])
114
- ```
115
-
116
- ## Parallel Routes for Modals
117
-
118
- Use parallel routes with intercept for modal patterns:
119
-
120
- ```typescript
121
- layout(
122
- () => (
123
- <ShopLayout>
124
- <Outlet />
125
- <ParallelOutlet name="@modal" />
126
- </ShopLayout>
127
- ),
128
- () => [
129
- parallel({
130
- "@modal": () => null, // Empty by default
131
- }),
132
-
133
- // Intercept product detail into modal
134
- intercept(
135
- "@modal",
136
- "products.detail",
137
- (ctx) => <ProductModal id={ctx.params.id} />,
138
- () => [
139
- loader(ProductLoader),
140
- loading(<ProductModalSkeleton />),
141
- ]
115
+ layout(<ShopLayout />, () => [
116
+ parallel({
117
+ "@promoBanner": () => (
118
+ <div className="promo-banner">
119
+ Summer Sale! 50% off selected items
120
+ </div>
142
121
  ),
122
+ "@sidebar": () => <CategorySidebar />,
123
+ "@cartPreview": () => <CartPreview />,
124
+ "@notification": () => <CartNotification />,
125
+ }),
143
126
 
144
- route("products.index", ProductList),
145
- route("products.detail", ProductDetail),
146
- ]
147
- )
127
+ path("/shop", ShopIndex, { name: "shop" }),
128
+ ])
148
129
  ```
149
130
 
150
131
  ## Conditional Parallel Content
151
132
 
133
+ Render different content based on context:
134
+
152
135
  ```typescript
153
136
  parallel({
154
137
  "@sidebar": (ctx) => {
155
138
  const user = ctx.get("user");
156
- if (!user) return null; // Hide for guests
157
- if (user.role === "admin") {
158
- return <AdminSidebar />;
159
- }
160
- return <UserSidebar />;
139
+ return user ? <UserSidebar user={user} /> : <GuestSidebar />;
161
140
  },
162
141
  })
163
142
  ```
164
143
 
165
- ## Parallel Routes with Error Boundaries
144
+ ## Parallel Routes with Revalidation
145
+
146
+ Control when parallel routes revalidate:
166
147
 
167
148
  ```typescript
168
149
  parallel(
169
150
  {
170
- "@sidebar": async (ctx) => {
171
- const data = await ctx.use(SidebarLoader);
172
- return <Sidebar data={data} />;
173
- },
151
+ "@cart": () => <CartSummary />,
174
152
  },
175
153
  () => [
176
- loader(SidebarLoader),
177
- errorBoundary(({ error, reset }) => (
178
- <div className="sidebar-error">
179
- <p>Sidebar failed to load</p>
180
- <button onClick={reset}>Retry</button>
181
- </div>
182
- )),
154
+ loader(CartLoader),
155
+ // Revalidate when cart actions occur
156
+ revalidate(({ actionId }) => actionId?.includes("Cart") ?? false),
183
157
  ]
184
158
  )
185
159
  ```
186
160
 
187
- ## ParallelOutlet Component
161
+ Revalidating only the parallel does not re-run outer handlers/layouts.
162
+ If the slot reads `ctx.get()` data established above it, opt the outer
163
+ segment into revalidation as well.
164
+
165
+ ### Revalidation Contracts for Parallel Dependencies
166
+
167
+ Prefer named revalidation contracts shared by both the upstream producer and
168
+ the parallel consumer:
169
+
170
+ ```typescript
171
+ // revalidation-contracts.ts
172
+ export const revalidateCartData = ({ actionId }) =>
173
+ actionId?.includes("src/actions/cart.ts#") ?? false;
174
+
175
+ layout(CartLayout, () => [
176
+ revalidate(revalidateCartData), // producer reruns
177
+ parallel(
178
+ { "@cart": CartSummary },
179
+ () => [revalidate(revalidateCartData)], // consumer reruns
180
+ ),
181
+ ]);
182
+ ```
183
+
184
+ If the slot consumes multiple upstream domains, compose the contracts on both
185
+ segments.
186
+
187
+ Handoff helper style also works:
188
188
 
189
189
  ```typescript
190
- import { ParallelOutlet } from "rsc-router";
190
+ import { revalidate } from "@rangojs/router";
191
191
 
192
- function Layout() {
192
+ export const revalidateCart = () => [revalidate(revalidateCartData)];
193
+
194
+ layout(CartLayout, () => [
195
+ revalidateCart(),
196
+ parallel({ "@cart": CartSummary }, () => [revalidateCart()]),
197
+ ]);
198
+ ```
199
+
200
+ ## Named Outlets
201
+
202
+ Use `ParallelOutlet` to render slots in layouts:
203
+
204
+ ```typescript
205
+ import { Outlet, ParallelOutlet } from "@rangojs/router/client";
206
+
207
+ function MyLayout() {
193
208
  return (
194
- <div className="layout">
195
- {/* Named slot - renders content from parallel() */}
196
- <ParallelOutlet name="@sidebar" />
209
+ <div>
210
+ <header>
211
+ <ParallelOutlet name="@header" />
212
+ </header>
213
+
214
+ <div className="content">
215
+ <aside>
216
+ <ParallelOutlet name="@sidebar" />
217
+ </aside>
218
+
219
+ <main>
220
+ <Outlet /> {/* Main route content */}
221
+ </main>
197
222
 
198
- {/* Main route content */}
199
- <Outlet />
223
+ <aside>
224
+ <ParallelOutlet name="@rightPanel" />
225
+ </aside>
226
+ </div>
200
227
 
201
- {/* Another slot */}
202
- <ParallelOutlet name="@footer" />
228
+ <footer>
229
+ <ParallelOutlet name="@footer" />
230
+ </footer>
203
231
  </div>
204
232
  );
205
233
  }
206
234
  ```
207
235
 
208
- ## Dashboard Example
236
+ ## Complete Example
209
237
 
210
238
  ```typescript
211
- // Complete dashboard with multiple panels
212
- export default map<typeof routes>(({ route, layout, parallel, loader }) => [
213
- layout(
214
- () => (
215
- <div className="dashboard-grid">
216
- <header>
217
- <ParallelOutlet name="@header" />
218
- </header>
219
- <nav>
220
- <ParallelOutlet name="@nav" />
221
- </nav>
239
+ import { urls } from "@rangojs/router";
240
+ import { Outlet, ParallelOutlet } from "@rangojs/router/client";
241
+
242
+ function ShopLayout() {
243
+ return (
244
+ <div className="shop">
245
+ <ParallelOutlet name="@promoBanner" />
246
+ <div className="content">
247
+ <aside>
248
+ <ParallelOutlet name="@sidebar" />
249
+ </aside>
222
250
  <main>
223
251
  <Outlet />
224
252
  </main>
225
253
  <aside>
226
- <ParallelOutlet name="@activity" />
254
+ <ParallelOutlet name="@cartPreview" />
227
255
  </aside>
228
256
  </div>
257
+ <ParallelOutlet name="@notification" />
258
+ </div>
259
+ );
260
+ }
261
+
262
+ export const shopPatterns = urls(({
263
+ path,
264
+ layout,
265
+ parallel,
266
+ loader,
267
+ loading,
268
+ revalidate,
269
+ }) => [
270
+ layout(<ShopLayout />, () => [
271
+ // Simple parallel slot
272
+ parallel({
273
+ "@promoBanner": () => <PromoBanner />,
274
+ }),
275
+
276
+ // Parallel slot with loader
277
+ parallel(
278
+ { "@sidebar": () => <CategorySidebar /> },
279
+ () => [
280
+ loader(CategoriesLoader),
281
+ revalidate(() => false),
282
+ ]
283
+ ),
284
+
285
+ // Parallel slot with revalidation
286
+ parallel(
287
+ { "@cartPreview": () => <CartPreview /> },
288
+ () => [
289
+ loader(CartLoader),
290
+ loading(<CartSkeleton />),
291
+ revalidate(({ actionId }) => actionId?.includes("Cart") ?? false),
292
+ ]
229
293
  ),
230
- () => [
231
- parallel({
232
- "@header": () => <DashboardHeader />,
233
- "@nav": (ctx) => <Navigation user={ctx.get("user")} />,
234
- "@activity": async (ctx) => {
235
- const activity = await ctx.use(ActivityLoader);
236
- return <ActivityFeed items={activity} />;
237
- },
238
- }, () => [
239
- loader(ActivityLoader),
240
- revalidate(({ actionId }) => actionId?.includes("activity") ?? false),
241
- ]),
242
-
243
- route("dashboard.index", DashboardHome),
244
- route("dashboard.projects", Projects),
245
- route("dashboard.settings", Settings),
246
- ]
247
- ),
248
- ]);
249
- ```
250
294
 
251
- ## Slot Naming Convention
295
+ // Notification slot
296
+ parallel({
297
+ "@notification": () => <CartNotification />,
298
+ }),
252
299
 
253
- - Prefix with `@` (e.g., `@sidebar`, `@modal`, `@header`)
254
- - Use lowercase with hyphens for multi-word names (`@user-panel`)
255
- - Common names: `@sidebar`, `@modal`, `@header`, `@footer`, `@notifications`, `@breadcrumbs`
300
+ // Routes
301
+ path("/", ShopIndex, { name: "index" }),
302
+ path("/product/:slug", ProductPage, { name: "product" }),
303
+ ]),
304
+ ]);
305
+ ```