@rangojs/router 0.0.0-experimental.8ff1c5d → 0.0.0-experimental.a06372ef

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 (1102) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +884 -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/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 +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 +4484 -826
  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} +12 -16
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +77 -58
  809. package/skills/breadcrumbs/SKILL.md +250 -0
  810. package/skills/cache-guide/SKILL.md +262 -0
  811. package/skills/caching/SKILL.md +50 -21
  812. package/skills/composability/SKILL.md +172 -0
  813. package/skills/debug-manifest/SKILL.md +12 -8
  814. package/skills/document-cache/SKILL.md +18 -16
  815. package/skills/fonts/SKILL.md +167 -0
  816. package/skills/hooks/SKILL.md +334 -72
  817. package/skills/host-router/SKILL.md +218 -0
  818. package/skills/intercept/SKILL.md +131 -8
  819. package/skills/layout/SKILL.md +100 -3
  820. package/skills/links/SKILL.md +89 -30
  821. package/skills/loader/SKILL.md +388 -38
  822. package/skills/middleware/SKILL.md +171 -34
  823. package/skills/mime-routes/SKILL.md +128 -0
  824. package/skills/parallel/SKILL.md +78 -1
  825. package/skills/prerender/SKILL.md +643 -0
  826. package/skills/rango/SKILL.md +85 -16
  827. package/skills/response-routes/SKILL.md +411 -0
  828. package/skills/route/SKILL.md +226 -14
  829. package/skills/router-setup/SKILL.md +123 -30
  830. package/skills/tailwind/SKILL.md +129 -0
  831. package/skills/theme/SKILL.md +9 -8
  832. package/skills/typesafety/SKILL.md +318 -89
  833. package/skills/use-cache/SKILL.md +324 -0
  834. package/src/__internal.ts +102 -4
  835. package/src/bin/rango.ts +321 -0
  836. package/src/browser/action-coordinator.ts +97 -0
  837. package/src/browser/action-response-classifier.ts +99 -0
  838. package/src/browser/event-controller.ts +87 -64
  839. package/src/browser/history-state.ts +80 -0
  840. package/src/browser/intercept-utils.ts +52 -0
  841. package/src/browser/link-interceptor.ts +24 -4
  842. package/src/browser/logging.ts +55 -0
  843. package/src/browser/merge-segment-loaders.ts +20 -12
  844. package/src/browser/navigation-bridge.ts +281 -554
  845. package/src/browser/navigation-client.ts +124 -71
  846. package/src/browser/navigation-store.ts +33 -50
  847. package/src/browser/navigation-transaction.ts +295 -0
  848. package/src/browser/network-error-handler.ts +61 -0
  849. package/src/browser/partial-update.ts +261 -309
  850. package/src/browser/prefetch/cache.ts +154 -0
  851. package/src/browser/prefetch/fetch.ts +135 -0
  852. package/src/browser/prefetch/observer.ts +65 -0
  853. package/src/browser/prefetch/policy.ts +48 -0
  854. package/src/browser/prefetch/queue.ts +88 -0
  855. package/src/browser/rango-state.ts +112 -0
  856. package/src/browser/react/Link.tsx +185 -73
  857. package/src/browser/react/NavigationProvider.tsx +51 -11
  858. package/src/browser/react/context.ts +6 -0
  859. package/src/browser/react/filter-segment-order.ts +11 -0
  860. package/src/browser/react/index.ts +12 -12
  861. package/src/browser/react/location-state-shared.ts +95 -53
  862. package/src/browser/react/location-state.ts +60 -15
  863. package/src/browser/react/mount-context.ts +6 -1
  864. package/src/browser/react/nonce-context.ts +23 -0
  865. package/src/browser/react/shallow-equal.ts +27 -0
  866. package/src/browser/react/use-action.ts +29 -51
  867. package/src/browser/react/use-client-cache.ts +5 -3
  868. package/src/browser/react/use-handle.ts +32 -79
  869. package/src/browser/react/use-href.tsx +2 -2
  870. package/src/browser/react/use-link-status.ts +6 -5
  871. package/src/browser/react/use-navigation.ts +22 -63
  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 +107 -26
  879. package/src/browser/scroll-restoration.ts +98 -38
  880. package/src/browser/segment-reconciler.ts +216 -0
  881. package/src/browser/segment-structure-assert.ts +16 -0
  882. package/src/browser/server-action-bridge.ts +504 -599
  883. package/src/browser/shallow.ts +6 -1
  884. package/src/browser/types.ts +109 -47
  885. package/src/browser/validate-redirect-origin.ts +29 -0
  886. package/src/build/generate-manifest.ts +235 -24
  887. package/src/build/generate-route-types.ts +36 -0
  888. package/src/build/index.ts +13 -0
  889. package/src/build/route-trie.ts +265 -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 +72 -122
  916. package/src/client.rsc.tsx +3 -1
  917. package/src/client.tsx +106 -126
  918. package/src/component-utils.ts +4 -4
  919. package/src/components/DefaultDocument.tsx +5 -1
  920. package/src/context-var.ts +86 -0
  921. package/src/debug.ts +17 -7
  922. package/src/errors.ts +108 -2
  923. package/src/handle.ts +15 -29
  924. package/src/handles/MetaTags.tsx +73 -20
  925. package/src/handles/breadcrumbs.ts +66 -0
  926. package/src/handles/index.ts +1 -0
  927. package/src/handles/meta.ts +30 -13
  928. package/src/host/cookie-handler.ts +165 -0
  929. package/src/host/errors.ts +97 -0
  930. package/src/host/index.ts +53 -0
  931. package/src/host/pattern-matcher.ts +214 -0
  932. package/src/host/router.ts +352 -0
  933. package/src/host/testing.ts +79 -0
  934. package/src/host/types.ts +146 -0
  935. package/src/host/utils.ts +25 -0
  936. package/src/href-client.ts +119 -29
  937. package/src/index.rsc.ts +153 -19
  938. package/src/index.ts +211 -30
  939. package/src/internal-debug.ts +11 -0
  940. package/src/loader.rsc.ts +26 -157
  941. package/src/loader.ts +27 -10
  942. package/src/network-error-thrower.tsx +3 -1
  943. package/src/outlet-provider.tsx +45 -0
  944. package/src/prerender/param-hash.ts +37 -0
  945. package/src/prerender/store.ts +185 -0
  946. package/src/prerender.ts +463 -0
  947. package/src/reverse.ts +330 -0
  948. package/src/root-error-boundary.tsx +41 -29
  949. package/src/route-content-wrapper.tsx +7 -4
  950. package/src/route-definition/dsl-helpers.ts +934 -0
  951. package/src/route-definition/helper-factories.ts +200 -0
  952. package/src/route-definition/helpers-types.ts +430 -0
  953. package/src/route-definition/index.ts +52 -0
  954. package/src/route-definition/redirect.ts +93 -0
  955. package/src/route-definition.ts +1 -1428
  956. package/src/route-map-builder.ts +211 -123
  957. package/src/route-name.ts +53 -0
  958. package/src/route-types.ts +59 -8
  959. package/src/router/content-negotiation.ts +116 -0
  960. package/src/router/debug-manifest.ts +72 -0
  961. package/src/router/error-handling.ts +9 -9
  962. package/src/router/find-match.ts +158 -0
  963. package/src/router/handler-context.ts +374 -81
  964. package/src/router/intercept-resolution.ts +397 -0
  965. package/src/router/lazy-includes.ts +234 -0
  966. package/src/router/loader-resolution.ts +215 -122
  967. package/src/router/logging.ts +251 -0
  968. package/src/router/manifest.ts +148 -35
  969. package/src/router/match-api.ts +620 -0
  970. package/src/router/match-context.ts +5 -3
  971. package/src/router/match-handlers.ts +440 -0
  972. package/src/router/match-middleware/background-revalidation.ts +80 -93
  973. package/src/router/match-middleware/cache-lookup.ts +382 -9
  974. package/src/router/match-middleware/cache-store.ts +51 -22
  975. package/src/router/match-middleware/intercept-resolution.ts +55 -17
  976. package/src/router/match-middleware/segment-resolution.ts +25 -6
  977. package/src/router/match-pipelines.ts +10 -45
  978. package/src/router/match-result.ts +34 -28
  979. package/src/router/metrics.ts +235 -15
  980. package/src/router/middleware-cookies.ts +55 -0
  981. package/src/router/middleware-types.ts +222 -0
  982. package/src/router/middleware.ts +324 -367
  983. package/src/router/pattern-matching.ts +211 -43
  984. package/src/router/prerender-match.ts +402 -0
  985. package/src/router/preview-match.ts +170 -0
  986. package/src/router/revalidation.ts +137 -38
  987. package/src/router/router-context.ts +40 -21
  988. package/src/router/router-interfaces.ts +452 -0
  989. package/src/router/router-options.ts +592 -0
  990. package/src/router/router-registry.ts +24 -0
  991. package/src/router/segment-resolution/fresh.ts +570 -0
  992. package/src/router/segment-resolution/helpers.ts +263 -0
  993. package/src/router/segment-resolution/loader-cache.ts +198 -0
  994. package/src/router/segment-resolution/revalidation.ts +1242 -0
  995. package/src/router/segment-resolution/static-store.ts +67 -0
  996. package/src/router/segment-resolution.ts +21 -0
  997. package/src/router/segment-wrappers.ts +291 -0
  998. package/src/router/telemetry-otel.ts +299 -0
  999. package/src/router/telemetry.ts +300 -0
  1000. package/src/router/timeout.ts +148 -0
  1001. package/src/router/trie-matching.ts +239 -0
  1002. package/src/router/types.ts +77 -3
  1003. package/src/router.ts +692 -4257
  1004. package/src/rsc/handler-context.ts +45 -0
  1005. package/src/rsc/handler.ts +755 -754
  1006. package/src/rsc/helpers.ts +140 -6
  1007. package/src/rsc/index.ts +0 -20
  1008. package/src/rsc/loader-fetch.ts +209 -0
  1009. package/src/rsc/manifest-init.ts +86 -0
  1010. package/src/rsc/nonce.ts +14 -0
  1011. package/src/rsc/origin-guard.ts +141 -0
  1012. package/src/rsc/progressive-enhancement.ts +379 -0
  1013. package/src/rsc/response-error.ts +37 -0
  1014. package/src/rsc/response-route-handler.ts +347 -0
  1015. package/src/rsc/rsc-rendering.ts +237 -0
  1016. package/src/rsc/runtime-warnings.ts +42 -0
  1017. package/src/rsc/server-action.ts +348 -0
  1018. package/src/rsc/ssr-setup.ts +128 -0
  1019. package/src/rsc/types.ts +38 -11
  1020. package/src/search-params.ts +230 -0
  1021. package/src/segment-system.tsx +25 -13
  1022. package/src/server/context.ts +182 -51
  1023. package/src/server/cookie-store.ts +190 -0
  1024. package/src/server/fetchable-loader-store.ts +37 -0
  1025. package/src/server/handle-store.ts +94 -15
  1026. package/src/server/loader-registry.ts +15 -56
  1027. package/src/server/request-context.ts +430 -70
  1028. package/src/server.ts +35 -130
  1029. package/src/ssr/index.tsx +100 -31
  1030. package/src/static-handler.ts +114 -0
  1031. package/src/theme/ThemeProvider.tsx +21 -15
  1032. package/src/theme/ThemeScript.tsx +5 -5
  1033. package/src/theme/constants.ts +5 -2
  1034. package/src/theme/index.ts +4 -14
  1035. package/src/theme/theme-context.ts +4 -30
  1036. package/src/theme/theme-script.ts +21 -18
  1037. package/src/types/boundaries.ts +158 -0
  1038. package/src/types/cache-types.ts +198 -0
  1039. package/src/types/error-types.ts +192 -0
  1040. package/src/types/global-namespace.ts +100 -0
  1041. package/src/types/handler-context.ts +687 -0
  1042. package/src/types/index.ts +88 -0
  1043. package/src/types/loader-types.ts +183 -0
  1044. package/src/types/route-config.ts +170 -0
  1045. package/src/types/route-entry.ts +102 -0
  1046. package/src/types/segments.ts +148 -0
  1047. package/src/types.ts +1 -1623
  1048. package/src/urls/include-helper.ts +197 -0
  1049. package/src/urls/index.ts +53 -0
  1050. package/src/urls/path-helper-types.ts +339 -0
  1051. package/src/urls/path-helper.ts +329 -0
  1052. package/src/urls/pattern-types.ts +95 -0
  1053. package/src/urls/response-types.ts +106 -0
  1054. package/src/urls/type-extraction.ts +372 -0
  1055. package/src/urls/urls-function.ts +98 -0
  1056. package/src/urls.ts +1 -802
  1057. package/src/use-loader.tsx +85 -77
  1058. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  1059. package/src/vite/discovery/discover-routers.ts +344 -0
  1060. package/src/vite/discovery/prerender-collection.ts +385 -0
  1061. package/src/vite/discovery/route-types-writer.ts +258 -0
  1062. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1063. package/src/vite/discovery/state.ts +110 -0
  1064. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1065. package/src/vite/index.ts +11 -1076
  1066. package/src/vite/plugin-types.ts +131 -0
  1067. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1068. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1069. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1070. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -51
  1071. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1072. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1073. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1074. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1075. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1076. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1077. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  1078. package/src/vite/plugins/refresh-cmd.ts +65 -0
  1079. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1080. package/src/vite/plugins/version-injector.ts +83 -0
  1081. package/src/vite/plugins/version-plugin.ts +254 -0
  1082. package/src/vite/plugins/virtual-entries.ts +123 -0
  1083. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1084. package/src/vite/rango.ts +510 -0
  1085. package/src/vite/router-discovery.ts +785 -0
  1086. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1087. package/src/vite/utils/banner.ts +36 -0
  1088. package/src/vite/utils/bundle-analysis.ts +137 -0
  1089. package/src/vite/utils/manifest-utils.ts +70 -0
  1090. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1091. package/src/vite/utils/prerender-utils.ts +189 -0
  1092. package/src/vite/utils/shared-utils.ts +169 -0
  1093. package/CLAUDE.md +0 -43
  1094. package/src/browser/lru-cache.ts +0 -69
  1095. package/src/browser/request-controller.ts +0 -164
  1096. package/src/cache/memory-store.ts +0 -253
  1097. package/src/href.ts +0 -255
  1098. package/src/server/route-manifest-cache.ts +0 -173
  1099. package/src/vite/expose-handle-id.ts +0 -209
  1100. package/src/vite/expose-loader-id.ts +0 -426
  1101. package/src/vite/expose-location-state-id.ts +0 -177
  1102. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
package/src/vite/index.ts CHANGED
@@ -1,1081 +1,16 @@
1
- import type { Plugin, PluginOption } from "vite";
2
- import { createServer as createViteServer } from "vite";
3
- import * as Vite from "vite";
4
- import { resolve, join } from "node:path";
5
- import { createHash } from "node:crypto";
6
- import { mkdirSync, writeFileSync, readFileSync, existsSync } from "node:fs";
7
- import { exposeActionId } from "./expose-action-id.ts";
8
- import { exposeLoaderId } from "./expose-loader-id.ts";
9
- import { exposeHandleId } from "./expose-handle-id.ts";
10
- import { exposeLocationStateId } from "./expose-location-state-id.ts";
11
- import {
12
- VIRTUAL_ENTRY_BROWSER,
13
- VIRTUAL_ENTRY_SSR,
14
- getVirtualEntryRSC,
15
- getVirtualVersionContent,
16
- VIRTUAL_IDS,
17
- } from "./virtual-entries.ts";
18
- import {
19
- getExcludeDeps,
20
- getPackageAliases,
21
- getPublishedPackageName,
22
- isWorkspaceDevelopment,
23
- } from "./package-resolution.ts";
24
-
25
- // Re-export plugins
26
- export { exposeActionId } from "./expose-action-id.ts";
27
- export { exposeLoaderId } from "./expose-loader-id.ts";
28
- export { exposeHandleId } from "./expose-handle-id.ts";
29
- export { exposeLocationStateId } from "./expose-location-state-id.ts";
30
-
31
- // Virtual module type declarations in ./version.d.ts
32
-
33
- /**
34
- * esbuild plugin to provide rsc-router:version virtual module during optimization.
35
- * This is needed because esbuild runs during Vite's dependency optimization phase,
36
- * before Vite's plugin system can handle virtual modules.
37
- */
38
- const versionEsbuildPlugin = {
39
- name: "@rangojs/router-version",
40
- setup(build: any) {
41
- build.onResolve({ filter: /^rsc-router:version$/ }, (args: any) => ({
42
- path: args.path,
43
- namespace: "@rangojs/router-virtual",
44
- }));
45
- build.onLoad({ filter: /.*/, namespace: "@rangojs/router-virtual" }, () => ({
46
- contents: `export const VERSION = "dev";`,
47
- loader: "js",
48
- }));
49
- },
50
- };
51
-
52
- /**
53
- * Shared esbuild options for dependency optimization.
54
- * Includes the version stub plugin for all environments.
55
- */
56
- const sharedEsbuildOptions = {
57
- plugins: [versionEsbuildPlugin],
58
- };
59
-
60
- /**
61
- * RSC plugin entry points configuration.
62
- * All entries use virtual modules by default. Specify a path to use a custom entry file.
63
- */
64
- export interface RscEntries {
65
- /**
66
- * Path to a custom browser/client entry file.
67
- * If not specified, a default virtual entry is used.
68
- */
69
- client?: string;
70
-
71
- /**
72
- * Path to a custom SSR entry file.
73
- * If not specified, a default virtual entry is used.
74
- */
75
- ssr?: string;
76
-
77
- /**
78
- * Path to a custom RSC entry file.
79
- * If not specified, a default virtual entry is used that imports the router from the `entry` option.
80
- */
81
- rsc?: string;
82
- }
83
-
84
- /**
85
- * Options for @vitejs/plugin-rsc integration
86
- */
87
- export interface RscPluginOptions {
88
- /**
89
- * Entry points for client, ssr, and rsc environments.
90
- * All entries use virtual modules by default.
91
- * Specify paths only when you need custom entry files.
92
- */
93
- entries?: RscEntries;
94
- }
95
-
96
- /**
97
- * Base options shared by all presets
98
- */
99
- interface RscRouterBaseOptions {
100
- /**
101
- * Expose $$id property on server action functions.
102
- * Required for action-based revalidation to work.
103
- * @default true
104
- */
105
- exposeActionId?: boolean;
106
- }
107
-
108
- /**
109
- * Options for Node.js deployment (default)
110
- */
111
- export interface RscRouterNodeOptions extends RscRouterBaseOptions {
112
- /**
113
- * Deployment preset. Defaults to 'node' when not specified.
114
- */
115
- preset?: "node";
116
-
117
- /**
118
- * Path to your router configuration file that exports the route tree.
119
- * This file must export a `router` object created with `createRouter()`.
120
- *
121
- * @example
122
- * ```ts
123
- * rscRouter({ router: './src/router.tsx' })
124
- * ```
125
- */
126
- router: string;
127
-
128
- /**
129
- * RSC plugin configuration. By default, rsc-router includes @vitejs/plugin-rsc
130
- * with sensible defaults.
131
- *
132
- * Entry files (browser, ssr, rsc) are optional - if they don't exist,
133
- * virtual defaults are used.
134
- *
135
- * - Omit or pass `true`/`{}` to use defaults (recommended)
136
- * - Pass `{ entries: {...} }` to customize entry paths
137
- * - Pass `false` to disable (for manual @vitejs/plugin-rsc configuration)
138
- *
139
- * @default true
140
- */
141
- rsc?: boolean | RscPluginOptions;
142
- }
143
-
144
- /**
145
- * Options for Cloudflare Workers deployment
146
- */
147
- export interface RscRouterCloudflareOptions extends RscRouterBaseOptions {
148
- /**
149
- * Deployment preset for Cloudflare Workers.
150
- * When using cloudflare preset:
151
- * - @vitejs/plugin-rsc is NOT added (cloudflare plugin adds it)
152
- * - Your worker entry (e.g., worker.rsc.tsx) imports the router directly
153
- * - Browser and SSR use virtual entries
154
- * - Build-time manifest generation is auto-detected from wrangler.json main entry
155
- */
156
- preset: "cloudflare";
157
- }
158
-
159
- /**
160
- * Options for rscRouter plugin
161
- */
162
- export type RscRouterOptions = RscRouterNodeOptions | RscRouterCloudflareOptions;
163
-
164
- /**
165
- * Create a virtual modules plugin for default entry files.
166
- * Provides virtual module content when entries use VIRTUAL_IDS (no custom entry configured).
167
- */
168
- function createVirtualEntriesPlugin(
169
- entries: { client: string; ssr: string; rsc?: string },
170
- routerPath?: string
171
- ): Plugin {
172
-
173
- // Build virtual modules map based on which entries use virtual IDs
174
- const virtualModules: Record<string, string> = {};
175
-
176
- if (entries.client === VIRTUAL_IDS.browser) {
177
- virtualModules[VIRTUAL_IDS.browser] = VIRTUAL_ENTRY_BROWSER;
178
- }
179
- if (entries.ssr === VIRTUAL_IDS.ssr) {
180
- virtualModules[VIRTUAL_IDS.ssr] = VIRTUAL_ENTRY_SSR;
181
- }
182
- if (entries.rsc === VIRTUAL_IDS.rsc && routerPath) {
183
- // Convert relative path to absolute for virtual module imports
184
- const absoluteRouterPath = routerPath.startsWith(".")
185
- ? "/" + routerPath.slice(2) // ./src/router.tsx -> /src/router.tsx
186
- : routerPath;
187
- virtualModules[VIRTUAL_IDS.rsc] = getVirtualEntryRSC(absoluteRouterPath);
188
- }
189
-
190
- return {
191
- name: "@rangojs/router:virtual-entries",
192
- enforce: "pre",
193
-
194
- resolveId(id) {
195
- if (id in virtualModules) {
196
- return "\0" + id;
197
- }
198
- // Handle if the id already has the null prefix (RSC plugin wrapper imports)
199
- if (id.startsWith("\0") && id.slice(1) in virtualModules) {
200
- return id;
201
- }
202
- return null;
203
- },
204
-
205
- load(id) {
206
- if (id.startsWith("\0virtual:rsc-router/")) {
207
- const virtualId = id.slice(1);
208
- if (virtualId in virtualModules) {
209
- return virtualModules[virtualId];
210
- }
211
- }
212
- return null;
213
- },
214
- };
215
- }
216
-
217
- /**
218
- * Manual chunks configuration for client build.
219
- * Splits React and router packages into separate chunks for better caching.
220
- */
221
- function getManualChunks(id: string): string | undefined {
222
- const normalized = Vite.normalizePath(id);
223
-
224
- if (
225
- normalized.includes("node_modules/react/") ||
226
- normalized.includes("node_modules/react-dom/") ||
227
- normalized.includes("node_modules/react-server-dom-webpack/") ||
228
- normalized.includes("node_modules/@vitejs/plugin-rsc/")
229
- ) {
230
- return "react";
231
- }
232
- // Use dynamic package name from package.json
233
- // Check both npm install path and workspace symlink resolved path
234
- const packageName = getPublishedPackageName();
235
- if (
236
- normalized.includes(`node_modules/${packageName}/`) ||
237
- normalized.includes("packages/rsc-router/") ||
238
- normalized.includes("packages/rangojs-router/")
239
- ) {
240
- return "router";
241
- }
242
- return undefined;
243
- }
244
-
245
- /**
246
- * Plugin providing rsc-router:version virtual module.
247
- * Exports VERSION that changes when RSC modules change (dev) or at build time (production).
248
- *
249
- * The version is used for:
250
- * 1. Cache invalidation - CFCacheStore uses VERSION to invalidate stale cache
251
- * 2. Version mismatch detection - client sends version, server reloads on mismatch
252
- *
253
- * In dev mode, the version updates when:
254
- * - Server starts (initial version)
255
- * - RSC modules change via HMR (triggers version module invalidation)
256
- *
257
- * Client-only HMR changes don't update the version since they don't affect
258
- * server-rendered content or cached RSC payloads.
259
- * @internal
260
- */
261
- function createVersionPlugin(): Plugin {
262
- // Generate version at plugin creation time (build/server start)
263
- const buildVersion = Date.now().toString(16);
264
- let currentVersion = buildVersion;
265
- let isDev = false;
266
- let server: any = null;
267
-
268
- return {
269
- name: "@rangojs/router:version",
270
- enforce: "pre",
271
-
272
- configResolved(config) {
273
- isDev = config.command === "serve";
274
- },
275
-
276
- configureServer(devServer) {
277
- server = devServer;
278
- },
279
-
280
- resolveId(id) {
281
- if (id === VIRTUAL_IDS.version) {
282
- return "\0" + id;
283
- }
284
- return null;
285
- },
286
-
287
- load(id) {
288
- if (id === "\0" + VIRTUAL_IDS.version) {
289
- return getVirtualVersionContent(currentVersion);
290
- }
291
- return null;
292
- },
293
-
294
- // Track RSC module changes and update version
295
- hotUpdate(ctx) {
296
- if (!isDev) return;
297
-
298
- // Check if this is an RSC environment update (not client/ssr)
299
- // RSC modules affect server-rendered content and cached payloads
300
- // In Vite 6, environment is accessed via `this.environment`
301
- const isRscModule = this.environment?.name === "rsc";
302
-
303
- if (isRscModule && ctx.modules.length > 0) {
304
- // Update version when RSC modules change
305
- currentVersion = Date.now().toString(16);
306
- console.log(
307
- `[rsc-router] RSC module changed, version updated: ${currentVersion}`
308
- );
309
-
310
- // Invalidate the version module so it gets reloaded with new version
311
- if (server) {
312
- const rscEnv = server.environments?.rsc;
313
- if (rscEnv?.moduleGraph) {
314
- const versionMod = rscEnv.moduleGraph.getModuleById(
315
- "\0" + VIRTUAL_IDS.version
316
- );
317
- if (versionMod) {
318
- rscEnv.moduleGraph.invalidateModule(versionMod);
319
- }
320
- }
321
- }
322
- }
323
- },
324
- };
325
- }
326
-
327
- /**
328
- * Plugin that discovers router instances at dev/build time via the RSC environment.
329
- *
330
- * Uses `server.environments.rsc.runner.import()` to load the user's router file
331
- * with full TS/TSX compilation. This triggers `createRouter()` which populates
332
- * the `RouterRegistry`. The plugin then generates manifests for each router.
333
- *
334
- * In dev mode, this runs in `configureServer` (post-middleware setup).
335
- * In build mode, this will run in `buildStart` (future).
336
- *
337
- * @internal
338
- */
339
- function createRouterDiscoveryPlugin(entryPath: string): Plugin {
340
- let projectRoot = "";
341
- let isBuildMode = false;
342
- let userResolveAlias: any = undefined;
343
-
344
- // Merged route manifest from all discovered routers.
345
- // Populated during discovery (dev: configureServer, build: buildStart).
346
- // Read by the virtual module's load hook to emit setCachedManifest() call.
347
- let mergedRouteManifest: Record<string, string> | null = null;
348
-
349
- // Shared discovery logic: import entry via RSC runner, generate manifests,
350
- // write static files, and populate mergedRouteManifest.
351
- async function discoverRouters(rscEnv: any) {
352
- // Import the entry file via RSC environment.
353
- // For node preset: this is the router file (createRouter() registers in RouterRegistry).
354
- // For cloudflare preset: this is the worker entry (which imports the router).
355
- await rscEnv.runner.import(entryPath);
356
-
357
- // Import the router package to access the registry
358
- const serverMod = await rscEnv.runner.import("@rangojs/router/server");
359
- const registry: Map<string, any> = serverMod.RouterRegistry;
360
-
361
- if (!registry || registry.size === 0) {
362
- console.warn(
363
- "[rsc-router] No routers found in registry after importing",
364
- entryPath
365
- );
366
- return serverMod;
367
- }
368
-
369
- // Import build utilities for manifest generation
370
- const buildMod = await rscEnv.runner.import("@rangojs/router/build");
371
- const generateManifest = buildMod.generateManifest;
372
-
373
- mergedRouteManifest = {};
374
-
375
- for (const [id, router] of registry) {
376
- if (!router.urlpatterns || !generateManifest) {
377
- continue;
378
- }
379
-
380
- const manifest = generateManifest(router.urlpatterns);
381
- const routeCount = Object.keys(manifest.routeManifest).length;
382
- const staticRoutes = Object.values(manifest.routeManifest).filter(
383
- (p: any) => !p.includes(":") && !p.includes("*")
384
- ).length;
385
- const dynamicRoutes = routeCount - staticRoutes;
386
-
387
- // Merge into the combined manifest
388
- Object.assign(mergedRouteManifest, manifest.routeManifest);
389
-
390
- // Write static files for this router
391
- const hash = hashRouterId(id);
392
- const outDir = join(projectRoot, "dist", "static", `__${hash}`);
393
- mkdirSync(outDir, { recursive: true });
394
-
395
- writeFileSync(
396
- join(outDir, "routes.json"),
397
- JSON.stringify(manifest.routeManifest, null, 2) + "\n"
398
- );
399
-
400
- writeFileSync(
401
- join(outDir, "prefixes.json"),
402
- JSON.stringify(manifest.prefixTree, null, 2) + "\n"
403
- );
404
-
405
- console.log(
406
- `[rsc-router] Router "${id}" -> ${routeCount} routes ` +
407
- `(${staticRoutes} static, ${dynamicRoutes} dynamic) ` +
408
- `-> dist/static/__${hash}/`
409
- );
410
- }
411
-
412
- return serverMod;
413
- }
414
-
415
- return {
416
- name: "@rangojs/router:discovery",
417
-
418
- configResolved(config) {
419
- projectRoot = config.root;
420
- isBuildMode = config.command === "build";
421
- // Capture user's resolve aliases for the temp server
422
- userResolveAlias = config.resolve.alias;
423
- },
424
-
425
- // Dev mode: discover routers and populate manifest in memory.
426
- // Skipped in build mode (buildStart handles it).
427
- configureServer(server) {
428
- if (isBuildMode) return;
429
- // Skip if this is a temp server created by buildStart
430
- if ((globalThis as any).__rscRouterDiscoveryActive) return;
431
- const discover = async () => {
432
- const rscEnv = (server.environments as any)?.rsc;
433
- if (!rscEnv?.runner) {
434
- return;
435
- }
436
-
437
- try {
438
- const serverMod = await discoverRouters(rscEnv);
439
-
440
- // In dev mode, also populate the route map in the RSC env
441
- // so href() works immediately without first-request penalty
442
- if (mergedRouteManifest && serverMod?.setCachedManifest) {
443
- serverMod.setCachedManifest(mergedRouteManifest);
444
- }
445
- } catch (err: any) {
446
- console.warn(
447
- `[rsc-router] Router discovery failed: ${err.message}`
448
- );
449
- }
450
- };
451
-
452
- // Schedule after all plugins have finished configureServer
453
- setTimeout(discover, 0);
454
- },
455
-
456
- // Build mode: create a temporary Vite dev server to access the RSC
457
- // environment's module runner, then discover routers and generate manifests.
458
- // The manifest data is stored for the virtual module's load hook.
459
- async buildStart() {
460
- if (!isBuildMode) return;
461
- // Only run once across environment builds
462
- if (mergedRouteManifest !== null) return;
463
-
464
- let tempServer: any = null;
465
- try {
466
- // Prevent the temp server's plugin instances from running discovery
467
- (globalThis as any).__rscRouterDiscoveryActive = true;
468
-
469
- // Create a minimal Vite server with just the RSC plugin.
470
- // We bypass the user's config file because:
471
- // - Custom environments (e.g., CloudflareDevEnvironment) may not expose
472
- // a module runner compatible with runner.import()
473
- // - The temp server only needs RSC conditions to import the router
474
- const { default: rsc } = await import("@vitejs/plugin-rsc");
475
- tempServer = await createViteServer({
476
- root: projectRoot,
477
- configFile: false,
478
- server: { middlewareMode: true },
479
- appType: "custom",
480
- logLevel: "silent",
481
- // Use the resolved aliases from the real config (includes user's path aliases
482
- // like @/ -> src/ AND package aliases from rsc-router)
483
- resolve: { alias: userResolveAlias },
484
- plugins: [
485
- rsc({ entries: { client: "virtual:entry-client", ssr: "virtual:entry-ssr", rsc: entryPath } }),
486
- createVersionPlugin(),
487
- // Stub virtual modules that the RSC entry may import
488
- // (e.g., virtual:rsc-router/routes-manifest, virtual:rsc-router/loader-manifest)
489
- createVirtualStubPlugin(),
490
- ],
491
- });
492
-
493
- const rscEnv = (tempServer.environments as any)?.rsc;
494
- if (!rscEnv?.runner) {
495
- console.warn(
496
- "[rsc-router] RSC environment runner not available during build, skipping manifest generation"
497
- );
498
- return;
499
- }
500
-
501
- await discoverRouters(rscEnv);
502
- } catch (err: any) {
503
- console.warn(
504
- `[rsc-router] Build-time router discovery failed: ${err.message}`
505
- );
506
- } finally {
507
- delete (globalThis as any).__rscRouterDiscoveryActive;
508
- if (tempServer) {
509
- await tempServer.close();
510
- }
511
- }
512
- },
513
-
514
- // Virtual module: provides the pre-generated route manifest as a JS module
515
- // that calls setCachedManifest() at import time.
516
- resolveId(id) {
517
- if (id === VIRTUAL_ROUTES_MANIFEST_ID) {
518
- return "\0" + VIRTUAL_ROUTES_MANIFEST_ID;
519
- }
520
- return null;
521
- },
522
-
523
- load(id) {
524
- if (id === "\0" + VIRTUAL_ROUTES_MANIFEST_ID) {
525
- const hasManifest = mergedRouteManifest && Object.keys(mergedRouteManifest).length > 0;
526
- if (hasManifest) {
527
- return [
528
- `import { setCachedManifest } from "@rangojs/router/server";`,
529
- `setCachedManifest(${JSON.stringify(mergedRouteManifest)});`,
530
- ].join("\n");
531
- }
532
- // No manifest available yet (dev mode: discovery hasn't completed)
533
- return `// Route manifest will be populated at runtime`;
534
- }
535
- return null;
536
- },
537
- };
538
- }
539
-
540
- const VIRTUAL_ROUTES_MANIFEST_ID = "virtual:rsc-router/routes-manifest";
541
-
542
1
  /**
543
- * Resolve the entry path for build-time router discovery.
544
- * - Node preset: uses the required `router` option.
545
- * - Cloudflare preset: reads the `main` field from wrangler.json.
546
- */
547
- function resolveDiscoveryEntryPath(options: RscRouterOptions): string | undefined {
548
- if (options.preset === "cloudflare") {
549
- // Auto-detect from wrangler.json
550
- const wranglerPaths = ["wrangler.json", "wrangler.jsonc"];
551
- for (const filename of wranglerPaths) {
552
- if (existsSync(filename)) {
553
- try {
554
- const raw = readFileSync(filename, "utf-8");
555
- // Strip JSON comments for .jsonc
556
- const cleaned = raw.replace(/\/\/.*$/gm, "").replace(/\/\*[\s\S]*?\*\//g, "");
557
- const config = JSON.parse(cleaned);
558
- if (config.main) {
559
- return config.main;
560
- }
561
- } catch {
562
- // Ignore parse errors
563
- }
564
- }
565
- }
566
- return undefined;
567
- }
568
- // Node preset: router is required
569
- return (options as RscRouterNodeOptions).router;
570
- }
571
-
572
- /**
573
- * Stub plugin for virtual modules in the temp discovery server.
574
- * The RSC entry may import virtual modules (routes-manifest, loader-manifest)
575
- * that aren't available in the temp server. The RSC plugin also requires
576
- * client/ssr entries which don't need real content for discovery.
577
- */
578
- function createVirtualStubPlugin(): Plugin {
579
- const STUB_PREFIXES = [
580
- "virtual:rsc-router/",
581
- "virtual:entry-",
582
- "virtual:vite-rsc/",
583
- ];
584
- return {
585
- name: "@rangojs/router:virtual-stubs",
586
- resolveId(id) {
587
- if (STUB_PREFIXES.some((p) => id.startsWith(p))) {
588
- return "\0stub:" + id;
589
- }
590
- return null;
591
- },
592
- load(id) {
593
- if (id.startsWith("\0stub:")) {
594
- return "export default {}";
595
- }
596
- return null;
597
- },
598
- };
599
- }
600
-
601
- /**
602
- * Generate a deterministic 12-char hex hash from a router id.
603
- * Used to create collision-free directory names for per-router static output.
604
- */
605
- function hashRouterId(id: string): string {
606
- return createHash("sha256").update(id).digest("hex").slice(0, 12);
607
- }
608
-
609
- /**
610
- * Plugin that auto-injects VERSION into custom entry.rsc files.
611
- * If a custom entry.rsc file uses createRSCHandler but doesn't pass version,
612
- * this transform adds the import and property automatically.
613
- * @internal
614
- */
615
- function createVersionInjectorPlugin(rscEntryPath: string): Plugin {
616
- let projectRoot = "";
617
- let resolvedEntryPath = "";
618
-
619
- return {
620
- name: "@rangojs/router:version-injector",
621
- enforce: "pre",
622
-
623
- configResolved(config) {
624
- projectRoot = config.root;
625
- resolvedEntryPath = resolve(projectRoot, rscEntryPath);
626
- },
627
-
628
- transform(code, id) {
629
- // Only transform the RSC entry file
630
- const normalizedId = Vite.normalizePath(id);
631
- const normalizedEntry = Vite.normalizePath(resolvedEntryPath);
632
-
633
- if (normalizedId !== normalizedEntry) {
634
- return null;
635
- }
636
-
637
- // Check if file uses createRSCHandler
638
- if (!code.includes("createRSCHandler")) {
639
- return null;
640
- }
641
-
642
- // Check if VERSION is already imported
643
- if (code.includes("@rangojs/router:version")) {
644
- return null;
645
- }
646
-
647
- // Check if version property is already being passed
648
- // Look for version: in the createRSCHandler call
649
- const handlerCallMatch = code.match(/createRSCHandler\s*\(\s*\{/);
650
- if (!handlerCallMatch) {
651
- return null;
652
- }
653
-
654
- // Add VERSION import after the last import statement
655
- const lastImportIndex = code.lastIndexOf("import ");
656
- if (lastImportIndex === -1) {
657
- return null;
658
- }
659
-
660
- // Find the end of the last import statement
661
- const afterLastImport = code.indexOf("\n", lastImportIndex);
662
- if (afterLastImport === -1) {
663
- return null;
664
- }
665
-
666
- // Find next line that's not an import continuation
667
- let insertIndex = afterLastImport + 1;
668
- while (
669
- insertIndex < code.length &&
670
- (code.slice(insertIndex).match(/^\s*(from|import)\s/) ||
671
- code[insertIndex] === "\n")
672
- ) {
673
- const nextNewline = code.indexOf("\n", insertIndex);
674
- if (nextNewline === -1) break;
675
- insertIndex = nextNewline + 1;
676
- }
677
-
678
- // Insert VERSION import
679
- const versionImport = `import { VERSION } from "@rangojs/router:version";\n`;
680
- let newCode = code.slice(0, insertIndex) + versionImport + code.slice(insertIndex);
681
-
682
- // Add version: VERSION to createRSCHandler call
683
- // Find createRSCHandler({ and add version: VERSION right after the opening brace
684
- newCode = newCode.replace(
685
- /createRSCHandler\s*\(\s*\{/,
686
- "createRSCHandler({\n version: VERSION,"
687
- );
688
-
689
- return {
690
- code: newCode,
691
- map: null,
692
- };
693
- },
694
- };
695
- }
696
-
697
- /**
698
- * Vite plugin for rsc-router.
699
- *
700
- * Includes @vitejs/plugin-rsc and all necessary transforms for the router
701
- * to function correctly with React Server Components.
2
+ * Public API for @rangojs/router/vite
702
3
  *
703
- * @example Node.js (default)
704
- * ```ts
705
- * export default defineConfig({
706
- * plugins: [react(), rscRouter({ router: './src/router.tsx' })],
707
- * });
708
- * ```
709
- *
710
- * @example Cloudflare Workers
711
- * ```ts
712
- * export default defineConfig({
713
- * plugins: [
714
- * react(),
715
- * rscRouter({ preset: 'cloudflare' }),
716
- * cloudflare({ viteEnvironment: { name: 'rsc' } }),
717
- * ],
718
- * });
719
- * ```
720
- */
721
- export async function rscRouter(
722
- options: RscRouterOptions
723
- ): Promise<PluginOption[]> {
724
- const preset = options.preset ?? "node";
725
- const enableExposeActionId = options.exposeActionId ?? true;
726
-
727
- const plugins: PluginOption[] = [];
728
-
729
- // Get package resolution info (workspace vs npm install)
730
- const rscRouterAliases = getPackageAliases();
731
- const excludeDeps = getExcludeDeps();
732
-
733
- // Track RSC entry path for version injection
734
- let rscEntryPath: string | null = null;
735
-
736
- if (preset === "cloudflare") {
737
- // Cloudflare preset: configure entries for cloudflare worker setup
738
- // Router is not needed here - worker.rsc.tsx imports it directly
739
-
740
- // Dynamically import @vitejs/plugin-rsc
741
- const { default: rsc } = await import("@vitejs/plugin-rsc");
742
-
743
- // Only client and ssr entries - rsc entry is handled by cloudflare plugin
744
- // Always use virtual modules for cloudflare preset
745
- const finalEntries: { client: string; ssr: string } = {
746
- client: VIRTUAL_IDS.browser,
747
- ssr: VIRTUAL_IDS.ssr,
748
- };
749
-
750
- plugins.push({
751
- name: "@rangojs/router:cloudflare-integration",
752
- enforce: "pre",
753
- config() {
754
- // Configure environments for cloudflare deployment
755
- return {
756
- // Exclude rsc-router modules from optimization to prevent module duplication
757
- // This ensures the same Context instance is used by both browser entry and RSC proxy modules
758
- optimizeDeps: {
759
- exclude: excludeDeps,
760
- esbuildOptions: sharedEsbuildOptions,
761
- },
762
- resolve: {
763
- alias: rscRouterAliases,
764
- },
765
- environments: {
766
- client: {
767
- build: {
768
- rollupOptions: {
769
- output: {
770
- manualChunks: getManualChunks,
771
- },
772
- },
773
- },
774
- // Pre-bundle rsc-html-stream to prevent discovery during first request
775
- // Exclude rsc-router modules to ensure same Context instance
776
- optimizeDeps: {
777
- include: ["rsc-html-stream/client"],
778
- exclude: excludeDeps,
779
- esbuildOptions: sharedEsbuildOptions,
780
- },
781
- },
782
- ssr: {
783
- // Build SSR inside RSC directory so wrangler can deploy self-contained dist/rsc
784
- build: {
785
- outDir: "./dist/rsc/ssr",
786
- },
787
- resolve: {
788
- // Ensure single React instance in SSR child environment
789
- dedupe: ["react", "react-dom"],
790
- },
791
- // Pre-bundle SSR entry and React for proper module linking with childEnvironments
792
- // Exclude rsc-router modules to ensure same Context instance
793
- optimizeDeps: {
794
- entries: [finalEntries.ssr],
795
- include: [
796
- "react",
797
- "react-dom/server.edge",
798
- "react/jsx-runtime",
799
- "rsc-html-stream/server",
800
- ],
801
- exclude: excludeDeps,
802
- esbuildOptions: sharedEsbuildOptions,
803
- },
804
- },
805
- rsc: {
806
- // RSC environment needs exclude list and esbuild options
807
- // Exclude rsc-router modules to prevent createContext in RSC environment
808
- optimizeDeps: {
809
- exclude: excludeDeps,
810
- esbuildOptions: sharedEsbuildOptions,
811
- },
812
- },
813
- },
814
- };
815
- },
816
- });
817
-
818
- plugins.push(createVirtualEntriesPlugin(finalEntries));
819
-
820
- // Add RSC plugin with cloudflare-specific options
821
- // Note: loadModuleDevProxy should NOT be used with childEnvironments
822
- // since SSR runs in workerd alongside RSC
823
- plugins.push(
824
- rsc({
825
- get entries() {
826
- return finalEntries;
827
- },
828
- serverHandler: false,
829
- }) as PluginOption
830
- );
831
- } else {
832
- // Node preset: full RSC plugin integration
833
- const nodeOptions = options as RscRouterNodeOptions;
834
- const routerPath = nodeOptions.router;
835
- const rscOption = nodeOptions.rsc ?? true;
836
-
837
- // Add RSC plugin by default (can be disabled with rsc: false)
838
- if (rscOption !== false) {
839
- // Dynamically import @vitejs/plugin-rsc
840
- const { default: rsc } = await import("@vitejs/plugin-rsc");
841
-
842
- // Resolve entry paths: use explicit config or virtual modules
843
- const userEntries =
844
- typeof rscOption === "boolean" ? {} : rscOption.entries || {};
845
- const finalEntries = {
846
- client: userEntries.client ?? VIRTUAL_IDS.browser,
847
- ssr: userEntries.ssr ?? VIRTUAL_IDS.ssr,
848
- rsc: userEntries.rsc ?? VIRTUAL_IDS.rsc,
849
- };
850
-
851
- // Track RSC entry for version injection (only if custom entry provided)
852
- rscEntryPath = userEntries.rsc ?? null;
853
-
854
- // Create wrapper plugin that checks for duplicates
855
- let hasWarnedDuplicate = false;
856
-
857
- plugins.push({
858
- name: "@rangojs/router:rsc-integration",
859
- enforce: "pre",
860
-
861
- config() {
862
- // Configure environments for RSC
863
- // When using virtual entries, we need to explicitly configure optimizeDeps
864
- // so Vite pre-bundles React before processing the virtual modules.
865
- // Without this, the dep optimizer may run multiple times with different hashes,
866
- // causing React instance mismatches.
867
- const useVirtualClient = finalEntries.client === VIRTUAL_IDS.browser;
868
- const useVirtualSSR = finalEntries.ssr === VIRTUAL_IDS.ssr;
869
- const useVirtualRSC = finalEntries.rsc === VIRTUAL_IDS.rsc;
870
-
871
- return {
872
- // Exclude rsc-router modules from optimization to prevent module duplication
873
- // This ensures the same Context instance is used by both browser entry and RSC proxy modules
874
- optimizeDeps: {
875
- exclude: excludeDeps,
876
- esbuildOptions: sharedEsbuildOptions,
877
- },
878
- resolve: {
879
- alias: rscRouterAliases,
880
- },
881
- environments: {
882
- client: {
883
- build: {
884
- rollupOptions: {
885
- output: {
886
- manualChunks: getManualChunks,
887
- },
888
- },
889
- },
890
- // Always exclude rsc-router modules, conditionally add virtual entry
891
- optimizeDeps: {
892
- exclude: excludeDeps,
893
- esbuildOptions: sharedEsbuildOptions,
894
- ...(useVirtualClient && {
895
- // Tell Vite to scan the virtual entry for dependencies
896
- entries: [VIRTUAL_IDS.browser],
897
- }),
898
- },
899
- },
900
- ...(useVirtualSSR && {
901
- ssr: {
902
- optimizeDeps: {
903
- entries: [VIRTUAL_IDS.ssr],
904
- // Pre-bundle React for SSR to ensure single instance
905
- include: ["react", "react-dom/server.edge", "react/jsx-runtime"],
906
- exclude: excludeDeps,
907
- esbuildOptions: sharedEsbuildOptions,
908
- },
909
- },
910
- }),
911
- ...(useVirtualRSC && {
912
- rsc: {
913
- optimizeDeps: {
914
- entries: [VIRTUAL_IDS.rsc],
915
- // Pre-bundle React for RSC to ensure single instance
916
- include: ["react", "react/jsx-runtime"],
917
- esbuildOptions: sharedEsbuildOptions,
918
- },
919
- },
920
- }),
921
- },
922
- };
923
- },
924
-
925
- configResolved(config) {
926
- // Count how many RSC base plugins there are (rsc:minimal is the main one)
927
- const rscMinimalCount = config.plugins.filter(
928
- (p) => p.name === "rsc:minimal"
929
- ).length;
930
-
931
- if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
932
- hasWarnedDuplicate = true;
933
- console.warn(
934
- "[rsc-router] Duplicate @vitejs/plugin-rsc detected. " +
935
- "Remove rsc() from your config or use rscRouter({ rsc: false }) for manual configuration."
936
- );
937
- }
938
- },
939
- });
940
-
941
- // Add virtual entries plugin
942
- plugins.push(createVirtualEntriesPlugin(finalEntries, routerPath));
943
-
944
- // Add the RSC plugin directly
945
- // Cast to PluginOption to handle type differences between bundled vite types
946
- plugins.push(
947
- rsc({
948
- entries: finalEntries,
949
- }) as PluginOption
950
- );
951
- }
952
- }
953
-
954
- if (enableExposeActionId) {
955
- plugins.push(exposeActionId());
956
- }
957
-
958
- // Always add exposeLoaderId for GET-based loader fetching with useFetchLoader
959
- plugins.push(exposeLoaderId());
960
-
961
- // Always add exposeHandleId for auto-generated handle IDs
962
- plugins.push(exposeHandleId());
963
-
964
- // Always add exposeLocationStateId for auto-generated location state keys
965
- plugins.push(exposeLocationStateId());
966
-
967
- // Add version virtual module plugin for cache invalidation
968
- plugins.push(createVersionPlugin());
969
-
970
- // Add version injector for custom entry.rsc files
971
- if (rscEntryPath) {
972
- plugins.push(createVersionInjectorPlugin(rscEntryPath));
973
- }
974
-
975
- // Transform CJS vendor files to ESM for browser compatibility
976
- // optimizeDeps.include doesn't work because the file is loaded after initial optimization
977
- plugins.push(createCjsToEsmPlugin());
978
-
979
- // Add router discovery plugin for build-time manifest generation.
980
- // Node preset: uses the required router path.
981
- // Cloudflare preset: auto-detects RSC entry from wrangler.json main field.
982
- const discoveryEntryPath = resolveDiscoveryEntryPath(options);
983
- if (discoveryEntryPath) {
984
- plugins.push(createRouterDiscoveryPlugin(discoveryEntryPath));
985
- }
986
-
987
- return plugins;
988
- }
989
-
990
- /**
991
- * Transform CJS vendor files from @vitejs/plugin-rsc to ESM for browser compatibility.
992
- * The react-server-dom vendor files are shipped as CJS which doesn't work in browsers.
4
+ * Exports: rango() plugin factory, poke() dev utility plugin,
5
+ * and related option types. All other utilities are internal implementation
6
+ * details consumed via direct imports within the package.
993
7
  */
994
- function createCjsToEsmPlugin(): Plugin {
995
- return {
996
- name: "@rangojs/router:cjs-to-esm",
997
- enforce: "pre",
998
- transform(code, id) {
999
- const cleanId = id.split("?")[0];
1000
-
1001
- // Transform the client.browser.js entry point to re-export from CJS
1002
- if (
1003
- cleanId.includes("vendor/react-server-dom/client.browser.js") ||
1004
- cleanId.includes("vendor\\react-server-dom\\client.browser.js")
1005
- ) {
1006
- const isProd = process.env.NODE_ENV === "production";
1007
- const cjsFile = isProd
1008
- ? "./cjs/react-server-dom-webpack-client.browser.production.js"
1009
- : "./cjs/react-server-dom-webpack-client.browser.development.js";
1010
-
1011
- return {
1012
- code: `export * from "${cjsFile}";`,
1013
- map: null,
1014
- };
1015
- }
1016
-
1017
- // Transform the actual CJS files to ESM
1018
- if (
1019
- (cleanId.includes("vendor/react-server-dom/cjs/") ||
1020
- cleanId.includes("vendor\\react-server-dom\\cjs\\")) &&
1021
- cleanId.includes("client.browser")
1022
- ) {
1023
- let transformed = code;
1024
-
1025
- // Extract the license comment to preserve it
1026
- const licenseMatch = transformed.match(/^\/\*\*[\s\S]*?\*\//);
1027
- const license = licenseMatch ? licenseMatch[0] : "";
1028
- if (license) {
1029
- transformed = transformed.slice(license.length);
1030
- }
1031
-
1032
- // Remove "use strict" (both dev and prod have this)
1033
- transformed = transformed.replace(/^\s*["']use strict["'];\s*/, "");
1034
-
1035
- // Remove the conditional IIFE wrapper (development only)
1036
- transformed = transformed.replace(
1037
- /^\s*["']production["']\s*!==\s*process\.env\.NODE_ENV\s*&&\s*\(function\s*\(\)\s*\{/,
1038
- ""
1039
- );
1040
-
1041
- // Remove the closing of the conditional IIFE at the end (development only)
1042
- transformed = transformed.replace(/\}\)\(\);?\s*$/, "");
1043
-
1044
- // Replace require('react') and require('react-dom') with imports (development)
1045
- transformed = transformed.replace(
1046
- /var\s+React\s*=\s*require\s*\(\s*["']react["']\s*\)\s*,[\s\n]+ReactDOM\s*=\s*require\s*\(\s*["']react-dom["']\s*\)\s*,/g,
1047
- 'import React from "react";\nimport ReactDOM from "react-dom";\nvar '
1048
- );
1049
-
1050
- // Replace require('react-dom') only (production - doesn't import React)
1051
- transformed = transformed.replace(
1052
- /var\s+ReactDOM\s*=\s*require\s*\(\s*["']react-dom["']\s*\)\s*,/g,
1053
- 'import ReactDOM from "react-dom";\nvar '
1054
- );
1055
-
1056
- // Transform exports.xyz = function() to export function xyz()
1057
- transformed = transformed.replace(
1058
- /exports\.(\w+)\s*=\s*function\s*\(/g,
1059
- "export function $1("
1060
- );
1061
-
1062
- // Transform exports.xyz = value to export const xyz = value
1063
- transformed = transformed.replace(
1064
- /exports\.(\w+)\s*=/g,
1065
- "export const $1 ="
1066
- );
1067
-
1068
- // Reconstruct with license at the top
1069
- transformed = license + "\n" + transformed;
1070
-
1071
- return {
1072
- code: transformed,
1073
- map: null,
1074
- };
1075
- }
1076
8
 
1077
- return null;
1078
- },
1079
- };
1080
- }
9
+ export { rango } from "./rango.js";
10
+ export { poke } from "./plugins/refresh-cmd.js";
1081
11
 
12
+ export type {
13
+ RangoNodeOptions,
14
+ RangoCloudflareOptions,
15
+ RangoOptions,
16
+ } from "./plugin-types.js";